๐จ ์ ์ก ๊ณ์ธต์ ์ญํ ๊ณผ ์๋ฆฌ
์ ์ก ๊ณ์ธต(Transport Layer)์ ์๋ก ๋ค๋ฅธ ํธ์คํธ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์ค ๊ฐ์ ๋ ผ๋ฆฌ์ ํต์ (logical communication) ์ ์ ๊ณตํ๋ค. ์ค์ ๋ฐ์ดํฐ๋ ๋ผ์ฐํฐ์ ์ค์์น๋ฅผ ๊ฑฐ์ณ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ๋ฌ๋์ง๋ง, ์ ์ก ๊ณ์ธต ๋๋ถ์ ์ฐ๋ฆฌ๋ ๋ง์น ๋ ํ๋ก์ธ์ค๊ฐ ์ง์ ์ฐ๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
- ์ก์ ์ธก(Sender): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์์ง๋ฅผ ์ธ๊ทธ๋จผํธ(segment) ๋จ์๋ก ๋ถํ ํ๊ณ , ๋คํธ์ํฌ ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๋ค.
- ์์ ์ธก(Receiver): ๋คํธ์ํฌ ๊ณ์ธต์์ ๋ฐ์ ์ธ๊ทธ๋จผํธ๋ฅผ ์๋์ ๋ฉ์์ง๋ก ์ฌ์กฐ๋ฆฝํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ ๋ฌํ๋ค.
์ธํฐ๋ท์ ์ ์ก ๊ณ์ธต์๋ ๋ํ์ ์ผ๋ก ๋ ๊ฐ์ง ํ๋กํ ์ฝ์ด ์๋ค: TCP์ UDP.
1. ์ ์ก ๊ณ์ธต vs ๋คํธ์ํฌ ๊ณ์ธต
๋ ๊ณ์ธต์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํต์ ์ ๋์์ ์ด๋๊น์ง ๋ณด๋๋์ ์๋ค.
- ์ ์ก ๊ณ์ธต (Transport Layer): ํ๋ก์ธ์ค ๋ ํ๋ก์ธ์ค(process-to-process) ์ ๋ ผ๋ฆฌ์ ํต์ ์ ๋ด๋นํ๋ค.
- ๋คํธ์ํฌ ๊ณ์ธต (Network Layer): ํธ์คํธ ๋ ํธ์คํธ(host-to-host) ์ ํต์ ์ ๋ด๋นํ๋ค.
์ฆ, ๋คํธ์ํฌ ๊ณ์ธต์ IP ์ฃผ์๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅธ ์ปดํจํฐ๊น์ง ๋ฐฐ๋ฌํ๋ ํ๋ฐฐ ๊ธฐ์ฌ๋ผ๋ฉด, ์ ์ก ๊ณ์ธต์ ๊ทธ ์ปดํจํฐ ์์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ณด๊ณ ์ฌ๋ฐ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ (ํ๋ก์ธ์ค)์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ง๋ฐฐ์๊ณผ ๊ฐ๋ค.

2. Multiplexing & Demultiplexing
ํ๋์ ํธ์คํธ์์๋ ์ฌ๋ฌ ๊ฐ์ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์คํ๋ ์ ์๋ค. ์ ์ก ๊ณ์ธต์ ์ด๋ป๊ฒ ์ด ๋ง์ ํ๋ก์ธ์ค๋ค์๊ฒ์ ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ๋ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅธ ํ๋ก์ธ์ค์๊ฒ ์ ๋ฌํ ์ ์์๊น? ๋ฐ๋ก ๋ค์คํ(Multiplexing) ์ ์ญ๋ค์คํ(Demultiplexing) ๋๋ถ์ด๋ค.
- ๋ค์คํ (Multiplexing) @ ์ก์ ์ธก: ์ฌ๋ฌ ์์ผ(ํ๋ก์ธ์ค)์ผ๋ก๋ถํฐ ์จ ๋ฐ์ดํฐ๋ค์ ๋ชจ์ ์ ์ก ๊ณ์ธต ํค๋๋ฅผ ๋ถ์ฌ์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ง๋ ๋ค.
- ์ญ๋ค์คํ (Demultiplexing) @ ์์ ์ธก: ์์ ๋ ์ธ๊ทธ๋จผํธ์ ํค๋ ์ ๋ณด(ํนํ ํฌํธ ๋ฒํธ)๋ฅผ ๋ณด๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅธ ์์ผ(ํ๋ก์ธ์ค)์ผ๋ก ์ ๋ฌํ๋ค.

