E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
1
EE 586 Communication andSwitching Networks
Lecture 10
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Continue on the 2nd question
Three Questions:
How do, say a webserver at port 80, differentiateand response to two different clients? (3.2, 3.3)
How can an end-to-end protocol eliminate ALLnetwork error along the way? (3.4, 3.5)
How can an end-to-end protocol prevent thecollapse of the Internet (3.6, 3.7)
2
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underlying channel may flip bits in packet
checksum to detect bit errors
the question: how to recover from errors:
acknowledgements (ACKs): receiver explicitly tells senderthat packet received OK
negative acknowledgements (NAKs): receiver explicitlytells sender that packet had errors
sender retransmits packet on receipt of NAK
new mechanisms in rdt2.0 (beyond rdt1.0):
error detection
feedback: control messages (ACK,NAK) from receiverto sender
rdt2.0: channel with bit errors
underline_base
3
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt2.0: FSM specification
Wait forcall fromabove
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
   isNAK(rcvpkt)
Wait forACK orNAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
  corrupt(rcvpkt)
Wait forcall frombelow
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
   notcorrupt(rcvpkt)
sender
receiver
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
4
(modified by Cheung for EE586; based on K&R original)
stop and wait
sender sends one packet,
then waits for receiver
response
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt2.0 has a fatal flaw!
what happens ifACK/NAK corrupted?
sender does not knowwhat happened atreceiver!
cant just retransmit:possible duplicate
handling duplicates:
sender retransmitscurrent pkt if ACK/NAKcorrupted
sender adds sequencenumber to each pkt
receiver discards (doesntdeliver up) duplicate pkt
underline_base
5
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt2.1: sender, handles garbled ACK/NAKs
Wait forcall 0 fromabove
Wait forACK orNAK 0
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
Wait for
call 1 fromabove
Wait forACK orNAK 1
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
6
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Wait for
0 frombelow
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
  && has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Wait for
1 frombelow
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
  && has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
rdt_rcv(rcvpkt) &&
   not corrupt(rcvpkt) &&
   has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
   not corrupt(rcvpkt) &&
   has_seq1(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
underline_base
rdt2.1: receiver, handles garbled ACK/NAKs
7
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt2.1: discussion
sender:
seq # added to pkt
two seq. #s (0,1) willsuffice.
must check if receivedACK/NAK corrupted
twice as many states
state must rememberwhether expectedpkt should have seq #of 0 or 1
receiver:
must check if receivedpacket is duplicate
state indicates whether0 or 1 is expected pktseq #
note: receiver knowsif its last ACK/NAKreceived OK atsender based onduplicate packets
underline_base
8
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt2.2: a NAK-free protocol
same functionality as rdt2.1, using ACKs only
instead of NAK, receiver sends ACK for last pktreceived OK
receiver must explicitly include seq # of pkt being ACKed
duplicate ACK at sender results in same action asNAK: retransmit current pkt
Automatic Repeat reQuest (ARQ)
9
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt2.2: sender, receiver fragments
Wait forcall 0 fromabove
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
  isACK(rcvpkt,1) )
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
Wait forACK 0
sender FSM
fragment
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
  && has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
