# TCP 3-way handshake์ 4-way-handshake
written by sohyeon, hyemin ๐ก
# 1. TCP๋?
TCP(Transmission Control Protocol)
๋ ๋คํธ์ํฌ ๊ณ์ธต ์ค ์ ์ก ๊ณ์ธต์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ๋ก, ํธ๋์คํฌํธ ๊ณ์ธต์ ํ๋กํ ์ฝ์ ํ๋๋ก ์น์ด๋ ์ด๋ฉ์ผ, FTP์ ๊ฐ์ด ์ ํํ ๋ฐ์ดํฐ ์ ๋ฌ์ด ํ์ํ ํต์ ์ ์ฌ์ฉ๋๋ค.
TCP
๋ ๋ฐ์ดํฐ ์ ์ก์ ์ ๋ขฐ์ฑ์ ๋ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ธ๊ทธ๋จผํธ(segment)๋ผ๋ ๋จ์๋ก ๋ถํ
ํ๊ณ , ์ ์ก ์๋๋ฅผ ์กฐ์
ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ์ ๋ฌ๋์ง ์์์ ๊ฒฝ์ฐ ์ฌ์ ์ก
์ ํ๊ฒ ๋๋ค.
# 2. TCP์ ํน์ง
- ์ธํฐ๋ท ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์์ง์ ํํ๋ก ๋ณด๋ด๊ธฐ ์ํด IP์ ํจ๊ป ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ด๋ค.
- TCP์ IP๋ฅผ ํจ๊ป ์ฌ์ฉํ๋๋ฐ, IP๊ฐ
๋ฐ์ดํฐ์ ๋ฐฐ๋ฌ์ ์ฒ๋ฆฌ
ํ๋ค๋ฉด TCP๋ํจํท์ ์ถ์ ๋ฐ ๊ด๋ฆฌ
ํ๋ค.
- TCP์ IP๋ฅผ ํจ๊ป ์ฌ์ฉํ๋๋ฐ, IP๊ฐ
- ๋์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค.
- UDP์ ๋น๊ตํ์ ๋ ์๋๊ฐ ๋๋ฆฌ๋ค.
ํ๋ฆ์ ์ด ๋ฐ ํผ์ก์ ์ด
๋ฅผ ์ ๊ณตํ๋ค.ํ๋ฆ์ ์ด
- ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ๋ ๊ณณ๊ณผ ์์ ํ๋ ๊ณณ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ์กฐ์ ํ์ฌ ์์ ์์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
ํผ์ก์ ์ด
- ์ ๋ณด์ ์ํต๋์ด ๋ง์ ๊ฒฝ์ฐ ํจํท์ ์กฐ๊ธ๋ง ์ ์กํ์ฌ ํผ์ก ํ์์ด ์ผ์ด๋๋ ๊ฒ์ ๋ง๋๋ค.
# 3. TCP์ ์ฐ๊ฒฐ ์ค์ ๋ฐ ํด์ ๊ณผ์
# 3-way handshake
TCP ํต์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ค์ (Connection Establish) ํ๋ ๊ณผ์
- ์ฆ, TCP/IP ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ํต์ ์ ํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ๋จผ์ ์ ํํ ์ ์ก์ ๋ณด์ฅํ๊ธฐ ์ํด ์๋๋ฐฉ ์ปดํจํฐ์ ์ฌ์ ์ ์ธ์ ์ ์๋ฆฝํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
Client -> Server: SYN
- Client๊ฐ ์ฐ๊ฒฐ ์์ฒญ ๋ฉ์์ง ์ ์ก(SYN)ํ๋ค.
- Client๊ฐ ์ต์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ Sequence Number๋ฅผ ์์์ ๋๋ค ์ซ์๋ก ์ง์ ํ๊ณ , SYN ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค.
Server -> Client: SYN + ACK
- ์ ์ ์์ฒญ์ ๋ฐ์ Server๊ฐ ์์ฒญ์ ์๋ฝํ์ผ๋ฉฐ, Client๋ ํฌํธ๋ฅผ ์ด์ด๋ฌ๋ผ๋ ๋ฉ์์ง๋ฅผ ์ ์ก(SYN + ACK)ํ๋ค.
- Server๋ Acknowledgement Number ํ๋๋ฅผ Sequence Number + 1๋ก ์ง์ ํ๊ณ , SYN๊ณผ ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค.
Client -> Server: ACK
- ๋ง์ง๋ง์ผ๋ก Client๊ฐ ์๋ฝ ํ์ธ(ACK)์ ๋ณด๋ด ์ฐ๊ฒฐ์ ๋งบ๋๋ค.
- ์ด๋, ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ด ๋จ๊ณ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
# 4-way handshake
TCP์ ์ฐ๊ฒฐ์ ํด์ (Connection Termination)ํ๋ ๊ณผ์
Client -> Server: FIN
- Client๊ฐ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ฒ ๋ค๋ FIN ํ๋๊ทธ๋ฅผ ์ ์กํ๋ค.
- Server๊ฐ FIN ํ๋๊ทธ๋ก ์๋ตํ๊ธฐ ์ ๊น์ง ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ๋ค.
Server -> Client: ACK
- Server๋ ์ผ๋จ ํ์ธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ์์ ์ ํต์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์ด ์ํ๊ฐ TIME_WAIT ์ํ๋ค.
- Server๋ Acknowledgement Number ํ๋๋ฅผ Sequence Number + 1๋ก ์ง์ ํ๊ณ , ACK ํ๋๊ทธ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ ์กํ๋ค.
- ์์ ์ด ์ ์กํ ๋ฐ์ดํฐ๊ฐ ๋จ์์๋ค๋ฉด ์ด์ด์ ๊ณ์ ์ ์กํ๋ค.
Server -> Client: FIN
- Server๊ฐ ํต์ ์ด ๋๋ฌ๋ค๋ฉด ์ฐ๊ฒฐ ์ข ๋ฃ ์์ฒญ์ ํฉ์ํ๋ค๋ ์๋ฏธ๋ก Client์๊ฒ FIN ํ๋๊ทธ๋ฅผ ์ ์กํ๋ค.
Client -> Server: ACK
- Client๋ ํ์ธํ๋ค๋ ๋ฉ์์ง(ACK)๋ฅผ ์ ์กํ๋ค.
- Client๋ ํ์ธํ๋ค๋ ๋ฉ์์ง(ACK)๋ฅผ ์ ์กํ๋ค.
# ์ํ ์ ๋ณด
CLOSED
: ํฌํธ๊ฐ ๋ซํ ์ํ๋ค.LISTEN
: ํฌํธ๊ฐ ์ด๋ฆฐ ์ํ๋ก ์ฐ๊ฒฐ ์์ฒญ ๋๊ธฐ ์ค์ด๋ค.SYN-RECEIVED
: SYN ์์ฒญ์ ๋ฐ๊ณ ์๋๋ฐฉ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ค์ด๋ค.ESTABLISHED
: ํฌํธ ์ฐ๊ฒฐ ์ํ๋ค.TIME_WAIT
: ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ FIN์ ์์ ํ๋๋ผ๋ ์ผ์ ์๊ฐ ๋์ ์ธ์ ์ ๋จ๊ฒจ๋๊ณ ๋ฐ์ง ๋ชปํ ํจํท์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
# Reference & Additional Resources
โ OSI 7 ๊ณ์ธต TCP์ UDP โ