TCP, 3-way handshake, 4-way handshake, UDP
๐ก์ ์ก ๊ณ์ธต(Transport Layer)์ ์ํ TCP์ UDP
OSI 7 ๋ ์ด์ด์์ Transport Layer์๋ ์ ๋๋จ(End to end)์ ์ฌ์ฉ์๋ค์ด ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํด ์ฃผ์ด, ์์ ๊ณ์ธต๋ค์ด ๋ฐ์ดํฐ ์ ๋ฌ์ ์ ํจ์ฑ์ด๋ ํจ์จ์ฑ์ ์๊ฐํ์ง ์๋๋ก ํด์ค๋ค. ์ ์ก ๊ณ์ธต์ ์ผ๋ฐ์ ์ธ ๋คํธ์ํฌ ๋ชจ๋ธ์ธ ๊ฐ๋ฐฉํ ์์คํ ๊ฐ ์ํธ ์ ์ (Open Systems Interconnection, OSI)๊ณผ ์ธํฐ๋ท์ ๊ธฐ๋ฐ์ธ TCP/IP ์ฐธ์กฐ ๋ชจ๋ธ๊ณผ ๋ชจ๋ ํฌํจํ๊ณ ์๋ค. ์ ์ก ํ๋กํ ์ฝ ์ค ์ ์๋ ค์ง ๊ฒ์ด ๋ฐ๋ก TCP์ UDP์ด๋ค.
๐กTCP(Transmission Control Protocol)๋ ๋ฌด์์ธ๊ฐ?
: ์ ์ ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด์ ์ด์ฉ๋๋ ํ๋กํ ์ฝ
๐ํ๋กํ ์ฝ : ์ปดํจํฐ๋ผ๋ฆฌ ํต์ ํ ๋์ ์ ํด์ ธ ์๋ ‘๊ณตํต๋ ์ ์ฐจ์ ๊ท์ฝ’
ํ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ผ์ ๋ค์ํ ํ๋กํ ์ฝ์ด ์กด์ฌํ๋ค(‘IP’, ‘HTTP’, ‘FTP’, ‘SMTP’, ‘TCP’ ๋ฑ)
- TCP๋ ๋ฐ์ดํฐ ์ ๋ฌ, ๋ฐ์ดํฐ ๋ถํ ๊ธฐ๋ฅ์ ํ๋ค.
- TCP์ ๋ฐ์ดํฐ ์ฌ์ด์ฆ ์ต๋์น๋ฅผ MSS๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ง์ฝ์ ์ด MSS๋ฅผ ๋์ ๊ฒฝ์ฐ TCP์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ถํ ํ๋ค.
- TCP์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ ์ ๋ฌ ํน์ ๋ถํ ์ ์ํ๋ ๋, ๋ฐ์ดํฐ ์์ ‘TCP ํค๋’๊ฐ ์ถ๊ฐ๋๋ค.
cf) TCP/IP ํจํท ์ ๋ณด
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ธํฐ๋ท์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ ๋, ์ฌ๋ฌ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํจํท์ ๊ฐ์ธ์ ๋ณด๋ธ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ ์ก๊ณ์ธต์ ํจํท์ ์ธ๊ทธ๋จผํธ๋ผ๊ณ ํ๋ฉฐ, UDP์์๋ ์ข ์ข ์ด๋ฅผ ๋ฐ์ดํฐ๊ทธ๋จ์ด๋ผ๊ณ ํ๊ธฐ๋ ํ๋ค.
๐ํค๋ : ๋ฐ์ดํฐ ๋ณธ์ฒด์๋ ๋ณ๋๋ก ๋ฐ์ดํฐ์ ๋งจ ์์ ์ถ๊ฐ๋๋ ์ ๋ณด.
๐TCP์ธ๊ทธ๋จผํธ : TCP ํค๋๋ฅผ ์ถ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ
๐กTCP ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก(“๋ชฉ์ ”)์ ์ํํ๊ธฐ ์ํด ‘three way handshake’๊ธฐ๋ฒ์ ์ฌ์ฉํด์ ‘TCP์ฐ๊ฒฐ’(TCP๋ฅผ ์ด์ฉํด์ ํต์ ํ๋ ค๋ ์ฐ๊ฒฐ)์ ์ฑ๋ฆฝ์ํจ๋ค. TCP๋ฅผ ์ฐ๊ฒฐํ ํ๋กํ ์ฝ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๐กTCP์ 3-Way Handshake (TCP ์ฐ๊ฒฐ)
: ๋ฐ์ดํฐ ์ ์ก์ ์ํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ ‘์ธ์ฌ๋ฅผ 3๋ฒ’ํจ์ผ๋ก์จ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ์ํค๋ ๊ธฐ๋ฒ
๐ฉ๐ป ํธ์คํธA (CLOSED→SYN_SENT) โก๏ธ ๐ฅ๏ธ ํธ์คํธB (LISTEN) : ์ฐ๊ฒฐํด๋ ๋ ๊น์? (SYN)
๐ฉ๐ป ํธ์คํธA (CLOSED) โฌ ๏ธ ๐ฅ๏ธ ํธ์คํธB (SYN_RCV) : ๋ค, ์ด์ชฝ์์๋ ์ฐ๊ฒฐํ๊ฒ ์ต๋๋ค. (SYN/ACK)
๐ฉ๐ป ํธ์คํธA (ESTABLISHED) โก๏ธ ๐ฅ๏ธ ํธ์คํธB (ACK→ESTABLISHED) : ์๊ฒ ์ต๋๋ค. ์ด์ชฝ๋ OK์ ๋๋ค. (ACK)
๐ฟStep 1 (SYN)
- ์ก์ ์๊ฐ ์ต์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ Sequence Number๋ฅผ ์์์ ๋๋ค ์ซ์๋ก ์ง์ ํ๊ณ , SYN ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ปค๋ฅ์ ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด SYN์ ๋ณด๋ธ๋ค. (seq : x)
๐ฟStep 2 (SYN + ACK)
- ์ ์์์ฒญ์ ๋ฐ์ A๊ฐ ์์ฒญ์ ์๋ฝํ์ผ๋ฉฐ, ์ ์ ์์ฒญ ํ๋ก์ธ์ค์ธ B๋ ํฌํธ๋ฅผ ์ด์ด๋ฌ๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ์ ์ก (SYN-ACK signal bits set)
- ACK Numberํ๋๋ฅผ Sequence Number + 1 ๋ก ์ง์ ํ๊ณ SYN๊ณผ ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์๊ทธ๋จผํธ ์ ์ก (Seq=y, Ack=x+1, SYN, ACK)
- PORT ์ํ
- Client : CLOSED
- Server : SYN_RCV
์๋ฒ๊ฐ SYN(x)์ ๋ฐ๊ณ , ํด๋ผ์ด์ธํธ๋ก ๋ฐ์๋ค๋ ์ ํธ์ธ ACK์ SYN ํจํท์ ๋ณด๋ (seq : y, ACK : x + 1)
๐ฟStep 3 (ACK)
- ๋ง์ง๋ง์ผ๋ก ์ ์ ์์ฒญ ํ๋ก์ธ์ค B๊ฐ ์๋ฝ ํ์ธ์ ๋ณด๋ด ์ฐ๊ฒฐ์ ๋งบ์ (ACK)
- ์ด๋, ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ด ๋จ๊ณ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
- PORT ์ํ
- Client : ESTABLISED
- Server : SYN_RCV ⇒ ACK ⇒ ESTABLISED
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ต์ ACK(x+1)์ SYN(y) ํจํท์ ๋ฐ๊ณ , ACK(y+1)๋ฅผ ์๋ฒ๋ก ๋ณด๋
๐ํฌํธ(PORT) ์ํ ์ ๋ณด
- CLOSED : ํฌํธ๊ฐ ๋ซํ ์ํ
- LISTEN : ํฌํธ๊ฐ ์ด๋ฆฐ ์ํ๋ก ์ฐ๊ฒฐ ์์ฒญ ๋๊ธฐ ์ค
- SYN_RCV : SYNC ์์ฒญ์ ๋ฐ๊ณ ์๋๋ฐฉ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ค
- ESTABLISHED : ํฌํธ ์ฐ๊ฒฐ ์ํ
๐ํ๋๊ทธ(FLAG) ์ ๋ณด
- TCP Header์๋ CONTROL BIT(ํ๋๊ทธ ๋นํธ, 6bit)๊ฐ ์กด์ฌํ๋ค.
- ๊ฐ๊ฐ์ bit๋ "URG-ACK-PSH-RST-SYN-FIN"์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- 1์ธ bit์ ์์น์ ๋ฐ๋ผ ํด๋น ํจํท์ด ์ด๋ ํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ํจํท์ธ์ง๋ฅผ ์๋ฏธํ๋ค.
- SYN(Synchronize Sequence Number) / 000010 / ์ฐ๊ฒฐ ์ค์
: Sequence Number๋ฅผ ๋๋ค์ผ๋ก ์ค์ ํ์ฌ ์ธ์ ์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ์ด๊ธฐ์ Sequence Number๋ฅผ ์ ์กํ๋ค.
- ACK(Acknowledgement) / 010000 / ์๋ต ํ์ธ
: ํจํท์ ๋ฐ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. Acknowledgement Number ํ๋๊ฐ ์ ํจํ์ง๋ฅผ ๋ํ๋ธ๋ค. ์๋จ ํ๋ก์ธ์ค๊ฐ ์ฌ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ต์ด ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์์ ์ ์ก๋๋ ์ฒซ ๋ฒ์งธ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ธ๊ทธ๋จผํธ์ ACK ๋นํธ๋ 1๋ก ์ง์ ๋๋ค๊ณ ์๊ฐํ ์ ์๋ค.
- FIN(Finish) / 000001 / ์ฐ๊ฒฐ ํด์
: ์ธ์ ์ฐ๊ฒฐ์ ์ข ๋ฃ์ํฌ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ ์ด์ ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฏธํ๋ค.
๐กTCP์ 4-Way Handshake (TCP ์ฐ๊ฒฐ ์ข ๋ฃ)
๐ฉ๐ป ํธ์คํธA โก๏ธ ๐ฅ๏ธ ํธ์คํธB : ์ฐ๊ฒฐ์ ์ข ๋ฃํด๋ ๋ ๊น์? (FIN/ACK)
๐ฉ๐ป ํธ์คํธA (FIN_WAIT_1) โฌ ๏ธ ๐ฅ๏ธ ํธ์คํธB (ACK→TIME_WAIT→ACK→CLOSE_WAIT) : ๋ค, ๊ด์ฐฎ์ต๋๋ค. (ACK)
๐ฉ๐ป ํธ์คํธA (FIN_WAIT_2) โฌ ๏ธ ๐ฅ๏ธ ํธ์คํธB (FIN→LAST_ACK) : ์ด์ชฝ์์๋ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ฒ ์ต๋๋ค. (FIN/ACK)
๐ฉ๐ป ํธ์คํธA (TIME_WAIT→CLOSED) โก๏ธ ๐ฅ๏ธ ํธ์คํธB (CLOSED) : ๋ค, ์๊ฒ ์ต๋๋ค. (ACK)
๐ฟSTEP1 (Client → Server : FIN(+ACK))
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋ ์ํ์์ ํด๋ผ์ด์ธํธ๊ฐ close()๋ฅผ ํธ์ถํ์ฌ ์ ์์ ๋์ผ๋ คํ๋ค.
- ์ด๋, ํด๋ผ์ด์ธํธ๋ ์๋ฒ์๊ฒ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ค๋ FIN ํ๋๊ทธ๋ฅผ ๋ณด๋ธ๋ค. (์ด๋ FIN ํจํท์๋ ์ค์ง์ ์ผ๋ก ACK๋ ํฌํจ๋์ด์๋ค.)
๐ฟSTEP2 (Server → Client : ACK)
- ์๋ฒ๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๊ณ ์์ ์ ํต์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. (์ด์ํ๊ฐ TIME_WAIT ์ํ)
- Server(์์ ์)๋ ACK Number ํ๋๋ฅผ (Sequence Number + 1)๋ก ์ง์ ํ๊ณ , ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๊ณ CLOSE_WAIT ์ํ์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ง ๋จ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ง์ ์ ์ก์ ๋ง์น ํ์ close( )๋ฅผ ํธ์ถํ๋ค.
- ํด๋ผ์ด์ธํธ์์๋ ์๋ฒ์์ ACK๋ฅผ ๋ฐ์ ํ์ ์๋ฒ๊ฐ ๋จ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋๋ด๊ณ FIN ํจํท์ ๋ณด๋ผ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค. (FIN_WAIT_2)
๐ฟSTEP3 (Server → Client : FIN)
- ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด๋๋ค๋ฉด, ์๋ฒ๋ ์ฐ๊ฒฐ์ด ์ข ๋ฃ์ ํฉ์ ํ๋ค๋ ์๋ฏธ๋ก FIN ํจํท์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ ํ์, ์น์ธ ๋ฒํธ๋ฅผ ๋ณด๋ด์ค ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ LAST_ACK ์ํ๋ก ๋ค์ด๊ฐ๋ค.
๐ฟSTEP4 (Client → Server : ACK)
- ํด๋ผ์ด์ธํธ๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค.
- ์์ง ์๋ฒ๋ก๋ถํฐ ๋ฐ์ง ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก TIME_WAIT์ ํตํด ๊ธฐ๋ค๋ฆฐ๋ค. (์ค์ง์ ์ธ ์ข
๋ฃ๊ณผ์ CLOSED์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.)
- ์ด๋ TIME_WAIT ์ํ๋ ์๋์น ์์ ์๋ฌ๋ก ์ธํด ์ฐ๊ฒฐ์ด ๋ฐ๋๋ฝ์ผ๋ก ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์ง
- ๋ง์ฝ ์๋ฌ๋ก ์ธํด ์ข ๋ฃ๊ฐ ์ง์ฐ๋๋ค๊ฐ ํ์์ด ์ด๊ณผ๋๋ฉด CLOSED๋ก ๋ค์ด๊ฐ๋๋ค.
์๋ฒ๋ ACK๋ฅผ ๋ฐ์ ์ดํ ์์ผ์ ๋ซ๋๋ค (CLOSED)
TIME_WAIT ์๊ฐ์ด ๋๋๋ฉด ํด๋ผ์ด์ธํธ๋ ๋ซ๋๋ค (CLOSED)
๐กTCP์ ๋ฐ์ดํฐ ์ ์ก์์ ๋์- ์๋์ฐ์ ์ด, ์์์ ์ด, ์ฌ์ ์ก์ ์ด, ํผ์ก์ ์ด
TCP์์๋ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ์ํค๊ณ -> ์ ํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์ด๋ ๋ค์์ 3๊ฐ์ง ์ ์ด ๊ธฐ๋ฅ์ ๊ตฌ์ฌํด์ ํ์คํ๊ณ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ก(“๋ชฉ์ ”)ํ๋ค.
์ ์ด๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด์๋ TCP ํค๋์ ๋ค์ํ ์ ๋ณด๊ฐ ํ์ํ๋ฐ, ๋ถํ์ํ ์ ๋ณด๊ฐ ์์ ์๋ ์๋ค. ์ด๋ฌํ ๊ฒ์ ‘์ค๋ฒํค๋’ ๋ผ๊ณ ๋ถ๋ฅธ๋ค. (UDP ์ฐธ๊ณ )
๐ฟ์๋์ฐ ์ ์ด
TCP์์๋ ๋ฐ์ดํฐ(TCP ์ธ๊ทธ๋จผํธ)๋ฅผ ์์ ํ๋ฉด ์ก์ ์ง์ ํ์ธ ์๋ต์ ๋๋ ค๋ณด๋ธ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ํ๋ ๋ณด๋ด๊ณ ์๋ต๊ธฐ๋ค๋ฆฌ๊ณ ๋ ํ๋ ๋ณด๋ด๊ณ ์ด๋ฐ ์์ด๋ฉด ์ ์ก ํจ์จ์ด ๋งค์ฐ ๋ฎ์์ง๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์๋์ฐ ์ ์ด๋ฅผ ํตํด์ ์ฌ๋ฌ ๊ฐ๋ฅผ ํ๋ฒ์ ์ก์ ํ ์ ์๋๋ก ํ๋ค.
- ํธ์คํธ A์ ํธ์คํธ B์ฌ์ด์ TCP์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋ ๋, ์๋ก์ ์๋์ฐ ์ฌ์ด๋ฅผ ํต์งํ๋ค. ๊ทธ๋ฌ๋ฉด ์ก์ ํ๋ ์ชฝ์ด ์์ ํ๋ ์ชฝ์์ ํ๋ฒ์ ์ผ๋ง๋ ๋ฐ์ ์ ์๋์ง ์ฌ์ด์ฆ๋ฅผ ์๊ณ ์์ผ๋๊น, ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๊ทธ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ํ๊บผ๋ฒ์ ์ก์ ํ๋ ๊ฒ์ด๋ค.
- 3-way handshake๋ก ์๋ก์ ์๋์ฐ ์ฌ์ด์ฆ๋ฅผ ํ์ธํ๋ค.
- A์์ B์ ์ฌ์ด์ฆ๋ฅผ ๋ณด๊ณ ์๋ฅผ ๋ค์ด์ 3000๋ฐ์ดํธ๋ผ๋ฉด 1000๋ฐ์ดํธ 3๊ฐ๋ฅผ ๋ณด๋ธ๋ค. ๊ทธ๋ฌ๋ฉด B์์ ๊ฐ๊ฐ 3๊ฐ์ ์ธ๊ทธ๋จผํธ์ ๋ํด์ ํ์ธ์๋ต์ ๋๋ ค์ค๋ค. ์๋ต์ ๋๋ ค์ค ๋์๋ ์๋์ฐ์ฌ์ด์ฆ๋ ํฌํจ ๋์ด์๋ค. ์ฌ๊ธฐ์ ์๋์ฐ์ฌ์ด์ฆ๋ ์๋ก์ด ์ฌ์ด์ฆ๋ค. ์ฆ, B์ชฝ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ฐ๋ผ์ ์ค์๊ฐ์ผ๋ก ์๋์ฐ ์ฌ์ด์ฆ๊ฐ ๋ณํ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด A๋ ์๋ก์ด ์๋์ฐ ์ฌ์ด์ฆ์ ๋ฐ๋ผ์ B์๊ฒ ๋ค์ TCP์ธ๊ทธ๋จผํธ๋ฅผ ์ก์ ํ๋ค.
- ์ด๊ฒ์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๋ฐฉ์์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. ์ก์ ํ๋ ์ชฝ์ด ์์ ํ๋ ์ชฝ์ ์๋์ฐ ์ฌ์ด์ฆ์ ๋ง์ถ์ด MSS๋งํผ ์์ผ๋ก ์ฎ๊ฒจ๊ฐ๋ฉฐ ์ ์กํด์์ด๋ค.
๐ฟ์์ ์ ์ด
TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ณด๋ด๋ค ๋ณด๋ฉด ์์ ํ๋ ์ชฝ์์ ๋์ฐฉํ๋ ์์๊ฐ ๋ฐ๋ ์๋ ์์ผ๋๊น, TCPํค๋์ ์ํ์ค ๋ฒํธ๋ฅผ ์ด์ฉํด์ ์์๋๋ก ์ ๋ ฌ๋๋๋ก ํ๋ค.
๐์ํ์ค ๋ฒํธ : ์ก์ ๋ฐ์ดํฐ์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฒํธ
์์ ๊ทธ๋ฆผ์ฒ๋ผ 1, 2, 3 ์์๋ก ์ ์กํ ๊ฒ์ด 1, 3, 2 ์์๋ก ์๋ชป ๋ค์ด์์ ๊ฒฝ์ฐ, 2๋ถํฐ ๋ค์ ๋ณด๋ด๋ผ๊ณ ์๋ ค์ค์ผ๋ก์จ ๋ฐ์ดํฐ์ ์์๋ฅผ ๋ณด์ฅํ๋ค.
๐ฟ์ฌ์ ์ก ์ ์ด
: ์ ์ค๋ TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ ์กํ๋ ์์คํ
- ์ฌ์ ์ก ํ์์์ - RTO(Retransmission Time Out)
: RTO ์๊ฐ ๋ด์ ํ์ธ์๋ต์ ๋ฐ์ง ๋ชปํ๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด, TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ ์กํด์ผํ๋ค. RTO์ ๊ธฐ์ค์ ์ฌํ๊น์ง์ TCPํต์ ์์ TCP ์ธ๊ทธ๋จผํธ์ ํ์ธ ์๋ต์ด ๋์์๋ ์๊ฐ์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
- ์ฌ์ ์ก ํ์์์์ด ๋ฐ์ํ๋ ์์ธ
1) TCP ์ธ๊ทธ๋จผํธ๊ฐ ์ ์ค๋์๋ค.
2) ํ์ธ ์๋ต์ด ์ ์ค๋์๋ค.
3) TCP ์ธ๊ทธ๋จผํธ, ํ์ธ ์๋ต์ ์ ์ก์ด๋ ์ฒ๋ฆฌ์ ์๊ฐ(=RTT, Round Trip Time)์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ธ๋ค.
๐ฟํผ์ก ์ ์ด
: ์ก์ ํ TCP ์ธ๊ทธ๋จผํธ๋ค์ ์์ํ ๋๋ ค๊ฐ์ผ๋ก์จ ๋คํธ์ํฌ์ ํผ์ก์ ํํผํ๋ค. TCP์ธ๊ทธ๋จผํธ๊ฐ ์ ์ค๋๋ ๋๋ถ๋ถ์ ์ด์ ๋ ‘๋คํธ์ํฌ ํผ์ก’์ด๋ค. TCP์ธ๊ทธ๋จผํธ๊ฐ ์ ์ค๋์ด์ ์ฌ์ ์ก ์ ์ด๋ก ์ฌ์ ์ก์ ํ๋๋ผ๋ ๊ทผ๋ณธ์ ์ธ ๋คํธ์ํฌ ํผ์ก์ด ํด๊ฒฐ๋์ง ์์ผ๋ฉด, ๊ณ์์ ์ธ ์ ์ค์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ํด์ ์ด์ฉ๋๋ ๊ฒ์ด ํผ์ก์ ์ด์ด๋ค.
์ฌ๊ธฐ์๋ ๋ค์ํ ๋ฐฉ์์ด ์๋๋ฐ, ์ฌ๋ก์ฐ ์คํํธ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ ๋ณด์.
1) ๋งจ ์ฒ์ ์ก์ ํ๋ ์ชฝ์์ ‘ํผ์ก ์๋์ฐ’๋ฅผ ‘1’๋ก ์ค์
2) ๋จผ์ 1์ธ๊ทธ๋จผํธ๋ง ๋ณด๋ธ๋ค. (์์ ํ๋ ์ชฝ์ ์๋์ฐ ์ฌ์ด์ฆ ๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์๊ธฐ ํ๋ฒ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋)
3) ํ์ธ์๋ต์ด์ด
4) ํผ์ก์๋์ฐ + 1 ๋ก ์ฌ์ค์
์ด๋ฐ์์ผ๋ก ์์ํ ๋๋ ค๊ฐ๋ฉด์ ์ ์กํ๋ค.
์ฌ์ ์ก ํ์์์์ด ๋ฐ์ํ์ ๋์ TCP ์ธ๊ทธ๋จผํธ ์ฌ์ ์ก์๋ ์ฌ์ฉ๋๋ค.
๐กUDP(User Datagram Protocol)๋ ๋ฌด์์ธ๊ฐ?
: TCP์ฒ๋ผ ์ด๊ฒ์ ๊ฒ ์ํ๊ณ ๋ฌด์กฐ๊ฑด “์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ”ํ๋ ๊ฒ์ด ๋ชฉ์ . UDP ํค๋(8๋ฐ์ดํธ)๋ TCP(20๋ฐ์ดํธ)์ ๋นํด์ ๋งค์ฐ ๋จ์ํ๋ฉฐ, checksum ํ๋๋ฅผ ํตํด ์ต์ํ์ ์ค๋ฅ๋ง ๊ฒ์ถํ๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฅ์ ์ ๊ณ , ์ ๋ขฐ์ฑ์ ๋ฎ์ง๋ง, ์ค๋ฒํค๋๊ฐ ์ ์ด์ TCP ๋ณด๋ค ํต์ ํจ์จ์ ๋์ผ ์ ์๋ค.
๐UDP ๋ฐ์ดํฐ๊ทธ๋จ : TCP ์ธ๊ทธ๋จผํธ์ ๊ฐ์ ๋งฅ๋ฝ. [UDP ํค๋ + UDP ๋ฐ์ดํฐ]
๐กUDP์ ์ฉ๋
๐ฟ์ค์๊ฐ ๋ฐ์ดํฐ ์ ์กํ ๋
- ex. VoIP(voice over IP
- ๋คํธ์ํฌ์์์ ์์ฑ์ IP ํจํท์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์
- ์ง์ฐ์ด ๋๋ฉด ์์ฑ ํ์ง์ด ๋๋น ์ง๋ฏ๋ก ์ ๋ขฐ์ฑ์ด ๋ฎ๋๋ผ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํ๋ค.
๐ฟ์ฌ๋ฌ ์๋์์ ํต์ ํ ๋
- TCP๋ ๋ฌด์กฐ๊ฑด ์ ๋์บ์คํธ ํต์ (1:1ํต์ )๋ฐ์ ํ ์ ์๋ค.
- ๋ธ๋ก๋์บ์คํธ๋ ๋ฉํฐ์บ์คํธ ํต์ (1๋ ๋ค ํต์ )์์๋ UDP์ฌ์ฉ.
๐ฟ์๋์ ๋ฐ์ดํฐ๋ฅผ ๋น๋ฒํ ์ฃผ๊ณ ๋ฐ์ ๋
- ex. DNS ์ด๋ฆ ํด์
- TCP์์๋ ํฐ ์ฉ๋์ ๋ฐ์ดํฐ๋ ์ ์กํ ์ ์๋๋ฐ, ์ ์กํ ๋ ์ฌ์ด์ฆ๊ฐ ํฌ๋๊น ์ฌ๋ฌ ๊ฐ๋ก ๋๋ ์ ์ ์กํ๋ค. ๋ฐ์ดํฐ๊ฐ ๋๋๋ฉด ์ ์ค๋์์ ๋ ๋ค์ ์กฐํฉ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋๋ฏ๋ก ์ ๋ขฐ์ฑ ํ๋ณด๊ฐ ๋ฐ๋์ ํ์ํ๋ค. TCP์์ ๋ง์ฝ์ ์์ฒญ ์์ ์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋คํ๋ฉด, ๋ฐ๋๋ก ์ด ์ ๋ขฐ์ฑ์ด ์ค๋ฒํค๋๊ฐ ๋๋ฌด ์ปค์ ํต์ ํจ์จ์ด ๋ฎ์์ง๋ฏ๋ก UDP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋์ ๊ฒ์ด๋ค.
๐ก์ ๋ฆฌํ๋ฉฐ
TCP | UDP | |
ํต์ ๋ฐฉ์ | ์ฐ๊ฒฐํ ํ๋กํ ์ฝ | ๋น์ฐ๊ฒฐํ ํ๋กํ ์ฝ |
์ ๋ขฐ์ฑ | ๋๋ค | ๋ฎ๋ค |
์ค๋ฒํค๋ | ํฌ๋ค | ์๋ค |
์ฃผ์๊ธฐ๋ฅ |
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก | |
์ฐ๊ฒฐ์ ์ฑ๋ฆฝ, ์ ์ง, ์ข ๋ฃ | ||
์ฌ์ ์ก ์ ์ด | ||
ํผ์ก ์ ์ด | ||
์๋์ฐ ์ ์ด, ์์ ์ ์ด | ||
์ฉ๋ |
์๊ฐ ์ ์ฝ ์์ด ์ ๋ขฐ์ฑ์ด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ | ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ |
๋ธ๋ก๋์บ์คํธ, ๋ฉํฐ์บ์คํธ | ||
์๋์ ๋ฐ์ดํฐ๋ฅผ ๋น๋ฒํ ์ ์กํ ๋ |
๐Reference
- ์์ผ๋ก ์ตํ๋ฉฐ ๋ฐฐ์ฐ๋ ๋คํธ์ํฌ ์ฒซ๊ฑธ์
- https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake