You are on page 1of 38

Computer Networks: Transport

Layer

understand principles behind transport layer services:


multiplexing/demultiplexing
reliable data transfer
flow control
congestion control
learn about transport layer protocols in the Internet:
UDP: connectionless transport
TCP: connection-oriented transport
TCP congestion control

Transport Layer 2

1
Outline
 Transport-layer  Connection-oriented
services transport: TCP
 Multiplexing and  segment structure
demultiplexing  reliable data transfer
flow control
 Connectionless

connection management
transport: UDP 

 Principles of congestion
 Principles of reliable
data transfer control
 TCP congestion control

Transport Layer 3

Transport services and protocols


application
transport
 provide logical communication network
data link
between app processes physical

running on different hosts


 transport protocols run in
end systems
 send side: breaks app
messages into segments,
passes to network layer
 rcv side: reassembles 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 Layer 4

2
Transport vs. network layer
 network layer: logical Household analogy:
communication 12 kids sending letters to
between hosts 12 kids
 transport layer: logical  processes = kids
communication  app messages = letters
between processes in envelopes
 relies on, enhances,  hosts = houses
network layer services
 transport protocol =
Ann and Bill
 network-layer protocol
= postal service

Transport Layer 5

Internet transport-layer protocols


 reliable, in-order
application
transport
network
delivery (TCP) data link
physical
network
 congestion control data link
network
physical
data link
 flow control physical

 connection setup
 unreliable, unordered
network
data link
physicalnetwork
delivery: UDP data link
physical
 no-frills extension of network
data link
“best-effort” IP
application
physical network transport
data link network
 services not available: physical data link
physical

 delay guarantees
 bandwidth guarantees

Transport Layer 6

3
Multiplexing/demultiplexing
Demultiplexing at rcv host: Multiplexing at send host:
gathering data from multiple
delivering received segments
sockets, enveloping data with
to correct socket
header (later used for
demultiplexing)
= socket = process

P3 P1
P1 P2 P4 application
application application

transport transport transport

network network network

link link link

physical physical physical

host 2 host 3
host 1
Transport Layer 7

How demultiplexing works


 host receives IP datagrams
 each datagram has source IP
address, destination IP 32 bits
address
 each datagram carries 1 source port # dest port #
transport-layer segment
 each segment has source,
destination port number
other header fields
 host uses IP addresses & port
numbers to direct segment to
appropriate socket

application
data
(message)

TCP/UDP segment format

Transport Layer 8

4
Connectionless demultiplexing
 When host receives UDP
 Create sockets with port
segment:
numbers:
DatagramSocket mySocket1 = new  checks destination port
DatagramSocket(12534); number in segment
DatagramSocket mySocket2 = new  directs UDP segment to
DatagramSocket(12535); socket with that port
number
 UDP socket identified by
two-tuple:  IP datagrams with
different source IP
(dest IP address, dest port number)
addresses and/or source
port numbers directed
to same socket

Transport Layer 9

Connectionless demux (cont)


DatagramSocket serverSocket = new DatagramSocket(6428);

P2 P1
P1
P3

SP: 6428 SP: 6428


DP: 9157 DP: 5775

SP: 9157 SP: 5775


client DP: 6428
server
DP: 6428 Client
IP: A IP: C IP:B

SP provides “return address”

Transport Layer 10

5
Connection-oriented demux
 TCP socket identified  Server host may support
by 4-tuple: many simultaneous TCP
 source IP address sockets:
 source port number  each socket identified by
 dest IP address its own 4-tuple
 dest port number  Web servers have
 receiving host uses all different sockets for
four values to direct each connecting client
segment to appropriate  non-persistent HTTP will
socket have different socket for
each request

Transport Layer 11

Connection-oriented demux
(cont)

P1 P4 P5 P6 P2 P1P3

SP: 5775
DP: 80
S-IP: B
D-IP:C

SP: 9157 SP: 9157


client DP: 80
server
DP: 80 Client
IP: A S-IP: A
IP: C S-IP: B IP:B
D-IP:C D-IP:C

Transport Layer 12

6
Connection-oriented demux:
Threaded Web Server

P1 P4 P2 P1P3

SP: 5775
DP: 80
S-IP: B
D-IP:C

SP: 9157 SP: 9157


client DP: 80 DP: 80 Client
server
IP: A S-IP: A
IP: C S-IP: B IP:B
D-IP:C D-IP:C

Transport Layer 13

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

Transport Layer 14

7
UDP: more
 often used for streaming
multimedia apps 32 bits

 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

Transport Layer 15

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 ….

Transport Layer 16

8
Bitwise Operations

Transport Layer 17

Left and Right Shift Operators

The >> operator shifts a variable to the right and the


<< operator shifts a variable to the left. Zeros are shifted
into vacated bits, but with signed data types, what
happens with sign bits is platform dependant.

The number of bit positions these operators shift the value


on their left is specified on the right of the operator. Uses
include fast multiplication or division of integers by
integer powers of 2, e.g. 2,4,8,16 etc.

