TCP ํ˜ผ์žก ์ œ์–ด
Network

TCP ํ˜ผ์žก ์ œ์–ด

1. ํ˜ผ์žก ์ œ์–ด ๊ธฐ๋ฒ•

Client์™€ Server๋Š” ํ†ต์‹ ์„ ํ•˜๋ฉฐ ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ท์œผ๋กœ ์ชผ๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ˜ผ์žก ์ œ์–ด๋ฅผ ์œ„ํ•ด์„œ ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ NACK ํŒจํ‚ท ํ˜น์€ Timeout์œผ๋กœ ์žฌ์ „์†ก์ด ๋งŽ์•„์ง€์ง€๋Š” ์•Š์•˜๋Š”์ง€? ์ „์— ๋น„ํ•ด์„œ ์‘๋‹ต ํŒจํ‚ท์ด ๋Šฆ์–ด์ง€์ง€๋Š” ์•Š์•˜๋Š”์ง€? ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ์†ก์‹ ์ธก์€ ํ˜„์žฌ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์ „์†ก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

 

์†ก์‹ ์ธก ์ „์†ก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ(AWND)๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฌ์œ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์™€ ํ˜ผ์žก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ ์ค‘ ์ ์€ ๊ฐ’์„ ์„ ํƒํ•˜์—ฌ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์œ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ(RWND)๋Š” ์ˆ˜์‹ ์ธก์ด ์ง€์†์ ์œผ๋กœ ์ „์†กํ•ด์ฃผ๊ณ  ํ˜ผ์žก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋Š”(CWND)๋Š” ๊ธฐ๋ณธ๊ฐ’ MSS(Maximum Segment Size, 1460byte)๋กœ ์ƒํ™ฉ์— ๋”ฐ๋ผ MSS ๋‹จ์œ„๋กœ ์กฐ์ ˆ๋˜๋ฉฐ 5๊ฐ€์ง€ ๊ธฐ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

AIMD(Additive Increse/Multicative Decrease)๋Š” ์ฒ˜์Œ์— ํ˜ผ์žก ์œˆ๋„์šฐ์˜ ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ์ธ 1 MSS๋กœ ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  ACK ํŒจํ‚ท์„ ๋ฐ›์œผ๋ฉด 1๊ฐœ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋ฐ˜์œผ๋กœ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. 

 

 

๋Š๋ฆฐ ์‹œ์ž‘(Slow Start)์€ ์ฒ˜์Œ์— ํ•œ๊ฐœ์”ฉ ํ˜ผ์žก ์œˆ๋„์šฐ์˜ ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ์ธ 1 MSS๋กœ ํŒจํ‚ท์„ ๋ณด๋‚ด๊ณ  ACK ํŒจํ‚ท ๋ฐ›์œผ๋ฉด ๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํƒ€์ž„ ์•„์›ƒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

 

ํ˜ผ์žก ํšŒํ”ผ(Congestion Avoidance)์€ ๋Š๋ฆฐ ์‹œ์ž‘์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ํ˜ผ์žก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ ํ˜ผ์žก์˜ ์œ„ํ—˜์„ฑ์ด ์ปค์ง‘๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ž„๊ณ„์ (sshthresh, Slow Start Threshold)๋ฅผ ์ •ํ•˜๊ณ  ์ด๋•Œ๋ถ€ํ„ฐ๋Š” 1๊ฐœ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํƒ€์ž„ ์•„์›ƒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ์ž„๊ณ„์ ์€ ํ•ด๋‹น ์‹œ์ ์˜ ํ˜ผ์žก ์œˆ๋„์˜ ์‚ฌ์ด์ฆˆ์˜ 1/2๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

 

๋น ๋ฅธ ์žฌ์ „์†ก(Fast Retransmit)์€ 3 Duplicate ACK ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์†ก์‹ ์ธก์€ ์ฆ‰์‹œ ํŒจํ‚ท์„ ์žฌ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด ํ˜ผ์žกํ•œ ์ƒํ™ฉ์ด๋ผ ํŒ๋‹จํ•˜๊ณ  ํ˜ผ์žก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋Š” ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ์ž„๊ณ„์ ์€ ํ•ด๋‹น ์‹œ์ ์˜ ํ˜ผ์žก ์œˆ๋„์˜ ์‚ฌ์ด์ฆˆ์˜ 1/2๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