์ญ๋ค์คํ๋ ์ด๋ป๊ฒ ๋์ํ ๊น?
ํธ์คํธ๋ IP ๋ฐ์ดํฐ๊ทธ๋จ์ ์์ ํ๋ฉด, ๊ทธ ์์ ๋ด๊ธด ์ ์ก ๊ณ์ธต ์ธ๊ทธ๋จผํธ๋ฅผ ๊บผ๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๊ทธ๋จผํธ ํค๋์ ์๋ ์ถ๋ฐ์ง/๋ชฉ์ ์ง IP ์ฃผ์์ ์ถ๋ฐ์ง/๋ชฉ์ ์ง ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ธ๊ทธ๋จผํธ๋ฅผ ์ ๋ฌํ ์ ํํ ์์ผ์ ์ฐพ์๋ธ๋ค.
๋น์ฐ๊ฒฐํ ์ญ๋ค์คํ (UDP)
UDP ์์ผ์ ๋ชฉ์ ์ง IP ์ฃผ์์ ๋ชฉ์ ์ง ํฌํธ ๋ฒํธ, ๋จ ๋ ๊ฐ์ง ์ ๋ณด๋ก ์๋ณ๋๋ค. ์์ ๋ UDP ์ธ๊ทธ๋จผํธ์ ๋ชฉ์ ์ง ํฌํธ ๋ฒํธ๋ฅผ ๋ณด๊ณ ํด๋นํ๋ ์์ผ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ์ด ๋๋ฌธ์ ์ถ๋ฐ์ง IP๋ ํฌํธ๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ํธ์คํธ๋ก๋ถํฐ ์จ ๋ฐ์ดํฐ๊ทธ๋จ์ด๋ผ๋, ๋ชฉ์ ์ง IP์ ํฌํธ ๋ฒํธ๋ง ๊ฐ๋ค๋ฉด ๋ชจ๋ ๊ฐ์ UDP ์์ผ์ผ๋ก ์ ๋ฌ๋ ์ ์๋ค.

์ฐ๊ฒฐ ์งํฅํ ์ญ๋ค์คํ (TCP)
TCP ์์ผ์ (์ถ๋ฐ์ง IP, ์ถ๋ฐ์ง ํฌํธ ๋ฒํธ, ๋ชฉ์ ์ง IP, ๋ชฉ์ ์ง ํฌํธ ๋ฒํธ), ์ด ๋ค ๊ฐ์ง ์ ๋ณด์ ์กฐํฉ์ผ๋ก ์๋ณ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ธ๊ทธ๋จผํธ๋ ์ด ๋ค ๊ฐ์ง ๊ฐ์ด ๋ชจ๋ ์ผ์นํ๋ ํน์ ์์ผ์ผ๋ก๋ง ์ ๋ฌ๋๋ค. ๋๋ถ์ ์๋ฒ๋ ๋์์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ TCP ์ฐ๊ฒฐ์ ์ ์งํ ์ ์๋ค.

3. UDP: User Datagram Protocol
UDP๋ โ์๋ฌด๊ฒ๋ ๊พธ๋ฏธ์ง ์์(no-frills)โ ์ธํฐ๋ท ํ๋กํ ์ฝ์ด๋ค. IP๊ฐ ์ ๊ณตํ๋ ์ต์ ๋ ธ๋ ฅ(best-effort) ์๋น์ค ์ธ์ ๊ฑฐ์ ์๋ฌด๋ฐ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ์ง ์๋๋ค.
- ๋น์ ๋ขฐ์ (Unreliable): ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์๋, ์์๊ฐ ๋ค๋ฐ๋์ด ๋์ฐฉํ ์๋ ์๋ค.
- ๋น์ฐ๊ฒฐํ(Connectionless): ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ ํธ๋์ ฐ์ดํน ๊ฐ์ ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์ด ์๋ค. ๊ฐ ์ธ๊ทธ๋จผํธ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
๊ทธ๋ผ UDP๋ ์ ์ธ๊น? ๐ค
- ๋น ๋ฅธ ์ฐ๊ฒฐ: ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์ด ์์ผ๋ฏ๋ก ์ง์ฐ์ด ์ ๋ค.
- ๋จ์ํจ: ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ ํ์๊ฐ ์์ด ๊ตฌ์กฐ๊ฐ ๊ฐ๋จํ๋ค.
- ์์ ํค๋: TCP๋ณด๋ค ํค๋ ํฌ๊ธฐ๊ฐ ์์ ์ค๋ฒํค๋๊ฐ ์ ๋ค.
- ํผ์ก ์ ์ด ์์: TCP์ฒ๋ผ ๋คํธ์ํฌ ํผ์ก์ ๋ฐ๋ผ ์ ์ก ์๋๋ฅผ ์กฐ์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ต๋ํ ๋น ๋ฅด๊ฒ ์ ์กํ ์ ์๋ค.
์ด๋ฌํ ํน์ง ๋๋ถ์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ, DNS, SNMP, ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ์ HTTP/3 ๋ฑ์์ UDP๋ฅผ ์ฌ์ฉํ๋ค. ๋ฌผ๋ก ์ ๋ขฐ์ฑ์ด ํ์ํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
UDP ์ธ๊ทธ๋จผํธ ๊ตฌ์กฐ์ ์ฒดํฌ์ฌ

