[TIL] 3 way handshake, 4 way handshakeCS/CS2023. 6. 8. 17:40
Table of Contents
TCP(Transmission Control Protocol) ํต์ ์ด๋?
๐ Transmission Control Protocol. ์ ์ก ์ ์ด ํ๋กํ ์ฝ(transport ๊ณ์ธต).
์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ขฐ์ฑ ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํ๋กํ ์ฝ.
- ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ์ฐ๊ฒฐ์ ๋ง๋๋, ์ฐ๊ฒฐ ์งํฅ ํ๋กํ ์ฝ
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ธํฐ๋ท ๊ณ์ธต ์ฌ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋ ๋์ ์ค๊ณ ์ญํ ์ ์ํ
- ํจํท ์ฌ์ด์ ์์๋ฅผ ๋ณด์ฅ
- ์ฐ๊ฒฐ ์งํฅ์ ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ ์ฐ๊ฒฐ
- ์ ๋ขฐ์ฑ ๊ตฌ์ถํด์ ์์ ์ฌ๋ถ๋ฅผ ํ์ธ
3 way handshake๋?
๐ TCP ์ฐ๊ฒฐ ์ฑ๋ฆฝ ๊ณผ์ ์ ์๋ฏธ
SYN → SYN+ACK → ACK
- TCP์ ๊ฒฝ์ฐ ํด๋น ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ ๋ขฐ์ฑ์ด ์๋ ๊ณ์ธต์ผ๋ก ํ๋จ๋จ.
- SYN ์ธ๊ทธ๋จผํธ ์ ์ก: ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ๋์์ธ ISN(Initial sequence number ์ด๊ธฐ ์์ ๋ฒํธ)์ ๋ด์ SYN(Synchronize Sequence Number ๋์ ๋ฐ์ ์ํ์ค ๋๋ฒ)์ ๋ณด๋.
- ISN์ ๋งค ์ฐ๊ฒฐ๋ง๋ค ๋์๋ก ์์ฑ๋จ(ํดํน ๋ฐฉ์ง)
- SYN์ TCP ์ฐ๊ฒฐ์ ์ค์ ํ๊ธฐ ์ํด ๋ณด๋ด๋ ์ด๋์ฅ๊ณผ ๊ฐ์ ํจํท์ผ๋ก, ํต์ ์ ์์ํ๋ ๋ฐ ์ฌ์ฉ
- SYN + ACK(Acknowledgment) ์ธ๊ทธ๋จผํธ ์ ์ก: ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ SYN์ ์์ ํ๊ณ ์๋ฒ์ ISN์ ๋ณด๋ด๋ฉฐ ์น์ธ๋ฒํธ๋ก ํด๋ผ์ด์ธํธ์ ISN+1์ ๋ณด๋.
- ACK๋ TCP์์ ๋ฐ์ดํฐ์ ์์ ํ์ธ์ ๋ํ๋ด๋ ์ฝ์ด
- ACK ์ธ๊ทธ๋จผํธ : ํน์ ๋ฐ์ดํฐ ํจํท์ ์์ ํ ํ์ ์ก์ ์ธก์์ ํด๋น ํจํท์ ์ฌ์ ์กํ์ง ์์๋ ๋๋ ๊ฒ
- ACK ๋จ๊ณ : ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ISN+1๊ฐ์ธ ์น์ธ๋ฒํธ(์์)๋ฅผ ๋ด์ ACK๋ฅผ ์๋ฒ์ ๋ณด๋
- ์ดํ์๋ ISN์ ์ผ์ ๊ฐ์ ๋ํ๋ฉฐ TCP์ฐ๊ฒฐ์ ์์ฐจ์ฑ์ ๋ณด์ฅํ๋๋ฐ ํ์ฉ
- ์ธ๊ทธ๋จผํธ๋ง๋ค ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋ํ์ฌ ์์ฐจ์ ์ธ ์์ ๋ฒํธ๋ฅผ ๋ถ์ฌ
- "12345678"์ ISN ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด ์ฒซ ๋ฒ์งธ ํจํท์ ์์ ๋ฒํธ๋ "12345678 + ๋ฐ์ดํฐ 1์ ํฌ๊ธฐ"๊ฐ ๋๊ณ , ๋ ๋ฒ์งธ ํจํท์ ์์ ๋ฒํธ๋ "12345678 + ๋ฐ์ดํฐ 1์ ํฌ๊ธฐ + ๋ฐ์ดํฐ 2์ ํฌ๊ธฐ"๊ฐ ๋จ
- ์ธ๊ทธ๋จผํธ๋ง๋ค ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋ํ์ฌ ์์ฐจ์ ์ธ ์์ ๋ฒํธ๋ฅผ ๋ถ์ฌ
4 way handshake๋?
๐ TCP ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ ๊ณผ์ ์ ์๋ฏธ FIN → ACK → FIN → ACK
- ํด๋ผ์ด์ธํธ๊ฐ FIN์ผ๋ก ์ค์ ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋ด๊ณ , FIN_WAIT_1์ํ๋ก ๋ค์ด๊ฐ์ ์๋ฒ์ ์๋ต์ ๊ธฐ๋ค๋ฆผ.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก ACK๋ผ๋ ์น์ธ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋ด๊ณ , CLOSE_WAIT์ํ์ ๋ค์ด๊ฐ. ์๋ฒ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ FIN_WAIT2 ์ํ๋ก ๋ฐ๋.
- ACK ์ธ๊ทธ๋จผํธ์ Acknowledgment Number๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ง๋ง์ผ๋ก ์ ์กํ ๋ฐ์ดํฐ์ ์ํ์ค ๋ฒํธ(Sequence Number)์ 1์ ๋ํ ๊ฐ
- ์๋ฒ๋ ACK๋ฅผ ๋ณด๋ด๊ณ ๋ ๋ค ์ผ์ ์๊ฐ ํ์ ํด๋ผ์ด์ธํธ์ FIN์ด๋ผ๋ ์ธ๊ทธ๋จผํฌ๋ฅผ ๋ณด๋.
- ํด๋ผ์ด์ธํธ๋ TIME_WAIT์ํ๊ฐ ๋๊ณ ๋ค์ ์๋ฒ๋ก ACK๋ฅผ ๋ณด๋ด์ ์๋ฒ๋ CLOSED์ํ๊ฐ ๋จ. ์ดํ ํด๋ผ์ด์ธํธ๋ ์ด๋ ์ ๋์ ์๊ฐ์ ๋๊ธฐํ ํ ์ฐ๊ฒฐ์ด ๋ซํ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ชจ๋ ์์์ฐ๊ฒฐ์ด ํด์ ๋จ.
- ACK : ์๋ฒ์ ๋ง์ง๋ง ๋ฐ์ดํฐ์ ์ํ์ค ๋ฒํธ์ 1์ ๋ํ ๊ฐ
- TIME_WAIT : ์์ผ์ด ๋ฐ๋ก ์๋ฉธ๋์ง ์๊ณ ์ผ์ ์๊ฐ ์ ์ง๋๋ ์ํ.
- CentOS6, ์ฐ๋ถํฌ์๋ 60์ด. ์๋์ฐ๋ 4๋ถ. ์ฆ, OS๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฅผ ์ ์๋ค.
TIME_WAIT ์ํ๋ก ๋ค์ด๊ฐ๋ ์ด์
- TIME_WAIT ์ํ๋ TCP ์ฐ๊ฒฐ์ ์ ๋ฆฌ์ ์์ ์ฑ์ ์ํด ํ์ํ ๋จ๊ณ๋ก์, ๋คํธ์ํฌ์ ์ ๋ขฐ์ฑ์ ํฅ์์ํค๋ ์ญํ
- ์ฐ๊ฒฐ์ ์์ ํ ์ข ๋ฃ: TIME_WAIT ์ํ๋ ์ฐ๊ฒฐ์ ์์ ํ ์ข ๋ฃ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ํ์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ง๋ง ACK ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋ธ ํ ์ผ์ ์๊ฐ ๋์ TIME_WAIT ์ํ์ ๋จธ๋ฌด๋ ๊ฒ์ผ๋ก, ์ด๋ ๋คํธ์ํฌ ์์์ ๋ชจ๋ ์ธ๊ทธ๋จผํธ๊ฐ ์ ๋๋ก ์ฒ๋ฆฌ๋๊ณ ์ฐ๊ฒฐ์ด ํ์คํ๊ฒ ์ข ๋ฃ๋์์์ ๋ณด์ฅํฉ๋๋ค.
- ์ค๋ณต๋ ์ธ๊ทธ๋จผํธ ์ฒ๋ฆฌ: TIME_WAIT ์ํ๋ ๋คํธ์ํฌ ์์์ ์ค๋ณต๋ ์ธ๊ทธ๋จผํธ๊ฐ ๋์ฐฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๋๋นํ๊ธฐ ์ํด ํ์ํฉ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ง๋ง ACK ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋์์๋ ๋ถ๊ตฌํ๊ณ ๋คํธ์ํฌ ์ง์ฐ ๋ฑ์ ์ด์ ๋ก ์ค๋ณต๋ ์ธ๊ทธ๋จผํธ๊ฐ ๋์ฐฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ TIME_WAIT ์ํ์ ๋จธ๋ฌด๋ ๋์ ์ค๋ณต๋ ์ธ๊ทธ๋จผํธ๋ ๋ฒ๋ ค์ง๊ณ , ์ดํ ๋์ผํ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฐ๊ฒฐ๊ณผ์ ํผ๋์ ๋ฐฉ์งํฉ๋๋ค.
- ์ฐ๊ฒฐ์ ์์ํ: TIME_WAIT ์ํ๋ ์ฐ๊ฒฐ์ ์์ํ๋ฅผ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ TIME_WAIT ์ํ์ ๋จธ๋ฌด๋ ๋์, ์ด์ ์ ์ฌ์ฉํ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ธ๊ทธ๋จผํธ๊ฐ ๋คํธ์ํฌ ์์์ ์์ ํ ์๋ฉธ๋ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ๋ ๋ค์ ์ฐ๊ฒฐ์ ์์ํ ๋ ํผ๋์ด๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ , ์์ ์ ์ธ ํต์ ์ ๋ณด์ฅํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
https://yanacoding.tistory.com/entry/CS-TCPIP-4๊ณ์ธต-๋ชจ๋ธ์ด๋๊ณ์ธต-๊ตฌ์กฐ-PDU
'CS > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS, WEB, HTTP] RESTful API๋?(API, REST API, RESTful API) (0) | 2023.06.13 |
---|---|
[JAVA] Static (0) | 2023.06.13 |
[TIL] HTTP ๋ฉฑ๋ฑ์ฑ (0) | 2023.05.29 |
[TIL] HTTP ๋ฉ์๋ (1) | 2023.05.29 |
[CS] ํ๋ก์ธ์ค(process)์ ์ค๋ ๋ (0) | 2022.10.25 |
@Yanako :: Yana's coding story
์ผ๋์ ์ฝ๋ฉ ์ผ๊ธฐ์ฅ :) #์ฝ๋ฉ๋ธ๋ก๊ทธ #๊ธฐ์ ๋ธ๋ก๊ทธ #์ฝ๋ฉ #์กฐ๊ธ์ฉ,๊พธ์คํ
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!