TCP ์ฐ๊ฒฐ๊ณผ ์ ๋ขฐ์ ๋ฐ์ดํฐ ์ ์ก
TCP ์ฃผ์ ํน์ง
TCP ์ฐ๊ฒฐ์ ์ฃผ์ ํน์ง๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
point-to-point: ๋ฐ์ ์์ ์์ ์๋ ๊ณ ์ ์ ์์ผ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๋ค.
send & receive buffers: ์์๋ก ์ ๋ณด๋ค์ ๋ณด๊ดํ๋ ๋ฒํผ๊ฐ ๋ณด๋ผ ๋์ ๋ฐ์ ๋ ๋ ๊ฒฝ์ฐ ๋ค ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ค ๊ฐ์ง๊ณ ์๋ค.
reliable in-order byte stream: ์์ค ์์ด reliableํ๊ณ , ์ ์ก๋ ์์๋๋ก in-order๋ก ์ ํํ ์ ๋ฌํ๋ค.
pipelined: ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํจํท์ ์ ์กํ ์ ์๋ค.
full duplex data: ํ ์ฐ๊ฒฐ์์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐฉํฅ์ผ๋ก ์ ์ก๋ ์ ์๋ค.
flow control: ๋ฐ์ ์๋ ์์ ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์๋๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ณด๋ด์ง ์๋๋ค.
๊ณ์ธต๋ณ ๋ฐ์ดํฐ ์ ์ก ๋จ์
์์ฉ๊ณ์ธต์์ ๋ฐ์ดํฐ ์ ์ก ๋จ์๋ย ๋ฉ์์ง๋ผ๊ณ ํ๋ค (์ด๊ฒ๋ ํค๋์ ๋ฐ์ดํฐ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค). ์ด ๋ฉ์์ง๊ฐ ์์ผ์ ํตํด TCP๋ก ๋ด๋ ค์ค๋ฉดย ์ธ๊ทธ๋จผํธย ์์ ๋ฐ์ดํฐ ๋ถ๋ถ์ ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ธ๊ทธ๋จผํธ๋ ๋คํธ์ํฌ ๊ณ์ธต์ ์ ์ก ๋จ์์ธย ํจํท์ ๋ฐ์ดํฐ ๋ถ๋ถ์ ๋ค์ด๊ฐ๊ณ , ์ด ํจํท์ ๋ค์ ๋งํฌ ๊ณ์ธต์ ์ ์ก ๋จ์์ธย ํ๋ ์์ ๋ฐ์ดํฐ ๋ถ๋ถ์ ๋ค์ด๊ฐ๋ค.
๊ฐ ๊ณ์ธต์ ๋ํด ์์๋ณผ ๋ ๋ฐ์ดํฐ ๋ถ๋ถ์ด ์๋๋ผ ์ฌ์คย ํค๋๊ฐ ์ค์ํ๋ค. ํค๋ ๋ถ๋ถ์ ํด๋น ๊ณ์ธต์ด ํ๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
TCP ์ธ๊ทธ๋จผํธ ๊ตฌ์กฐ
ํค๋ ํ๋๋ค
๊ฐ ํ๋๋ค์ ์ ๋ถ 32๋นํธ ๋จ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
Source Port (16bit) | Destination Port (16bit)
Sequence number (32bit)
Acknowledgement number (32bit)
Data Offset (4bit) | Reserved (6bit) | Flags (6bit) | Window (16bit)
Checksum (16bit) | Urgent Pointer (16bit)
์์ ํ๋๋ค์ด ํ ์ค๋ง๋ค ๊ฐ๊ฐ 32๋นํธ์ฉ ํผ์ ํน์ ๋๋ ์ ์ฐจ์งํ๊ณ ์๋ค.
์ํ์ค ๋ฒํธ์ ACK ๋ฒํธ
์ํ์ค ๋ฒํธ (Sequence Number)
TCP์์ ์ฌ์ฉํ๋ ์ํ์ค ๋ฒํธ๋ '๋ฐ์ดํฐ ๋ถ๋ถ์ ์ ์ผ ์ฒซ ๋ฐ์ดํธ์ ์์๋ฒํธ' ๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์์ง ์์ฒด๊ฐ 100๋ฐ์ดํธ ํฌ๊ธฐ๋ผ๊ณ ํ์ (0๋ถํฐ 99๋ฒ ๋ฐ์ดํธ๊น์ง ์๋ค). ํ ๋ฒ์ 10๋ฐ์ดํธ์ฉ ์ ์ก์ ํ ์ ์๋ค๊ณ ํ๋ฉด:
- ์ฒซ ๋ฒ์งธ ์ ์ก: ์ํ์ค ๋ฒํธ 0 (0-9๋ฒ ๋ฐ์ดํธ)
- ๋ ๋ฒ์งธ ์ ์ก: ์ํ์ค ๋ฒํธ 10 (10-19๋ฒ ๋ฐ์ดํธ)
- ์ธ ๋ฒ์งธ ์ ์ก: ์ํ์ค ๋ฒํธ 20 (20-29๋ฒ ๋ฐ์ดํธ)
- ...
ACK ๋ฒํธ (Acknowledgement Number)
ACK ๋ฒํธ์ ๊ฒฝ์ฐ์๋ ์ ์์ ์ผ๋ก ๋ฐ์ ๋ค์ ๋ฐ์ดํธ ๋ฒํธ๊ฐ ๋๋ค. ์์์ 0-9๋ฒ ๋ฐ์ดํธ๋ฅผ ์ ์กํ๊ณ ์์ ์๊ฐ ์ด์์์ด ์ ๋ฐ์๋ค๋ฉด ACK ๋ฒํธ๋ 10๋ฒ์ด ๋๋ค.
์ฐธ๊ณ : TCP ํต์ ์ค์๋ ์์ธก ๋ชจ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ค์ด๊ธฐ ๋๋ฌธ์, ACK ํผ๋๋ฐฑ์ ๋ณด๋ผ ๋๋ ๋ฐ๋ ์ฆ์ ๋ณด๋ด์ง ์๊ณ ์๋๋ฐฉ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ผ์ด ์์ ์๋ ์์ผ๋ 500ms ์ ๋ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค๋ฅธ ์ธ๊ทธ๋จผํธ์ piggybackํด์ ๋ณด๋ธ๋ค๊ฑฐ๋, ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ทธ๋ฅ ์๋ต๋ง ๋ณด๋ธ๋ค๊ณ ํ๋ค.
์ ๋ขฐ์ ๋ฐ์ดํฐ ์ ์ก (Reliable Data Transfer)
์ ์์ ํ์์์ (Adaptive Timeout)
์ด์ ์ ํ์ด๋จธ์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ๋ค๋ค์๋ค. ๋๋ฌด ๋น ๋ฅด๋ฉด ๋คํธ์ํฌ ์ฌ์ฉ๋์ด ๋ง์์ง ๊ฒ์ด๊ณ , ๋๋ฌด ๋๋ฆฌ๋ฉด ์ ์ก ๊ณผ์ ์์ฒด๊ฐ ๋๋ ค์ง ๊ฒ์ด๋ค. ๊ทธ๋์ ์ ์ ํ ํ์์์์ ์ฐพ๋ ๊ฒ ์ค์ํ๋ฐ ๋ค์๊ณผ ๊ฐ์ด ์ธก์ ํ๋ค๊ณ ํ๋ค.
RTT ์ถ์ ๊ณต์:
EstimatedRTT = (1-ฮฑ)*EstimatedRTT + ฮฑ*SampleRTT (typically, ฮฑ = 0.125)
DevRTT = (1-ฮฒ)*DevRTT + ฮฒ*|SampleRTT-EstimatedRTT| (typically, ฮฒ = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT
ํ ๋ฒ ์ ์ก๋ ์ธ๊ทธ๋จผํธ์ ๋ํ ์๋ต์๊ฐ์ธ SampleRTT๋ฅผ ๊ธฐ์กด ํ๊ท ์ ๋ํด์ ๋ค์ ํ๊ท ๊ฐ์ ๋ธ๋ค (๊ทธ๋ฐ๋ฐ ๊ทธ๋ฅ 1/n ํ๊ท ์ด ์๋๋ผ ์ต๊ทผ RTT์ ํฐ ๊ฐ์ค์น๋ฅผ ์ฃผ๋ฉด์ ํ๊ท ์ ๋ธ๋ค).
๊ทธ๋ฆฌ๊ณ DevRTT (๋ณ๋์ฑ)๋ฅผ ์ธก์ ํด์ ์ฌ๊ธฐ์ 4๋ฐฐ์ ๋ง์ง์ ๋ถ์ฌ์ ํ์์์ ์๊ฐ์ ์ ํ๋ค. ์ฆย ํต์ ์ค์๋ ๊ณ์ ํ์์์ ๊ฐ์ด ๋ณํ๋ค๋ ์ ์ด ์ค์ํ๋ค.
๋น ๋ฅธ ์ฌ์ ์ก (Fast Retransmit)
์ด์ ์๊ฐ์ RDT๋ฅผ ๊ตฌํํ๋ ํ๋กํ ์ฝ์ ๊ณ ์ํด๋ดค๋ค: Go-back-N ๋ฐฉ์๊ณผ Selective Repeat. TCP๋ ๊ธฐ๋ณธ์ ์ผ๋ก GBN์ cumulative ACK๋ฅผ ์ฌ์ฉํ๋ค.
๊ธฐ์กด GBN์ ๋ฌธ์ ์ :
๊ธฐ์กด GBN์์ ๋จ์ ์ ์ค๋ณต๋ ์ธ๊ทธ๋จผํธ๋ฅผ ๊ณ์ ๋ฐ์์ผ ํ๋ค๋ ๊ฒ์ด์๋ค. ์๋ฅผ ๋ค์ด 100๊ฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฐ์์ ๋ 10๋ฒ ์ธ๊ทธ๋จผํธ๋งย ์ ์ค๋๊ณ , ๊ทธ๋ ๋ค๋ ํผ๋๋ฐฑ ACK(9)๋ฅผ ์ ์กํ๋ฉด ๋ฐ์ ์๋ 10๋ฒ๋ถํฐ ๋ค์ 100๊ฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ค์ ์ ์กํ๋ค. ๊ทธ๋ฌ๋ฉด 11๋ฒ๋ถํฐ 99๋ฒ๊น์ง 90๊ฐ ๊ฐ๋์ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฌ์ ์กํ๋ ๋คํธ์ํฌ๊ฐ ๋ญ๋น๋๋ ์
์ด๋ค.
TCP์ Fast Retransmit ๋ฐฉ์:
๊ทธ๋์ TCP์์๋ ์ด๋ป๊ฒ ํ๋๋๋ฉด, ๋ง์ฐฌ๊ฐ์ง๋ก 10๋ฒ ์ธ๊ทธ๋จผํธ๋ง ์ ์ค๋๋ค๋ฉด:
- 10๋ฒ ์ธ๊ทธ๋จผํธ๊ฐ ์ ์ค๋ ํ 11๋ฒ, 12๋ฒ, ... ์ธ๊ทธ๋จผํธ๊ฐ ๊ณ์ ๋์ฐฉํ๋ค
- ํ์ง๋ง 10๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๊ณ์ํด์ ACK(10)์ ๋ณด๋ธ๋ค (ACK(9)๊ฐ ์๋๋ค)
- ๋ฐ์ ์ ์ธก์์๋ 0-99๋ฒ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋๊ณ ํ์์์ ์๊ฐ์ด ๋๊ธฐ ์ ๊น์ง ๊ณ์ํด์ ACK(10)์ ๋ฐ๊ฒ ๋๋ค
- ๊ทธ๋ฌ๋ฉด ๋๋จธ์ง ์ธ๊ทธ๋จผํธ๋ ์ ์์ ์ผ๋ก ๋์ฐฉํ๋ค๊ณ ๊ฐ์ ํ๊ณ 10๋ฒ ์ธ๊ทธ๋จผํธ๋งย ๋ค์ ๋ณด๋ธ๋ค
Fast Retransmit ๊ท์น:ย ๊ถ๊ณ ์ฌํญ์ ๋ฐ๋ฅด๋ฉด ์ค๋ณต๋ ACK๋ฅผ 3๋ฒ ๋ฐ์ผ๋ฉด, ์ฆ ์๋ ACK๊น์ง ์ด 4๊ฐ์ ๊ฐ์ ์๋ต์ ๋ฐ์ผ๋ฉด ํด๋น ์ธ๊ทธ๋จผํธ๋ง ์ฌ์ ์กํ๋ค.
์ด๋ฐ ๋ฐฉ์์ย Fast Retransmit์ด๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ํตํด ํ์์์์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ๋น ๋ฅด๊ฒ ์ ์ค๋ ํจํท์ ์ฌ์ ์กํ ์ ์์ด์ ์ ์ก ํจ์จ์ฑ์ด ํฌ๊ฒ ํฅ์๋๋ค.
์ ๋ฆฌ
TCP๋ ์ด์ฒ๋ผ ๋ค์ํ ๋ฉ์ปค๋์ฆ์ ํตํด ์ ๋ขฐ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ๋ณด์ฅํ๋ค:
- ์ ์์ ํ์์์: ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ํ์์์ ๊ฐ์ ์กฐ์
- Fast Retransmit: ์ค๋ณต ACK๋ฅผ ํตํด ๋น ๋ฅธ ์ค๋ฅ ๋ณต๊ตฌ
- Cumulative ACK: ์์ฐจ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ ๋ณด์ฅ
์ด๋ฌํ ํน์ง๋ค์ด ๊ฒฐํฉ๋์ด TCP๊ฐ ์ธํฐ๋ท์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ์ก ํ๋กํ ์ฝ์ด ๋ ์ ์์๋ ๊ฒ์ด๋ค.