[Daily morning study] TCP vs UDP ๋น„๊ต

#daily morning study

Image


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 ๋น„๊ต ์ •๋ฆฌ

ํ•ญ๋ชฉTCPUDP
์—ฐ๊ฒฐ ๋ฐฉ์‹์—ฐ๊ฒฐ ์ง€ํ–ฅ (3-way handshake)๋น„์—ฐ๊ฒฐ ์ง€ํ–ฅ
์‹ ๋ขฐ์„ฑ๋ณด์žฅ (์žฌ์ „์†ก, ACK)๋ณด์žฅ ์•ˆ ํ•จ
์ˆœ์„œ ๋ณด์žฅ๋ณด์žฅ๋ณด์žฅ ์•ˆ ํ•จ
ํ๋ฆ„ ์ œ์–ด์žˆ์Œ์—†์Œ
ํ˜ผ์žก ์ œ์–ด์žˆ์Œ์—†์Œ
ํ—ค๋” ํฌ๊ธฐ์ตœ์†Œ 20๋ฐ”์ดํŠธ8๋ฐ”์ดํŠธ
์†๋„์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฆ„
์ „์†ก ๋‹จ์œ„์ŠคํŠธ๋ฆผ(Stream)๋ฐ์ดํ„ฐ๊ทธ๋žจ(Datagram)
์‚ฌ์šฉ ์˜ˆHTTP, FTP, SSH, SMTPDNS, 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 ๊ธฐ๋ฐ˜ ํ†ต์‹ ์ด ๋” ๋ณดํŽธํ™”๋˜๊ณ  ์žˆ๋‹ค.