UDP ํค๋๋ ์ถ๋ฐ์ง/๋ชฉ์ ์ง ํฌํธ ๋ฒํธ, ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ ์ฒดํฌ์ฌ(Checksum)์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์ฒดํฌ์ฌ์ ์ ์ก ์ค ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ๊ฒ์ถํ๊ธฐ ์ํ ๊ฐ์ด๋ค.
- ์ก์ ์ธก: ์ธ๊ทธ๋จผํธ์ ๋ด์ฉ์ 16๋นํธ ์ ์์ ๋์ด๋ก ๊ฐ์ฃผํ๊ณ ๋ชจ๋ ๋ํ ํ, 1์ ๋ณด์๋ฅผ ์ทจํด ์ฒดํฌ์ฌ ํ๋์ ์ ์ฅํ๋ค. (์ด๋ ๋ฐ์ํ๋ ์ฌ๋ฆผ(carry)์ ๋ค์ ๋ํด์ค๋ค.)
- ์์ ์ธก: ๋ฐ์ ์ธ๊ทธ๋จผํธ๋ก ๋๊ฐ์ด ์ฒดํฌ์ฌ์ ๊ณ์ฐํ์ฌ, ์์ ๋ ์ฒดํฌ์ฌ ๊ฐ๊ณผ ๋น๊ตํ๋ค. ๊ฐ์ด ๋ค๋ฅด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
4. ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก (RDT)
UDP์ ๋ฌ๋ฆฌ TCP๋ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ณด์ฅํ๋ค. ์ด๋ป๊ฒ ์ ๋ขฐํ ์ ์๋ ์ฑ๋(e.g., IP) ์์์ ๋ฐ์ดํฐ์ ์์ค์ด๋ ์ค๋ฅ ์์ด ์๋ฒฝํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์๊น? ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก(Reliable Data Transfer, RDT) ํ๋กํ ์ฝ์ ์๋ฆฌ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฐ์ ์์ผ๋ณด์.

rdt 2.0: ์ค๋ฅ ๊ฒ์ถ๊ณผ ํผ๋๋ฐฑ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ์์ ์๊ฐ ํจํท์ ์ ๋ฐ์๋์ง, ์๋๋ฉด ์ค๋ฅ๊ฐ ์์๋์ง ์ก์ ์์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
- ACK (Acknowledgements): โํจํท ์ ๋ฐ์์ด!โ ๋ผ๋ ๊ธ์ ์ ์ ํธ.
- NAK (Negative Acknowledgements): โํจํท์ ์ค๋ฅ๊ฐ ์์ด!โ ๋ผ๋ ๋ถ์ ์ ์ ํธ.
์ก์ ์๋ ํจํท์ ๋ณด๋ด๊ณ ACK๋ NAK๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. NAK๋ฅผ ๋ฐ์ผ๋ฉด ํด๋น ํจํท์ ์ฌ์ ์กํ๊ณ , ACK๋ฅผ ๋ฐ์ผ๋ฉด ๋ค์ ํจํท์ ๋ณด๋ธ๋ค. ์ด ๋ฐฉ์์ Stop-and-Wait๋ผ๊ณ ํ๋ค.

