์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก(RDT)์˜ ์›๋ฆฌ๋ฅผ rdt3.0๊นŒ์ง€ ์‚ดํŽด๋ณด๋ฉฐ Stop-and-Wait ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ํ™•์ธํ–ˆ๋‹ค. ํŒจํ‚ท์„ ํ•˜๋‚˜ ๋ณด๋‚ด๊ณ  ACK๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์€ ์‹ ๋ขฐ์„ฑ์€ ๋ณด์žฅํ•˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ์˜ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

์˜ค๋Š˜์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์ธํ„ฐ๋„ท ํ†ต์‹ ์˜ ํ•ต์‹ฌ์œผ๋กœ ์ž๋ฆฌ ์žก์€ TCP(Transmission Control Protocol) ์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด ๋ณธ๋‹ค. TCP๋Š” ์–ด๋–ป๊ฒŒ ์‹ ๋ขฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ, ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ๋ชจ๋‘ ์žก์•˜์„๊นŒ? ๐Ÿฐ

๐Ÿš€ TCP์˜ ํŠน์ง•: ํŒŒ์ดํ”„๋ผ์ด๋‹๊ณผ ํ๋ฆ„ ์ œ์–ด

TCP๋Š” rdt3.0์˜ ๋ฌธ์ œ๋ฅผ ํŒŒ์ดํ”„๋ผ์ด๋‹(Pipelining) ๊ธฐ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ACK๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒจํ‚ท์„ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด ์ฑ„๋„ ์ด์šฉ๋ฅ ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด์™€ ํ•จ๊ป˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ์ ์ธ ํŠน์ง•๋“ค์„ ๊ฐ€์ง„๋‹ค.

  • Point-to-point: ๋‹จ์ผ ์†ก์‹ ์ž์™€ ๋‹จ์ผ ์ˆ˜์‹ ์ž ๊ฐ„์˜ ์—ฐ๊ฒฐ.
  • Reliable, in-order byte stream: ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ, ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  • Full duplex: ํ•œ ์—ฐ๊ฒฐ ์•ˆ์—์„œ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Connection-oriented: ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „, 3-way handshake๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ๋‹ค.
  • Flow controlled: ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ๊ฐ€ ๋„˜์น˜์ง€ ์•Š๋„๋ก ์†ก์‹ ์ž์˜ ์ „์†ก ์†๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค.
  • Congestion controlled: ๋„คํŠธ์›Œํฌ์˜ ํ˜ผ์žก ์ƒํ™ฉ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ „์†ก ์†๋„๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์ „์ฒด์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

๐Ÿ“ฆ TCP ์„ธ๊ทธ๋จผํŠธ ๊ตฌ์กฐ

TCP๊ฐ€ ์ด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋ฐ€์€ ๋ฐ”๋กœ ํ—ค๋”์— ์žˆ๋‹ค.

Untitled

  • Sequence Number (์ˆœ์„œ ๋ฒˆํ˜ธ): ์„ธ๊ทธ๋จผํŠธ์— ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์— ๋ถ€์—ฌ๋˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ์žฌ์กฐ๋ฆฝํ•˜๊ณ  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.
  • Acknowledgement Number (ํ™•์ธ ์‘๋‹ต ๋ฒˆํ˜ธ): ์ˆ˜์‹ ์ž๊ฐ€ ๋‹ค์Œ์— ๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฐ”์ดํŠธ์˜ ์ˆœ์„œ ๋ฒˆํ˜ธ. ์˜ˆ๋ฅผ ๋“ค์–ด 199๋ฒˆ๊นŒ์ง€ ์ž˜ ๋ฐ›์•˜๋‹ค๋ฉด, ACK ๋ฒˆํ˜ธ๋Š” 200์ด ๋œ๋‹ค. TCP๋Š” ๋ˆ„์  ACK(cumulative ACK)๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, 200๋ฒˆ ACK๋Š” 199๋ฒˆ๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ œ์—†์ด ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‚ดํฌํ•œ๋‹ค.
  • Header Length: TCP ํ—ค๋”์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์˜ต์…˜(Options) ํ•„๋“œ์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€๋ณ€์ ์ด๋ผ ์ด ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • Flags (U,A,P,R,S,F): ์—ฐ๊ฒฐ ์„ค์ •(SYN), ๋ฐ์ดํ„ฐ ์ „์†ก(PSH, URG), ์—ฐ๊ฒฐ ์ข…๋ฃŒ(FIN), ๊ฐ•์ œ ์ข…๋ฃŒ(RST) ๋“ฑ ๋‹ค์–‘ํ•œ ์ œ์–ด ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค.
  • Receive Window (์ˆ˜์‹  ์œˆ๋„์šฐ): ํ๋ฆ„ ์ œ์–ด(Flow Control)๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์ˆ˜์‹ ์ž๊ฐ€ ํ˜„์žฌ ์ถ”๊ฐ€๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์†ก์‹ ์ž์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.
  • Checksum: ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ๊ฒ€์ถœ์„ ์œ„ํ•œ ๊ฐ’.
  • Options: ํƒ€์ž„์Šคํƒฌํ”„, ์œˆ๋„์šฐ ์Šค์ผ€์ผ ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋‹ค.

