CAN201 - Lecture 5
CAN201 - Lecture 5
Introduction to Networking Module Leader: Dr. Wenjun Fan & Dr. Fei Cheng
0
Lecture 5 – Transport Layer (2)
• Roadmap
1. Pipelined communication
2. TCP: connection-oriented transport
3. Principles of congestion control
1
rdt3.0: stop-and-wait operation
sender receiver
first packet bit transmitted, t = 0
last packet bit transmitted, t = L / R
U L/R .008
sender = = = 0.00027
RTT + L / R 30.008
2
Question
• How to increase utilization?
3
km
Urumqi
Shanghai
4
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
data pkgs
data pkg
ACK pkgs
U 3L / R .024
sender
= = = 0.0008
RTT + 3L / R 30.024
6
Two forms: Go-Back-N and Selective repeat
Go-back-N (GBN): Selective Repeat (SR):
• Sender can have up to • Sender can have up to N
N unacked packets in unacked packets in
pipeline pipeline
• Receiver only sends • Rcvr sends individual
cumulative ack ack for each packet
• Doesn’t ack packet if
there’s a gap
• Sender has timer for • Sender maintains timer
oldest unacked packet for each unacked packet
• When timer expires, • When timer expires,
retransmit all unacked retransmit only that
packets unacked packet
7
Go-Back-N: sender
• k-bit seq # in pkt header
• “window” of up to N, consecutive unacked pkts allowed
8
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
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 9
start_timer
GBN: receiver extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait 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 # 10
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
11
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
12
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
13
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
14
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
15
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
16
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
17
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
18
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
19
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
20
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
21
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
22
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
23
Selective repeat: sender, receiver windows
next_seq_num
send_base
sender
view
Window size
N
rcv_base
receiver
view
Window size
N Received
24
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
• In-order: deliver (also
timeout(n): deliver buffered, in-order
• Resend pkt n, restart timer pkts), advance window to
next not-yet-received pkt
ACK(n) in [sendbase,sendbase+N]:
pkt n in [rcvbase-N,rcvbase-1]
• Mark pkt n as received
• ACK(n)
• If n smallest unACKed pkt,
advance window base to otherwise:
next unACKed seq # • Ignore
25
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
• Roadmap
1. Pipelined communication
2. TCP: connection-oriented transport
3. Principles of congestion control
28
TCP: Overview RFCs: 793,1122,1323, 2018, 2581
30
vs UDP structure
32 bits
source port # dest port #
length checksum
application
data
(payload)
31
TCP segment structure
32 bits
URG: urgent data Counting by bytes of
(generally not used) source port # dest port #
data (not segments!)
sequence number
ACK: ACK #
valid acknowledgement number
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)
32
TCP seq. numbers, ACKs outgoing segment from sender
source port # dest port #
sequence number
Sequence numbers: acknowledgement number
rwnd
• Byte stream “number” of first byte checksum urg pointer
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
34
Send from client
35
ACK from server
36
Send from server
37
TCP round trip time, timeout
Q: How to set TCP timeout Q: How to estimate RTT?
value? • SampleRTT: measured time
• Longer than RTT from segment transmission
• But RTT varies until ACK receipt
• Ignore retransmissions
• Too short: premature • SampleRTT will vary, want
timeout, unnecessary estimated RTT “smoother”
retransmissions • Average several recent
• Too long: slow reaction to measurements, not just current
SampleRTT
segment loss
38
TCP round trip time, timeout
EstimatedRTTn = (1- )*EstimatedRTTn-1 + *SampleRTT
350
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 (seconds)
time (seconnds)
(Dev = Deviation) 40
TCP reliable data transfer
• TCP creates rdt service on top
of IP’s unreliable service
• pipelined segments let’s initially consider
• cumulative acks simplified TCP sender:
• ignore duplicate acks
• single retransmission timer
• ignore flow control,
• Retransmissions triggered by: congestion control
• timeout events
• duplicate acks
41
Crystal oscillator
42
TCP sender events:
Data rcvd from app: Timeout:
• Create segment with seq # • Retransmit segment that caused
• Seq # is byte-stream timeout
number of first data byte • Restart timer
in segment Ack rcvd:
• Start timer if not already • If ack acknowledges previously
running unacked segments
• Think of timer as for oldest • Update what is known to be ACKed
unacked segment • Start timer if there are still unacked
• Expiration interval: segments
TimeOutInterval
43
TCP sender (simplified)
data received from application above
create segment, seq. #: NextSeqNum
pass segment to IP (i.e., “send”)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
NextSeqNum = InitialSeqNum wait
SendBase = InitialSeqNum for
event timeout
retransmit not-yet-acked segment
with smallest seq. #
start timer
ACK received, with ACK field value y
if (y > SendBase) {
SendBase = y
/* SendBase–1: last cumulatively ACKed byte */
if (there are currently not-yet-acked segments)
start timer
else stop timer
} 44
TCP: retransmission scenarios
Host A Host B Host A Host B
SendBase=92
Seq=92, 8 bytes of data Seq=92, 8 bytes of data
timeout
ACK=100
X
ACK=100
ACK=120
SendBase=120
ACK=100
X
ACK=120
cumulative ACK
46
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
47
TCP fast retransmit
• Time-out period often
TCP fast retransmit
relatively long: if sender receives 3
• Long delay before ACKs for same data
resending lost packet (“triple duplicate ACKs”),
• Detect lost segments via resend unacked
duplicate ACKs. segment with smallest
seq #
• Sender often sends many
• likely that unacked
segments back-to-back segment lost, so don’t
• If segment is lost, there wait for timeout
will likely be many
duplicate ACKs.
48
TCP fast retransmit
Host A Host B
ACK=100
timeout
ACK=100
ACK=100
ACK=100
Seq=100, 20 bytes of data
IP
code
from sender
51
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)
52
SYN: Window Scale factor
53
Calculated Window Size = 6379 x 64 = 408256
54
Connection Management
Before exchanging data, sender/receiver “handshake”:
• Agree to establish connection (each knowing the other willing to
establish connection) Agree on connection parameters
application application
network network
choose x
req_conn(x)
ESTAB
acc_conn(x)
ESTAB
56
Agreeing to establish a connection
2-way handshake failure scenarios:
choose x choose x
req_conn(x) req_conn(x)
ESTAB ESTAB
retransmit acc_conn(x) retransmit acc_conn(x)
req_conn(x) req_conn(x)
ESTAB ESTAB
data(x+1) accept
req_conn(x)
retransmit data(x+1)
data(x+1)
connection connection
client x completes server x completes server
client
terminates forgets x terminates forgets x
req_conn(x)
ESTAB ESTAB
data(x+1) accept
half open connection!
data(x+1)
(no client!) 57
TCP 3-way handshake
client state server state
LISTEN LISTEN
choose init seq num, x
send TCP SYN msg
SYNSENT SYNbit=1, Seq=x
choose init seq num, y
send TCP SYNACK
msg, acking SYN SYN RCVD
SYNbit=1, Seq=y
ACKbit=1; ACKnum=x+1
received SYNACK(x)
ESTAB indicates server is live;
send ACK for SYNACK;
this segment may contain ACKbit=1, ACKnum=y+1
client-to-server data
received ACK(y)
indicates client is live
ESTAB
58
3-way handshake
59
TCP 3-way handshake: FSM
closed
Socket connectionSocket =
welcomeSocket.accept();
Socket clientSocket =
SYN(x) newSocket("hostname","port
number");
SYNACK(seq=y,ACKnum=x+1)
create new socket for SYN(seq=x)
communication back to client listen
SYN SYN
rcvd sent
SYNACK(seq=y,ACKnum=x+1)
ESTAB ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
60
TCP: closing a connection
• Client, server each close their side of connection
• Send TCP segment with FIN bit = 1
• Respond to received FIN with ACK
• On receiving FIN, ACK can be combined with own FIN
• Simultaneous FIN exchanges can be handled
61
TCP: closing a connection
client state server state
ESTAB ESTAB
clientSocket.close()
FIN_WAIT_1 can no longer FINbit=1, seq=x
send but can
receive data CLOSE_WAIT
ACKbit=1; ACKnum=x+1
can still
FIN_WAIT_2 wait for server send data
close
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
62
3-way for connection
63
Lecture 5 – Transport Layer (1)
• Roadmap
1. Pipelined communication
2. TCP: connection-oriented transport
3. Principles of congestion control
64
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!
65
Causes/costs of congestion: scenario 1
• Two senders, two original data: in throughput: out
receivers
• One router, infinite
Host A
R/2
delay
out
Host A
out
buffers available
in R/2
A
no buffer space!
Host B
69
Causes/costs of congestion: scenario 2
R/2
Idealization: known loss
packets can be lost, dropped at router due
out
to full buffers
• Sender only resends if packet known to be lost
in R/2
A
free buffer space!
Host B
70
Causes/costs of congestion: scenario 2
Realistic: duplicates R/2
out
retransmissions
including duplicated
• Sender times out prematurely, sending that are delivered!
two copies, both of which are delivered in R/2
in
timeout
copy 'in out
A
free buffer space!
Host B 71
Causes/costs of congestion: scenario 2
Realistic: duplicates R/2
out
retransmissions
including duplicated
• Sender times out prematurely, sending that are delivered!
two copies, both of which are delivered in R/2
“costs” of congestion:
• More work (retrans) for given “goodput”
• Unneeded retransmissions: link carries multiple copies of pkt
• decreasing goodput
72
Causes/costs of congestion: scenario 3
Q: what happens as in and in’
• Four senders increase ?
• Multi-hop paths A: as red in’ increases, all arriving
• Timeout/retransmit blue pkts at upper queue are
dropped, blue throughput -> 0
Host A
in : original data out
Host B
'in: original data, plus
retransmitted data
finite shared output
link buffers
R1
Host D
R4 Host C
R2
R3
73
Causes/costs of congestion: scenario 3
75
Thanks.
76