ํ์ง๋ง ๋ง์ฝ ACK/NAK ๋ฉ์์ง ์์ฒด์ ์ค๋ฅ๊ฐ ์๊ธด๋ค๋ฉด? ์ก์ ์๋ ์ค๋ณต๋ ํจํท์ ๋ณด๋ผ ์๋ ์๊ณ , ์์ ์๋ ์ด๋ฅผ ๊ตฌ๋ถํ ๋ฐฉ๋ฒ์ด ์๋ค. ๐ฑ
rdt 2.1 & 2.2: ์์ ๋ฒํธ์ NAK-free
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ๋ฒํธ(Sequence Number)๋ฅผ ๋์ ํ๋ค. ์ก์ ์๋ ๊ฐ ํจํท์ 0, 1, 0, 1โฆ ์์ผ๋ก ๋ฒํธ๋ฅผ ๋ถ์ธ๋ค. ์์ ์๋ ์ด ๋ฒํธ๋ฅผ ๋ณด๊ณ ์ค๋ณต๋ ํจํท์ธ์ง ์๋์ง ํ๋จํ์ฌ ์ฒ๋ฆฌ(๋๋ ํ๊ธฐ)ํ ์ ์๋ค.

๋ ๋์๊ฐ, rdt 2.2์์๋ NAK๋ฅผ ์์จ ์ ์๋ค. ์์ ์๋ NAK๋ฅผ ๋ณด๋ด๋ ๋์ , ๋ง์ง๋ง์ผ๋ก ์ ์์ ์ผ๋ก ์์ ํ ํจํท์ ACK๋ฅผ ๋ค์ ๋ณด๋ธ๋ค. ์ก์ ์ ์ ์ฅ์์ ์ค๋ณต๋ ACK๋ฅผ ๋ฐ๋ ๊ฒ์ โ๋ฐฉ๊ธ ๋ณด๋ธ ํจํท์ ๋ฌธ์ ๊ฐ ์๊ฒผ๊ตฌ๋โ๋ผ๋ ์ ํธ(NAK)์ ๊ฐ์ผ๋ฏ๋ก, ํด๋น ํจํท์ ์ฌ์ ์กํ๋ฉด ๋๋ค. ์ด๊ฒ์ด TCP๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.

rdt 3.0: ํจํท ์์ค ์ฒ๋ฆฌ
๋ง์ฝ ํจํท์ด๋ ACK๊ฐ ์์ ์์ค(loss) ๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ก์ ์๋ ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ด๋จธ(Timer) ๋ฅผ ์ฌ์ฉํ๋ค.
์ก์ ์๋ ํจํท์ ๋ณด๋ผ ๋ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ , ์ผ์ ์๊ฐ(timeout) ๋ด์ ACK๊ฐ ๋์ฐฉํ์ง ์์ผ๋ฉด ํจํท์ด ์์ค๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ฌ์ ์กํ๋ค. ๋ง์ฝ ๋จ์ํ ์ง์ฐ๋ ๊ฒ์ด์๋ค๋ฉด ์ค๋ณต ์ ์ก์ด ๋ฐ์ํ์ง๋ง, ์์ ๋ฒํธ ๋๋ถ์ ์์ ์๋ ์ค๋ณต์ ์ฒ๋ฆฌํ ์ ์๋ค.

์ด Stop-and-Wait ๋ฐฉ์์ rdt 3.0์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ์ง๋ง, ํ ๋ฒ์ ํจํท ํ๋์ฉ๋ง ์ฒ๋ฆฌํ๋ฏ๋ก ์ฑ๋์ ์ด์ฉ๋ฅ (utilization)์ด ๋งค์ฐ ๋ฎ๋ค๋ ๋จ์ ์ด ์๋ค.

์ด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ํ์ดํ๋ผ์ด๋(Pipelining) ์ด๋ฉฐ, ์ด๋ ๋ค์ TCP ํํธ์์ ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ๋ ๊ฒ์ด๋ค.
์ ์ก ๊ณ์ธต์ ๋ณต์กํ ์๋ฆฌ๋ฅผ ํ๋์ฉ ์์๊ฐ๋ ๊ณผ์ ์ด ํฅ๋ฏธ๋กญ๋ค. ์ ๋ขฐ์ฑ ์๋ ํต์ ์ ์ํด ์ ๋ง ๋ง์ ์ฅ์น๋ค์ด ์จ์ด์๋ค.