Transport Layer: 3516 - Computer Networks

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 106

Transport Layer

CS 3516 – Computer Networks


Chapter 3: Transport Layer
Goals:
• Understand • Learn about transport
principles behind layer protocols in the
transport layer Internet:
services: – UDP: connectionless
– Multiplexing / transport
demultiplexing – TCP: connection-oriented
– Reliable data transfer transport
– Flow control – TCP congestion control
– Congestion control
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
Transport Services and Protocols
application
transport
• Provide logical communication network
data link
between app processes physical

lo
running on different hosts

gi
ca
• Transport protocols run in

le
nd
end systems

-en
– send side: breaks app

dt
messages into segments,

ra
ns
passes to network layer

po
– receive side: reassembles

rt
application
transport
segments into messages, network
data link
passes to app layer physical

• More than one transport


protocol available to apps
– Internet: TCP and UDP
Transport vs. Network layer
Household analogy:
• network layer: logical communication
12 kids sendingbetween
letters to 12
hosts kids
• • processes = between
transport layer: logical communication kids
processes
• app messages = letters in
envelopes
– relies on, enhances, network layer services
• hosts = houses
• transport protocol = Ann
and Bill (collect mail from
siblings)
• network-layer protocol =
postal service
Internet Transport-layer Protocols

• reliable, in-order
application
transport

delivery (TCP)
network
data link
physical
network
– congestion control

lo
data link

gi
physical network
– flow control

ca
data link
physical

le
– connection setup

nd
-
• unreliable, unordered

en
network

dt
data link

delivery: UDP
physical network

ra
data link

ns
physical
– no-frills extension of

po
network

“best-effort” IP

rt
data link
application
physical network transport
data link
• services not available:
network
physical data link
physical
– delay guarantees
– bandwidth guarantees
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
UDP: User Datagram Protocol [RFC 768]

• “no frills,” “bare bones”


Internet transport Why is there a UDP?
protocol
• no connection
• “best effort” service, UDP establishment (which can
segments may be: add delay)
– lost • simple: no connection state
– delivered out of order at sender, receiver
to app • small segment header
• connectionless: • no congestion control: UDP
– no handshaking between can blast away as fast as
UDP sender, receiver desired
– each UDP segment
handled independently
of others
UDP: more
• Often used for streaming
32 bits
(video/audio) or game apps
– loss tolerant Length, in source port # dest port #
– rate sensitive bytes of UDP length checksum
segment,
• other UDP uses including
– DNS header
– SNMP
• reliable transfer over UDP: Application
add reliability at data
application layer (message)
– application-specific
error recovery!
UDP segment format
UDP: checksum
Goal: detect “errors” (e.g., flipped bits) in
transmitted segment

Sender: Receiver:
• treat segment contents • compute checksum of
as sequence of 16-bit received segment
integers • check if computed checksum
• checksum: addition (1’s equals checksum field value:
complement sum) of – NO - error detected
segment contents – YES - no error detected.
• sender puts checksum But maybe errors
value into UDP checksum nonetheless? More later
field ….
Internet Checksum Example
• Example: add two 16-bit integers

1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

wraparound 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

• At receiver, add 2 integers and checksum … should


be all 1’s. If not, bit error (correction?  next)
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
Principles of Reliable data transfer
• important in app., transport, link layers
• top-10 list of important networking topics!

• characteristics of unreliable channel will determine


complexity of reliable data transfer protocol (rdt)
Principles of Reliable data transfer
• important in app., transport, link layers
• top-10 list of important networking topics!

• characteristics of unreliable channel will determine


complexity of reliable data transfer protocol (rdt)
Principles of Reliable Data Transfer
• important in app., transport, link layers
• top-10 list of important networking topics!

(Zoom next slide)


• Characteristics of unreliable channel will determine
complexity of reliable data transfer protocol (rdt)
Reliable Data Transfer: Getting Started

rdt_send(): called from above, deliver_data(): called by