Wait for
0 frombelow
rdt_rcv(rcvpkt) &&
   (corrupt(rcvpkt) ||
     has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM
fragment
10
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP seq. numbers, ACKs
User
types
C
host ACKs
receipt
of echoed
C
host ACKs
receipt of
C, echoes
back C
simple texting scenario
Host B
Host A
Seq=42, ACK=79, data = C
Seq=79, ACK=43, data = C
Seq=43, ACK=80
desktop_computer_stylized_medium
desktop_computer_stylized_medium
(modified by Cheung for EE586; based on K&R original)
11
sequence numbers:
byte streamnumber of firstbyte in segmentsdata
acknowledgements:
seq # of next byteexpected fromother side
cumulative ACK
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0: channels with errors and loss
new assumption:underlying channel canalso lose packets(data, ACKs)
checksum, seq. #,ACKs, retransmissionswill be of help … butnot enough
approach: sender waitsreasonable amount oftime for ACK
retransmits if no ACKreceived in this time
if pkt (or ACK) just delayed(not lost):
retransmission will beduplicate, but seq. #salready handles this
receiver must specify seq# of pkt being ACKed
requires countdown timer
underline_base
12
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0 sender
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
WaitforACK0
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Wait for
call 1 fromabove
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0fromabove
WaitforACK1
rdt_rcv(rcvpkt)
underline_base
13
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1
X
loss
pkt1
alarm_clock_ringing
timeout
resend pkt1
rdt3.0 in action
underline_base
14
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
rdt3.0 in action
underline_base
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender
receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1
X
loss
pkt1
alarm_clock_ringing
timeout
resend pkt1
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender
receiver
rcv pkt1
send ack0
rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout/ delayed ACK
pkt1
alarm_clock_ringing
timeout
resend pkt1
ack1
send ack1
ack1
send pkt0
rcv ack1
pkt0
rcv pkt0
send ack0
ack0
15
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
TCP round trip time, timeout
Q: how to set TCPtimeout value?
longer than RTT
but RTT varies
too short: prematuretimeout, unnecessaryretransmissions
too long: slow reactionto segment loss
Q: how to estimate RTT?
SampleRTT: measuredtime from segmenttransmission until ACKreceipt
ignore retransmissions
SampleRTT will vary, wantestimated RTT smoother
average several recentmeasurements, not justcurrent SampleRTT
(modified by Cheung for EE586; based on K&R original)
16
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
exponential weighted moving average
influence of past sample decreases exponentially fast
typical value:  = 0.125
underline_base
TCP round trip time, timeout
RTT (milliseconds)
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
sampleRTT
EstimatedRTT
time (seconds)
17
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
timeout interval: EstimatedRTT plus safety margin
large variation in EstimatedRTT -> larger safety margin
estimate SampleRTT deviation from EstimatedRTT:
DevRTT = (1-)*DevRTT +
             *|SampleRTT-EstimatedRTT|
underline_base
TCP round trip time, timeout
(typically,  = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT
estimated RTT
safety margin
alarm_clock_ringing
(modified by Cheung for EE586; based on K&R original)
18
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
rdt3.0: stop-and-wait operation
first packet bit transmitted, t = 0
sender
receiver
RTT
last packet bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
19
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Pipelined protocols
pipelining: sender allows multiple, in-flight, yet-to-be-acknowledged pkts
range of sequence numbers must be increased
buffering at sender and/or receiver
rdt_pipelined1
desktop_computer_stylized_medium
desktop_computer_stylized_medium
20
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
underline_base
Pipelining: increased utilization
first packet bit transmitted, t = 0
sender
receiver
RTT
last bit transmitted, t = L / R
first packet bit arrives
last packet bit arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
3-packet pipelining increases
 utilization by a factor of 3!
21
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
TCP sender (simplified)
k-bit seq # in pkt header
underline_base
22
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
TCP sender (simplified)
k-bit seq # in pkt header
window of up to N, consecutive unacked pkts allowed
gbn_seqnum
underline_base
23
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
TCP sender (simplified)
k-bit seq # in pkt header
window of up to N, consecutive unacked pkts allowed
ACK(n):  ACKs all pkts up to, including n - cumulative ACK
may receive duplicate ACKs (see receiver)
timer for oldest in-flight pkt
timeout(n): retransmit segment that causes timeout and restarttimer
gbn_seqnum
underline_base
24
(modified by Cheung for EE586; based on K&R original)
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
3-25
underline_base
TCP sender (simplified)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., send)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
    start timer
 
data received from application above
retransmit not-yet-acked segmentwith smallest seq. #
start timer
timeout
if (y > SendBase) {
    SendBase = y
    /* SendBase–1: last cumulatively ACKed byte */
    if (there are currently not-yet-acked segments)
         start timer
       else stop timer
     }
ACK received, with ACK field value y
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-26
TCP: retransmission scenarios
lost ACK scenario
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
X
timeout
ACK=100
Host B
Host A
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-27
TCP: retransmission scenarios
lost ACK scenario
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
X
timeout
ACK=100
premature timeout
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=92,  8
bytes of data
timeout
ACK=120
Seq=100, 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
desktop_computer_stylized_medium
E l e c t r i c a l    &   C o m p u t e r
Department of
Electrical & Computer Engineering
Transport Layer
3-28
TCP: retransmission scenarios
X
cumulative ACK
Host B
Host A
Seq=92, 8 bytes of data
ACK=100
Seq=120,  15 bytes of data
timeout
Seq=100, 20 bytes of data
ACK=120
underline_base
desktop_computer_stylized_medium
desktop_computer_stylized_medium