RDT(Reliable Data Transfer) ๋ณต์ต
์ง๋ ์๊ฐ์ ํ์ตํ RDT์ ์ฃผ์ ํน์ง๋ค:
- Cumulative ACK
- ํน์ ์ํ์ค ๋ฒํธ๊น์ง์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ๋ฌ๋์์์ ํ์ธํ๋ ๋ฐฉ์
- Fast Retransmit
- ํ์ด๋จธ ๋ง๋ฃ ์ ์ ๋์ผํ ACK๊ฐ 3๊ฐ ์ฐ์์ผ๋ก ๋์ฐฉํ๋ฉด (์ด 4๊ฐ) ํด๋น ์ธ๊ทธ๋จผํธ๊ฐ ์ ์ค๋์๋ค๊ณ ํ๋จ
- ์ฆ์ ์ฌ์ ์ก์ ์ํ
- ๋์ ํ์์์ ์ค์
- ํต์ ์ํฉ์ ๋ฐ๋ผ ํ์ด๋จธ ๊ฐ์ ๋์ ์ผ๋ก ์กฐ์
- ํ๋ฆ ์ ์ด(Flow Control)
- ์์ ์์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋ง์ถฐ ์ก์ ์๋๋ฅผ ์กฐ์ ํ๋ ๋ฉ์ปค๋์ฆ
์ฌ๊ธฐ์ ๋ณต์ต
TCP๋ ์ด์์ฒด์ ์ปค๋์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์์ผ API๋ฅผ ํตํด ํ๋ก์ธ์ค๊ฐ TCP ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ค. ๋คํธ์ํฌ ๊ฐ ๊ณ์ธต์ ์์ ๊ณ์ธต์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
ํ๋ฆ ์ ์ด(Flow Control)
๊ธฐ๋ณธ ๋์ ์๋ฆฌ
TCP์์ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ก์ธ์ค๋ก ์ ๋ฌํ๋ ์์ ์ ์ ์ ์ผ๋ก ํ๋ก์ธ์ค์ ๊ฒฐ์ ์ ๋ฌ๋ ค ์๋ค. ํ๋ก์ธ์ค๊ฐ read()
์์คํ
์ฝ์ ํธ์ถํด์ผ๋ง TCP ์์ ๋ฒํผ์ ๋ฐ์ดํฐ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ผ๋ก ์ ๋ฌ๋๋ค.
๋ง์ฝ ํ๋ก์ธ์ค๊ฐ read()
ํธ์ถ์ ์์ฃผ ํ์ง ์์ผ๋ฉด:
- ์์ ๋ฒํผ์ ๋ฐ์ดํฐ๊ฐ ์ง์์ ์ผ๋ก ์ถ์
- ๋ฒํผ ํฌํ ์ ์ถ๊ฐ ์ธ๊ทธ๋จผํธ ์ ์ค ์ํ ๋ฐ์
์์ ์๋์ฐ(Receive Window)
์์ ์๋ ์์ ์ ์์ ๋ฒํผ ์ฌ์ ๊ณต๊ฐ ์ ๋ณด๋ฅผ ์ก์ ์์๊ฒ ์ ๋ฌํ๋ค. ์ด๊ฒ์ด ์์ ์๋์ฐ์ด๋ฉฐ, TCP ํค๋์ Window ํ๋์ ํฌํจ๋๋ค.
์ก์ ์๋ ์์ ์๋์ฐ ํฌ๊ธฐ ์ด๋ด์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ฌ ์์ ์์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
ํต์ฌ: ์๋์ฐ ํฌ๊ธฐ๋ ์์ ์์ ์ํด ๊ฒฐ์ ๋๋ฉฐ, ์ด๋ ์ํ์ค ๋ฒํธ๊ฐ ์ก์ ์์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒ๊ณผ ๋์กฐ์ ์ด๋ค.
๋ฐ๋๋ฝ ์ํฉ๊ณผ ํด๊ฒฐ์ฑ
TCP ์ธ๊ทธ๋จผํธ ์ ์ก ์กฐ๊ฑด
TCP ์ธ๊ทธ๋จผํธ๊ฐ ์ ์ก๋๋ ๊ฒฝ์ฐ:
- ํ๋ก์ธ์ค์
write()
ํธ์ถ๋ก ์ธํ ๋ฐ์ดํฐ ์ ์ก - ์์ ํ ์ธ๊ทธ๋จผํธ์ ๋ํ ACK ์๋ต ์ ์ก
๋ฐ๋๋ฝ ์๋๋ฆฌ์ค
์ํฉ: ์์ ์์ ๋ฒํผ๊ฐ ํฌํ ์ํ โ ์ก์ ์๊ฐ ์ ์ก ์ค๋จ โ ์์ธก ๋ชจ๋ ์๋๋ฐฉ์ ์๋ต ๋๊ธฐ
๋ฌธ์ ์ :
- ์ก์ ์: ์์ ์๋์ฐ ๊ฐฑ์ ์ ์ํด ๋๊ธฐ
- ์์ ์: ์ ์กํ ๋ฐ์ดํฐ๊ฐ ์์ด ์๋ต ์ธ๊ทธ๋จผํธ ์์
์๋์ฐ ํ๋ก๋ธ(Window Probe)
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์์ ์๋์ฐ๊ฐ 0์์ ํต์ง๋ฐ์ ์ก์ ์๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ํฌ๊ธฐ์ ์๋์ฐ ํ๋ก๋ธ ์ธ๊ทธ๋จผํธ ์ ์ก
- ํฌ๊ธฐ: TCP ํค๋(20๋ฐ์ดํธ) + ๋ฐ์ดํฐ 1๋ฐ์ดํธ = 21๋ฐ์ดํธ
- ๋ชฉ์ : ์์ ์์ ์๋์ฐ ์ํ ํ์ธ
์ธ๊ทธ๋จผํธ ํฌ๊ธฐ ์ต์ ํ
์ธ๊ทธ๋จผํธ ํฌ๊ธฐ์ ๋๋ ๋ง
ํฐ ์ธ๊ทธ๋จผํธ์ ์ฅ์ :
- ์ ์ ์ธ๊ทธ๋จผํธ ์๋ก ํจ์จ์ ์ ์ก
- ๊ฐ ์ธ๊ทธ๋จผํธ๋น ์ค๋ฒํค๋ ์ต์ํ
ํฐ ์ธ๊ทธ๋จผํธ์ ๋จ์ :
- ์ ์ค ์ ์ฌ์ ์ก ๋น์ฉ ์ฆ๊ฐ
- ์์ ๋ฐ์ดํฐ ์ ์ก ์ ์ง์ฐ ๋ฐ์
๋ค์ด๊ธ ์๊ณ ๋ฆฌ์ฆ(Nagle Algorithm)
์ ์ก ์กฐ๊ฑด ์ค ํ๋๊ฐ ๋ง์กฑ๋ ๋๊น์ง ๋ฒํผ์ ๋ฐ์ดํฐ ์ถ์ :
- ์ต๋ ์ธ๊ทธ๋จผํธ ํฌ๊ธฐ(MSS) ๋งํผ ๋ฐ์ดํฐ ์ถ์
- ์ด์ ์ธ๊ทธ๋จผํธ์ ๋ํ ACK ์์
- ํ์ด๋จธ ๋ง๋ฃ
๋์ ์์: ๋ฐ์ดํฐ [0,1,2,3,4]
๊ฐ ์์ ๋:
- ์ฒ์ 0๋ฒ ์ธ๊ทธ๋จผํธ ์ ์ก
- ACK ์์ ์: ์ถ์ ๋ ๋ฐ์ดํฐ(์:
[1,2]
) ์ฆ์ ์ ์ก - ACK ๋ฏธ์์ ์: ํ์ด๋จธ ๋ง๋ฃ ํ 0๋ฒ ์ธ๊ทธ๋จผํธ ์ฌ์ ์ก
- MSS ๋๋ฌ ์: ACK์ ๋ฌด๊ดํ๊ฒ ์ ์ก
์ฐ๊ฒฐ ๊ด๋ฆฌ(Connection Management)
3-Way Handshake (์ฐ๊ฒฐ ์ค์ )
1๋จ๊ณ: ํด๋ผ์ด์ธํธ โ ์๋ฒ (SYN)
- SYN bit = 1
- ์ํ์ค ๋ฒํธ = x (์์๊ฐ)
2๋จ๊ณ: ์๋ฒ โ ํด๋ผ์ด์ธํธ (SYN-ACK)
- SYN bit = 1
- ์ํ์ค ๋ฒํธ = y (์์๊ฐ)
- ACK ๋ฒํธ = x + 1
3๋จ๊ณ: ํด๋ผ์ด์ธํธ โ ์๋ฒ (ACK)
- SYN bit = 0
- ACK ๋ฒํธ = y + 1
- ์ด ๋จ๊ณ๋ถํฐ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
์ฐ๊ฒฐ ์ข ๋ฃ (Connection Termination)
1๋จ๊ณ: ํ๋ก์ธ์ค close() ํธ์ถ โ FIN ๋ฉ์์ง ์ ์ก
2๋จ๊ณ: ์๋๋ฐฉ์ FIN์ ๋ํ ACK ์๋ต + ์๋๋ฐฉ๋ FIN ์ ์ก
3๋จ๊ณ: ๋ง์ง๋ง ACK ์ ์ก
์ค์: FIN ๊ตํ์ด ์๋ฃ๋์ด๋ TCP ์ฐ๊ฒฐ์ด ์ฆ์ ์ข ๋ฃ๋์ง ์๋๋ค. ์ฐ๊ฒฐ ์ค์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฐฉํฅ ํ์ธ ์ ์ฐจ๊ฐ ํ์ํ๋ค.