Post

[CS] Computer Networking - Transport layer(5): TCP congestion control

[CS] Computer Networking - Transport layer(5): TCP congestion control

๐Ÿ“š์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ์ „๊ณต ์ˆ˜์—… ์ •๋ฆฌ

TCP Congestion Control


Congestion: โ€œtoo many sources sending too much data too fast for network to handleโ€

โœ…flow control vs Congestion control

  • flow control: ํ•œ sender๊ฐ€ ํ•œ receiver์—๊ฒŒ ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ(end-to-end)
  • Congestion control: ๋„ˆ๋ฌด ๋งŽ์€ sender๊ฐ€ ๋„คํŠธ์›Œํฌ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ(๋„คํŠธ์›Œํฌ ์ฐจ์›)

Congestion Control scenario 1

๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ด์ƒ์  ์‹œ๋‚˜๋ฆฌ์˜ค(๋ฌดํ•œํ•œ ๋ฒ„ํผ, ํŒจํ‚ท loss x)

alt text

no retransmissions = no packet loss

  • ๋‘ ์—ฐ๊ฒฐ์˜ ์ตœ๋Œ€ throuput์€ R/2์ด๋‹ค.
  • ๋„์ฐฉ ์†๋„(arrival rate)๊ฐ€ R/2์— ์ ‘๊ทผํ• ์ˆ˜๋ก ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ํ•จ
  • ๋™์‹œ์— delay๋Š” ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•จ โ†’ ํŒจํ‚ท์ด buffer์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ

Congestion Control scenario 2

  1. ์ด์ƒ์  ์ƒํ™ฉ alt text

    sender๊ฐ€ buffer์˜ ์šฉ๋Ÿ‰๋งŒํผ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก
    ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ตœ๋Œ€ R/2๊นŒ์ง€ ์ฆ๊ฐ€

alt text

  1. ์กฐ๊ธˆ ํ˜„์‹ค์ ์œผ๋กœ ์œ ํ•œํ•œ ๋ฒ„ํผ๋ฅผ ๊ฐ€์ง„ ๋ผ์šฐํ„ฐ์˜ ๊ฒฝ์šฐ
    • packet loss ๊ฐ€๋Šฅ
    • retransmission ์žˆ์Œ

alt text

๋ผ์šฐํ„ฐ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐจ์„œ ํŒจํ‚ท์ด ์†์‹ค
sender๊ฐ€ ์žฌ์ „์†ก โ†’ โ€œ๋‚ญ๋น„๋œ ์šฉ๋Ÿ‰โ€์ด ๋ฐœ์ƒ(์žฌ์ „์†ก์œผ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ ์šฉ๋Ÿ‰์ด ์ค„์–ด๋“ฆ)

alt text

  1. ํ˜„์‹ค์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค: ๋ถˆํ•„์š”ํ•œ duplication alt text

    Timeout์„ ์ผ์ฐ ๊ฐ์ง€ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ duplication์ด ๋ฐœ์ƒ ์ด๋กœ ์ธํ•ด ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋” ๊ฐ์†Œํ•˜๊ณ , โ€œ๋‚ญ๋น„๋œ ์šฉ๋Ÿ‰โ€์ด ์ฆ๊ฐ€

Congestion Control scenario 3

alt text

  • A, B, C, D๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค
  • ๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฐœ์˜ ๋ผ์šฐํ„ฐ๋ฅผ ๊ฑฐ์ณ ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•œ๋‹ค
  • packet loss ์‹œ ํƒ€์ž„์•„์›ƒ ํ›„ ์žฌ์ „์†ก

Q: ๋นจ๊ฐ„์ƒ‰ ๋ผ์ธ์˜ ๋ฐ์ดํ„ฐ ์ธํ’‹์ด ์ฆ๊ฐ€ํ•˜๋ฉด? A: ๋งจ์œ„ ๋ผ์šฐํ„ฐ์— ๋นจ๊ฐ„์ƒ‰์˜ ํŒจํ‚ท์œผ๋กœ ๊ฐ€๋“์ฐจ๊ณ , ๋ผ์šฐํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ํŒŒ๋ž€์ƒ‰ ๋ผ์ธ์˜ ํŒจํ‚ท๋“ค์ด ๋ชจ๋‘ ๋ฒ„๋ ค์ง„๋‹ค