(e.g., by app.). Passed data to rdt to deliver data to upper
deliver to receiver upper layer

send receive
side side

udt_send(): called by rdt, rdt_rcv(): called when packet


to transfer packet over arrives on rcv-side of channel
unreliable channel to receiver
Reliable Data Transfer: Getting Started
We’ll:
• Incrementally develop sender, receiver sides
of reliable data transfer protocol (rdt)
• Consider only unidirectional data transfer
– but control info will flow on both directions!
• Use finite state machines (FSM) to specify
sender, receiver
event causing state transition
actions taken on state transition
state: when in this “state”
next state uniquely state 1 state 2
event
determined by next
actions
event
Rdt1.0: Reliable Transfer over a Reliable
Channel
• Underlying channel perfectly reliable
– no bit errors
– no loss of packets
• Separate FSMs for sender, receiver:
– sender sends data into underlying channel
– receiver read data from underlying channel

Wait for rdt_send(data) Wait for rdt_rcv(packet)


call from call from
below extract (packet,data)
above packet = make_pkt(data)
udt_send(packet) deliver_data(data)

sender Easy! receiver


What if Taking a Message over
Phone?
• Message is clear?
• Message is garbled?
What if Taking a Message over
Phone?
• Message is clear?
– Ok
• Message is garbled?
– Ask to repeat
– May not need whole message
• In networks, called Automatic Repeat
reQuest (ARQ)
– Need error detection
– Receiver feedback
– Retransmission
Rdt2.0: Channel with Bit Errors (no Loss)
• Underlying channel may flip bits in packet
– Checksum to detect bit errors
• The question: how to recover from errors:
– acknowledgements (ACKs): receiver explicitly tells sender
that pkt received OK
– negative acknowledgements (NAKs): receiver explicitly
tells sender that pkt had errors
– Sender retransmits pkt on receipt of NAK
• New mechanisms in rdt2.0 (beyond rdt1.0):
– Error detection
– Receiver feedback: control msgs (ACK,NAK) rcvrsender
Rdt2.0: FSM Specification
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for
isNAK(rcvpkt)
Wait for rdt_rcv(rcvpkt) &&
call from ACK or
above udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for call
L
from below
sender
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Rdt2.0: Operation with No Errors
rdt_send(data)
snkpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or
udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below
sender
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Rdt2.0: Error Scenario
rdt_send(data)
snkpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for
isNAK(rcvpkt)
Wait for rdt_rcv(rcvpkt) &&
call from ACK or
above udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
L call from
below
sender
rdt_rcv(rcvpkt) &&
stop and wait notcorrupt(rcvpkt)
Sender sends one packet, extract(rcvpkt,data)
deliver_data(data)
then waits for receiver udt_send(ACK)
response
Rdt2.0 Has a Fatal Flaw!
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for
isNAK(rcvpkt)
Wait for rdt_rcv(rcvpkt) &&
call from ACK or
above udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for call
L
from below
sender
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)

???
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Rdt2.0 Has a Fatal Flaw!

What happens if ACK/NAK corrupted?