โฑ๏ธ Timeout ์„ค์ •: ๋„ˆ๋ฌด ๊ธธ์ง€๋„, ์งง์ง€๋„ ์•Š๊ฒŒ

ํŒจํ‚ท ์†์‹ค์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํƒ€์ž„์•„์›ƒ ์„ค์ •์€ TCP ์„ฑ๋Šฅ์— ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

  • ๋„ˆ๋ฌด ์งง์œผ๋ฉด? ํŒจํ‚ท์ด ์ž˜ ์ „๋‹ฌ๋˜๊ณ  ์žˆ๋Š”๋ฐ๋„ ์†์‹ค๋กœ ์˜คํ•ดํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์žฌ์ „์†ก์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋„ˆ๋ฌด ๊ธธ๋ฉด? ํŒจํ‚ท์ด ์‹ค์ œ๋กœ ์†์‹ค๋˜์—ˆ์„ ๋•Œ ๋„ˆ๋ฌด ๋Šฆ๊ฒŒ ๋ฐ˜์‘ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.

๋ฌธ์ œ๋Š” ๋„คํŠธ์›Œํฌ ์ƒํƒœ๊ฐ€ ๊ณ„์† ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— RTT(Round Trip Time)๊ฐ€ ๊ณ„์† ๋ณ€ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. TCP๋Š” SampleRTT๋ฅผ ๊ณ„์† ์ธก์ •ํ•˜๊ณ , ์ง€์ˆ˜ ๊ฐ€์ค‘ ์ด๋™ ํ‰๊ท (EWMA) ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๋™์„ฑ์„ ์™„ํ™”ํ•œ EstimatedRTT๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • EstimatedRTT = (1-ฮฑ) * EstimatedRTT + ฮฑ * SampleRTT

๊ทธ๋ฆฌ๊ณ  RTT์˜ ๋ณ€๋™ํญ(DevRTT)๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข… ํƒ€์ž„์•„์›ƒ ๊ฐ„๊ฒฉ(TimeoutInterval)์„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•œ๋‹ค.

  • TimeoutInterval = EstimatedRTT + 4 * DevRTT

๐Ÿ”„ TCP์˜ ์žฌ์ „์†ก ์‹œ๋‚˜๋ฆฌ์˜ค

TCP๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์ „์†กํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

  1. Timeout: ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์žฌ์ „์†ก ๋งค์ปค๋‹ˆ์ฆ˜. ACK๋ฅผ ๋ฐ›๊ธฐ ์ „์— ํƒ€์ด๋จธ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์žฌ์ „์†กํ•œ๋‹ค.
  2. Fast Retransmit (๋น ๋ฅธ ์žฌ์ „์†ก): ์ค‘๊ฐ„์— ํŒจํ‚ท ํ•˜๋‚˜๊ฐ€ ์œ ์‹ค๋˜๋ฉด, ์ˆ˜์‹ ์ž๋Š” ์œ ์‹ค๋œ ํŒจํ‚ท ๋‹ค์Œ์˜ ํŒจํ‚ท๋“ค์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ๊ณ„์†ํ•ด์„œ ๋™์ผํ•œ ACK(์œ ์‹ค๋œ ํŒจํ‚ท์˜ ์ˆœ์„œ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„)๋ฅผ ๋ณด๋‚ธ๋‹ค. ์†ก์‹ ์ž๊ฐ€ ์ด ์ค‘๋ณต ACK(duplicate ACK)๋ฅผ 3๋ฒˆ ๋ฐ›์œผ๋ฉด, ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์ด๋ผ๋„ โ€˜์•„, ํŒจํ‚ท์ด ์œ ์‹ค๋˜์—ˆ๊ตฌ๋‚˜โ€™๋ผ๊ณ  ํŒ๋‹จํ•˜๊ณ  ํ•ด๋‹น ํŒจํ‚ท์„ ์ฆ‰์‹œ ์žฌ์ „์†กํ•œ๋‹ค.