alt text

๋„์ฐฉ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ปค์ง€๋‹ค๊ฐ€ 0์— ์ˆ˜๋ ด

๋„คํŠธ์›Œํฌ์—์„œ ํŒจํ‚ท์ด ์—ฌ๋Ÿฌ ๋ผ์šฐํ„ฐ๋ฅผ ํ†ต๊ณผํ•œ ํ›„ ๋งˆ์ง€๋ง‰ ๋ผ์šฐํ„ฐ์—์„œ ๋ฒ„๋ ค์ง„๋‹ค๋ฉด, ๊ทธ ํŒจํ‚ท์ด ์ด๋ฏธ ์†Œ๋น„ํ•œ ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค(๋ฒ„ํผ ๊ณต๊ฐ„, ์ฒ˜๋ฆฌ ์‹œ๊ฐ„)๋Š” ์™„์ „ํžˆ ๋‚ญ๋น„๋œ๋‹ค!!

flow control์—์„œ sender์˜ window size๋Š” receiver window์— ๋”ฐ๋ผ์„œ ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ, ์‚ฌ์‹ค ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ๋„ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค

sender๋Š” RWND์™€ ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•œ CWND(Congestion Window)์ค‘์—์„œ ์ž‘์€ ๊ฐ’์„ ํƒํ•œ๋‹ค

  • congestion control ๋ฐฉ์‹์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— CWND, ssthresh์˜ ๊ฐœ๋…์„ ์žก๊ณ  ๊ฐ€์ž
  • CWND: ํ•œ ๋ฒˆ์— ๋„คํŠธ์›Œํฌ์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘(LastByteSent - LastByteAcked โ‰ค cwnd)
    • TCP ์†๋„ โ‰ˆ cwnd / RTT (bytes/sec)
  • ssthresh: slow start threshold(์ž„๊ณ„์ )
    • ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ slow start๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
    • ํŠน์ •ํ•œ ์ž„๊ณ„์ ์„ ์ •ํ•ด๋†“๊ณ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž„๊ณ„์ ์„ ๋„˜์–ด๊ฐ€๋ฉด ์ดํ›„๋ถ€ํ„ฐ๋Š” AIMD ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์œˆ๋„์šฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ด

๊ทธ๋Ÿผ congestion control์—๋Š” ์–ด๋–ค ๋ฐฉ์‹์ด ์žˆ์„๊นŒ?

AIMD (Addictive Increase Multiplicative Decrease)


ํ•ฉ ์ฆ๊ฐ€ - ๊ณฑ ๊ฐ์†Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • Addictive Increase: network congestion์ด ๊ฐ์ง€๋˜์ง€ ์•Š๋Š” ๋™์•ˆ ๋งค RTT๋งˆ๋‹ค MSS(Maximum segment size)๋งŒํผ ์ „์†ก์†๋„๋ฅผ ์ฆ๊ฐ€

  • Multiplicate Decrease: ํŒจํ‚ท ์†์‹ค์ด ๊ฐ์ง€๋˜๋ฉด ๊ทธ๋•Œ๋งˆ๋‹ค ์ „์†ก ์†๋„๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ž„

    • TCP Reno: 3-ACK duplication์ด ๊ฐ์ง€๋˜๋ฉด ์ „์†ก ์†๋„๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๋ฐฉ์‹
    • TCP Tahoe: ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์†์‹ค์ด ๊ฐ์ง€๋˜๋ฉด cwnd๋ฅผ 1 MSS๋กœ ์ค„์ž„

Slow start