• Sender doesn’t know what happened at receiver!
• Can’t just retransmit: possible duplicate
• How to handle duplicates?
Rdt2.0 Has a Fatal Flaw!
Handling duplicates:
What happens if ACK/NAK•corrupted?
Sender retransmits
• Sender doesn’t know what happened at receiver!
current pkt if ACK/NAK
• Can’t just retransmit: possible duplicate
garbled
• Sender adds sequence
number to each pkt
– Can use 1 bit (for now)
• receiver discards (doesn’t
deliver up) duplicate pkt
Rdt2.1: Sender, Handles Garbled ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
Wait for
(corrupt(rcvpkt) ||
Wait for
call 0 from
ACK or isNAK(rcvpkt) )
NAK 0
above udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or call 1 from
NAK 1 above
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)
Rdt2.1: Receiver, Handles Garbled ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && corrupt(rcvpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
0 from 1 from
rdt_rcv(rcvpkt) && below rdt_rcv(rcvpkt) &&
below
not corrupt(rcvpkt) && not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Rdt2.1: Discussion

Receiver:
Sender:
• must
seq #check
addediftoreceived
pkt packet is duplicate
– state
• two seq.indicates
#’s (0,1)whether 0 or 1 is expected pkt seq #
will suffice
• note: receiver
must check can not know
if received if its last
ACK/NAK ACK/NAK
corrupted
• received OK atstates
twice as many sender
– state must “remember” whether “current” pkt has 0 or 1
seq. #
Rdt2.2: a NAK-free Protocol
• Reduce type of response  ACK only
• Same functionality as rdt2.1, using ACKs only
• Instead of NAK, receiver sends ACK for last pkt
received OK
– receiver must explicitly include seq # of pkt being
ACKed
• Duplicate ACK at sender results in same action as
NAK: retransmit current pkt
Rdt2.2: Sender & Receiver Fragments
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for
Wait for
ACK 0 isACK(rcvpkt,1) )
call 0 from
above
udt_send(sndpkt)
sender FSM
fragment
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) || L
has_seq1(rcvpkt)) Wait for
receiver FSM
0 from
udt_send(sndpkt)
below fragment

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)


&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
Rdt3.0: Channels with Errors and Loss

New assumption: underlying channel can also lose


packets (data or ACKs)
– checksum, seq. #, ACKs, retransmissions will be of help,
but not enough

How to determine if a
packet is lost?
Rdt3.0: Channels with Errors and Loss
Approach: sender waits
New assumption: underlying channel can also
“reasonable” lose of
amount
packets (data or ACKs) time for ACK
– checksum, seq. #, ACKs, retransmissions will be of help,
• Retransmits if no ACK
but not enough
received in this time
• If pkt (or ACK) just delayed
(not lost):
– Retransmission will be
duplicate, but use of seq.
#’s already handles this
– Receiver must specify seq
# of pkt being ACKed
• Requires countdown timer
Rdt3.0 Sender
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
start_timer
rdt_rcv(rcvpkt)
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_rcv(rcvpkt) &&
rdt_send(data) L
sndpkt = make_pkt(1, data, checksum)
( corrupt(rcvpkt) || udt_send(sndpkt)
isACK(rcvpkt,0) ) start_timer
L
Rdt3.0 in Action
Rdt3.0 in Action
Performance of Rdt3.0
• Rdt3.0 works, but performance stinks…
• ex: 1 Gbps link, 15 ms prop. delay, 8000 bit packet:
L 8000bits
d trans   9
 8 microseconds
R 10 bps
 U sender: utilization – fraction of time sender busy sending

U L/R .008
sender
= = = 0.00027
RTT + L / R 30.008 microsec
onds
• 1KB pkt every 30 msec -> 33kB/sec throughput over 1 Gbps link
• Network protocol limits use of physical resources!

(Picture next slide)


Rdt3.0: Stop-and-Wait Operation
sende receiv
first packet bit transmitted, t = 0 r er
last packet bit transmitted, t = L / R

first packet bit arrives


RTT last packet bit arrives, send ACK

ACK arrives, send next


packet, t = RTT + L / R

U L/R .008
sender
= = = 0.00027
RTT + L / R 30.008 microsec
onds
Pipelined Protocols
Pipelining: sender allows multiple, “in-flight”, yet-to-
be-acknowledged pkts
– Range of sequence numbers must be increased
– Need buffering at sender and/or receiver
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
Increase utilization
by a factor of 3!

