0% found this document useful (0 votes)
2 views

Class 11

The document provides an overview of various transport layer protocols, including NAK-free protocols, Go-Back-N, and Selective Repeat, detailing their mechanisms for reliable data transfer and acknowledgment processes. It discusses the structure of TCP segments, including sequence numbers, acknowledgments, and flow control, as well as the importance of window sizes in managing data transmission. Additionally, it outlines the principles of congestion control and the differences between connection-oriented and connectionless transport methods.

Uploaded by

shiyd9898
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Class 11

The document provides an overview of various transport layer protocols, including NAK-free protocols, Go-Back-N, and Selective Repeat, detailing their mechanisms for reliable data transfer and acknowledgment processes. It discusses the structure of TCP segments, including sequence numbers, acknowledgments, and flow control, as well as the importance of window sizes in managing data transmission. Additionally, it outlines the principles of congestion control and the differences between connection-oriented and connectionless transport methods.

Uploaded by

shiyd9898
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 34

Overview of last class

Introduction 1-1
rdt2.2: a NAK-free protocol
▪ Receiver explicitly include seq # of pkt being ACKed
▪ Duplicate ACK at sender results in same action as
NAK: retransmit current pkt

▪ No need to define two types of message; support general


scenario
▪ ACK/NAK handles stop-and-wait is fine, difficult for pipeline
case
• Multiple new packets in transmission
• Which one to be acknowledged?

Transport Layer 3-2


rdt3.0 sender
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer L
L Wait for Wait
for timeout
call 0from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) L
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
L

Transport Layer 3-4


Pipelining: increased utilization
sender receiver
first packet bit transmitted, t = 0
last bit transmitted, t = L / R

first packet bit arrives


RTT last packet bit arrives, send ACK
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R
3-packet pipelining increases
utilization by a factor of 3!

U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008

Transport Layer 3-5


Go-Back-N: sender
▪ k-bit seq # in pkt header
▪ “window” of up to N, consecutive unack’ed pkts allowed

▪ ACK(n): ACKs all pkts up to, including seq # n - “cumulative