alt text

  • ์ดˆ๊ธฐ์—๋Š” cwnd=1 MSS๋กœ ์„ค์ •
  • ๋งค RTT๋งˆ๋‹ค cwnd๋ฅผ 2๋ฐฐ ์ฆ๊ฐ€ โ†’ ๊ฐ ACK๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๋งˆ๋‹ค cwnd ์ฆ๊ฐ€

TCP Reno์™€ Tahoe๋Š” AIMD + Slow start๋ฅผ ํ˜ผํ•ฉํ•ด์„œ congestion control์„ ํ•˜๋Š” ์ •์ฑ…์ด๋‹ค.

TCP Tahoe

๐Ÿ“š Tahoe์€ ํ˜ผ์žก ์ œ์–ด์˜ ์ดˆ๊ธฐ ์ •์ฑ…์ด๊ณ  ๋น ๋ฅธ ์žฌ์ „์†ก์ด ์ฒ˜์Œ์œผ๋กœ ๋„์ž…๋œ ์ •์ฑ…

alt text

  • ์ฒ˜์Œ์—๋Š” ๋™์ผํ•˜๊ฒŒ Slow Start ๋ฐฉ์‹์œผ๋กœ ์œˆ๋„์šฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋‹ค๊ฐ€ ssthresh ์‹œ์  ์ดํ›„๋ถ€ํ„ฐ๋Š” AIMD ๋ฐฉ์‹์„ ์‚ฌ์šฉ
  • TimeOut ์ด๋‚˜ 3 ACK Duplicated ์ƒํ™ฉ์ด ๋ฐœ์ƒ ์‹œ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ˜ผ์žกํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€
  • โ†’ ssthresh๋Š” wnd size์˜ ์ ˆ๋ฐ˜์œผ๋กœ, window size๋Š” 1๋กœ ์ˆ˜์ •

โŒTahoe์˜ ๋‹จ์ ์€ ์ดˆ๋ฐ˜์˜ Slow Start ๊ตฌ๊ฐ„์—์„œ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ํ‚ค์šธ๋•Œ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค

๊ทธ๋ž˜์„œ ๋‚˜์˜จ Fast Recovery ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ TCP Reno

TCP Reno

๐Ÿ“š Tahoe์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Slow Start๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ž„๊ณ„์ ์„ ๋„˜์–ด์„œ๋ฉด ํ•ฉ ์ฆ๊ฐ€๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Tahoe๋Š” ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ 3 ACK Duplicated์™€ Timeout์„ ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๊ฒƒ

alt text

  • Reno๋Š” 3 ACK Duplicated๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ 1๋กœ ์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ AIMD์ฒ˜๋Ÿผ ๋ฐ˜์œผ๋กœ๋งŒ ์ค„์ด๊ณ  sshthresh๋ฅผ ์ค„์–ด๋“  ์œˆ๋„์šฐ ๊ฐ’์œผ๋กœ ์ •ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ด๋Š” Tahoe์— ๋น„ํ•ด ๋น ๋ฅด๊ฒŒ ์›๋ž˜ window size์— ๋„๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Fast Recovery๋ผ๊ณ  ๋ถˆ๋ฆผ
  • Timeout์˜ ๊ฒฝ์šฐ์—๋Š” Tahoe์™€ ๋งˆ์นœ๊ฐ€์ง€๋กœ window size๋ฅผ 1๋กœ ์ค„์ธ๋’ค slow start๋ฅผ ์ง„ํ–‰
    • ์ด๋•Œ ssthresh๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ

alt text

Tahoe์™€ Reno ๋น„๊ต ๊ทธ๋ž˜ํ”„

alt text

Reno์˜ FSM

โœ… FSM ๋ฉ”์ปค๋‹ˆ์ฆ˜:

1. Slow Start
  • ์ดˆ๊ธฐ๊ฐ’: cwnd = 1 MSS, ssthresh = 64 KB, dupACKcount = 0
  • ๋„คํŠธ์›Œํฌ์— ๊ธ‰์ž‘์Šค๋Ÿฌ์šด ๋ถ€ํ•˜๋ฅผ ์ฃผ์ง€ ์•Š๊ธฐ ์œ„ํ•œ ์‹œ์ž‘ ๋‹จ๊ณ„
    1. new ACK ์ˆ˜์‹ :
    • cwnd = cwnd + MSS(๋งค ACK๋งˆ๋‹ค ์œˆ๋„์šฐ ํฌ๊ธฐ ์ฆ๊ฐ€)
    • dupACKcount = 0 (์ค‘๋ณต ACK ์นด์šดํ„ฐ ์ดˆ๊ธฐํ™”)
    • ์ƒˆ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก ํ—ˆ์šฉ 2. Timeout ๋ฐœ์ƒ ์‹œ:
    • ssthresh = cwnd/2(์ž„๊ณ„๊ฐ’์„ ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ์ ˆ๋ฐ˜์œผ๋กœ ์„ค์ •)
    • cwnd = 1 MSS(์œˆ๋„์šฐ ํฌ๊ธฐ ์ตœ์†Œ๋กœ ์žฌ์„ค์ •)
    • dupACKcount = 0
    • ๋ˆ„๋ฝ๋œ ์„ธ๊ทธ๋จผํŠธ ์žฌ์ „์†ก
2. Congestion Avoidance
  • Congestion Avoidance๋กœ ์ „์ดํ•˜๋Š” ์กฐ๊ฑด:
    • cwnd โ‰ฅ ssthresh
  • ๋„คํŠธ์›Œํฌ ์šฉ๋Ÿ‰์— ๊ฐ€๊นŒ์›Œ์กŒ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๋ณด๋‹ค ์‹ ์ค‘ํ•˜๊ฒŒ ์œˆ๋„์šฐ ํฌ๊ธฐ ์ฆ๊ฐ€
    1. new ACK ์ˆ˜์‹ :
    • cwnd = cwnd + MSSร—(MSS/cwnd)(์•ฝ 1 MSS๋ฅผ ํ•œ RTT๋‹น ์ฆ๊ฐ€, ์ฆ‰ ์„ ํ˜•์  ์ฆ๊ฐ€)
    • dupACKcount = 0
    • ์ƒˆ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก ํ—ˆ์šฉ 2. duplicated ACK ์ˆ˜์‹ :
    • dupACKcount++
3. Fast Recovery
  • Fast Recovery๋กœ ์ „์ดํ•˜๋Š” ์กฐ๊ฑด:
    • dupACKcount = 3
    • ์ด๋•Œ:
      • ssthresh = cwnd/2
      • cwnd = ssthresh + 3(์œˆ๋„์šฐ ํฌ๊ธฐ ์กฐ์ •)
      • ๋ˆ„๋ฝ๋œ ์„ธ๊ทธ๋จผํŠธ ์žฌ์ „์†ก
        1. duplicated ACK ์ˆ˜์‹  ์‹œ:
    • cwnd = cwnd + MSS(๊ฐ ์ค‘๋ณต ACK๋งˆ๋‹ค ์œˆ๋„์šฐ ์ฆ๊ฐ€)
    • ์ƒˆ ์„ธ๊ทธ๋จผํŠธ ์ „์†ก ํ—ˆ์šฉ 2. new ACK ์ˆ˜์‹  ์‹œ(๋ˆ„๋ฝ๋œ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ACK):
    • cwnd = ssthresh(์œˆ๋„์šฐ ์ •์ƒํ™”)
    • dupACKcount = 0
    • Congestion Avoidance๋กœ ์ „ํ™˜ 3. Timeout ๋ฐœ์ƒ ์‹œ:
    • ssthresh = cwnd/2
    • cwnd = 1 MSS
    • dupACKcount = 0
    • Slow start๋กœ ์ „ํ™˜(์‹ฌ๊ฐํ•œ ๋„คํŠธ์›Œํฌ ํ˜ผ์žก ์ƒํ™ฉ)

alt text

This post is licensed under CC BY 4.0 by the author.