Chapter 3 v8.0 AAST
Chapter 3 v8.0 AAST
Transport Layer
Example:
application messages = letters in envelopes
processes = cousins
hosts (end systems) = houses
transport-layer protocol = Ann and Bill
network-layer protocol = postal service (including mail carriers)
physical physical
physical physical
Th app. msg
• delay guarantees
physical
Hnnetwork
Ht HTTP msg transport
transport
network link network
link physical link
physical physical
transport
Hn Ht HTTP msg
transport
application
[RFC 768]
application application
transport transport
(UDP) (UDP)
link link
physical physical
physical physical
data to/from
UDP segment format application layer
Transmitted: 5 6 11
Error detection is required
for ARQ to work, we present
here the basic principle of error
detection, showing the simple
operation used in UDP as an
example
Received: 4 6 = 11
receiver-computed sender-computed
checksum checksum (as received)
Adapted from © 1996-2021 J.F. Kurose,
Prof. Yahya Z. Mohasseb K.W. Ross All Rights Reserved.-34
3.3 Connectionless Transport: UDP
3.3.2 UDP Checksum
Goal: detect errors (i.e., flipped bits) in transmitted segment
sender: receiver:
treat contents of UDP segment compute checksum of received
(including UDP header fields and IP
addresses) as sequence of 16-bit segment
integers check if computed checksum
checksum: addition (one’s equals checksum field value:
complement sum) of segment content • Not equal - error detected
checksum value put into UDP • Equal - no error detected. But maybe
checksum field errors nonetheless? More later ….
sending receiving
process process
application data data
transport
reliable channel
sending receiving
process process
application data data
transport
sender-side of receiver-side
reliable data of reliable data
Sender, receiver do not know transfer protocol transfer protocol
the “state” of each other, e.g.,
was a message received? transport
network
unless communicated via a unreliable channel
message
reliable service implementation
unreliable channel
udt_send(): called by rdt rdt_rcv(): called when packet
to transfer packet over Bi-directional communication over arrives on receiver side of
unreliable channel to receiver unreliable channel channel
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F. Kurose, K.W. Ross All Rights
3.4 Principles of reliable data transfer
Reliable data transfer: getting started
We will:
incrementally develop sender, receiver sides of reliable data transfer
protocol (rdt)
consider only unidirectional data transfer
• but control info will flow in 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 state
determined by next 1 event
event 2
actions
rdt_send(data)
sndpkt = make_pkt(data, checksum) rdt_rcv(rcvpkt) && corrupt(rcvpkt)
udt_send(sndpkt) udt_send(NAK)
rdt_rcv(rcvpkt) &&
Wait for Wait for isNAK(rcvpkt)
sender call from ACK or Wait for
receiver
udt_send(sndpkt)
above NAK call from
below
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F. Kurose, K.W. Ross All Rights
Reserved.-47
3.4 Principles of reliable data transfer
rdt2.0: FSM specifications
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for Wait for isNAK(rcvpkt) (“OK”) rdt_rcv(rcvpkt) && corrupt(rcvpkt)
sender call from ACK or udt_send(sndpkt) udt_send(NAK)
above NAK
Note: “state” of receiver (did the receiver get my rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
message correctly?) isn’t known to sender unless extract(rcvpkt,data)
deliver_data(data)
somehow communicated from receiver to sender udt_send(ACK)
that’s why we need a protocol! Adapted from © 1996-2021 J.F. Kurose, K.W.
Prof. Yahya Z. Mohasseb Ross All Rights Reserved.-48
3.4 Principles of reliable data transfer
rdt2.0: operation with no errors
rdt_send(data)
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for Wait for isNAK(rcvpkt)
sender call from ACK or udt_send(sndpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt)
above NAK
udt_send(NAK)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Adapted from © 1996-2021 J.F.
Prof. Yahya Z. Mohasseb Kurose, K.W. Ross All Rights
Reserved.-55
3.4 Principles of reliable data transfer
rdt2.1: discussion
sender: receiver:
seq # added to pkt must check if received packet is
two seq. #s (0,1) will suffice. Why? duplicate
• state indicates whether 0 or 1 is
must check if received ACK/NAK expected pkt seq #
corrupted
note: receiver can not know if its
twice as many states last ACK/NAK received OK at
• state must “remember” whether sender
“expected” pkt should have seq # of 0
or 1
ack0
• 1st ACK: Corrupted corrupt pkt0
Repeated, discard
• Retransmit: OK ack0 send ack0
rcv ack0
• ACK: Ok pkt1
send pkt1
• Second Packet: Corrupt NAK1
Pkt1: Corrupt
send NAK1
• NAK: OK
pkt1
• 2nd Retransmit: OK ack1 rcv pkt1
send ack1
• ACK: OK rcv ack1
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-62
3.4 Principles of reliable data transfer
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 0 from
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 Adapted from © 1996-2021 J.F.
Prof. Yahya Z. Mohasseb Kurose, K.W. Ross All Rights
Reserved.-63
3.4 Principles of reliable data transfer
rdt3.0 receiver
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
Extract(rcvpkt,data)
deliver_data(data) rdt_rcv(rcvpkt)
rdt_rcv(rcvpkt) udt_send(ACK[0]) && corrupt(rcvpkt)
&& corrupt(rcvpkt)
udt_send(ACK[1]) udt_send(ACK[0])
pkt1
(c) ACK loss
Transport Layer: 3-66 (d) premature timeout/ delayed ACK
3.4 Principles of reliable data transfer
rdt3.0 in action sender Rdt 3.0
pkt0
receiver
• Packet 0: Received OK
• ACK0: LOST timeout
• Retransmit: after timeout
resend pkt0 pkt0
duplicate pkt0,
• ACK: Ok ack0 discarded
• Packet 1: LOST rcv ack0 pkt1: lost
• Retransmit: OK send pkt1
• ACK1: OK
timeout
resend pkt1 pkt1
U L/R .008
sender
= = = 0.00027
RTT + L / R 30.008 microsec
onds
if RTT=30 msec, 1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link
network protocol limits use of physical resources!
sender receiver
first packet bit transmitted, t = 0
U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-74
3.4 Principles of reliable data transfer
Go-Back-N (GBN): sender
sender: “window” of up to N, consecutive transmitted but unACKed pkts
• k-bit seq # in pkt header
rcv_base
Not received
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-77
GBN: receiver extended FSM
ACKs for the first 3 packets delivered correctly. ACKs for the first 3 packets are lost and the
The sender moves forward & sends the 4th , 5th sender retransmits these packets. The receiver
and 6th packets, # 3, 0, and 1, respectively. thus next receives a packet with sequence number
Packet 3 is lost, but Packet number 0 arrives—a 0—a copy of the first packet sent.
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
packet containing new data. Kurose, K.W. Ross All Rights
Reserved.-86
Selective repeat: sender window
(after receipt)
receiver window
(after receipt)
a dilemma! 0123012
0123012
pkt0
pkt1 0123012
0123012 pkt2 0123012
0123012
example: 0123012 pkt3
X
seq #s: 0, 1, 2, 3 (base 4 counting) receiver can’t
0123012
pkt0 will accept packet
see sender side with seq number 0
window size=3 (a) no problem
receiver
behavior
identical in both
cases!
0something’s
123012 pkt0
Q: what relationship is needed 0(very)
1 2 3 0 1wrong!
2 pkt1 0123012
pkt2 X
between sequence # size and 0123012
X
0123012
0123012
window size to avoid problem X
timeout
in scenario (b)? retransmit pkt0
0123012 pkt0
will accept packet
with seq number 0
(b) oops!
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-87
Transport Layer 3-96
Transport Layer 3-97
Transport Layer 3-98
Transport Layer 3-99
Transport Layer 3-100
Transport Layer 3-103
ignore
User types‘C’
Seq=42, ACK=79, data = ‘C’
host ACKs receipt
of‘C’, echoes back ‘C’
Seq=79, ACK=43, data = ‘C’
host ACKs receipt
of echoed ‘C’
Seq=43, ACK=80 Piggybacking!
simple telnet scenario Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-110
3.5 Connection-Oriented Transport: TCP
3.5.3 Round-Trip Time Estimation and Timeout
350
RTT (milliseconds)
300
250
RTT (milliseconds)
exponential weighted moving 200
EstimatedRTT
exponentially fast
typical value: = 0.125
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
time (seconds)
SampleRTT Estimated RTT
Adapted from © 1996-2021 J.F. Kurose, K.W. Ross
Prof. Yahya Z. Mohasseb
All Rights Reserved.-112
3.5 Connection-Oriented Transport: TCP
3.5.3 Round-Trip Time Estimation and Timeout
timeout interval: EstimatedRTT plus “safety margin”
• large variation in EstimatedRTT: want a larger safety margin
TimeoutInterval = EstimatedRTT + 4*DevRTT
Prof. Yahya
* Check out the online interactive exercises for more examples: Z. Mohasseb
http://gaia.cs.umass.edu/kurose_ross/interactive/ Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-113
3.5 Connection-Oriented Transport: TCP
3.5.3 Round-Trip Time Estimation and Timeout
event: data received from application event: timeout
create segment with seq # retransmit segment that caused
seq # is byte-stream number of first timeout
data byte in segment restart timer
start timer if not already running event: ACK received
• think of timer as for oldest unACKed if ACK acknowledges
segment previously unACKed segments
• expiration interval: • update what is known to be
TimeOutInterval ACKed
• start timer if there are still
unACKed segments
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-114
3.5 Connection-Oriented Transport: TCP
3.5.4 Reliable Data Transfer
TCP: retransmission scenarios Host A Host B
premature timeout
Host A Host B
SendBase=92
Seq=92, 8 bytes of data
lost ACK scenario
Seq=100, 20 bytes of data
timeout
Seq=92, 8 bytes of data
ACK=100
timeout
ACK=100 ACK=120
X
Seq=92, 8
SendBase=100 bytes of data send cumulative
SendBase=120 ACK for 120
Seq=92, 8 bytes of data
ACK=120
SendBase=120
ACK=100
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-115
3.5 Connection-Oriented Transport: TCP
3.5.4 Reliable Data Transferm
TCP: retransmission scenarios
Host A Host B
cumulative ACK
covers for earlier lost
ACK
Seq=92, 8 bytes of data
timeout
so don’t wait for timeout!
Receipt of three duplicate ACKs
indicates 3 segments received Seq=100, 20 bytes of data
after a missing segment – lost
segment is likely. So retransmit!
Adapted from © 1996-2021 J.F. Kurose, K.W. Ross
Prof. Yahya Z. Mohasseb
All Rights Reserved.-117
Chapter 3: roadmap
Transport-layer services
Multiplexing and demultiplexing
Connectionless transport: UDP
Principles of reliable data transfer
Connection-oriented transport: TCP
• segment structure
• reliable data transfer
• flow control
• connection management
Principles of congestion control
TCP congestion control
Transport Layer: 3-118
3.5 Connection-Oriented Transport: TCP
3.5.5 TCP Flow Control application
from sender
network network
choose x
req_conn(x)
ESTAB
acc_conn(x)
ESTAB
data(x+1) accept
data(x+1)
ACK(x+1)
connection
x completes
No problem!
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-125
3.5 Connection-Oriented Transport: TCP
3.5.6 TCP Connection Management
2-way handshake scenarios
choose x
req_conn(x)
ESTAB
retransmit acc_conn(x)
req_conn(x)
ESTAB
req_conn(x)
connection
client x completes server
terminates forgets x
ESTAB
data(x+1) accept
data(x+1)
retransmit
data(x+1)
connection
x completes server
client
terminates forgets x
req_conn(x)
ESTAB
data(x+1) accept
data(x+1)
Problem: dup data
127 Prof. Yahya Z. Mohasseb
accepted!
3.5 Connection-Oriented Transport: TCP
3.5.6 TCP Connection Management
if carrying no data,
consumes no sequence number
Figure 24.10 Three-way handshaking 23.130
24.3.4 A TCP Connection (full-duplex)
1- Connection Establishment: TCP transmits data in mode.
SYN Flooding Attack (A denial of service attack)
Attackers send a large number of SYN segments from a different clients (faking the source
IP addresses).
The server runs out of resources and becomes unable to accept connection requests
23.131
24.3.4 A TCP Connection (full-duplex)
2- Data Transfer
Pushing Data
(from receiving TCP)
Urgent Data
(at receiving application)
Figure 24.11 Data transfer 23.132
24.3.4 A TCP Connection (full-duplex)
3-Connection Termination: A-Three-way handshaking
No sequence number
Does not carry data
no retransmissions needed R R
Host B
R/2
Q: What happens as
lout
delay
throughput:
approaches R/2?
lin R/2 lin R/2
maximum per-connection large delays as arrival rate lin
Transport Layer: 3-136 throughput: R/2 approaches capacity
3.6 Principles of Congestion Control
3.6.1 Causes/costs of congestion:
scenario 2
one router, finite buffers
sender retransmits lost, timed-out packet
• application-layer input = application-layer output: lin = lout
• transport-layer input includes retransmissions : l’in lin
R R
Host B finite shared output Adapted from © 1996-2021 J.F. Kurose, K.W. Ross
link buffers All Rights Reserved.-137
Prof. Yahya Z. Mohasseb
3.6 Principles of Congestion Control
3.6.1 Causes/costs of congestion: scenario 2
Idealization: some perfect knowledge
packets can be lost (dropped at router) due to full buffers
sender knows when packet has been dropped: only resends if packet
known to be lost
no buffer space!
R R
throughput: lout
Host A lin : original data
lout
copy l'in: original data, plus
retransmitted data
lin R/2
free buffer space!
R R
throughput: lout
full buffers retransmissions
R R
throughput: lout
due to un-needed
retransmissions
but sender can time out prematurely, sending two
copies, both of which are delivered when sending at
R/2, some packets
are
Host A lin : original data retransmissions,
timeout
copy l'in: original data, plus (needed & un-
retransmitted data needed duplicates).
lin
R/2
R R “costs” of congestion?
throughput: lout
due to un-needed
retransmissions
but sender can time out prematurely, sending two
copies, both of which are delivered when sending at
R/2, some packets
are
“costs”
Host A
of congestion:
lin : original data retransmissions,
moretimeout
work
copy (retransmission)
l'in: originalfor given
data, plus receiver (needed & un-
needed duplicates).
throughput retransmitted data
lin
R/2
unneeded retransmissions: link carries multiple
copies of a packet free buffer space!
• decreasing maximum achievable throughput
R R
Host D
lout
Host C
lin’ R/2
throughput: lout
throughput can never exceed capacity
delay
lout
loss/retransmission decreases effective throughput
throughput:
R/2
throughput: lout
lout
wasted for packets lost downstream
lin R/2
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F. Kurose, K.W. Ross
All Rights Reserved.-145 lin’ R/2
3.6 Principles of Congestion Control
3.6.2 Approaches to Congestion Control
1. End-end congestion control:
• no explicit feedback from network
• congestion inferred from observed
loss, delay
AIMD sawtooth
behavior: probing
for bandwidth
Adapted from © 1996-2021 J.F. Kurose, K.W.
time Ross All Rights Reserved.-149
3.7 TCP Congestion Control
3.7.1 Classic TCP Congestion Control: AIMD
Multiplicative decrease detail: sending rate is
Cut in half on loss detected by triple duplicate ACK (TCP Reno)
Cut to 1 MSS (maximum segment size) when loss detected by
timeout (TCP Tahoe)
Why AIMD?
AIMD – a distributed, asynchronous algorithm – has been
shown to:
• optimize congested flow rates network wide!
• have desirable stability properties
RTT
• initially cwnd = 1 MSS
• double cwnd every RTT
• done by incrementing cwnd for
every ACK received
summary: initial rate is
slow, but ramps up
exponentially fast time
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-152
3.7 TCP Congestion Control
3.7.1 Classic TCP Congestion Control:
Slow Start/congestion avoidance
Q: when should the exponential
increase switch to linear? X
A: when cwnd gets to 1/2 of its value
before timeout.
Implementation:
variable ssthresh
on loss event, ssthresh is set to
1/2 of cwnd just before loss event
* Check out the online interactive exercises for more examples: http://gaia.cs.umass.edu/kurose_ross/interactive/
Prof. Yahya Z. Mohasseb Adapted from © 1996-2021 J.F.
Kurose, K.W. Ross All Rights
Reserved.-153
Summary: TCP congestion control
New
New ACK!
ACK! new ACK
duplicate ACK
dupACKcount++ new ACK .
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
cwnd = cwnd+MSS transmit new segment(s), as allowed
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 duplicate ACK
timeout dupACKcount = 0 dupACKcount++
ssthresh = cwnd/2 retransmit missing segment
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment New
timeout
ACK!
ssthresh = cwnd/2
cwnd = 1 New ACK
dupACKcount = 0
cwnd = ssthresh dupACKcount == 3
dupACKcount == 3 retransmit missing segment dupACKcount = 0
ssthresh= cwnd/2 ssthresh= cwnd/2
cwnd = ssthresh + 3 cwnd = ssthresh + 3
retransmit missing segment retransmit missing segment
fast
recovery
duplicate ACK
Prof. Yahya Z. Mohasseb cwnd = cwnd + MSS Adapted from © 1996-2021 J.F.
transmit new segment(s), as allowed Kurose, K.W. Ross All Rights
Reserved.-154
24.3.9 TCP Congestion Control
1-Congestion Window
23.155
24.3.9 TCP Congestion Control
2-Congestion Detection
23.156
24.3.9 TCP Congestion Control
3-Congestion Policies: based on three algorithms
A. Slow Start (SS): Exponential Increase until it reaches a threshold (ssthresh)
If an ACK arrives,
cwnd = cwnd + 1
If an ACK arrives,
cwnd = cwnd + 1
23.158
24.3.9 TCP Congestion Control
3-Congestion Policies: based on three algorithms
B. Congestion Avoidance: (CA)
slow down to a linear increase (Additive) until congestion is detected.
If an ACK arrives,
cwnd = cwnd + (1/cwnd)
23.160
24.3.9 TCP Congestion Control
4-Policy Transition: three versions of TCP: Taho TCP, Reno TCP, and Ne
A. Taho TCP
However, the maximum is twice the value of the minimum (cwnd is set to half of its previous value)
Throughput=(0.75) Wmax /RTT
in which Wmax is the average of window sizes when the congestion occurs.
However, the maximum is twice the value of the minimum (cwnd is set to half of its previous value)
Throughput=(0.75) Wmax /RTT
in which Wmax is the average of window sizes when the congestion occurs.
Example 24.11
If MSS = 10 KB (kilobytes) and RTT = 100 ms in Figure 24.35, we can calculate the throughput as:
Throughput = (0.75 Wmax / RTT) = 0.75 × 960 kbps / 100 ms = 7.2 Mbps
23.167
TCP CUBIC
Is there a better way than AIMD to “probe” for usable bandwidth?
Insight/intuition:
• Wmax: sending rate at which congestion loss was detected
• congestion state of bottleneck link probably (?) hasn’t changed much
• after cutting rate/window in half on loss, initially ramp to to Wmax faster, but then
approach Wmax more slowly
servers time
t0 t1 t2 t3 t4
Transport Layer: 3-169
TCP and the congested “bottleneck link”
TCP (classic, CUBIC) increase TCP’s sending rate until packet loss occurs
at some router’s output: the bottleneck link
source destination
application application
TCP TCP
network network
link link
physical physical
packet queue almost
never empty, sometimes
overflows packet (loss)
ECN=10 ECN=11
IP datagram
Transport Layer: 3-174
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 connection 2 router
capacity R
Connection 1 throughput R
Transport Layer: 3-176
Fairness: must all network apps be “fair”?
Fairness and UDP Fairness, parallel TCP
multimedia apps often do not connections
use TCP application can open multiple
• do not want rate throttled by
congestion control parallel connections between two
hosts
instead use UDP:
• send audio/video at constant rate, web browsers do this , e.g., link of
tolerate packet loss rate R with 9 existing connections:
there is no “Internet police” • new app asks for 1 TCP, gets rate R/10
policing use of congestion • new app asks for 11 TCPs, gets R/2
control
Network IP IP
TCP handshake
(transport layer) QUIC handshake
data
TLS handshake
(security)
data
GET GET
HTTP
GET QUIC QUIC QUIC QUIC QUIC QUIC
encrypt encrypt encrypt encrypt encrypt encrypt
QUIC QUIC QUIC QUIC QUIC QUIC
TLS encryption TLS encryption RDT RDT RDT RDT
error!
RDT RDT
SYN
SYN sent
rcvd
SYNACK(seq=y,ACKnum=x+1)
ESTAB
ACK(ACKnum=y+1) ACK(ACKnum=y+1)
L
LAST_ACK
FINbit=1, seq=y
TIMED_WAIT can no longer
send data
ACKbit=1; ACKnum=y+1
timed wait
for 2*max CLOSED
segment lifetime
CLOSED
W/2
TCP over “long, fat pipes”
example: 1500 byte segments, 100ms RTT, want 10 Gbps throughput
requires W = 83,333 in-flight segments
throughput in terms of segment loss probability, L [Mathis 1997]:
1.22 . MSS
TCP throughput =
RTT L
➜ to achieve 10 Gbps throughput, need a loss rate of L = 2·10-10 – a
very small loss rate!
versions of TCP for long, high-speed scenarios