U 3*L/R .024
sender
= = = 0.0008
RTT + L / R 30.008 microsecon
ds
• Two generic forms of pipelined protocols:
go-Back-N, selective repeat
Pipelining Protocols
Go-back-N: overview Selective Repeat: overview
• sender: up to N • sender: up to N unACKed
unACKed pkts in packets in pipeline
pipeline • receiver: ACKs individual
• receiver: only sends pkts
cumulative ACKs • sender: maintains timer
– doesn’t ACK pkt if for each unACKed pkt
there’s a gap – if timer expires: retransmit
• sender: has timer for only unACKed packet
oldest unACKed pkt
– if timer expires:
retransmit all unACKed
packets
Go-Back-N
Sender:
• k-bit seq # in pkt header
• “window” of up to N, consecutive unACKed pkts allowed

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


 may receive duplicate ACKs (see receiver)

• Timer for each in-flight pkt


• Timeout(n): retransmit pkt n and all higher seq # pkts in window
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++
}
else
L 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
GBN: Receiver Extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
L Wait
&& hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,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 #
GBN in
action
GBN Applet!

http://media.pearsoncmg.com/aw/aw_kurose_network_4/applets/go-back-n/index.html
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
– Again limits seq #s of sent, unACKed pkts
Selective Repeat: sender, receiver windows
Selective Repeat
sender receiver
pkt n in [rcvbase, rcvbase+N-1]
data from above : • send ACK(n)
• if next available seq # in window, •send pkt
out-of-order: buffer
timeout(n): • in-order: deliver (also deliver
• resend pkt n, restart timer buffered, in-order pkts),
advance window to next not-
ACK(n) in [sendbase,sendbase+N]: yet-received pkt
• mark pkt n as received pkt n in [rcvbase-N,rcvbase-1]
• if n smallest unACKed pkt, advance• window
ACK(n)base to next
unACKed seq #
otherwise:
• ignore
Selective Repeat in Action

Transport Layer 3-52


Selective
Repeat:
Dilemma
Example:
• seq #’s: 0, 1, 2, 3
• window size=3

• receiver sees no
difference in two
scenarios!
• incorrectly passes
duplicate data as new
in (a)

Q: what relationship
between seq # size
and window size?
SR Applet!

http://media.pearsoncmg.com/aw/aw_kurose_network_4/applets/SR/index.html
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
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
– MSS: maximum segment
steam:
size
– no “message boundaries”
• connection-oriented:
• pipelined: – handshaking (exchange
– TCP congestion and flow
of control msgs) init’s
control set window size
sender, receiver state
• send & receive buffers before data exchange
• flow controlled:
socket
a p p lic a t io n
w r ite s d a ta
a p p lic a t io n
re a d s d a ta – sender will not
socket
door
TC P TCP
door
overwhelm receiver
s e n d b u ffe r r e c e iv e b u f f e r
segm ent
TCP Segment Structure
32 bits
URG: urgent data counting
(generally not used) source port # dest port # by bytes
sequence number of data
ACK: ACK #
(not segments!)
valid acknowledgement number
head not
PSH: push data now len used UAPRSF Receive window
(generally not used) # bytes
checksum Urg data pointer rcvr willing
to accept
RST, SYN, FIN: Options (variable length)
connection estab
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(as in UDP)
TCP Seq. #’s and ACKs
Seq. #’s:
Host A Host B
– byte stream
“number” of first User Seq=4
2, ACK=
byte in segment’s types 79, da
t a = ‘C

data ‘C’ host ACKs
ACKs: C’ receipt of
ta = ‘
– seq # of next byte , A CK=4
3, d a
‘C’, echoes
79
expected from Seq= back ‘C’
other side host ACKs
receipt
– cumulative ACK
of echoed Seq=4
3, ACK=
Q: how receiver handles ‘C’ 80