Untitled

๐ŸŒŠ ํ๋ฆ„ ์ œ์–ด (Flow Control)

์†ก์‹ ์ž๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋ณด๋‚ด์„œ ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ๊ฐ€ ๋„˜์ณ๋ฒ„๋ฆฌ๋ฉด(overflow), ์ˆ˜์‹ ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„๋ฆด ์ˆ˜๋ฐ–์— ์—†๊ณ  ์ด๋Š” ์—„์ฒญ๋‚œ ๋‚ญ๋น„๋‹ค. ํ๋ฆ„ ์ œ์–ด๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

์ˆ˜์‹ ์ž๋Š” TCP ํ—ค๋”์˜ Receive Window (rwnd) ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฒ„ํผ์— ๋‚จ์€ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ์†ก์‹ ์ž์—๊ฒŒ ๊ณ„์† ์•Œ๋ ค์ค€๋‹ค. ์†ก์‹ ์ž๋Š” ์ด rwnd ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

Untitled

๐Ÿค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ (Connection Management)

TCP๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•œ๋‹ค.

3-Way Handshake (์—ฐ๊ฒฐ ์„ค์ •)

  1. [SYN] ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„: โ€œ์—ฐ๊ฒฐ ์š”์ฒญํ• ๊ฒŒ!โ€ (SYN ๋น„ํŠธ = 1, ์ž„์˜์˜ ์ˆœ์„œ ๋ฒˆํ˜ธ client_isn ์„ค์ •)
  2. [SYN+ACK] ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ: โ€œ์•Œ๊ฒ ์–ด! ๋„ˆ์˜ ์š”์ฒญ ์ž˜ ๋ฐ›์•˜๊ณ , ๋‚˜๋„ ์ค€๋น„๋์–ด!โ€ (SYN ๋น„ํŠธ = 1, ACK ๋น„ํŠธ = 1, ack = client_isn + 1, ์„œ๋ฒ„๋„ ์ž„์˜์˜ ์ˆœ์„œ ๋ฒˆํ˜ธ server_isn ์„ค์ •)
  3. [ACK] ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„: โ€œ์‘๋‹ต ๊ณ ๋งˆ์›Œ! ์ด์ œ ๋ฐ์ดํ„ฐ ๋ณด๋‚ผ๊ฒŒ!โ€ (ACK ๋น„ํŠธ = 1, ack = server_isn + 1)

์ด ๊ณผ์ •์„ ํ†ตํ•ด ์–‘์ชฝ ๋ชจ๋‘ ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ ์ข…๋ฃŒ (Closing Connection)

์—ฐ๊ฒฐ ์ข…๋ฃŒ๋Š” 4-Way Handshake๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ฐ ์ธก์ด FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณด๋‚ด ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋๋‚ฌ์Œ์„ ์•Œ๋ฆฌ๊ณ  ์ƒ๋Œ€๋ฐฉ์˜ ACK๋ฅผ ๋ฐ›๋Š”๋‹ค.

๐Ÿšฆ ํ˜ผ์žก ์ œ์–ด (Congestion Control)

ํ๋ฆ„ ์ œ์–ด๊ฐ€ ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž โ€˜๋‘˜โ€™์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด, ํ˜ผ์žก ์ œ์–ด๋Š” ๋„คํŠธ์›Œํฌ โ€˜์ „์ฒดโ€™์˜ ์•ˆ์ •์„ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ๋„คํŠธ์›Œํฌ์— ์Ÿ์•„์ ธ ๋“ค์–ด์™€ ๋ผ์šฐํ„ฐ์˜ ํ๊ฐ€ ๋„˜์น˜๊ณ  ํŒจํ‚ท์ด ์†์‹ค๋˜๋Š” ํ˜ผ์žก ๋ถ•๊ดด(congestion collapse)๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

