๐ฟ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ด๋?
์ปดํจํฐ ๋คํธ์ํฌ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ณ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋ฅผ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ด๋ผ๊ณ ํ๋ค. ์ค์ ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ค๋ฅ๊ฐ ์๊ธฐ๊ฑฐ๋, ๋ฐ์ดํฐ๊ฐ ์์ ์ฌ๋ผ์ง๋ ์ผ์ด ์์ฃผ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์, ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ํ๋กํ ์ฝ(์ฝ์๋ ๊ท์น)์ด ํ์ํ๋ค.
์ด ์ ๋ขฐ์ฑ ์๋ ์ ์ก์ ์์ฉ ๊ณ์ธต, ์ ์ก ๊ณ์ธต, ๋งํฌ ๊ณ์ธต์์ ๋ชจ๋ ์ค์ํ ์ญํ ์ ํ๋ค.
โ ๏ธ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ
- ์์ (Bit-error)
- ๋ฐ์ดํฐ๊ฐ ์ ์ก ์ค์ ์๋ชป ๋ฐ๋๋ ๊ฒฝ์ฐ์ด๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ฒดํฌ์ฌ(checksum): ๋ณด๋ด๋ ์ชฝ์์ ๊ณ์ฐํ ์ซ์๋ฅผ ๊ฐ์ด ๋ณด๋ด๊ณ , ๋ฐ๋ ์ชฝ๋ ๊ณ์ฐํด์ ๋น๊ตํ๋ค.
- ๊ฐ์ผ๋ฉด ์ ์, ๋ค๋ฅด๋ฉด ์์๋์๋ค๊ณ ํ๋จํ๋ค.
- ์์ ์๊ฐ ์ด์ ์๋ค๊ณ ํ๋จ๋๋ฉด ACK (Acknowledgement), ์ฆ “์ ๋ฐ์๋ค”๋ผ๋ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
- ํจํท ์์ค
- ๋ฐ์ดํฐ๊ฐ ์์ ์ค๊ฐ์์ ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ์ด๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํ์ด๋จธ(timer): ๋ณด๋ด๋ ์ชฝ์ด ์ผ์ ์๊ฐ ๋์ ์๋ต์ด ์์ผ๋ฉด “์, ์์ค๋๊ตฌ๋!“๋ผ๊ณ ํ๋จํ๊ณ ์ฌ์ ์กํ๋ค.
- ์ํ์ค ๋ฒํธ(sequence number): ๊ฐ ๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ์์ ๋ณด์ฅ ๋ฐ ์ค๋ณต ๋ฐฉ์ง์ ์ฌ์ฉํ๋ค.
๐ง๐ป ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์
์ก์ ์ ์ธก (send side)
- rdt_send(): ์์ ๊ณ์ธต(์: ์ ํ๋ฆฌ์ผ์ด์ )์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ํจ์์ด๋ค.
- udt_send(): ์ค์ ๋ก ํจํท์ ๋คํธ์ํฌ์ ๋ณด๋ธ๋ค. ํ์ง๋ง ์ด ๋คํธ์ํฌ๋ ์ ๋ขฐํ ์ ์๋ค (์ฆ, ์ค๋ฅ๋ ์์ค์ด ์์ ์ ์๋ค).
์์ ์ ์ธก (receive side)
- rdt_rcv(): ํจํท์ด ๋์ฐฉํ๋ฉด ์๋์ผ๋ก ๋ถ๋ฆฌ๋ ํจ์์ด๋ค.
- deliver_data(): ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์์ ๊ฒฝ์ฐ, ์ด๋ฅผ ์์ ๊ณ์ธต์ผ๋ก ๋๊ฒจ์ฃผ๋ ํจ์์ด๋ค.
๐ฌ rdt ํ๋กํ ์ฝ์ ๋ฐ์ ๊ณผ์
1. rdt1.0 – ์์ ๋ฌด๊ฒฐ
- ๊ฐ์ : ๋คํธ์ํฌ๊ฐ ์์ ๋ฌด๊ฒฐํ๋ค. ์ค๋ฅ๋ ์๊ณ ์์ค๋ ์๋ค.
- ๋์:
- ์ก์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํฌ์ฅํด์ ๋ณด๋ด๊ณ
- ์์ ์๋ ์ด๋ฅผ ์ ๋ฐ์์ ๋ค์ ํ์ด ์์ ๊ณ์ธต์ ๋๊ฒจ์ค๋ค.
- ๋ฌธ์ ์ : ์ค์ ์ธ์์ ์ด๋ ๊ฒ ์๋ฒฝํ์ง ์๋ค. ๊ทธ๋์ ๋ ๋ฐ์ ์ด ํ์ํ๋ค.
2. rdt2.0 – ๋นํธ ์ค๋ฅ๊ฐ ์์
- ๊ฐ์ : ํจํท์ ๋นํธ๊ฐ ์ ์ก ์ค ๋ฐ๋ ์ ์๋ค.
- ์ถ๊ฐ ๊ธฐ๋ฅ
- ์ฒดํฌ์ฌ์ ์ฌ์ฉํด์ ์ค๋ฅ๋ฅผ ๊ฐ์ง
- receiver๊ฐ ๋ณด๋ธ ํจํท์ ๋ํด ๋ค์ ์ค ํ๋๋ฅผ ์๋ต:
- ACK: ๋ฌธ์ ์์
- NAK: ์ค๋ฅ ์์ → ์ก์ ์๊ฐ ์ฌ์ ์ก
โ ๋ฌธ์ ์
- ACK๋ NAK ์์ฒด๊ฐ ์์๋๋ฉด ์ด๋ป๊ฒ ํ ๊น?
- sender๋ receiver์ ์ํ๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ ์กํ ์๋ฐ์ ์๋ค.
- ์ด๋ก ์ธํด ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ํด๊ฒฐ์ฑ : ์ํ์ค ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
3. rdt2.1 – ์ค๋ณต๊น์ง ์ฒ๋ฆฌํ๋ ํ๋กํ ์ฝ
- ๊ธฐ๋ฅ:
- ์ํ์ค ๋ฒํธ 0, 1์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ฌ์ฉํ๋ค.
- receiver๋ ์ค๋ณต๋ ์ํ์ค ๋ฒํธ๋ ๋ฌด์ํ๋ค.
- ACK๋ NAK๊ฐ ์์๋์ด๋ ์ฌ์ ์ก์ ํตํด ์์ ํ๊ฒ ๋ณต๊ตฌํ ์ ์๋ค.
- ์ด ํ๋กํ ์ฝ์ ์ผ๋ช
“Stop-and-Wait” ๋ฐฉ์์ด๋ค
- ํ๋์ ํจํท์ ๋ณด๋ด๊ณ
- ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉฐ
- ๊ทธ๋ค์ ํจํท์ ๋ณด๋ธ๋ค.
์ก์ ์ ๋์ ํ๋ฆ
- ์ํ์ค ๋ฒํธ 0 ํจํท์ ๋ง๋ ๋ค → ์ ์กํ๋ค
- ACK/NAK ์์ ์ ๊ธฐ๋ค๋ฆฐ๋ค
- ์์์ด๊ฑฐ๋ NAK๋ฉด: ๊ฐ์ ํจํท ์ฌ์ ์ก
- ์ ์ ACK๋ฉด: ์ํ์ค ๋ฒํธ 1๋ก ๋์ด๊ฐ๋ค
- ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ณ์ ๋ฐ๋ณตํ๋ค
์์ ์ ๋์ ํ๋ฆ
- ์ํ์ค ๋ฒํธ 0์ ๊ธฐ๋ค๋ฆฐ๋ค
- ์ค๋ฅ๊ฐ ์์ผ๋ฉด NAK
- ์ค๋ฅ ์๊ณ ์ํ์ค ๋ง์ผ๋ฉด: ๋ฐ์ดํฐ ์ ๋ฌ + ACK
- ์ค๋ฅ ์๊ณ ์ํ์ค ํ๋ฆฌ๋ฉด: ์ค๋ณต → ACK๋ง ๋ณด๋
- ๋ค์์ผ๋ก ์ํ์ค 1์ ๊ธฐ๋ค๋ฆผ…(๋์ผ ๊ณผ์ )
rdt2.2 – NAK ์์ด๋ ๋๋ ํ๋กํ ์ฝ
- NAK์ ์์ ๊ณ , ACK๋ง์ผ๋ก๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ฒ์ ์ด๋ค.
- ํต์ฌ ์์ด๋์ด:
- ์์ ์๊ฐ ์ด์ ์ํ์ค ๋ฒํธ์ ACK๋ฅผ ๋ณด๋ด๋ฉด, ์ก์ ์๋ “๋ด๊ฐ ๋ณด๋ธ ๊ฒ ์ค๋ณต๋๊ตฌ๋” ํ๊ณ ์ฌ์ ์ก์ ๋ฉ์ถ๋ค.
โจ ์ ๋ฆฌ
| ๋ฒ์ | ํน์ง | ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์ |
| rdt1.0 | ์ค๋ฅ ์์ | ๋จ์ ์ ์ก |
| rdt2.0 | ๋นํธ ์ค๋ฅ ์์ | ์ฒดํฌ์ฌ + ACK/NAK |
| rdt2.1 | ์ค๋ณต ๋ฌธ์ ์์ | ์ํ์ค ๋ฒํธ ์ฌ์ฉ |
| rdt2.2 | NAK ์ ๊ฑฐ | ACK๋ง์ผ๋ก ์ฒ๋ฆฌ |
rdt3.0: ํจํท ์์ค๊น์ง ๊ณ ๋ คํ ์ ๋ขฐ์ ์ ์ก ํ๋กํ ์ฝ
โ๏ธ๊ธฐ์กด rdt2.x์ ํ๊ณ
- rdt2.0๊ณผ rdt2.1์ ๋นํธ ์ค๋ฅ๋ ์ฒ๋ฆฌํ ์ ์์์ง๋ง, ํจํท ์์ค์ ๊ณ ๋ คํ์ง ์์๋ค.
- ์ฆ, ํจํท์ด ์์ ๋์ฐฉํ์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ์๋ต๋ ์์ด์ ์ก์ ์๋ ์๋ฌด๊ฒ๋ ๋ชป ํจ.
- ๋ฐ๋ผ์ ํ์์์(Timeout) ๊ฐ๋ ์ด ๋์ ๋์ด์ผ ํ๋ค.
โ rdt3.0 ์ฃผ์ ์์ด๋์ด
- ACK/NAK ์์ ๋๋ ์๋ต ์์(์์ค) → ์ก์ ์ ํ์ด๋จธ ๋ง๋ฃ → ์ฌ์ ์ก
- ์ฌ์ ํ stop-and-wait ๋ฐฉ์ ์ฌ์ฉ: ํ ๋ฒ์ ํ๋์ ํจํท๋ง ์ ์ก ํ ์๋ต ๊ธฐ๋ค๋ฆผ
์๋ ๋ฐฉ์
- ์ก์ ์ (Sender)
- ์์ ๊ณ์ธต์์ ๋ฐ์ดํฐ ์์ → ํจํท ์์ฑ ๋ฐ ์ ์ก
- ํ์ด๋จธ ์์
- ACK ์์ ์: ๋ค์ ํจํท ์ค๋น, ํ์ด๋จธ ์ ์ง
- ํ์์์ ๋ฐ์ ์: ๋์ผ ํจํท ์ฌ์ ์ก, ํ์ด๋จธ ์ฌ์์
- ์์ ์ (Receiver)
ํจํท ๋ฐ์ ๋...
- ์์๋์๊ฑฐ๋ ์์ ๋ฒํธ๊ฐ ์์๊ณผ ๋ค๋ฅด๋ฉด: ์ค๋ณต๋ ํจํท์ผ๋ก ํ๋จ → ์ด์ ACK ์ฌ์ ์ก
- ์ ์์ ์ด๋ฉด: ๋ฐ์ดํฐ ์ ๋ฌ + ACK ์ ์ก
๐จ ๋นํจ์จ์ฑ ๋ฌธ์
- ํ ๋ฒ์ ํ๋์ ํจํท๋ง ์ ์กํด์ผ ํด์ ๋์ญํญ ๋ญ๋น ์ฌํจ
- ์: RTT๊ฐ ๊ธธ๋ฉด ๋ฐ์ดํฐ ํ๋ ๋ณด๋ด๊ณ ์ค๋ ๊ธฐ๋ค๋ฆผ
๐ ํ์ดํ๋ผ์ธ ์ ์ก ๊ธฐ๋ฒ
๐ก ๊ฐ์
- ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ํ ๋ฒ์ ์ฌ๋ฌ ํจํท์ ๋ณด๋ด๋ ๋ฐฉ์
- ์ด ๋ฐฉ์์ ํ์ดํ๋ผ์ด๋(pipelining)์ด๋ผ ๋ถ๋ฅธ๋ค
๋ํ์ ์ธ ๋ ๊ฐ์ง ํ๋กํ ์ฝ
| ์ด๋ฆ | ํน์ง |
| Go-Back-N (GBN) | ์ค๋ฅ ๋ฐ์ ์, ๊ทธ ์ดํ ๋ชจ๋ ํจํท์ ์ฌ์ ์ก |
| Selective Repeat (SR) | ์ค๋ฅ ๋ ํด๋น ํจํท๋ง ์ฌ์ ์ก, ํจ์จ์ |
๐ค Go-Back-N (GBN)
๊ธฐ๋ณธ ๊ฐ๋
- ์ก์ ์๋ ์๋์ฐ(window) ์์ ์๋ ์ฌ๋ฌ ํจํท์ ์ ์ก
- ์์ ์๋ ์์๋๋ก๋ง ์์ ํ๋ฉฐ, ์์ ์ ๋ง๋ ํจํท์ ๋ชจ๋ ๋ฒ๋ฆผ
๐ ๋์ ํ๋ฆ
์ก์ ์
- ๊ธฐ๋ํ๋ ACK ๋ฒํธ๋ฅผ ์ถ์ (base)
- ์๋์ฐ ๋ฒ์ ์์์ ์๋ก์ด ํจํท ์ ์ก ๊ฐ๋ฅ
- ํ์ด๋จธ๋ base์ ๋ํด์๋ง ์กด์ฌ (์ฒซ ์ ์ก ํจํท ๊ธฐ์ค)
- ํ์์์ ๋ฐ์ ์ → base ์ดํ ๋ชจ๋ ํจํท ์ฌ์ ์ก
์์ ์
- ์์๋๋ก๋ง ์์ฉ (in-order)
- ์์๊ฐ ๋ง์ง ์๋ ํจํท → ๋ฌด์, ACK๋ ์ ์ก ์ ํจ (or ๋ง์ง๋ง ์ ์ ํจํท ACK๋ง ๋ณด๋)
๐จ ๋จ์
- ํ๋๋ผ๋ ์์ค๋๋ฉด ๋ง์ ํจํท์ ์ฌ์ ์ก → ๋นํจ์จ์
โ Selective Repeat (SR)
ํต์ฌ ์์ด๋์ด
- ๊ฐ ํจํท๋ง๋ค ๋ณ๋ ํ์ธ ๋ฐ ์ฌ์ ์ก
- ์์ ์๋ ์์ ์๊ด์์ด ๋ฒํผ์ ์ ์ฅํ๊ณ ACK ์ ์ก ๊ฐ๋ฅ
๐ง ๋์ ๋ฐฉ์
์ก์ ์
- ์ฌ๋ฌ ํจํท ์ ์ก ๊ฐ๋ฅ
- ๊ฐ ํจํท๋ง๋ค ๊ฐ๋ณ ํ์ด๋จธ ๊ด๋ฆฌ
- ACK ๋ฐ์ง ๋ชปํ ํจํท๋ง ๊ฐ๋ณ์ ์ผ๋ก ์ฌ์ ์ก
์์ ์
- ์์ ๋ง์ง ์์๋ ์์ ํ ์ ์ฅ
- ๋ชจ๋ ์์ ํ๋ฉด ์์ ๊ณ์ธต์ ์์๋๋ก ์ ๋ฌ
- ์์ ์ฆ์ ACK ์ ์ก
๐ฏ ์ฅ์
- GBN๋ณด๋ค ํจ์จ์
- ์์ค์ด ์๊ฒจ๋ ํด๋น ํจํท๋ง ์ฌ์ ์กํ๋ฉด ๋จ
โ ๏ธ ๊ตฌํ ๋ณต์ก์ฑ ์ฆ๊ฐ
- ๋ฒํผ ๊ด๋ฆฌ ๋ณต์ก
- ๊ฐ ํจํท๋ง๋ค ํ์ด๋จธ ํ์
- ์ค๋ณต ์์ ๋ฐฉ์ง, ์๋์ฐ ํฌ๊ธฐ ์ ํ ๋ฑ ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ ๋ง์
์๋์ฐ ํฌ๊ธฐ ์ฃผ์์
- SR์์ ์๋์ฐ ํฌ๊ธฐ๋ N์ด๋ผ๋ฉด, ์์ ๋ฒํธ ๊ณต๊ฐ์ ์ต์ 2N์ด์ด์ผ ํจ
- ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๋ณต ํจํท๊ณผ ์ ํจํท์ ๊ตฌ๋ถ ๋ชปํจ
๐ ์ ๋ฆฌ
| ํญ๋ชฉ | rdt3.0 | GBN | SR |
| ๋ค์ค ํจํท ์ ์ก | โ | โ | โ |
| ์์ ์ฒ๋ฆฌ | โ | โ | โ |
| ์์ค ์ฒ๋ฆฌ | โ | โ | โ |
| ์ฌ์ ์ก ๋ฐฉ์ | ์ ์ฒด ์ฌ์ ์ก | ์ ์ฒด ์ฌ์ ์ก | ๊ฐ๋ณ ์ฌ์ ์ก |
| ๊ตฌํ ๋ณต์ก๋ | ๋ฎ์ | ๋ณดํต | ๋์ |
| ํจ์จ์ฑ | ๋ฎ์ | ๋ณดํต | ๋์ |
'CS > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋คํธ์ํฌ] TCP Congestion Control (0) | 2025.04.22 |
|---|---|
| [๋คํธ์ํฌ] Congestion Contol (0) | 2025.04.22 |
| [๋คํธ์ํฌ] UDP (1) | 2025.04.20 |
| [๋คํธ์ํฌ] multiplexing and demultiplexing (0) | 2025.04.20 |
| [๋คํธ์ํฌ] Web Cache (0) | 2025.04.19 |