out-of-order segments
– A: TCP spec doesn’t
say  up to simple telnet scenario time
implementer
TCP Round Trip Time and Timeout
Q: how to set TCP
timeout value?
TCP Round Trip Time and Timeout
Q: how to set TCP Q: how to estimate RTT?
timeout value?
• Longer than RTT
– but RTT varies
• Too short? premature
timeout
– unnecessary
retransmissions
• Too long? slow reaction
to segment loss
TCP Round Trip Time and Timeout
Q: how to set TCP Q: how to estimate RTT?
timeout value? • SampleRTT: measured time from
• Longer than RTT segment transmission until ACK
– but RTT varies receipt
– ignore retransmissions
• Too short? premature
timeout • SampleRTT will vary, want
– unnecessary estimated RTT “smoother”
retransmissions – average several recent
• Too long? slow reaction measurements, not just
to segment loss current SampleRTT
TCP Round Trip Time and Timeout
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT

• Exponential weighted moving average


• influence of past sample decreases exponentially fast
• typical value:  = 1/8th (or 0.125)
Example Round Trip Time Estimation
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr

350

300

250
RTT (milliseconds)

200

150

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)

SampleRTT Estimated RTT


TCP Round Trip Time and Timeout
Setting the timeout
• EstimtedRTT plus “safety margin”
– large variation in EstimatedRTT -> larger safety margin
• First estimate of how much SampleRTT deviates from
EstimatedRTT:

DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|

(typically,  = 0.25)

Then set timeout interval:


TimeoutInterval = EstimatedRTT + 4*DevRTT
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
TCP reliable data transfer

• Retransmissions
TCP creates rdt are
service
triggered
on top by:
of IP’s unreliable
service
– Timeout events
• – Duplicate
Pipelined ACKs
segments
• Initially
Cumulativeconsider
ACKs simplified TCP sender:
– Ignore duplicate ACKs
• TCP uses single retransmission timer
– Ignore flow control, congestion control
TCP Sender Events:
Data rcvd from app: Timeout:
• Create segment with • retransmit segment
seq # that caused timeout
• seq # is byte-stream • restart timer
number of first data ACK rcvd:
byte in segment • If acknowledges
• Start timer if not previously unACKed
already running (think segments
of timer as for oldest – update what is known to
unACKed segment) be ACKed
• Expiration interval: – start timer if there are
outstanding segments
TimeOutInterval
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum

loop (forever) { TCP


Sender
switch(event)

event: data received from application above


create TCP segment w/seq # NextSeqNum
if (timer currently not running) (simplified)
start timer
pass segment to IP
NextSeqNum = NextSeqNum + length(data) Comment:
• SendBase-1: last
event: timer timeout
retransmit not-yet-acked segment with
cumulatively
smallest sequence number ACKed byte
start timer Example:
• SendBase-1 = 71;
event: ACK received, with ACK field value of y
if (y > SendBase) { y= 73, so the rcvr
SendBase = y wants 73+ ;
if (there are not-yet-acked segments) y > SendBase, so
start timer
}
that new data is
ACKed
} /* end of loop forever */
TCP: Retransmission Scenarios
Host A Host B Host A Host B
Seq=9 Seq=9
2, 8 2, 8 b
bytes yt e s d
d ata Seq= ata
100,

Seq=92 timeout
20 by
timeout

tes d
ata
CK =100
A 0
10
X CK
A AC
=
K =120
loss
Seq=9 Seq=9
2, 2, 8 byte
8 b y te
s data Sendbase s data
= 100

Seq=92 timeout
SendBase
= 120 =120
K
C K =100 AC
A

SendBase
= 100 SendBase
= 120 premature timeout
time time
lost ACK scenario
TCP Retransmission Scenarios (more)
Host A Host B
Seq=9
2, 8 b
yt e s d
ata

timeout
Seq=1 =100
00, A CK
20 byt
es dat
a
X
loss

SendBase =120
ACK
= 120

time
Cumulative ACK scenario
TCP ACK generation [RFC 1122, RFC 2581]

Event at Receiver TCP Receiver action


Arrival of in-order segment with Delayed ACK. Wait up to 500ms
expected seq #. All data up to for next segment. If no next segment,
expected seq # already ACKed send ACK

Arrival of in-order segment with Immediately send single cumulative


expected seq #. One other ACK, ACKing both in-order segments
segment has ACK pending