TCP๋Š” ๋„คํŠธ์›Œํฌ์˜ ํ˜ผ์žก์„ โ€˜ํŒจํ‚ท ์†์‹คโ€™์ด๋‚˜ โ€˜์ง€์—ฐ ์ฆ๊ฐ€โ€™๋กœ ๊ฐ„์ ‘์ ์œผ๋กœ ์ถ”๋ก ํ•˜๊ณ , Congestion Window (cwnd) ๋ผ๋Š” ๊ฐ’์„ ์กฐ์ ˆํ•˜์—ฌ ์ „์†ก ์†๋„๋ฅผ ์ œ์–ดํ•œ๋‹ค. ์†ก์‹ ์ž๊ฐ€ ํ•œ ๋ฒˆ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์€ min(rwnd, cwnd)์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.

AIMD (Additive Increase, Multiplicative Decrease)

TCP ํ˜ผ์žก ์ œ์–ด์˜ ๊ธฐ๋ณธ ์ „๋žต์ด๋‹ค.

  • Additive Increase (ํ•ฉ ์ฆ๊ฐ€): ํ˜ผ์žก์ด ๊ฐ์ง€๋˜์ง€ ์•Š์œผ๋ฉด, 1 RTT๋งˆ๋‹ค cwnd๋ฅผ 1 MSS(Maximum Segment Size)์”ฉ ์ ์ง„์ ์œผ๋กœ ๋Š˜๋ฆฐ๋‹ค. (์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์†๋„๋ฅผ ์˜ฌ๋ฆฐ๋‹ค)
  • Multiplicative Decrease (๊ณฑ ๊ฐ์†Œ): ํŒจํ‚ท ์†์‹ค(ํ˜ผ์žก)์ด ๊ฐ์ง€๋˜๋ฉด, cwnd๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ํ™• ์ค„์ธ๋‹ค. (์œ„ํ—˜ ์‹ ํ˜ธ์— ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•œ๋‹ค)

Slow Start & Congestion Avoidance

TCP๋Š” ์—ฐ๊ฒฐ ์ดˆ๊ธฐ์— cwnd๋ฅผ 1 MSS์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ๋งค RTT๋งˆ๋‹ค 2๋ฐฐ์”ฉ ์ง€์ˆ˜์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋Š˜๋ฆฐ๋‹ค. ์ด๋ฅผ Slow Start๋ผ๊ณ  ํ•œ๋‹ค. (์ด๋ฆ„์€ ๋А๋ฆฌ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค!)

๊ทธ๋Ÿฌ๋‹ค cwnd๊ฐ€ ๋ฏธ๋ฆฌ ์„ค์ •๋œ ์ž„๊ณ„๊ฐ’(ssthresh)์„ ๋„˜์–ด์„œ๋ฉด, Congestion Avoidance ๋‹จ๊ณ„๋กœ ์ „ํ™˜ํ•˜์—ฌ cwnd๋ฅผ 1 MSS์”ฉ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค(AIMD์˜ Additive Increase).

  • ์†์‹ค ๊ฐ์ง€ ์‹œ:
    • Timeout์œผ๋กœ ๊ฐ์ง€: ssthresh๋ฅผ cwnd/2๋กœ ์„ค์ •ํ•˜๊ณ , cwnd๋ฅผ 1 MSS๋กœ ๋ฆฌ์…‹ํ•œ ํ›„ ๋‹ค์‹œ Slow Start๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. (์‹ฌ๊ฐํ•œ ํ˜ผ์žก์œผ๋กœ ๊ฐ„์ฃผ)
    • 3 ์ค‘๋ณต ACK๋กœ ๊ฐ์ง€: ssthresh์™€ cwnd๋ฅผ ๋ชจ๋‘ cwnd/2๋กœ ์„ค์ •ํ•˜๊ณ  Congestion Avoidance ๋‹จ๊ณ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค. (๋น„๊ต์  ๋œ ์‹ฌ๊ฐํ•œ ํ˜ผ์žก์œผ๋กœ ๊ฐ„์ฃผ, TCP Reno ๋ฐฉ์‹)

