[CS] Computer Networking - Transport layer(2): rdt
๐์ปดํจํฐ ๋คํธ์ํฌ ์ ๊ณต ์์ ์ ๋ฆฌ
rdt(Reliable Data Tranfer)
RDT(Reliable Data Tranfer): ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ ์กํ๊ธฐ ์ํ ๊ท์น ๋ฐ ๋ฉ์ปค๋์ฆ์ ์งํฉ
- application layer์
์ฅ์์๋ ๋ณด๋ด๊ธฐ๋ง ํ๋ฉด reliable์ด ๋ณด์ฅ ๋๋ค๊ณ ์๊ฐํ๋ค.
- transport layer์์๋ reliable์ ๋ณด์ฅํด์ฃผ์ด์ผํ๋ค
rdt protocol
์ ๊ตฌํํ ๋, ํต์ ์ฑ๋์ ์ ๋ขฐ์ฑ ์ฌ๋ถ๊ฐ ํ๋กํ ์ฝ์ complex๋ฅผ ๊ฒฐ์ ํ๋ค.- ex: ๋ง์ฝ ๋ฐ์ดํฐ ์ ์ก ์ฑ๋์ด ์ ๋ขฐ์ ์ด์ง ์๋ค๋ฉด ๋ฐ์ดํฐ ํจํท์ด ์์๋๊ฑฐ๋ ์ ์ค๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
- ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ
rdt protocol
์ ๋ ๋ณต์กํ๊ณ ์์ ์ ์ธ ์ค๋ฅ ์ ์ด ๋ฐ ์ฌ์ ์ก ๋งค์ปค๋์ฆ์ด ํ์
APP - TP - NET
์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋์ด์์ผ๋ TP๋ APP, NET ์ด๋ ๊ฒ ๋๋ง ์ํตํ ์ ์์ผ๋ฉด ๋๋ค.- ์ด ์ํต์ ์ํ ์ธํฐํ์ด์ค๋ ๋ค์๊ณผ ๊ฐ๋ค:
rdt_send()
: APP์ด ๋ค๋ฅธ APP์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ ๋ Trans ๊ณ์ธต์๊ฒ data๋ฅผ ๋ด์ rdt_send(data)๋ฅผ ํธ์ถudt_send()
: ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ Trans๋ ๋ฐ์ดํฐ์ Trans header๋ฅผ ๋ถ์ด๊ณ ์๋ ๊ณ์ธต์ธ NET ๊ณ์ธต์ผ๋ก udt_send(packet)๋ฅผ ํ๋คrdt_rcv()
: receiver์ NET์ rdt_rcv(packet)๋ก ๋ฐ์์จ ํจํท๋ฅผ ์ฌ๋ ค๋ณด๋ธ๋คdeliver_data()
: Trans๋ Trans header๋ฅผ ๋นผ๊ณ ์จ์ ํ ๋ฐ์ดํฐ๋ง์ deliver_data()๋ก APP์๊ฒ ์ฌ๋ ค๋ณด๋ธ๋ค
rdt 1.0
๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์์ค๋ ์ผ์ด๋์ง ์๊ณ ๋นํธ ์๋ฌ๋ ์ผ์ด๋์ง ์๋ reliable ๋คํธ์ํฌ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์ โ ์์ค์ ์ํ ์ฌ์ ์ก ์์ฒญ์ ํ ํ์๋ ์๊ณ , ์๋ฌ ์ฒดํน๋ ์ํด๋ ๋๋ค
FSM์ sender์ receiver ์ ์ฅ ์ด๋ ๊ฒ 2๊ฐ๋ฅผ ๊ณ ๋ ค
sender๋ APP๊ณ์ธต์์
rdt_send(data)
๊ฐ ๋ฐ์ โ Trans ๊ณ์ธต์์ packet์ ์์ฑ โ ๋ง๋ packet์ NET ๊ณ์ธต์ผ๋ก ์ ์ก(udt_send(packet)
)
receiver๋rdt_rcv(packet)
์ผ๋ก ํจํท์ด ์ฌ๋ผ์ค๋ฉด ํจํท์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ โ ์ถ์ถํ data๋ฅผdeliver_data(data)
๋ก APP ๊ณ์ธต์๊ฒ ์ฌ๋ ค๋ณด๋
rdt 2.0
์ด๋ฒ์ ๋คํธ์ํฌ์์ bit error๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ๊ฐ์ . ์ด๋ค action์ ํด์ผํ ๊น?
โ Checksum ํ๋๋ก ํ์ ๊ฐ๋ฅ ๊ทธ๋ผ bit error๊ฐ ๋ฐ์ํ์ ๋ ์ฌ์์ฒญ์ ์ด๋ป๊ฒ ๊ตฌํํด์ผํ๋๊ฐ?
sender์ธก์์ ๋ฐ์ดํฐ๊ฐ ์ ๋ณด๋ด์ก๋์ง ํ์ ํด์ผํจ ์ด๋ ack(aknownledgements)์ nak(negative aknownledgements)๋ก ํ๋จ
- receiver๊ฐ ์ ๋ฐ์์ผ๋ฉด sender์๊ฒ
ACK
์ ์ก, ๋ชป๋ฐ์์ผ๋ฉดNAK
์ ์ก - sender๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , receiver์๊ฒ์ ์ค๋ ack๋๋ nak๋ฅผ ๊ธฐ๋ค๋ฆผ
- ACK๊ฐ ์ค๋ฉด ํด๋น ๋ฐ์ดํฐ ์ ๋ฌด ์ข ๋ฃ, NAK๊ฐ ์ค๋ฉด ๋ฐ์ดํฐ ์ฌ์ ์ก ํ ๋ค์ ack๋๋ nak ๊ธฐ๋ค๋ฆผ
- rdt2.0์์์ ์๋ก์ด ๋งค์ปค๋์ฆ(rdt 1.0๊ณผ ๋น๊ต)
โ์๋ฌ ๊ฐ์ง
โํผ๋๋ฐฑ
: receiver๊ฐ sender์๊ฒ ACK,NAK ์ ์ก์ผ๋ก ํผ๋๋ฐฑ
ACK, NAK์๋ bit error๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋?
๊ทธ๊ฒ rdt 2.1
rdt 2.1
๊ทธ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ก ํ๋ฉด ๋๋๊ฐ? โ receiver๋ ์ ์ก๋ ๊ฒฐ๊ณผ๊ฐ ์ด๋ฏธ ์๋๊ฑด์ง ๋ชจ๋ฆ(์ค๋ณต ํจํท ๊ตฌ๋ถ X) โ duplicate ๊ฐ๋ฅ์ฑ ์์
โ duplicate ํด๊ฒฐ ๋ฐฉ๋ฒ:
- sender๋ ACK, NAK์์ corrupt๊ฐ ์ผ์ด๋๋ฉด ํจํท ์ฌ์ ์ก
- sender๋ ๊ฐ๊ฐ์ ํจํท์ sequence number๋ฅผ ๋ถ์
- receiver๋ ๋ฐ์ ํจํท์ด ์๋๊ฒ์ด๋ฉด ๋ฒ๋ฆฌ๊ณ ์๊ฒ์ด๋ฉด ์ฒ๋ฆฌํด์ค(ACK/NAK์ ๋ฌด์กฐ๊ฑด ๋ณด๋)
โ error ACK/NAKs ์ฒ๋ฆฌํ๊ธฐ = duplicate ๋ฌธ์ ์ ํด๊ฒฐ์ ์ํด sequence number ์ด์ฉ
sender์ FSM
- sender๋ ํจํท์ 0, 1์ด๋ผ๋ sequence #๋ฅผ ํฌํจ
- 0์ ๋ณด๋ผ ์ฐจ๋ก, 1์ ๋ณด๋ผ ์ฐจ๋ก๋ฅผ ๊ตฌ๋ถํ๋ ์ํ๋ก ๋ถ๋ฆฌ
- 0 ์ ์ก ์ํ โ
make_pkt
์ 0์ ๋ด์ ํจํท์ ๋ง๋ค๊ณ ์ ์ก - 0๋ฒ ํจํท์ด ์ ๋์ฐฉํ๋์ง ๊ธฐ๋ค๋ฆฌ๋ ์ํ์ธ
wait for ACK or NAK 0
- ๋นํธ ์๋ฌ ํ๋จํ๋
corrupt()
ํจ์ ์ถ๊ฐ- ๋ง์ฝ ๋นํธ์๋ฌ๊ฐ ์๋ค๋ฉด ์ฌ์ ์ก
- ๋ฉ์ฉกํ ACK๋ผ๋ฉด 1์ ๋ณด๋ด์ผํ๋ ์ํ๋ก ์ง์
- ๋ฐ์ดํฐ ๋ด๋ ค์ค๋ฉด 1์ ๋ด์ ํจํท ์ ์ก
- ACK/NAK waiting
receiver์ FSM
- rdt2.1์์์ ์๋ก์ด ๋งค์ปค๋์ฆ(rdt 2์ ๋น๊ต) โ
ACK, NAK ํจํท ๋นํธ ์๋ฌ
,์ค๋ณต ํจํท ๋น๊ต
,์ค๋ณต ํจํท ๋ฒ๋ฆฌ๊ธฐ
๋์์ ์ถ๊ฐ
๊ทธ๋ผ ACK, NAK ๋ ๊ฐ ์ ๋ถ ํ์ํ ๊น?
ACK๋ง ์ฌ์ฉํด์ 2.1์ ๊ตฌํํ๋๊ฒ rdt 2.2
rdt 2.2
โ NAK ๋์ ACK๋ง ํ์ฉ - OK๋ฐ์ ๋ง์ง๋ง ํจํท์ ๋ํด ACK ๋ณด๋ด์ค โ receiver๊ฐ ACK๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ๋, ACK๋ฉ์์ง์ ํฌํจ๋ ์ํ์ค ๋ฒํธ๊ฐ receiver๊ฐ ๋ฐ์ ํจํท ์ค์์ ์ด๋ค ํจํท์ ACKํ๊ณ ์๋์ง ๋ช ํํ๊ฒ ํ์ํด์ผํ๋ค (=ACK์ sequence number ํฌํจํด์ ์ ์ก) โ ์ค๋ณต๋ ACK ๋ฐ์ผ๋ฉด ํ์ฌ ํจํท์ ์ ์กํจ
seq #0์ ๋ํ ๊ทธ๋ฆผ(1์ ์ซ์๋ง ๋ฐ๊พธ๋ฉด ๋จ)
sender
: 0๋ฒ ์ ์ก ํ ACK 0 wating ์ํ๋ก ์ ํ- ๋ง์ฝ ACK 1์ ๋ฐ๊ฒ๋์๋ค๋ฉด packet ์ฌ์ ์ก
- receiver: 0๋ฒ ํจํท ์์ โ ์ฒดํฌ์ฌ๊ณผ ํจ๊ป ACK 1์ ์ ์ก โ 1์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ก ์ ํ
- ๋ง์ฝ 0๋ฒ์ด ์ค๋ณต์ผ๋ก ์๋ค๋ฉด ACK 1์ ์ฌ์ ์ก
rdt 3.0
rdt 3.0: bit error๋ฟ๋ง ์๋๋ผ packet loss๊น์ง ๊ณ ๋ คํ protocol
โ๋ฐ์ดํฐ ํจํท๊ณผ ACK, NAK๋ ์์ค๋ ์ ์์
- sender๊ฐ ๋ณด๋ธ packet์ด loss๋ ๊ฒฝ์ฐ
- receiver๊ฐ ๋ณด๋ธ ACK๊ฐ loss๋ ๊ฒฝ์ฐ โ
๋ฌด์์ ๊ธฐ๋ค๋ฆด์ ์์ผ๋ timer๋ฅผ ๋ง๋ฆ
โ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์ฌ์ ์ก
- ์ด๊ธฐ์ํ: ํจํท ๋ง๋ค๊ณ ์ ์ก ํ ํ ํ์ด๋จธ ์์ํด์ ๋ค์ ์ํ๋ก ๋์ด๊ฐ
- ์๋๋ฐ ์ํ์ค ๋๋ฒ๊ฐ ๋ค๋ฅด๊ฑฐ๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ํ์ด๋จธ๋ ๊ทธ๋ฅ ํ๋ฌ๊ฐ๋๋ก ๋๋๊ณ ์ํ ์ ์ง
- ํ์์์์ด ๊ฑธ๋ฆฌ๋ฉด ์ฌ์ ์กํ๊ณ ํ์ด๋จธ ๋ค์ ์์ ํ๊ณ ์ํ ์ ์ง
- ACK์ด ์ ๋๋ก ์ค๋ฉด ํ์ด๋จธ ์คํํ๊ณ ๋ค์ ์ํ๋ก ๋์ด๊ฐ
(b), (c)์ ๊ฒฝ์ฐ timeout์ด ๋๋ฉด ๋ค์ ์ ์ํ
- (d)์ด๋ฏธ์ง
- timer๋ฅผ ์งง๊ฒํด์ ACK๊ฐ ์ค๊ธฐ์ ์ timeout๋ฐ์
- ์๋์ ํ์ง๋ง ๋ถํ์ํ ์ฌ์ ์ก์ผ๋ก duplicate๊ฐ ๋ง๋ค
- ๋ฐ๋ฉด timer๋ฅผ ๋๋ฌด ๊ธธ๊ฒํ๋ฉด loss ๋ฐ์ ์ ๋ณต๊ตฌ๊ฐ ์ค๋ ๊ฑธ๋ฆผ
- ์ ๋นํ timer๊ตฌํ์ด ์ค์
performance of rdt 3.0
rdt 3.0์ stop and wait
(timer์ ์์กด) ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ข์ง ์์
์ ์ก์๋ 1Gbps, ์ ํ์๋ 15ms, 8000bit์ ํจํท์ ๋ณด๋ธ๋ค, sender-receiver์ฌ์ด๊ฐ ํ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๋ค๊ณ ๊ฐ์
- ์ ์ก์๊ฐ : ํจํท ๋ด๋ณด๋ด๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ :
8 usec
- ์ ํ์๊ฐ : ํ ํจํท์ด ๋๊น์ง ๊ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ :
15ms
- ๋ณด๋ด๋๋ฐ ์ด ์๊ฐ = ์ ์ก์๊ฐ + ์ ํ์๊ฐ =
15.008ms
- ACK์ ๋นํธ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ก์๊ฐ ๋งค์ฐ ์๋ค๊ณ ํ๋จํด์ ๋ฌด์ํ๊ณ ์ ํ์๊ฐ๋ง ๊ณ ๋ ค
- ๋ฐ๋ผ์ ํจํท์ด ๊ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ + ACK์ด ์ค๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ = 15.008 + 15 =
30.008ms
- 8000๋นํธ ๋ณด๋ด๊ณ ACK ๋ฐ๋๋ฐ 30.008ms ์์
- ํจ์จ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๋ค. (ํจ์จ์ฑ์ด 1์ด ์ ์ผ ์ข์)
์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด pipelined protocols ์ฌ์ฉ
piplined protocols
ACK์ ์ ๋ฌด ์๊ด์์ด ๋ญํ ์ด๋ก ํจํท์ ์ ์กํ๊ณ ๊ทธ ๋ค์ ACK๋ญํ ์ด๋ฅผ ๋ฐ๋๋ค.
- ๋๊ฐ์ง ์ผ๋ฐ์ ์ธ ํ์ดํ๋ผ์ธ ํ๋กํ ์ฝ ํํ: go-Back-N, selective repeat
1. Go-Back-N(GBN)
: ์์๋ ํจํท์ ์ ์ธํ ๋ชจ๋ ํจํท์ด ์ฑ๊ณต์ ์ผ๋ก ์์ ๋์ด์ผ๋ง ๋ค์ ํจํท์ ์ ์กํ ์ ์๋ ํํ์ ํ์ดํ๋ผ์ธ ํ๋กํ ์ฝ
- sender๋ ์ต๋ n๊ฐ์ ํ์ธ๋์ง ์์ (unacked) ํจํท์ ํ์ดํ๋ผ์ธ ์์ ๊ฐ์ง๊ณ ์์
โ ์ด ๋ N์ window size - receiver๋
cumulative ack
๋ง์ ๋ณด๋ธ๋ค
โ ๋น ๊ณต๊ฐ์ด ์์ ๊ฒฝ์ฐ ํด๋น ํจํท์ ํ์ธํ์ง๋, ์๋ตํ์ง ์์ (ack ์ํจ) - sender๋ ๊ฐ์ฅ ์ค๋ ํ์ธ๋์ง ์์ ํจํท์ ๋ํ timer๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ๋ชจ๋ ํ์ธํ์ง ์์ ํจํท์ ๋ค์ ์ ์กํ๋ค.
2. Selective Repeat
: ํจํท ์์ค์ด ๋ฐ์ํด๋ ๋ค๋ฅธ ํจํท๋ค์ ๊ณ์ ์ ์ก๋ ์ ์์ โ ์ ์ก ์๊ฐ์ ์ต์ ํ
- sender๋ ์ต๋ n ๊ฐ์ ํ์ธ๋์ง ์์ ํจํท์ ๋ณด๋ผ ์ ์๋ค.
- receiver๋ ๊ฐ ํจํท์ ๋ํ
individual ack
์ ๋ณด๋ธ๋ค. - sender๋ ๊ฐ ํ์ธ๋์ง ์์ ํจํท์ ๋ํ ํ์ด๋จธ๋ฅผ ์ ์งํ๋ค.
โ ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด sender๋ ํด๋น ํ์ธ๋์ง ์์(unacked)ํจํท๋ง ์ฌ์ ์กํ๋ค.