Arrival of out-of-order segment Immediately send duplicate ACK,


higher-than-expect seq. # . indicating seq. # of next expected byte
Gap detected

Arrival of segment that Immediate send ACK, provided that


partially or completely fills gap segment starts at lower end of gap
Fast Retransmit
• Time-out period often • If sender receives 3
relatively long: ACKs for same data, it
– Long delay before assumes that segment
resending lost packet after ACKed data was
• Detect lost segments lost:
via duplicate ACKs – fast retransmit: resend
– Sender often sends segment before timer
many segments back-to- expires
back
– If segment lost, there
will likely be many
duplicate ACKs for that
segment
Host A Host B

Fast Retransmit
seq # x1
seq # x2
seq # x3 ACK x1
seq # x4 X
seq # x5
ACK x1
ACK x1
ACK x1
triple
duplicate
resen
ACKs d seq X
2
timeout

time
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
TCP Flow Control
flow control
sender won’t overflow
• Receive side of TCP receiver’s buffer by
connection has a transmitting too much,
receive buffer: too fast

IP
(currently)
TCP data application • speed-matching
service: matching
unused buffer
datagrams space
(in buffer) process

send rate to receiving


application’s drain rate
• App process may be
slow at reading from
buffer
TCP Flow Control: How it Works

IP
(currently)
TCP data application • Receiver: advertises
unused buffer space by
unused buffer
datagrams space
(in buffer) process
including rwnd value in
rwnd segment header
RcvBuffer
• sender: limits # of
(suppose TCP receiver unACKed bytes to rwnd
discards out-of-order – guarantees receiver’s
segments) buffer doesn’t overflow
• unused buffer space:
= rwnd
= RcvBuffer-[LastByteRcvd -
LastByteRead]
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
TCP Connection Management
Recall: TCP sender, receiver Three way handshake:
establish “connection”
before exchanging data Step 1: client host sends TCP
segments SYN segment to server
• initialize TCP variables: – specifies initial seq #
– seq. #s – no data
– buffers, flow control Step 2: server host receives
info (e.g. RcvWindow) SYN, replies with SYNACK
• client: connection initiator segment
Socket clientSocket = new – server allocates buffers
Socket(“hostname”, port#); – specifies server initial seq.
• server: contacted by client #
Socket connectionSocket = Step 3: client receives SYNACK,
welcomeSocket.accept();
replies with ACK segment,
which may contain data
TCP Connection Management (cont.)

Closing a connection: client server


close
client closes socket: FIN
clientSocket.close();

Step 1: client end system


close
sends TCP FIN control ACK
segment to server FIN

Step 2: server receives ACK

timed wait
FIN, replies with ACK.
Closes connection, sends
FIN.
closed
TCP Connection Management (cont.)

Step 3: client receives FIN, client server


replies with ACK. closing
FIN
– Enters “timed wait” -
will respond with ACK
to received FINs
closing
ACK
Step 4: server, receives
ACK. Connection closed. FIN

ACK

timed wait closed

closed
TCP Connection Management (cont.)

TCP server
lifecycle

TCP client
lifecycle

Transport Layer 3-81


Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
Principles of Congestion Control
Congestion:
• Informally: “too many sources sending too much
data too fast for network to handle”
• Different from flow control!
• Manifestations:
– Lost packets (buffer overflow at routers)
– Long delays (queueing in router buffers)
• A “top-10” problem!
Causes/costs of Congestion: Scenario 1
Host A lout
Two senders,
lin : original data

two receivers
unlimited shared
• One router,
Host B
output link buffers

infinite buffers
• No
retransmission

• Large delays
when congested
• Maximum
achievable
throughput
Causes/costs of Congestion: Scenario 2
• One router, finite buffers
• Sender retransmission of lost packet

Host lin : original lou


data
A l'in : original data, plus
t
retransmitted data

Host finite shared


B output link
buffers
Causes/costs of congestion: Scenario 2
• Always: l = l (goodput)
in out
• “Perfect” retransmission only when loss: l > lout
in
• Retransmission of delayed (not lost) packet makes l larger
in
(than perfect case) for same lout
R/2 R/2 R/2

R/3
lout

lout

lout
R/4

R/2 R/2 R/2


lin lin lin

a. b. c.
“Costs” of congestion:
• More work (retrans) for given “goodput”
• unneeded retransmissions: link carries multiple copies of pkt
Causes/costs of Congestion: Scenario 3
• Four senders Q: what happens as l
• Multihop paths in
and l increase ?
• Timeout/retransmit in
Host A lout
lin : original data
l'in : original data, plus
retransmitted data
finite shared output
link buffers

Host B
Causes/costs of Congestion: Scenario 3
H l
o
s o
t
u
A
t

H
o
s
t
B

Another “cost” of congestion:


• When packet dropped, any “upstream transmission
capacity used for that packet was wasted!
Approaches towards congestion control
Broadly:

End-end congestion Network-assisted


control: congestion control:
• No explicit feedback from • Routers provide feedback
network to end systems
• Congestion inferred from – Single bit indicating
end-system observed loss, congestion (SNA,
delay DECbit, TCP/IP ECN,
• Approach taken by TCP ATM)
– Explicit rate sender
should send at
Chapter 3 outline
• 3.5 Connection-oriented
• 3.1 Transport-layer services transport: TCP
• 3.2 Multiplexing and demultiplexing
– segment structure
• 3.3 Connectionless transport: UDP data transfer
– reliable
• – flow
3.4 Principles of reliable data control
transfer
– connection management
• 3.6 Principles of
congestion control
• 3.7 TCP congestion
control
TCP Congestion Control:
• Goal: TCP sender should transmit as fast as possible,
but without congesting network
- Q: how to find rate just below congestion level?
• Decentralized: each TCP sender sets its own rate,
based on implicit feedback:
- ACK: segment received (a good thing!), network not
congested, so increase sending rate
- lost segment: assume loss due to congested
network, so decrease sending rate
TCP Congestion Control: Bandwidth Probing
• “Probing for bandwidth”: increase transmission rate
on receipt of ACK, until eventually loss occurs, then
decrease transmission rate
- continue to increase on ACK, decrease on loss (since available
bandwidth is changing, depending on other connections in
network)
ACKs being received,
X loss, so decrease rate
so increase rate
X
X
X
sending rate

X TCP’s
“sawtooth”
behavior
time

• Q: how fast to increase/decrease?


- details to follow
TCP Congestion Control: details
• sender limits rate by limiting number
of unACKed bytes “in pipeline”:
LastByteSent-LastByteAcked  cwnd
– cwnd: differs from rwnd (how, why?)
– sender limited by min(cwnd,rwnd)
cwnd
• roughly, bytes
cwnd
rate = bytes/sec
RTT
• cwnd is dynamic, function of RTT
perceived network congestion
ACK(s)
TCP Congestion Control: more details

segment loss event: ACK received: increase


reducing cwnd cwnd
• timeout: no response • slowstart phase:
from receiver - increase exponentially
– cut cwnd to 1 fast (despite name) at
• 3 duplicate ACKs: at connection start, or
following timeout
least some segments
• congestion avoidance:
getting through (recall
- increase linearly
fast retransmit)
– cut cwnd in half, less
aggressively than on
timeout
TCP Slow Start
• when connection begins, cwnd =
1 MSS Host A Host B
– example: MSS = 500 bytes
one segm
& RTT = 200 msec ent

RTT
– initial rate = 20 kbps
two segm
• available bandwidth may be >> ents
MSS/RTT
– desirable to quickly ramp up
to respectable rate four segm
ents
• increase rate exponentially
until first loss event or when
threshold reached
– double cwnd every RTT
time
– done by incrementing cwnd
by 1 for every ACK received
Transitioning into/out of slowstart
ssthresh: cwnd threshold maintained by TCP
• on loss event: set ssthresh to cwnd/2
– remember (half of) TCP rate when congestion last occurred
• when cwnd >= ssthresh: transition from slowstart to congestion
avoidance phase

duplicate ACK
dupACKcount++ new ACK
cwnd = cwnd+MSS
dupACKcount = 0
L transmit new segment(s),as allowed
cwnd = 1 MSS
ssthresh = 64 KB cwnd > ssthresh
dupACKcount = 0
slow L congestion
start timeout avoidance
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
timeout
retransmit missing segment
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment
TCP: Congestion Avoidance
• When cwnd > ssthresh AIMD
grow cwnd linearly
• ACKs: increase cwnd
– increase cwnd by 1 by 1 MSS per RTT:
MSS per RTT additive increase
– approach possible • loss: cut cwnd in half
congestion slower (non-timeout-detected
than in slowstart loss ): multiplicative
– implementation: cwnd decrease
= cwnd + AIMD: Additive Increase
MSS/cwnd for each Multiplicative Decrease
ACK received
TCP Congestion Control FSM: overview

slow cwnd > ssthresh congestion


start avoidance
loss:
loss: timeout
timeout

loss: new ACK loss:


timeout 3dupACK
fast
loss: recovery
3dupACK
Popular “flavors” of TCP
cwnd window size (in

TCP Reno

ssthresh
segments)

ssthresh
TCP Tahoe

Transmission
round
Summary: TCP Congestion Control

• when cwnd < ssthresh, sender in slow-start


phase, window grows exponentially.
• when cwnd >= ssthresh, sender is in
congestion-avoidance phase, window grows linearly.
• when triple duplicate ACK occurs, ssthresh set
to cwnd/2, cwnd set to ~ ssthresh
• when timeout occurs, ssthresh set to cwnd/2,
cwnd set to 1 MSS.
TCP throughput

• Q: what’s average throughout of TCP as


function of window size, RTT?
– ignoring slow start
• Let W be window size when loss occurs.
– when window is W, throughput is W/RTT
– just after loss, window drops to W/2,
throughput to W/2RTT.
– average throughout: .75 W/RTT
TCP Futures: TCP over “long, fat pipes”

• Example: 1500 byte segments, 100ms RTT, want 10


Gbps throughput
• Requires window size W = 83,333 in-flight
segments!
• throughput in terms of loss rate:
1.22  MSS
RTT L

• ➜ L = 2·10-10 Wow
• New versions of TCP for high-speed
TCP Fairness
fairness goal: if K TCP sessions share same
bottleneck link of bandwidth R, each should have
average rate of R/K

TCP connection 1

bottleneck
TCP
router
connection 2
capacity R
Why is TCP fair?
Two competing sessions:
• Additive increase gives slope of 1, as throughout increases
• multiplicative decrease decreases throughput proportionally

R equal bandwidth share


Connection 2 throughput

loss: decrease window by factor of 2


congestion avoidance: additive increase
loss: decrease window by factor of 2
congestion avoidance: additive increase

Connection 1 throughput R
Fairness (more)
Fairness and UDP Fairness and Parallel TCP
• Multimedia apps often Connections
do not use TCP • Nothing prevents app
– do not want rate from opening parallel
throttled by congestion connections between 2
control hosts.
• Instead use UDP: • Web browsers do this
– pump audio/video at • Example: link of rate R
constant rate, tolerate
packet loss
supporting 9 connections;
– new app asks for 1 TCP, gets
rate R/10
– new app asks for 11 TCPs,
gets R/2 !
Chapter 3: Summary
• Principles behind transport
layer services:
– multiplexing,
demultiplexing
– reliable data transfer
– flow control Next:
– congestion control • leaving the network
• Instantiation and “edge” (application,
implementation in the transport layers)
Internet • into the network
– UDP “core”
– TCP

You might also like