9
Left and right shift example

#include <stdio.h>
int main(void){
unsigned int a=16;
printf("%d\t",a>>3); /* prints 16 divided by 8 */
printf("%d\n",a<<3); /* prints 16 multiplied by 8 */
return 0;
}

output: 2 128

Bitwise AND and inclusive OR

Single & and | operators (bitwise AND and OR)‫‏‬


work differently from logical AND and OR
( && and || ). You can think of the logical operators
as returning a single 1 for true, and 0 for false.

The purpose of the & and | bitwise operators is to


return a resulting set of output 1s and 0s based on
the boolean AND or OR operations between
corresponding bits of the input.

10
AND
 The & operator performs a bitwise AND on
two integers. Each bit in the result is 1 only
if both corresponding bits in the two input
operands are 1.
 For example, 0x56 & 0x32 is 0x12, because
(in binary):
01010110
&00110010
---------------
00010010

OR
 The & operator performs a bitwise AND on
two integers. Each bit in the result is 1 only
if both corresponding bits in the two input
operands are 1.
 For example, 0x56 & 0x32 is 0x12, because
(in binary):
01010110
&00110010
---------------
00010010
Transport Layer 22

11
Bitwise exclusive OR operator

Symbol: ^

For each bit of output, this output is a 1 if


corresponding bits of input are different, and the
output is a 0 if the input bits are the same.

XOR
 The ^ (caret) operator performs a bitwise
exclusive-OR on two integers. Each bit in
the result is 1 if one, but not both, of the
corresponding bits in the two input
operands is 1.
 For example, 0x56 ^ 0x32 is 0x64:
01010110
^00110010
---------------
01100100

12
One's complement operator

Symbol: ~

This is a unary operator in the sense that it works


on a single input value. The bit pattern output is
the opposite of the bit pattern input - with input 1s
becoming output 0s and input 0s becoming output
1s.

Complement
 The ~ (tilde) operator performs a bitwise
complement on its single integer operand. (The
~ operator is therefore a unary operator, like !
and the unary -, &, and * operators.)
Complementing a number means to change all
the 0 bits to 1 and all the 1s to 0s.
 For example, assuming 16-bit integers, ~0x56
is 0xffa9:
~0000000001010110
-------------------------------
1111111110101001

13
Internet Checksum Example
 Note
 When adding numbers, a carryout from the
most significant bit needs to be added to the
result
 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
27

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)
Transport Layer 3-28

14
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)
Transport Layer 3-29

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)
Transport Layer 3-30

15
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

Transport Layer 3-31

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

Transport Layer 3-32

16
Rdt2.0: channel with bit errors
 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

Transport Layer 3-33

rdt2.0 has a fatal flaw!


What happens if Handling duplicates:
ACK/NAK corrupted?  sender retransmits current
 sender doesn‟t know what pkt if ACK/NAK garbled
happened at receiver!  sender adds sequence
 can‟t just retransmit: number to each pkt
possible duplicate  receiver discards (doesn‟t
deliver up) duplicate pkt

stop and wait


Sender sends one packet,
then waits for receiver
response

Transport Layer 3-34

17
rdt2.1: discussion
Sender: Receiver:
 seq # added to pkt  must check if received
 two seq. #‟s (0,1) will packet is duplicate
suffice. Why?  state indicates whether
0 or 1 is expected pkt
 must check if received seq #
ACK/NAK corrupted
 note: receiver can not
 twice as many states know if its last
 state must “remember” ACK/NAK received OK
whether “current” pkt
at sender
has 0 or 1 seq. #

Transport Layer 3-35

rdt2.2: a NAK-free protocol

 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

Transport Layer 3-36

18
rdt3.0: channels with errors and loss

New assumption: Approach: sender waits


underlying channel can “reasonable” amount of
also lose packets (data time for ACK
or ACKs)  retransmits if no ACK
 checksum, seq. #, ACKs, received in this time
retransmissions will be  if pkt (or ACK) just delayed
of help, but not enough (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

Transport Layer 3-37

rdt3.0 in action

Transport Layer 3-38

19
rdt3.0 in action

Transport Layer 3-39

rdt3.0: stop-and-wait operation


sender receiver
first packet bit transmitted, t = 0
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
= = = 0.00027
sender 30.008
RTT + L / R microsec
onds

Transport Layer 3-40

20
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

 Two generic forms of pipelined protocols: go-Back-N,


selective repeat
Transport Layer 3-41

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
= = = 0.0008
sender 30.008
RTT + L / R microsecon
ds
Transport Layer 3-42

21
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

Transport Layer 3-43

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

Transport Layer 3-44

22
GBN in
action

Transport Layer 3-45

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

Transport Layer 3-46

23
Selective repeat: sender, receiver windows

Transport Layer 3-47

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]: 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-48

24
Selective repeat in action

Transport Layer 3-49

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?
Transport Layer 3-50

25
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
steam:  MSS: maximum segment
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:
 sender will not