Untitled

TCP CUBIC & BBR

AIMD ๋ฐฉ์‹์€ ํ†ฑ๋‹ˆ ๋ชจ์–‘์œผ๋กœ cwnd๊ฐ€ ๋ณ€๋™ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ์™„์ „ํžˆ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„๋Œ€์ ์ธ ํ˜ผ์žก ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

  • TCP CUBIC: loss๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ง€์ (W_max)๊นŒ์ง€๋Š” 3์ฐจ ํ•จ์ˆ˜ ๊ณก์„  ๋ชจ์–‘์œผ๋กœ ๋น ๋ฅด๊ฒŒ cwnd๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , W_max์— ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ์ฆ๊ฐ€ ์†๋„๋ฅผ ๋Šฆ์ถฐ ์•ˆ์ •์„ฑ์„ ๋†’์ธ๋‹ค. (Linux, Android์˜ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜)
  • BBR (Bottleneck Bandwidth and RTT): loss ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ, RTT์™€ ๋Œ€์—ญํญ ์ž์ฒด๋ฅผ ์ธก์ •ํ•˜์—ฌ ํŒŒ์ดํ”„๋ฅผ โ€œ๊ฑฐ์˜ ๊ฝ‰ ์ฐจ์ง€๋งŒ ๋„˜์น˜์ง€ ์•Š๊ฒŒโ€ ์œ ์ง€ํ•˜๋ ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜. (Google์˜ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ๋ฐ Youtube ๋“ฑ์—์„œ ์‚ฌ์šฉ)

โœจ QUIC: TCP์˜ ์ง„ํ™”

์ง€๋‚œ 40๋…„๊ฐ„ ์ธํ„ฐ๋„ท์„ ์ง€๋ฐฐํ•ด์˜จ TCP๋„ ํ•œ๊ณ„๋Š” ์žˆ์—ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ Head-of-Line Blocking ๋ฌธ์ œ(ํ•œ ํŒจํ‚ท์ด ์œ ์‹ค๋˜๋ฉด ํ•ด๋‹น ์ŠคํŠธ๋ฆผ ์ „์ฒด๊ฐ€ ๋ง‰ํžˆ๋Š” ํ˜„์ƒ)์™€ 3-Way Handshake๋กœ ์ธํ•œ ์—ฐ๊ฒฐ ์ง€์—ฐ ๋“ฑ์ด ์žˆ๋‹ค.

QUIC(Quick UDP Internet Connections) ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ์ƒˆ๋กœ์šด ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • UDP ๊ธฐ๋ฐ˜: TCP๊ฐ€ ์•„๋‹Œ UDP ์œ„์—์„œ ๋™์ž‘ํ•˜์—ฌ ์ปค๋„ ์ˆ˜์ • ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ ๋ฐ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋น ๋ฅธ ์—ฐ๊ฒฐ ์„ค์ •: 1-RTT๋งŒ์œผ๋กœ ์•”ํ˜ธํ™” ๋ฐ ์ „์†ก ์„ค์ •์ด ์™„๋ฃŒ๋œ๋‹ค.
  • ์ŠคํŠธ๋ฆผ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„, ํ•œ ์ŠคํŠธ๋ฆผ์˜ ํŒจํ‚ท ์†์‹ค์ด ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. (No Head-of-Line Blocking)
  • ๊ฐ•ํ™”๋œ ๋ณด์•ˆ: TLS 1.3์„ ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅํ•˜์—ฌ ๊ฐ•๋ ฅํ•œ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

QUIC์€ HTTP/3์˜ ํ‘œ์ค€ ์ „์†ก ํ”„๋กœํ† ์ฝœ๋กœ ์ฑ„ํƒ๋˜์—ˆ์œผ๋ฉฐ, TCP์˜ ์‹œ๋Œ€์—์„œ QUIC์˜ ์‹œ๋Œ€๋กœ ์ ์ฐจ ๋„˜์–ด๊ฐ€๊ณ  ์žˆ๋‹ค. ์ „์†ก ๊ณ„์ธต์˜ ํ˜์‹ ์€ ํ˜„์žฌ์ง„ํ–‰ํ˜•์ด๋‹ค!