์ค๋์ TCP์ ์ฐ๊ฒฐ ์ค์ , ๊ทธ๋ฆฌ๊ณ ํด์ ์ ๋ฐ์ํ๋ ๋์์ ๋ํ์ฌ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
๊ฐ ๋์์ ์งํ ๊ณผ์ ๊ณผ ์ฐจ์ด์ ์ ๋ํด ์์ฑํด๋ณด์๋ค.
๐ TCP์ 3-Way HandShake
๊ฐ๋
- TCP ํต์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ณผ์ ์ด๋ค.
- ์์ชฝ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ค๋น๊ฐ ๋์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๊ณ ,
์ค์ ๋ก ๋ฐ์ดํฐ ์ ๋ฌ์ด ์์ ์ ๋ค๋ฅธ ํ ์ชฝ์ด ์ค๋น๋์๋ค๋ ๊ฒ์ ์ ์ ์๋๋ก ํ๋ค. - TCP/IP ํ๋กํ ์ฝ์ ์ด์ฉํด์ ํต์ ์ ํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์
์ ํํ ์ ์ก์ ๋ณด์ฅํ๊ณ ์ ์๋ ์ปดํจํฐ์ ์ฌ์ ์ ์ธ์ ์ ์๋ฆฝํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
๋์ ๋ฐฉ์
[ Step 1 ]
- Client๋ Server์ ์ปค๋ฅ์ ์ ์์ฑํ๊ธฐ ์ํด SYN(x)์ ๋ณด๋ธ๋ค.
- ์ด ๋ Client๋ CLOSED์์ SYN_SENT๋ก ๋ณํ๊ณ , Server๋ LISTEN ์ํ์ด๋ค.
[ Step 2 ]
- Server๊ฐ SYN(x)์ ๋ฐ๊ณ , Client์๊ฒ ๋ฐ์๋ค๋ ์ ํธ๋ก ACK(x+1)์ SYN(y)ํจํท์ ๋ณด๋ธ๋ค.
- ์์ฒญ์ ์๋ฝํ์ผ๋ฉฐ, ํฌํธ๋ฅผ ์ด์ด๋ฌ๋ผ๋ ๋ฉ์์ง๋ฅผ ์ ์กํ ํ, ํด๋ผ์ด์ธํธ์ ACK ์๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค.
- ์ด ๋ Client๋ CLOSED์ด๋ฉฐ Server๋ SYN_REVEIVED ์ํ์ด๋ค.
[ Step 3 ]
- Client๋ Server์ ACK(x+1)์ SYN(y)ํจํท์ผ๋ก ์๋ต์ ๋ฐ๊ณ , ACK(y+1)๋ฅผ Server์ ๋ณด๋ธ๋ค.
- ์ด ๋, Client๋ ESTABLISHED ์ํ์ด๋ฉฐ,
Server๋ ACK์๋ต์ ํตํด SYN_RECEIVED์์ ESTABLISHED๋ก ๋ฐ๋๋ค.
๐ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๊ณ , ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ๋ค.
๐ TCP์ 4-Way HandShake
๊ฐ๋
- TCP ํต์ ์์ ์ฐ๊ฒฐ์ ํด์ ํ๋ ๊ณผ์ ์ด๋ค.
- ๋ฐ์ดํฐ ์ ์ก์ ์๋ฃํ๊ณ , FIN ํ๋๊ทธ์ ACK๋ฅผ ํตํด ์๋ก์ ์์ ํ ์ข ๋ฃ๋ฅผ ํ์ธํ๋ค.
๋์ ๋ฐฉ์
[ Step 1 ]
- Client๊ฐ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ฒ ๋ค๋ FIN ํ๋๊ทธ(ACK๋ ํฌํจ)๋ฅผ ์ ์กํ๋ค. (Client๊ฐ close() ํธ์ถ)
- ์ด ๋ Client๋ FIN_WAIT ์ํ๊ฐ ๋๋ค.
[ Step 2 ]
- Server๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ Client์ ๋ณด๋ธ๋ค.
- ์ด ๋ Server๋ CLOSE_WAIT ์ํ๊ฐ ๋๊ณ , ๋จ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ง์ ์ ์ก์ ๋ง์น ํ์ close()๋ฅผ ํธ์ถํ๋ค.
- Client๋ Server์์ ACK๋ฅผ ๋ฐ์ ํ์ ์๋ฒ๊ฐ ๋จ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋๋ด๊ณ FIN์ ๋ณด๋ผ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. (FIN_WAIT2)
[ Step 3 ]
- ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก์ ์๋ฃํ๋ค๋ฉด, ์๋ฒ๋ ์ฐ๊ฒฐ ์ข ๋ฃ์ ํฉ์ํ๋ค๋ ์๋ฏธ๋ก FIN ํจํท์ Client์ ๋ณด๋ธ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ๋ Server๋ ์น์ธ ๋ฒํธ๋ฅผ ๋ณด๋ด์ค ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ LAST_ACK ์ํ์ ๋ค์ด๊ฐ๋ค.
[ Step 4 ]
- Client๋ FIN์ ๋ฐ๊ณ , ํ์ธํ๋ค๋ ACK๋ฅผ Server์ ๋ณด๋ธ๋ค.
- ์ด ๋ Client๋ ์์ง ๋ฐ์ง ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก TIME_WAIT์ ํตํด ๊ธฐ๋ค๋ฆฐ๋ค.
๐ TIME_WAIT ์ํ๋ฅผ ํตํด, ์๋์น ์์ ์๋ฌ๋ก ์ธํ์ฌ ์ฐ๊ฒฐ์ด ๋ฐ๋๋ฝ์ผ๋ก ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
(๋ง์ฝ ์๋ฌ๋ก ์ธํด ์ข ๋ฃ๊ฐ ์ง์ฐ๋๊ฑฐ๋ ํ์์ด ์ด๊ณผ๋๋ฉด CLOSED๋ก ๋ค์ด๊ฐ๋ค.) - Server๋ ACK๋ฅผ ๋ฐ์ ํ ์์ผ์ ๋ซ๊ณ CLOSED ์ํ๊ฐ ๋๋ค.
- TIME_WAIT ์๊ฐ์ด ๋๋๋ฉด Client๋ CLOSED ์ํ๋ก ๋ค์ด๊ฐ๋ค.
๐ TCP์ ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ๊ณผ ํด์ ๊ณผ์ ์ ๋จ๊ณ๊ฐ ๋ค๋ฅธ ์ด์
Client๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ๋ง์ณค๋ค๊ณ ํ๋๋ผ๋, Server๋ ์์ง ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ๋จ์์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ผ๋จ FIN์ ๋ํ ACK๋ง ๋ณด๋ด๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ์กํ ํ์ ์์ ๋ FIN ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ
- https://ddooooki.tistory.com/21
- https://bangu4.tistory.com/74
- 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
'5๏ธโฃ CS > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] Sync/Async์ Blocking/Non-blocking (0) | 2022.10.21 |
---|---|
[Network] SSL/TLS (0) | 2022.10.13 |
๋๊ธ