๋ค์ด๊ฐ๋ฉฐ
๊ณผ๊ฑฐ ๋ฉด์ ๊ณผ์ ์์ ๋ฐ์๋ TCP ์ง๋ฌธ์ ๋ํด ๋ค์ ํ๊ณ ํ๊ณ ์๊ฒ๋ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค.
TCP(Transmission Control Protocol)๋?
- ์ ์ก ๊ณ์ธต(Transport Layer)์์ ์ฌ์ฉํ๋ Protocol.
TCP๋ ๋ฌด์จ ๊ธฐ๋ฅ์ด ์์๊น์?
์ ๋ขฐ์ฑ์ด ๋์ ์ ์ก(Reliable transmission)
- Dupack-based retransmission
- ์ ์์ ์ธ ์ํฉ์์๋ ACK ๊ฐ์ด ์ฐ์์ ์ผ๋ก ์ ์ก๋์ด์ผ ํฉ๋๋ค.
- ๊ทธ๋ฌ๋ ACK๊ฐ์ด ์ค๋ณต์ผ๋ก ์ฌ ๊ฒฝ์ฐ ํจํท ์ด์์ ๊ฐ์งํ๊ณ ์ฌ์ ์ก์ ์์ฒญํฉ๋๋ค.
- Timeout-based retransmission
- ์ผ์ ์๊ฐ๋์ ACK ๊ฐ์ด ์์ ์ ๋ชปํ ๊ฒฝ์ฐ ์ฌ์ ์ก์ ์์ฒญํฉ๋๋ค.
ํ๋ฆ ์ ์ด(Flow control)
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ์กฐ์ ํ์ฌ ์์ ์์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ
- ์์ ์๊ฐ ์๋์ฐ ๊ฐ์ ํตํด ์์ ๋์ ์ ํ ์ ์์ต๋๋ค.
์๋ฌ ๊ฐ์ง(Error detection)
- ๋ฐ์ดํฐ ๋ณํ, ๋ถ์ค ์ค๋ฅ๋ฅผ ๋ฐฉ์ง
- Checksum์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ณํ ๊ฐ์งํฉ๋๋ค.
ํผ์ก ์ ์ด(Congestion control)
- ๋คํธ์ํฌ ๋ด์ ํจํท ์๊ฐ ๋์น๊ฒ ์ฆ๊ฐํ์ง ์๋๋ก ๋ฐฉ์งํ๋ ๊ฒ
- ์ ๋ณด์ ์ํต๋์ด ๊ณผ๋คํ๋ฉด ํจํท์ ์กฐ๊ธ๋ง ์ ์กํ์ฌ ํผ์ก ๋ถ๊ดด ํ์์ด ์ผ์ด๋๋ ๊ฒ์ ๋ง๋๋ค.
TCP Header์๋ ๋ฌด์์ด ์์๊น์?
Source port
/Destination port
Sequence number
- SYN = 1 : ์ด๊ธฐ ์ํ์ค ๋ฒํธ๊ฐ ๋๋ค. ACK ๋ฒํธ๋ ์ด ๊ฐ์ 1์ ๋ํ ๊ฐ
- SYN = 0 : ํ์ฌ ์ธ์ ์ ์ด ์ธ๊ทธ๋จผํธ ๋ฐ์ดํฐ์ ์ต์ด ๋ฐ์ดํธ ๊ฐ์ ๋์ ์ํ์ค ๋ฒํธ
Acknowledgment number
- ACK = 1 : ํ๋์ ๊ฐ์ ์์ ์๊ฐ ์์ํ๋ ๋ค์ ์ํ์ค ๋ฒํธ์ ๋๋ค.
Header Length
- 32-bit ์๋ ๋จ์๋ก ๋ํ๋ธ TCP ํค๋ ํฌ๊ธฐ๊ฐ์ด๋ค.
Reserved
- ๋ฏธ๋์ ์ฌ์ฉํ๊ธฐ ์ํด ๋จ๊ฒจ๋ ์๋น ํ๋์ด๋ฉฐ 0์ผ๋ก ์ฑ์์ ธ์ผ ํ๋ค.
Flags
- NS : ECN-nonce ์ํ ๋ณดํธ
- CWR : ํธ์คํธ๊ฐ ECE ํ๋๊ทธ๊ฐ ํฌํจ๋ TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์์ ํ์ผ๋ฉฐ ํผ์ก ์ ์ด ๋ฉ์ปค๋์ฆ์ ์ํด ์๋ตํ์์ ์๋ฆฌ๋ ์ญํ .
- ECE : ECN-Echo๋ ๋ค์์ ๋ํ๋ธ๋ค.
- SYN = 1 : TCP ์๋๊ฐ ๋ช ์์ ํผ์ก ํต์ง(Explicit Congestion Notification, ECN)๊ฐ ๊ฐ๋ฅํจ์ ์๋ฏธ.
- SYN = 0 : IP ํค๋ ์ ์ ํผ์ก ๊ฒฝํ(Congestion Experienced) ํ๋๊ทธ๊ฐ ์ค์ ๋ ํจํท์ด ์ ์์ ์ธ ์ ์ก ์ค์ ์์ ๋์๋ค๋ ๊ฒ์ ์๋ฏธ.
- URG : Urgent pointer ํ๋์ ๊ฐ์ด ์ ํจํจ์ ๋ํ๋ ๋๋ค.
- ACK : ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์ต์ด์ SYN ํจํท ์ดํ์ ์ ์ก๋๋ ๋ชจ๋ ํจํท์ ์ด ํ๋๊ทธ๊ฐ ์ค์ ๋์ด์ผ ํฉ๋๋ค.
- PSH : ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒํผ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํธ์ํด ์ค์ง ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ณด๋ ์ญํ ์ ๋๋ค.
- RST : Connection Reset
- SYN : ๋๊ธฐํ ์ํ์ค ๋ฒํธ. ์์ชฝ์ด ๋ณด๋ธ ์ต์ด์ ํจํท์๋ง ์ด ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ด์ผ ํฉ๋๋ค.
- FIN : ๋จ์ ์ก์ ์ธก ๋ฐ์ดํฐ ์์
Window size
- ์์ ์๋์ ํฌ๊ธฐ.
- 0์ด๋ฉด ์ก์ ํ๋ก์ธ์ค์ ์ ์ก ์ค์ง.
Checksum
- ํค๋ ๋ฐ ๋ฐ์ดํฐ์ ์๋ฌ ํ์ธ์ ์ํด ์ฌ์ฉ๋๋ 16 ๋นํธ
Urgent pointer
- URG ํ๋๊ทธ๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ, ์ด 16 ๋นํธ ํ๋๋ ์ํ์ค ๋ฒํธ๋ก๋ถํฐ์ ์คํ์ ์ ๋ํ๋ธ๋ค. ์ด ์คํ์ ์ด ๋ง์ง๋ง ๊ธด๊ธ ๋ฐ์ดํฐ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
Options
TCP Connection(3-way handshake) - Disconnection(4-way handshake)
TCP Connection(3-way handshake)
- ๋จผ์ open()์ ์คํํ ํด๋ผ์ด์ธํธ๊ฐ
SYN
์ ๋ณด๋ด๊ณSYN_SENT
์ํ๋ก ๋๊ธฐํ๋ค. - ์๋ฒ๋
SYN_RCVD
์ํ๋ก ๋ฐ๊พธ๊ณSYN
๊ณผ ์๋ตACK
๋ฅผ ๋ณด๋ธ๋ค. SYN
๊ณผ ์๋ตACK
์ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ESTABLISHED
์ํ๋ก ๋ณ๊ฒฝํ๊ณ ์๋ฒ์๊ฒ ์๋ตACK
๋ฅผ ๋ณด๋ธ๋ค.- ์๋ต
ACK
๋ฅผ ๋ฐ์ ์๋ฒ๋ESTABLISHED
์ํ๋ก ๋ณ๊ฒฝํ๋ค.
TCP Disconnection(4-way handshake)
- ๋จผ์ close()๋ฅผ ์คํํ ํด๋ผ์ด์ธํธ๊ฐ FIN์ ๋ณด๋ด๊ณ
FIN_WAIT1
์ํ๋ก ๋๊ธฐํ๋ค. - ์๋ฒ๋
CLOSE_WAIT
์ผ๋ก ๋ฐ๊พธ๊ณ ์๋ต ACK๋ฅผ ์ ๋ฌํ๋ค. ๋์์ ํด๋น ํฌํธ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ดํ๋ฆฌ์ผ์ด์ ์๊ฒ close()๋ฅผ ์์ฒญํ๋ค. - ACK๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ์ํ๋ฅผ
FIN_WAIT2
๋ก ๋ณ๊ฒฝํ๋ค. - close() ์์ฒญ์ ๋ฐ์ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃ ํ๋ก์ธ์ค๋ฅผ ์งํํ๊ณ
FIN
์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ดLAST_ACK
์ํ๋ก ๋ฐ๊พผ๋ค. - FIN์ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ACK๋ฅผ ์๋ฒ์ ๋ค์ ์ ์กํ๊ณ
TIME_WAIT
์ผ๋ก ์ํ๋ฅผ ๋ฐ๊พผ๋ค.TIME_WAIT
์์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉดCLOSED
๋๋ค. ACK๋ฅผ ๋ฐ์ ์๋ฒ๋ ํฌํธ๋ฅผCLOSED
๋ก ๋ซ๋๋ค.
์ฃผ์ํด์ผ ํ ์ .
- ๋ฐ๋์ ์๋ฒ๋ง
CLOSE_WAIT
์ํ๋ฅผ ๊ฐ๋ ๊ฒ์ ์๋๋ค. - ์๋ฒ๊ฐ ๋จผ์ ์ข
๋ฃํ๊ฒ ๋ค๊ณ
FIN
์ ๋ณด๋ผ ์ ์๊ณ , ์ด๋ฐ ๊ฒฝ์ฐ ์๋ฒ๊ฐFIN_WAIT1
์ํ๊ฐ ๋ฉ๋๋ค. - ๋๊ฐ ๋จผ์
close
๋ฅผ ์์ฒญํ๋๋์ ๋ฐ๋ผ ์ํ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
TCP Question
ํ ๊ฐ์ Server Socket์์ ์ด ์ ์๋ ์ต๋ ๋์ ์ฐ๊ฒฐ ๊ฐฏ์๋ 65536๊ฐ์ด๋ค?
- ์ ๋ต์ X์ ๋๋ค.
- ์์ผ์ protocol, source addr, source port, destination addr, destination port๋ก uniqueํ๊ฒ ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์์ผ์ ์๋ ์ค์ ๋
๋ฆฌ๋ ์ค ํ์ผ ๋์คํฌ๋ฆฝํฐ
๋งํผ ์์ฑํ ์ ์์ต๋๋ค.
TCP๋ ๋ฐ์ดํฐ ์์ ๋ณด์ฅ์ ์ํด ํ ๋ฒ์ ํ๋์ Packet๋ง ์ ์กํ ๊น?
- ์ ๋ต์ X์ ๋๋ค.
- ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋งค๋ฒ ACK๋ฅผ ๋ฐ๊ณ ๋ณด๋ด๊ธฐ์ ๋๋ฌด ๋ง์ Cost๊ฐ ํ์ํฉ๋๋ค.
- ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Window๋ผ๋ ๋
ผ๋ฆฌ์ ์ธ ํจํท ๋ฌถ์์ ์ฌ์ฉํฉ๋๋ค.
- ์ต์ํ์ ACK๋ก ๋ฐ์ดํฐ ์์๋ฅผ ๋ณด์ฅํ๋ฉฐ ์ ์ก์ ํ ์ ์์ต๋๋ค.
Tcp packet์ port number byte order๋ big endian์ด๋ค?
-
์ ๋ต์ O์ ๋๋ค.
-
๊ฐ๊ฐ์ PC์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด Big endian, Little endian ๋ ๊ฐ์ง ์์ต๋๋ค.
-
์ ์ฅ๋ฐฉ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ ํด์ ๋ํ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ Network byte order์ ํ์ค์ด ํ์ํ์ต๋๋ค.
- Network byte order์ ํ์ค์ big endian์ ๋๋ค.
-
Little endian์ ์ฌ์ฉํ๋ ๋จธ์ ์์๋ Big endian์ผ๋ก ๋ณํํ๋ ์์ ์ด ํ์ํฉ๋๋ค.
Reference
- CLOSE_WAIT & TIME_WAIT ์ต์ข ๋ถ์
- TIME_WAIT ์ํ๋ ๋ฌด์์ธ๊ฐ
- CLOSE_WAIT ๋ฌธ์ ํด๊ฒฐ
- TCP/IP ๋คํธ์ํฌ ์คํ ์ดํดํ๊ธฐ
- 3G ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์ ์ดํด
- ๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ - 1ํธ
- ๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ - 2ํธ
- ๋ฆฌ๋ ์ค ์๋ฒ์ TCP ๋คํธ์ํฌ ์ฑ๋ฅ์ ๊ฒฐ์ ์ง๋ ์ปค๋ ํ๋ผ๋ฏธํฐ ์ด์ผ๊ธฐ - 3ํธ
- ๋คแแ ณแแ ฏแแ ณ TCP, แแ ตแฎแแ ณแฏ แแ ฎ แแ ตแปแแ กแแ ญ!?
- How TCP/IP Works
- https://en.wikipedia.org/wiki/Transmission_Control_Protocol
- https://blog.naver.com/cestlavie_01/221190445329