์ง๋ ํฌ์คํธ์์๋ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก(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๊ฐ ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ ๋น๋ฐ์ ๋ฐ๋ก ํค๋์ ์๋ค.

- 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๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์กํ์ฌ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ค.
- Timeout: ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ ์ก ๋งค์ปค๋์ฆ. ACK๋ฅผ ๋ฐ๊ธฐ ์ ์ ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ํด๋น ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ ์กํ๋ค.
- Fast Retransmit (๋น ๋ฅธ ์ฌ์ ์ก): ์ค๊ฐ์ ํจํท ํ๋๊ฐ ์ ์ค๋๋ฉด, ์์ ์๋ ์ ์ค๋ ํจํท ๋ค์์ ํจํท๋ค์ ๋ฐ์ ๋๋ง๋ค ๊ณ์ํด์ ๋์ผํ ACK(์ ์ค๋ ํจํท์ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง)๋ฅผ ๋ณด๋ธ๋ค. ์ก์ ์๊ฐ ์ด ์ค๋ณต ACK(duplicate ACK)๋ฅผ 3๋ฒ ๋ฐ์ผ๋ฉด, ํ์์์์ด ๋ฐ์ํ๊ธฐ ์ ์ด๋ผ๋ โ์, ํจํท์ด ์ ์ค๋์๊ตฌ๋โ๋ผ๊ณ ํ๋จํ๊ณ ํด๋น ํจํท์ ์ฆ์ ์ฌ์ ์กํ๋ค.

๐ ํ๋ฆ ์ ์ด (Flow Control)
์ก์ ์๊ฐ ๋๋ฌด ๋นจ๋ฆฌ ๋ณด๋ด์ ์์ ์์ ๋ฒํผ๊ฐ ๋์ณ๋ฒ๋ฆฌ๋ฉด(overflow), ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฆด ์๋ฐ์ ์๊ณ ์ด๋ ์์ฒญ๋ ๋ญ๋น๋ค. ํ๋ฆ ์ ์ด๋ ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
์์ ์๋ TCP ํค๋์ Receive Window (rwnd) ํ๋๋ฅผ ํตํด ์์ ์ ๋ฒํผ์ ๋จ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ก์ ์์๊ฒ ๊ณ์ ์๋ ค์ค๋ค. ์ก์ ์๋ ์ด rwnd ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ์ง ์๋ ๋ฒ์ ๋ด์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.

๐ค ์ฐ๊ฒฐ ๊ด๋ฆฌ (Connection Management)
TCP๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ ๋ฐ๋์ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , ๋ฐ์ดํฐ ์ ์ก์ด ๋๋๋ฉด ์ฐ๊ฒฐ์ ํด์ ํ๋ค.
3-Way Handshake (์ฐ๊ฒฐ ์ค์ )
- [SYN] ํด๋ผ์ด์ธํธ โ ์๋ฒ: โ์ฐ๊ฒฐ ์์ฒญํ ๊ฒ!โ (SYN ๋นํธ = 1, ์์์ ์์ ๋ฒํธ
client_isn์ค์ ) - [SYN+ACK] ์๋ฒ โ ํด๋ผ์ด์ธํธ: โ์๊ฒ ์ด! ๋์ ์์ฒญ ์ ๋ฐ์๊ณ , ๋๋ ์ค๋น๋์ด!โ (SYN ๋นํธ = 1, ACK ๋นํธ = 1,
ack = client_isn + 1, ์๋ฒ๋ ์์์ ์์ ๋ฒํธserver_isn์ค์ ) - [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 ๋ฐฉ์)
- Timeout์ผ๋ก ๊ฐ์ง:

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์ ์๋๋ก ์ ์ฐจ ๋์ด๊ฐ๊ณ ์๋ค. ์ ์ก ๊ณ์ธต์ ํ์ ์ ํ์ฌ์งํํ์ด๋ค!