[Daily morning study] TCP vs UDP ๋น๊ต
#daily morning study
TCP์ UDP๋
TCP(Transmission Control Protocol)์ UDP(User Datagram Protocol)๋ ์ธํฐ๋ท ํ๋กํ ์ฝ ์คํ์์ ์ ์ก ๊ณ์ธต(Transport Layer, 4๊ณ์ธต)์ ํด๋นํ๋ ํ๋กํ ์ฝ์ด๋ค. ๋ ํ๋กํ ์ฝ ๋ชจ๋ IP ์์์ ๋์ํ์ง๋ง, ์ ๋ขฐ์ฑ๊ณผ ์๋ ์ธก๋ฉด์์ ๋ช ํํ ๋ค๋ฅธ ํธ๋ ์ด๋์คํ๋ฅผ ๊ฐ์ง๋ค.
TCP (Transmission Control Protocol)
ํต์ฌ ํน์ฑ
์ฐ๊ฒฐ ์งํฅ(Connection-oriented)
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ ์ ๋ฐ๋์ 3-way handshake๋ก ์ฐ๊ฒฐ์ ์๋ฆฝํ๋ค. ์ฐ๊ฒฐ์ด ํ๋ฆฝ๋ ์ดํ์์ผ ๋ฐ์ดํฐ ์ ์ก์ด ์์๋๋ค.
์ ๋ขฐ์ฑ ๋ณด์ฅ
- ํจํท์ด ์์ค๋๋ฉด ์ฌ์ ์ก(Retransmission)ํ๋ค.
- ์์ ์ธก์ด ACK(Acknowledgment)๋ฅผ ๋ณด๋ด ํจํท ์์ ์ ํ์ธํ๋ค.
- ํจํท ์์๊ฐ ๋ค๋ฐ๋๋ฉด ์์๋ฅผ ์ฌ์กฐ๋ฆฝํ๋ค.
ํ๋ฆ ์ ์ด(Flow Control)
์์ ์ธก ๋ฒํผ๊ฐ ๋์น์ง ์๋๋ก ์ก์ ์๋๋ฅผ ์กฐ์ ํ๋ค. ์์ ์๋์ฐ(Receive Window) ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
ํผ์ก ์ ์ด(Congestion Control)
๋คํธ์ํฌ ํผ์ก ์ํฉ์ ๊ฐ์งํ๋ฉด ์ก์ ์๋๋ฅผ ์ค์ธ๋ค. ์ฌ๋ก์ฐ ์คํํธ(Slow Start), AIMD(Additive Increase Multiplicative Decrease) ๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
TCP ํค๋ ๊ตฌ์กฐ (์ฃผ์ ํ๋)
Source Port (16bit) | Destination Port (16bit)
Sequence Number (32bit)
Acknowledgment Number (32bit)
Flags: SYN / ACK / FIN / RST / PSH / URG
Window Size (16bit)
Checksum (16bit)
์ด ํค๋ ํฌ๊ธฐ๋ ์ต์ 20๋ฐ์ดํธ๋ค.
UDP (User Datagram Protocol)
ํต์ฌ ํน์ฑ
๋น์ฐ๊ฒฐ ์งํฅ(Connectionless)
์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์ ์์ด ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค. ์์ ์ธก์ด ์ค๋น๋๋์ง ํ์ธํ์ง ์๋๋ค.
์ ๋ขฐ์ฑ ์์(Unreliable)
- ํจํท ์์ค์ด ๋ฐ์ํด๋ ์ฌ์ ์กํ์ง ์๋๋ค.
- ์์ ๋ณด์ฅ์ด ์๋ค.
- ACK๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
๋ฎ์ ์ค๋ฒํค๋
ํค๋๊ฐ ๋จ์ํ๊ณ ์ ์ด ๋ฉ์ปค๋์ฆ์ด ์์ด ๋งค์ฐ ๋น ๋ฅด๋ค.
UDP ํค๋ ๊ตฌ์กฐ
Source Port (16bit) | Destination Port (16bit)
Length (16bit) | Checksum (16bit)
์ด ํค๋ ํฌ๊ธฐ๋ 8๋ฐ์ดํธ๋ก TCP๋ณด๋ค ํจ์ฌ ์๋ค.
TCP vs UDP ๋น๊ต ์ ๋ฆฌ
| ํญ๋ชฉ | TCP | UDP |
|---|---|---|
| ์ฐ๊ฒฐ ๋ฐฉ์ | ์ฐ๊ฒฐ ์งํฅ (3-way handshake) | ๋น์ฐ๊ฒฐ ์งํฅ |
| ์ ๋ขฐ์ฑ | ๋ณด์ฅ (์ฌ์ ์ก, ACK) | ๋ณด์ฅ ์ ํจ |
| ์์ ๋ณด์ฅ | ๋ณด์ฅ | ๋ณด์ฅ ์ ํจ |
| ํ๋ฆ ์ ์ด | ์์ | ์์ |
| ํผ์ก ์ ์ด | ์์ | ์์ |
| ํค๋ ํฌ๊ธฐ | ์ต์ 20๋ฐ์ดํธ | 8๋ฐ์ดํธ |
| ์๋ | ์๋์ ์ผ๋ก ๋๋ฆผ | ์๋์ ์ผ๋ก ๋น ๋ฆ |
| ์ ์ก ๋จ์ | ์คํธ๋ฆผ(Stream) | ๋ฐ์ดํฐ๊ทธ๋จ(Datagram) |
| ์ฌ์ฉ ์ | HTTP, FTP, SSH, SMTP | DNS, DHCP, ์คํธ๋ฆฌ๋ฐ, VoIP |
๊ฐ ํ๋กํ ์ฝ์ ์ ํฉํ ์ฌ์ฉ ์ฌ๋ก
TCP๋ฅผ ์จ์ผ ํ ๋
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ: ํ์ผ ์ ์ก(FTP), ์ด๋ฉ์ผ(SMTP), ์น(HTTP/HTTPS)
- ์์๊ฐ ์ค์ํ ๊ฒฝ์ฐ: ์๊ฒฉ ํฐ๋ฏธ๋(SSH, Telnet)
- ๊ธ์ต ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ: ํ ๋ฐ์ดํธ๋ผ๋ ์์ค๋๋ฉด ์ ๋๋ ๊ฒฝ์ฐ
UDP๋ฅผ ์จ์ผ ํ ๋
- ์ง์ฐ ์๊ฐ์ด ๋ ์ค์ํ ๊ฒฝ์ฐ: ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, ์จ๋ผ์ธ ๊ฒ์, VoIP
- ์งง์ ์์ฒญ-์๋ต: DNS ์ฟผ๋ฆฌ (ํจํท ํ๋๋ก ์๊ฒฐ๋๋ ๊ฒฝ์ฐ TCP ์ฐ๊ฒฐ ์๋ฆฝ ์ค๋ฒํค๋๊ฐ ๋ ๋น์)
- ๋ธ๋ก๋์บ์คํธ/๋ฉํฐ์บ์คํธ: DHCP์ฒ๋ผ ๋ค์์๊ฒ ๋์์ ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฝ๊ฐ์ ์์ค์ ํ์ฉํ๋ ๊ฒฝ์ฐ: ๋์์ ์คํธ๋ฆฌ๋ฐ์์ ํ๋ ํ๋ ์์ด ๋น ์ ธ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ์ํฅ ์์
์ DNS๋ UDP๋ฅผ ์ฐ๋๊ฐ
DNS๋ ๊ธฐ๋ณธ์ ์ผ๋ก UDP 53๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค. ์ฟผ๋ฆฌ ํ๋์ ์๋ต ํ๋๋ก ์๊ฒฐ๋๋ ๋จ์ํ ๊ตฌ์กฐ๋ผ์, TCP์ ์ฐ๊ฒฐ ์๋ฆฝ(3-way handshake)๊ณผ ํด์ (4-way handshake) ์ค๋ฒํค๋๊ฐ ๋ญ๋น๋ค.
๋จ, ์๋ต ๋ฐ์ดํฐ๊ฐ 512๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ๊ฑฐ๋(DNSSEC ๋ฑ ํ์ฅ ๋ ์ฝ๋), ์กด ์ ์ก(Zone Transfer, AXFR)์ฒ๋ผ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋๋ TCP๋ก ์ ํํ๋ค.
ํ๋์์์ ๋ณํ: QUIC
HTTP/3์์ ์ฌ์ฉํ๋ QUIC ํ๋กํ ์ฝ์ UDP ์์์ ๊ตฌํ๋๋ค. TCP์ ์ ๋ขฐ์ฑ ๋ณด์ฅ(์ฌ์ ์ก, ์์ ์กฐ๋ฆฝ)์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์ ์ง์ ๊ตฌํํ๋ฉด์, TCP์ HOL(Head-of-Line) ๋ธ๋กํน ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
QUIC์ ํต์ฌ ์์ด๋์ด๋ โTCP์ ์ ๋ขฐ์ฑ์ ์ฑ๊ธฐ๋, ์ปค๋์ด ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ดํด ์ ์ฐ์ฑ์ ๋์ด์โ ๋ ๊ฒ์ด๋ค. UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ OS ์ปค๋ ์ ๋ฐ์ดํธ ์์ด ํ๋กํ ์ฝ์ ๊ฐ์ ํ ์ ์๋ค๋ ๊ฒ๋ ์ฅ์ ์ด๋ค.
์์ผ ํ๋ก๊ทธ๋๋ฐ ๊ด์
TCP ์์ผ ํ๋ฆ:
์๋ฒ: socket() โ bind() โ listen() โ accept() โ recv/send() โ close()
ํด๋ผ์ด์ธํธ: socket() โ connect() โ send/recv() โ close()
UDP ์์ผ ํ๋ฆ:
์๋ฒ: socket() โ bind() โ recvfrom() โ sendto()
ํด๋ผ์ด์ธํธ: socket() โ sendto() โ recvfrom()
UDP๋ connect()๊ฐ ์๋ค. sendto()์ ๋งค๋ฒ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ์ง์ ํด์ ๋ณด๋ธ๋ค.
์ ๋ฆฌ
TCP์ UDP์ ์ ํ์ ๊ฒฐ๊ตญ โ์ ๋ขฐ์ฑ vs ์๋โ ์ ํธ๋ ์ด๋์คํ๋ค.
- ๋ฐ์ดํฐ ํ๋๋ผ๋ ์์ผ๋ฉด ์ ๋๋ค โ TCP
- ์กฐ๊ธ ์์ค๋๋๋ผ๋ ๋น ๋ฅธ ์ ์ก์ด ๋ ์ค์ํ๋ค โ UDP
- UDP ์์์ ์ ๋ขฐ์ฑ์ด ํ์ํ๋ค โ ์ง์ ๊ตฌํํ๊ฑฐ๋ QUIC ์ฌ์ฉ
์ค์ ๋ก๋ ์ด ๊ฒฝ๊ณ๊ฐ ์ ์ ํ๋ ค์ง๊ณ ์๋ค. QUIC์ฒ๋ผ UDP ์์ ์ ๋ขฐ์ฑ์ ์น๋ ๋ฐฉ์์ด ๋์ด๋๊ณ ์๊ณ , HTTP/3์ ํ์คํ๋ก UDP ๊ธฐ๋ฐ ํต์ ์ด ๋ ๋ณดํธํ๋๊ณ ์๋ค.