rdt 2.1 - NUS Computing

Application
Transport
Network
Link
Physical
NUS.SOC.CS2105
Ooi Wei Tsang
you are
here
Application
Transport
(process-to-process)
Network
(unreliable, host-to-host)
NUS.SOC.CS2105
Ooi Wei Tsang
Transport
(process-to-process)
Network
(unreliable, host-to-host)
NUS.SOC.CS2105
Ooi Wei Tsang
Transport
(process-to-process)
Network
(unreliable, host-to-host)
NUS.SOC.CS2105
Ooi Wei Tsang
src port
dst port
:
NUS.SOC.CS2105
Ooi Wei Tsang
UDP vs TCP
NUS.SoC.CS2105
Ooi Wei Tsang
ConnectionOriented Socket
(Src Port, Src Addr,
Dest Port, Dest Addr)
NUS.SoC.CS2105
Ooi Wei Tsang
Connectionless
Socket
(Dest Addr, Dest Port)
NUS.SoC.CS2105
Ooi Wei Tsang
UDP Segment Header
src port
dst port
length
checksum
NUS.SOC.CS2105
Ooi Wei Tsang
UDP Checksum
0110011001100000
0101010101010101
NUS.SOC.CS2105
Ooi Wei Tsang
UDP Checksum
1011101110110101
1000111100001100
NUS.SOC.CS2105
Ooi Wei Tsang
UDP Checksum
0100101011000010
NUS.SOC.CS2105
Ooi Wei Tsang
UDP detects
errors
(no recovery)
NUS.SoC.CS2105
Ooi Wei Tsang
Reliable Data
Transfer
rdt1.0, rdt2.0, rdt3.0
NUS.SoC.CS2105
Ooi Wei Tsang
Application
rdt_send()
Transport
udt_send()
Network
NUS.SOC.CS2105
Ooi Wei Tsang
Application
deliver_data()
Transport
rdt_recv()
Network
Finite State Machine
Event
Action
NUS.SOC.CS2105
Ooi Wei Tsang
hungry
get up & eat
sleep
awake
stomach full
go back to bed
NUS.SOC.CS2105
Ooi Wei Tsang
rdt 1.0
underlying channel is reliable
NUS.SoC.CS2105
Ooi Wei Tsang
rdt 1.0 sender
wait
for call
NUS.SOC.CS2105
Ooi Wei Tsang
rdt_send(data)
pkt = make_pkt(data)
udt_send(pkt)
rdt 1.0 receiver
wait
for call
NUS.SOC.CS2105
Ooi Wei Tsang
rdt_recv(pkt)
extract(pkt, data)
deliver_data(data)
send data
send pkt
wait
for call
NUS.SOC.CS2105
Ooi Wei Tsang
recv pkt
deliver
wait
for call
rdt 2.0
channels with bit-errors
NUS.SoC.CS2105
Ooi Wei Tsang
ARQ : Automatic
Repeat reQuest
1. Error detection
2. Receiver feedback (ACK NAK)
3. Retransmission
NUS.SoC.CS2105
Ooi Wei Tsang
rdt 2.0 sender
wait
for call
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
ACK/NAK
rdt 2.0 receiver
wait
for call
NUS.SOC.CS2105
Ooi Wei Tsang
NUS.SOC.CS2105
Ooi Wei Tsang
Stop-and-Wait
NUS.SoC.CS2105
Ooi Wei Tsang
What if ACK/NAK
is corrupted?
NUS.SoC.CS2105
Ooi Wei Tsang
Idea : Retransmit
if ACK/NAK is
corrupted
NUS.SoC.CS2105
Ooi Wei Tsang
NUS.SOC.CS2105
Ooi Wei Tsang
rdt 2.1
channels with bit-errors
NUS.SoC.CS2105
Ooi Wei Tsang
rdt 2.1 sender
wait for
call 0
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
ACK/NAK 0
wait for
call 0
wait for
ACK/NAK 1
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
ACK/NAK 0
wait for
call 1
rdt 2.1 receiver
wait for
0
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
1
wait for
call 0
wait for
0
wait for
wait for
1
ACK/NAK 0
wait for
ACK/NAK 1
wait for
call 1
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
call 0
wait for
0
wait for
wait for
1
ACK/NAK 0
wait for
ACK/NAK 1
wait for
call 1
NUS.SOC.CS2105
Ooi Wei Tsang
rdt 2.2
NAK-free
NUS.SoC.CS2105
Ooi Wei Tsang
No NAK
Send ACK of last correctly
received packet instead
NUS.SoC.CS2105
Ooi Wei Tsang
rdt 3.0
lossy channels with bit-errors
NUS.SoC.CS2105
Ooi Wei Tsang
How to tell if a
packet is loss?
(can’t know for sure)
NUS.SoC.CS2105
Ooi Wei Tsang
Use Timeout
(may lead to dup. packets)
NUS.SoC.CS2105
Ooi Wei Tsang
NUS.SOC.CS2105
Ooi Wei Tsang
rdt 3.0 sender
wait for
call 0
NUS.SOC.CS2105
Ooi Wei Tsang
wait for
ACK 0
Alternating-bit
Protocol
NUS.SoC.CS2105
Ooi Wei Tsang
R = 6000 kbps
L = 1500 bytes
RTT = 300 ms
NUS.SoC.CS2105
Ooi Wei Tsang