application application
writes data reads data
socket socket

overwhelm receiver
door door
TCP TCP
send buffer receive buffer
segment

Transport Layer 3-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
UA P 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-52

26
TCP seq. #‟s and ACKs
Seq. #‟s:
Host A Host B
 byte stream
“number” of first User
types
byte in segment‟s „C‟
data host ACKs
receipt of
ACKs: „C‟, echoes
 seq # of next byte back „C‟
expected from
other side host ACKs
 cumulative ACK receipt
of echoed
Q: how receiver handles „C‟
out-of-order segments
 A: TCP spec doesn‟t
time
say, - up to
simple telnet scenario
implementer
Transport Layer 3-53

TCP reliable data transfer


 TCP creates rdt  retransmissions are
service on top of IP‟s triggered by:
unreliable service  timeout events
 pipelined segments  duplicate ACKs
 cumulative ACKs  initially consider

 TCP uses single


simplified TCP sender:
ignore duplicate ACKs
retransmission timer 
 ignore flow control,
congestion control

Transport Layer 3-54

27
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
TimeOutInterval outstanding segments

Transport Layer 3-55

TCP: retransmission scenarios


Host A Host B Host A Host B
Seq=92 timeout
timeout

X
loss

Sendbase
= 100
Seq=92 timeout

SendBase
= 120

SendBase
= 100 SendBase
= 120 premature timeout
time time
lost ACK scenario
Transport Layer 3-56

28
TCP retransmission scenarios (more)
Host A Host B

timeout

X
loss

SendBase
= 120

time
Cumulative ACK scenario

Transport Layer 3-57

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 is lost, there
will likely be many
duplicate ACKs for that
segment

Transport Layer 3-58

29
Host A Host B

seq # x1
seq # x2
seq # x3
ACK x1
seq # x4 X
seq # x5
ACK x1
ACK x1
ACK x1
triple
duplicate
ACKs
timeout

time

Transport Layer 3-59

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
unused buffer
datagrams space
(in buffer) process service: matching
send rate to receiving
application‟s drain rate
 app process may be
slow at reading from
buffer
Transport Layer 3-60

30
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
number");
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

Transport Layer 3-61

TCP Connection Management (cont.)

Closing a connection: client server

close
client closes socket:
clientSocket.close();

Step 1: client end system close


sends TCP FIN control
segment to server

Step 2: server receives


timed wait

FIN, replies with ACK.


Closes connection, sends
FIN. closed

Transport Layer 3-62

31
TCP Connection Management (cont.)

Step 3: client receives FIN, client server


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

timed wait
Note: with small
closed
modification, can handle
simultaneous FINs.
closed

Transport Layer 3-63

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!

Transport Layer 3-64

32
Approaches towards congestion control
two broad approaches towards congestion control:

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

Transport Layer 3-65

Case study: ATM ABR congestion control

ABR: available bit rate: RM (resource management)


 “elastic service” cells:
 if sender‟s path  sent by sender, interspersed
“underloaded”: with data cells
 sender should use  bits in RM cell set by switches
available bandwidth (“network-assisted”)
 if sender‟s path  NI bit: no increase in rate
congested: (mild congestion)
 sender throttled to  CI bit: congestion
minimum guaranteed indication
rate  RM cells returned to sender by
receiver, with bits intact

Transport Layer 3-66

33
Case study: ATM ABR congestion control

 two-byte ER (explicit rate) field in RM cell


 congested switch may lower ER value in cell
 sender‟ send rate thus maximum supportable rate on path
 EFCI bit in data cells: set to 1 in congested switch
 if data cell preceding RM cell has EFCI set, sender sets CI
bit in returned RM cell

Transport Layer 3-67

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

Transport Layer 3-68

34
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

TCP‟s
X “sawtooth”
behavior

time

 Q: how fast to increase/decrease?


 details to follow Transport Layer 3-69

TCP Congestion Control: details

 sender limits rate by limiting number


of unACKed bytes “in pipeline”:
LastByteSent-LastByteAcked  cwnd

cwnd
 roughly, bytes

cwnd
rate = bytes/sec
RTT
RTT
 cwnd is dynamic, function of
perceived network congestion ACK(s)

Transport Layer 3-70

35
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
getting through (recall  congestion avoidance:
 increase linearly
fast retransmit)
 cut cwnd in half, less
aggressively than on
timeout

Transport Layer 3-71

TCP Slow Start


 when connection begins, cwnd =
1 MSS Host A Host B
 example: MSS = 500 Bytes
& RTT = 200 msec
RTT

 initial rate = 20 kbps


 available bandwidth may be >>
MSS/RTT
 desirable to quickly ramp up
to respectable rate
 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
Transport Layer 3-72

36
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
timeout dupACKcount = 0
retransmit missing segment
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment

Transport Layer 3-73

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
decrease
AIMD: Additive Increase
Multiplicative Decrease

Transport Layer 3-74

37
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.

Transport Layer 3-75

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
Transport Layer 3-76

38

You might also like