๋น ๋ฅธ ํšŒ๋ณต(Fast Recovery)์€ ๋น ๋ฅธ ์žฌ์ „์†ก๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ 3 Duplicate ACK  ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์‹œ์ ์˜ ํ˜ผ์žก ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์˜ 1/2๋กœ ๋Œ์•„๊ฐ„ ํ›„ ACK ํŒจํ‚ท์„ ๋ฐ›์œผ๋ฉด 1๊ฐœ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ 3 Duplicate ACK๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์˜ ์ค‘๊ฐ„ ํŒจํ‚ท์ด ์œ ์‹ค๋˜์–ด ํŠน์ • ACK ํŒจํ‚ท์„ ์„ธ๋ฒˆ ๋ฐ›๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅธ ์žฌ์ „์†ก ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด NACK ํŒจํ‚ท์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ์žฌ์ „์†ก ํƒ€์ด๋จธ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์žฌ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

2. TCP

TCP๋Š” ํ˜ผ์žก ์ œ์–ด๋ฅผ ์œ„ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ธฐ๋ณธ์ด ๋˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

Tahoe๋Š” ๋Š๋ฆฐ ์‹œ์ž‘, ํ˜ผ์žก ํšŒํ”ผ, ๋น ๋ฅธ ์žฌ์ „์†ก์ด ํ˜ผํ•ฉ๋œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ€์„œ ๋Š๋ฆฐ ์‹œ์ž‘์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

Reno๋Š” Tahoe, ๋น ๋ฅธ ํšŒ๋ณต์ด ํ˜ผํ•ฉ๋œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. 3 Duplicate ACK ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ํ•ด๋‹น ์‹œ์ ์˜ ํ˜ผํ•ฉ ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์˜ 1/2๋กœ ๋Œ์•„๊ฐ„ ํ›„ ACK ํŒจํ‚ท์„ ๋ฐ›์œผ๋ฉด 1๊ฐœ์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ  ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋””ํดํŠธ ์‚ฌ์ด์ฆˆ๋กœ ๋Œ์•„๊ฐ€์„œ ๋Š๋ฆฐ ์‹œ์ž‘์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ์—์„œ๋„ 3 Dupilicate ACK ๋ฌธ์ œ๋ณด๋‹ค ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ๋ฅผ ๋” ํฐ ํ˜ผ์žก์œผ๋กœ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค.

 

 

๊ทธ ์™ธ ๋ฐœ์ „๋œ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹๋“ค์ด ์žˆ์œผ๋ฉฐ OS ๋ฒ„์ „์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” CUBIC, Compound TCP, BBR ๋“ฑ์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

TCP ํŒจํ‚ท์„ ์ง์ ‘ ๋ณด๋ฉด ์—ฌ์œ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋Š” Client 131,840byte, Server 66,816byte๋กœ ์‹œ์ž‘ํ•˜์˜€์ง€๋งŒ ๊ณ„์† ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Bytes in flight๋Š” ํ˜„์žฌ ACK ํŒจํ‚ท์„ ๋ฐ›์ง€ ๋ชปํ•œ ํŒจํ‚ท ์šฉ๋Ÿ‰, Calculated window size๋Š” ์Šค์ผ€์ผ๋ง๊นŒ์ง€ ๊ณ„์‚ฐ๋œ ์—ฌ์œ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์ž…๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ  : https://www.wikiwand.com/en/TCP_congestion_control

 

TCP congestion control | Wikiwand

Transmission Control Protocol uses a network congestion-avoidance algorithm that includes various aspects of an additive increase/multiplicative decrease scheme, along with other schemes including slow start and congestion window, to achieve congestion avo

www.wikiwand.com

https://evan-moon.github.io/2019/11/26/tcp-congestion-control/

 

์‚ฌ์ด ์ข‹๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ๋‚˜๋ˆ  ์“ฐ๋Š” ๋ฐฉ๋ฒ•, TCP์˜ ํ˜ผ์žก ์ œ์–ด

ํ˜ผ์žก ์ œ์–ด๋ž€, ๋ง ๊ทธ๋Œ€๋กœ ๋„คํŠธ์›Œํฌ์˜ ํ˜ผ์žก ์ƒํƒœ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๊ทธ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์„ ์ด์•ผ๊ธฐํ•œ๋‹ค. ๋„คํŠธ์›Œํฌ๋Š” ์›Œ๋‚™ ๊ด‘๋Œ€ํ•œ ๋ธ”๋ž™๋ฐ•์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ์–ด๋””์„œ ์–ด

evan-moon.github.io