๐ 3 way handshake & 4 way handshake
ํด๋น ๊ณผ์ ์ TCP ์ฐ๊ฒฐ์ ์ฑ๋ฆฝํ๊ณ ํด์ ํ๋ ๊ณผ์ ์
๋๋ค. ์ฌ๊ธฐ์ 3 way handshake๋ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ, 4 way handshake๋ ์ฐ๊ฒฐ์ ํด์ ํฉ๋๋ค.
ํฌํธ(PORT) ์ํ ์ ๋ณด
- CLOSED: ํฌํธ๊ฐ ๋ซํ ์ํ
- LISTEN: ํฌํธ๊ฐ ์ด๋ฆฐ ์ํ๋ก ์ฐ๊ฒฐ ์์ฒญ ๋๊ธฐ ์ค
- SYN_RCV: SYNC ์์ฒญ์ ๋ฐ๊ณ ์๋๋ฐฉ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ค
- ESTABLISHED: ํฌํธ ์ฐ๊ฒฐ ์ํ
ํ๋๊ทธ ์ ๋ณด
- TCP Header์๋ CONTROL BIT(ํ๋๊ทธ ๋นํธ, 6bit)๊ฐ ์กด์ฌํ๋ฉฐ, ๊ฐ๊ฐ์ bit๋
URG-ACK-PSH-RST-SYN-FIN
์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์ฆ, ํด๋น ์์น์ bit๊ฐ 1์ด๋ฉด ํด๋น ํจํท์ด ์ด๋ ํ ๋ด์ฉ์ ๋ด๊ณ ์๋ ํจํท์ธ์ง๋ฅผ ๋ํ๋ธ๋ค.
- SYN(Synchronize Sequence Number) / 000010
์ฐ๊ฒฐ ์ค์ . Sequence Number๋ฅผ ๋๋ค์ผ๋ก ์ค์ ํ์ฌ ์ธ์
์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ์ด๊ธฐ์ Sequence Number๋ฅผ ์ ์กํ๋ค.
- ACK(Acknowledgement) / 010000
์๋ต ํ์ธ. ํจํท์ ๋ฐ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
Acknowledgement Number ํ๋๊ฐ ์ ํจํ์ง๋ฅผ ๋ํ๋ธ๋ค.
์๋จ ํ๋ก์ธ์ค๊ฐ ์ฌ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ต์ด ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์์ ์ ์ก๋๋ ์ฒซ ๋ฒ์งธ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ธ๊ทธ๋จผํธ์ ACK ๋นํธ๋ 1๋ก ์ง์ ๋๋ค๊ณ ์๊ฐํ ์ ์๋ค.
์ฐ๊ฒฐ ํด์ . ์ธ์
์ฐ๊ฒฐ์ ์ข
๋ฃ์ํฌ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ ์ด์ ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์์ ์๋ฏธํ๋ค.
๐๐ป 3 way handshake
3 way handshake๋?
TCP ํต์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ณผ์
์์ชฝ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ค๋น๊ฐ ๋์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ณ , ์ค์ ๋ก ๋ฐ์ดํฐ ์ ๋ฌ์ด ์์ํ๊ธฐ ์ ์ ์๋๊ฐ ์ค๋น๋์๋ค๋ ๊ฒ์ ์ ์ ์๋๋ก ํฉ๋๋ค.
- ์ฆ, TCP/IP ํ๋กํ ์ฝ์ ์ด์ฉํด์ ํต์ ์ ํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ๋จผ์ ์ ํํ ์ ์ก์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋๋ฐฉ ์ปดํจํฐ์ ์ฌ์ ์ ์ธ์
์ ์๋ฆฝํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
3 way handshake ๊ณผ์
- A(Client) -> B(Server) : SYN
- ์ ์ ์์ฒญ ํ๋ก์ธ์ค A๊ฐ ์ฐ๊ฒฐ ์์ฒญ ๋ฉ์์ง ์ ์ก(SYN)
- ์ก์ ์๊ฐ ์ต์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ Sequence Number๋ฅผ ์์๋ก ๋๋ค ์ซ์๋ก ์ง์ ํ๊ณ , SYN ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์ก
- PORT ์ํ - A : CLOSED, B : LISTEN
- B(Server) -> A(Client) : SYN + ACK
- ์ ์ ์์ฒญ์ ๋ฐ์ ํ๋ก์ธ์ค B๊ฐ ์์ฒญ์ ์๋ฝํ์ผ๋ฉฐ, ์ ์ ์์ฒญ ํ๋ก์ธ์ค์ธ A๋ ํฌํธ๋ฅผ ์ด์ด ๋ฌ๋ผ๋ ๋ฉ์์ง ์ ์ก (SYN + ACK)
- ์์ ์๋ Acknowledgement Number ํ๋๋ฅผ (Sequence Number + 1)๋ก ์ง์ ํ๊ณ , SYN๊ณผ ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์ก
- PORT ์ํ - A : CLOSED, B : SYN_RCV
- A(Client) -> B(Server) : ACK
- PORT ์ํ - A : ESTABLISHED, B : SYN_RCV
- ๋ง์ง๋ง์ผ๋ก ์ ์ ์์ฒญ ํ๋ก์ธ์ค A๊ฐ ์๋ฝ ํ์ธ์ ๋ณด๋ด ์ฐ๊ฒฐ์ ๋งบ์(ACK)
- ์ด๋, ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ด ๋จ๊ณ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก ๊ฐ๋ฅ
- PORT ์ํ - A : ESTABLISHED, B : ESTABLISHED
๐๐ป 4 way handshake
4 way handshake๋?
TCP์ ์ธ์
์ ์ข
๋ฃํ๊ธฐ ์ํด ์ฐ๊ฒฐ์ ํด์ ํ๋ ๊ณผ์
4 way handshake ๊ณผ์
- A(Client) -> B(Server) : FIN
- ํ๋ก์ธ์ค๊ฐ A๊ฐ ์ฐ๊ฒฐ์ ์ข
๋ฃํ๊ฒ ๋ค๋ FIN ํ๋๊ทธ๋ฅผ ์ ์ก
- ํ๋ก์ธ์ค B๊ฐ FIN ํ๋๊ทธ๋ก ์๋ตํ๊ธฐ ์ ๊น์ง ์ฐ๊ฒฐ์ ๊ณ์ ์ ์ง
- B(Server) -> A(Client) : ACK
- ํ๋ก์ธ์ค B๋ ์ผ๋จ ํ์ธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์์ ์ ํต์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ -> TIME_WAIT ์ํ
- ์์ ์๋ Acknowledgement Number ํ๋๋ฅผ (Sequence Number + 1)๋ก ์ง์ ํ๊ณ , ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์ก
- ์์ ์ด ์ ์กํ ๋ฐ์ดํฐ๊ฐ ๋จ์์๋ค๋ฉด ์ด์ด์ ๊ณ์ ์ ์ก
- B(Server) -> A(Client) : FIN
- ํต์ ์ด ๋๋ ํ๋ก์ธ์ค B๊ฐ ์ข
๋ฃ ์์ฒญ์ ๋์ํ๋ค๋ ์๋ฏธ -> A์๊ฒ FIN ํ๋๊ทธ๋ฅผ ์ ์ก
- A(Client) -> B(Server) : ACK
- ํ๋ก์ธ์ค A๋ ํ์ธํ๋ค๋ ๋ฉ์์ง๋ฅผ ์ ์ก
์ฐธ๊ณ
ํผ๋๋ฐฑ ๋ฐ ๊ฐ์ ์ ์ ๋๊ธ์ ํตํด ์๋ ค์ฃผ์ธ์๐