ACK”
• may receive duplicate ACKs (see receiver)
▪ timer for oldest in-flight pkt
▪ timeout(n): retransmit packet n and all higher seq # pkts in
window
Transport Layer 3-6
GBN: sender extended FSM
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
L else
refuse_data(data)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
Transport Layer 3-8
GBN: receiver extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
L && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(0,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

ACK-only: always send ACK for correctly-received


pkt with highest in-order seq #
• may generate duplicate ACKs
• need only remember expectedseqnum
▪ out-of-order pkt:
• discard (don’t buffer): no receiver buffering!
• re-ACK pkt with highest in-order seq #
Transport Layer 3-9
GBN in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5

Transport Layer 3-10


Window size: sending rate control
sender receiver
first packet bit transmitted, t = 0
last bit transmitted, t = L / R

first packet bit arrives


RTT last packet bit arrives, send ACK
last bit of 2nd packet arrives, send ACK
last bit of 3rd packet arrives, send ACK
ACK arrives, send next
packet, t = RTT + L / R

Sliding
▪ Window of size N: up to N packets
U NL / R in air; states to be determined
sender = ▪ For the data well received in sequence,
RTT + L / R
considered as processed, so move on

Transport Layer 3-11


Class Today

Introduction 1-12
Selective repeat
▪ receiver individually acknowledges all correctly
received pkts
• buffers pkts, as needed, for eventual in-order delivery
to upper layer
▪ sender only resends pkts for which ACK not
received
• sender timer for each unACKed pkt
▪ sender window
• N consecutive seq #’s
• limits seq #s of sent, unACKed pkts

Transport Layer 3-13


Selective repeat: sender, receiver windows

Transport Layer 3-14


Selective repeat: sender, receiver windows

Transport Layer 3-15


Selective repeat
sender receiver
data from above: pkt n in [rcvbase, rcvbase+N-1]
▪ if next available seq # in ▪ send ACK(n)
window, send pkt ▪ out-of-order: buffer
timeout(n): ▪ in-order: deliver (also
▪ resend pkt n, restart timer deliver buffered, in-order
pkts), advance window to
ACK(n) in [sendbase,sendbase+N-1]: next not-yet-received pkt
▪ mark pkt n as received pkt n in [rcvbase-N,rcvbase-1]
▪ if n smallest unACKed pkt,
▪ ACK(n)
advance window base to next
unACKed seq # otherwise:
▪ ignore

Transport Layer 3-16


Selective repeat in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5 receive pkt4, buffer,
send ack4
record ack3 arrived receive pkt5, buffer,
send ack5
pkt 2 timeout
012345678 send pkt2
012345678 record ack4 arrived
012345678 rcv pkt2; deliver pkt2,
record ack5 arrived
012345678 pkt3, pkt4, pkt5; send ack2

Q: what happens when ack2 arrives?

Transport Layer 3-17


sender window receiver window
Selective repeat: (after receipt) (after receipt)

dilemma 0123012 pkt0


pkt1
0123012 0123012
pkt2 0123012
example:
0123012
0123012
pkt3
▪ seq #’s: 0, 1, 2, 3
0123012
X
0123012
▪ window size=3 pkt0 will accept packet
with seq number 0
(a) no problem
▪ receiver sees no
difference in two receiver can’t see sender side.
scenarios! receiver behavior identical in both cases!
something’s (very) wrong!
▪ duplicate data
accepted as new in (b) 0123012 pkt0
0123012 pkt1 0123012
pkt2
Q: what relationship 0123012
X
0123012
0123012
between seq # size X
and window size to timeout
retransmit pkt0 X
avoid problem in (b)? 0123012 pkt0
will accept packet
with seq number 0
(b) oops!
Transport Layer 3-18
sender window receiver window
(after receipt) (after receipt)

0123456 pkt0
0123456 pkt1 0123456
0123456 pkt2 0123456

Address the dilemma: 0123456 pkt3


X
0123456

with sequence number 0123456


pkt4 will accept packet
with seq number 4

(a) Receive the new pkt4

0123456 pkt0
0123456 pkt1 0123456
0123456 pkt2 0123456
X 0123456
X
timeout
retransmit pkt0 X
0123456 pkt0
will ignore and re-ACK
with seq number 0

(b) Receive the retransmitted pkt 0


Transport Layer 3-19
Chapter 3 outline
3.1 transport-layer 3.5 connection-oriented
services transport: TCP
3.2 multiplexing and • segment structure
demultiplexing • reliable data transfer
3.3 connectionless • flow control
transport: UDP • connection management
3.4 principles of reliable 3.6 principles of congestion
data transfer control
3.7 TCP congestion control

Transport Layer 3-21


TCP: Overview RFCs: 793,1122,1323, 2018, 2581

▪ point-to-point: ▪ full duplex data:


• one sender, one receiver • bi-directional data flow
▪ reliable, in-order byte in same connection
stream: • MSS: maximum segment
size
• no “message boundaries”
• Stream of bytes instead of ▪ connection-oriented:
number of segments • handshaking (exchange
facilitates quickly putting of control msgs) inits
data into the right position. sender, receiver state
before data exchange
▪ pipelined:
• TCP congestion and flow ▪ flow controlled:
control set window size • sender will not
overwhelm receiver
Transport Layer 3-22
TCP segment structure
32 bits
URG: urgent data counting
(generally not used) source port # dest port #
by bytes
sequence number of data
ACK: ACK #
valid acknowledgement number (not segments!)
head not
PSH: push data now len used
UAP R S F receive window
(generally not used) # bytes
checksum Urg data pointer
rcvr willing
RST, SYN, FIN: to accept
options (variable length)
connection estab
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(as in UDP)

Transport Layer 3-23


More on TCP segment
▪ “Options” field:
• negotiate maximum segment size; scaling factor for high
speed network; timestamp

▪ Flag bits:
• PSH: indicate receiver to pass data to upper layer
immediately
• URG: Sender upper layer indicate data urgent
• Urg data pointer: pointer for the urgent data

Transport Layer 3-24


TCP Checksum
▪ To calculate the TCP segment header’s Checksum field, the TCP pseudo header is first
constructed and placed, logically, before the TCP segment. The checksum is then
calculated over both the pseudo header and the TCP segment. The pseudo header is
then discarded.
(http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm )

Transport Layer 3-25


TCP seq. numbers, ACKs
outgoing segment from sender
sequence numbers: source port # dest port #
sequence number
• byte stream “number” of acknowledgement number

first byte in segment’s rwnd

data
checksum urg pointer

window size
acknowledgements: N

• seq # of next byte


expected from other side sender sequence number space
• cumulative ACK
sent sent, not- usable not
Q: how receiver handles ACKed yet ACKed but not usable
out-of-order segments (“in-
flight”)
yet sent

• A: TCP spec doesn’t say, incoming segment to sender


- up to implementor source port # dest port #
sequence number
acknowledgement number
A rwnd
checksum urg pointer

Transport Layer 3-26


TCP seq. numbers, ACKs
Host A Host B

User
types
‘C’ Seq=42, ACK=79, data = ‘C’
host ACKs
receipt of
‘C’, echoes
Seq=79, ACK=43, data = ‘C’ back ‘C’
host ACKs
receipt
of echoed
‘C’ Seq=43, ACK=80

simple telnet scenario

Transport Layer 3-27


TCP seq. numbers, ACKs
Host A Host B

User
types
‘C’ Seq=42, ACK=79, data = ‘C’
host ACKs
receipt of
‘C’, echoes
Seq=79, ACK=43, data = ‘C’ back ‘C’
host ACKs
receipt
of echoed
‘C’ Seq=43, ACK=80

simple telnet scenario

Transport Layer 3-28


TCP seq. numbers, ACKs
Host A Host B

User
types
‘C’ Seq=42, ACK=79, data = ‘C’
host ACKs
receipt of
‘C’, echoes
Seq=79, ACK=43, data = ‘C’ back ‘C’
host ACKs
receipt
of echoed
‘C’ Seq=43, ACK=80

simple telnet scenario

Transport Layer 3-29


TCP round trip time, timeout
Q: how to set TCP Q: how to estimate RTT?
timeout value? ▪ SampleRTT: measured
time from segment
▪ longer than RTT transmission until ACK
• but RTT varies receipt
▪ too short: premature • ignore retransmissions
timeout, unnecessary ▪ SampleRTT will vary, want
retransmissions estimated RTT “smoother”
• average several recent
▪ too long: slow reaction measurements, not just
to segment loss current SampleRTT

Transport Layer 3-30


sender receiver
send pkt0 pkt0
rcv pkt0
ack0 send ack0
rcv ack0
send pkt1 pkt1
rcv pkt1
send ack1
ack1
timeout
resend pkt1 pkt1
rcv pkt1
rcv ack1 pkt0 (detect duplicate)
send pkt0 send ack1
ack1
rcv ack1 rcv pkt0
send pkt0
ack0 send ack0
pkt0
rcv pkt0
ack0 (detect duplicate)
send ack0

(d) premature timeout/ delayed ACK

Transport Layer 3-31


TCP round trip time, timeout
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
▪ exponential weighted moving average
▪ influence of past sample decreases exponentially fast
▪ typical value:  = 0.125 RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350

RTT: gaia.cs.umass.edu to fantasia.eurecom.fr


RTT (milliseconds)

300

250
RTT (milliseconds)

200

sampleRTT
150

EstimatedRTT

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
time (seconds) Transport Layer 3-32
SampleRTT Estimated RTT
TCP round trip time, timeout
▪ timeout interval: EstimatedRTT plus “safety margin”
• large variation in EstimatedRTT -> larger safety margin
▪ estimate SampleRTT deviation from EstimatedRTT:
DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
(typically,  = 0.25)

TimeoutInterval = EstimatedRTT + 4*DevRTT

estimated RTT “safety margin”

* Check out the online interactive exercises for more


examples: http://gaia.cs.umass.edu/kurose_ross/interactive/ Transport Layer 3-34

You might also like