TCP 3 way handshake & 4 way handshake
Handshake
ํธ๋์์ดํฌ(handshake)๋ ๋ณธ ํต์ ์ด ์์๋๊ธฐ ์ ์, ๋ ๊ฐ์ฒด(Client, Server ๋ฑ)๊ฐ์ ํต์ ์ฐ๊ฒฐ ํ๋กํ ์ฝ ํ๋ฆฝ์ ์ํ ์ ๋ณด๋ฅผ ๊ตํํ๋ ์๋ํ๋ ํ์ ๊ณผ์ ์ด๋ค.
โข
Transport Layer ์ TCP(Transmission Control Protocol)๋ ๋์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ ์ฐ๊ฒฐ ์งํฅ ํ๋กํ ์ฝ ์ด๋ฉฐ TCP ์์ ํต์ ์ ์ฐ๊ฒฐํ ๋์๋ 3 way handshake ๋ฅผ ์ฐ๊ฒฐ ํด์ ํ ๋์๋ 4 way handshake ๋ฅผ ์ฌ์ฉํ๋ค.
โข
์ํธํ ํต์ ํ๋กํ ์ฝ์ธ SSL (Secure Sockets Layer), TSL (Transport Layer Security)๋ TTL/SSL Handshake๋ฅผ ์ฌ์ฉํ๋ค.
TCP Control Flag
โข
TCP ํค๋๋ 6bit์ Control Flag ํ๋๋ฅผ ํฌํจํ๋ค. ๊ฐ ํ๋๊ทธ์ ์ฌ์ฉ์ 0 ๊ณผ 1 ๋ก ๋ํ๋ธ๋ค.
โข
ex) SYN/ACK ๋ 010010 .
โข
Acknowledge Number ๋ ์๋๋ฐฉ์๊ฒ ๋ฐ์์ผ ํ ํจํท์ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค.
โข
Sequence Number ์ Acknowledge Number ๋ฅผ ํตํด ํต์ ์์๋ฅผ ํ์ธํ๋ค.
*์ธ๊ทธ๋จผํธ๋ 4๊ณ์ธต์ ํจํท์ ์๋ฏธํ๋ค. ๊ณ์ธต๋ณ ํจํท ๊ตฌ๋ถ์ ์ํด 4๊ณ์ธต์ ์ธ๊ทธ๋จผํธ , 3๊ณ์ธต์ ํจํท , 2๊ณ์ธต์ ํ๋ ์ ์ด๋ผ๊ณ ์นญํ๋ค.
SYN (Synchronize) | ์ฐ๊ฒฐ ์์ฒญ | ํต์ ์์์ ์ํด ๊ฐ์ฅ ๋จผ์ ๋ณด๋ด๋ ํจํท
์์์ ์ด๊ธฐ Sequence Number ๋ฅผ ๋ณด๋ธ๋ค. |
ACK (Acknowledgement) | ์๋ต ํ๋๊ทธ | ์ก์ ์ธก์ผ๋ก๋ถํฐ ํจํท์ ๋ฐ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํ ํ๋๊ทธ
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ Sequence + 1 ํ์ฌ ์๋ตํ๋ค. |
Fin (Finish) | ์ฐ๊ฒฐ ์ข
๋ฃ | ๋จ์ ์ ์ก ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก, ์ธ์
์ฐ๊ฒฐ์ ์ข
๋ฃ์ํค๋ ํ๋๊ทธ |
RST (Reset) | ์ฌ์ฐ๊ฒฐ | ๋น์ ์์ ์ธ ์ธ์
์ ๋๊ธฐ ์ํด ์ฐ๊ฒฐ์ ์ฌ์ค์ ํ๋ ํ๋๊ทธ |
PSH (Push) | ๋ฐ์ด ๋ฃ๊ธฐ) | ๋น ๋ฅธ ์๋ต์ ์ํด ๋ฒํผ๋ง ์์ด OSI 7 Layer์ Application ๊ณ์ธต์ผ๋ก ๋ฐ๋ก ์ ๋ฌํ๋๋ก ํ๋ ํ๋๊ทธ |
URG (Urgent) | ๊ธด๊ธ ๋ฐ์ดํฐ | ๊ธด๊ธํ๊ฒ ์ ํด์ผ ํ ๋ด์ฉ์ด ์์ ๊ฒฝ์ฐ, ์ฌ์ฉํ๋ ํ๋๊ทธ |
์๋์ ๊ฐ์ด 3 way handshake ๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , 4 way handshake ๋ฅผ ํตํด ํด์ ํ๋ค.
3 way handshake
TCP 3 way handshake๋ ์ ์ก์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์, ํต์ ์ด์ ์ ์ธ์
์ ์๋ฆฝํ๋ ๊ฒ์ด๋ค. ์์ชฝ ๋ชจ๋ ํต์ ์ค๋น๊ฐ ๋์๋ค๋ ๊ฒ์ ํ์ธํ๋ ๊ณผ์ ์ด๋ฉฐ, ์๋ก์ ์ผ๋ จ ๋ฒํธ๋ฅผ ์ป์ ์ ์๋ค.
1.
Client ๊ฐ ์ ์์ ์์ฒญํ๋ SYN ํจํท์ ๋ณด๋ธ๋ค.
โข
Client ๋ SYN_SENT ์ํ๊ฐ ๋์ด, SYN/ACK ์๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค.
2.
Server ๊ฐ ์์ฒญ์ ์น์ธํ๋ SYN/ACK ํจํท์ ๋ณด๋ธ๋ค.
โข
Server ๋ SYN_RECEIVED ์ํ๊ฐ ๋์ด ACK ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
3.
Client ๋ ACK ๋ฅผ ๋ณด๋ด๊ณ , ์ด ํ๋ก๋ถํฐ๋ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๋ค.
โข
Client ์ Server ๋ ESTABLISHED ์ํ๊ฐ ๋๋ค.
4 way handshake
1.
Client ๊ฐ ์ฐ๊ฒฐ ์ข
๋ฃ๋ฅผ ์๋ฏธํ๋ FIN ํ๋๊ทธ๋ฅผ ๋ณด๋ธ๋ค.
โข
Client ๋ FIN_WAIT ์ํ๊ฐ ๋๋ค.
2.
Server ๊ฐ FIN ์ ๋ฐ๊ณ ํ์ธํ๋ค๋ ACK ๋ฅผ ๋ณด๋ธ๋ค.
โข
Server ๋ CLOSE_WAIT ์ํ๊ฐ ๋์ด ์์ ์๊ฒ ๋จ์ ํต์ ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
3.
Server ๊ฐ ์ฐ๊ฒฐ ํด์ง ์ค๋น๊ฐ ๋์๋ค๋ ์๋ฏธ๋ก FIN ํ๋๊ทธ๋ฅผ ๋ณด๋ธ๋ค.
โข
Server ๋ LAST_ACK ์ํ๊ฐ ๋๋ค.
4.
Client ๊ฐ FIN ์ ๋ฐ๊ณ ํ์ธํ๋ค๋ ACK ๋ฅผ ๋ณด๋ธ๋ค.
โข
Client ๋ ๋ฐ๋ก ์ธ์
์ ์ข
๋ฃ์ํค์ง ์๊ณ , TIME_WAIT ์ํ๊ฐ ๋๋ค. Server ๊ฐ FIN ํจํท๋ณด๋ค ๋จผ์ ๋ณด๋์ง๋ง, ์ฌ๋ฌ ๋ฌธ์ ๋ก ์ํฉ์ผ๋ก ๋ฆ๊ฒ ๋์ฐฉํ ์ ์๋ ์์ฌ ํจํท์ ๊ธฐ๋ค๋ฆฐ๋ค. (default 240์ด)
โข
Client ์ Server ๊ฐ CLOSE ์ํ๊ฐ ๋๋ค.
FIN ํ๋๊ทธ๋ก ์ข
๋ฃ๋ฅผ ์์ฒญํ๋ ์์ ์, Client๊ฐ ์ฐ๊ฒฐ์ ๋ฐ๋ก ์ข
๋ฃํ์ง ์๊ณ , ๋จ์ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ Half-Close ๊ธฐ๋ฒ์ด๋ผ๊ณ ํ๋ค.