chapter 3 transport layer - burapha university
TRANSCRIPT
Transport Layer 3-1
Chapter 3 Transport Layer
Computer Networking A Top Down Approach
6th edition Jim Kurose Keith Ross
Addison-Wesley March 2012
āļāļēāļĢāđāļāļŠāđāļĨāļ
āđāļāļāļŦāļēāđāļāļŠāđāļĨāļāđāļŦāļĨāļēāļāļāļāđāļāļĨāļĄāļēāļāļēāļāļŠāđāļĨāļāļāļāļāļāļāļāļĢāļ°āļāļāļāļŦāļāļāļŠāļāļāļāļāļāđāļāļāļāļ Kurose āđāļĨāļ° Ross
āļāđāļāļĨāļāļāļāļēāļāđāļŦāļāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāđāļāļŠāđāļĨāļāļāļāļŦāļĄāļāđāļ āļāļāļāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļāļ āļēāļāđāļāļĨāļāļāđāļŦāļ§ āļŠāļēāļĄāļēāļĢāļāđāļāļĄ
āđāļāđāļ āđāļĨāļ° āļĨāļāļŠāđāļĨāļ (āļāļāļĢāļ§āļĄāļāļāļāļ§āļēāļĄāļ) āđāļĨāļ°āđāļāļāļŦāļēāļāļāļāļŠāđāļĨāļāđāļāļāđāļŦāđāļŦāļĄāļēāļ°āļāļāļāļ§āļēāļĄāļāļāļāļāļēāļĢāļāļāļāļāļēāļ
āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļ āđāļĢāļēāļāļāļāļāļēāļĢāļŠāļāļāļāđāļāļāđāļāļēāļāļ
bull āļāļēāļāļēāļāđāļāļŠāđāļĨāļāđāļŦāļĨāļēāļ (āđāļāļāļāļ§āļāļĒāļēāļ āđāļāļŦāļāļāđāļĢāļĒāļ) āļāļĒāļēāļĨāļĄāļāļĨāļēāļ§āļāļāļāļĄāļēāļāļāļāļŠāđāļĨāļ (āļŦāļĨāļāļāļēāļāļ
āđāļĢāļēāļāļāļāļāļēāļĢāđāļŦāļāļāļāļāļāļāļŦāļāļāđāļĨāļ°āđāļāļŦāļāļāļŠāļāļāļāļāļāđāļāļāļāļēāļāļāļēāļ)
bull āļāļēāļāļāđāļāļŠāļāļŠāđāļĨāļāđāļ āđ āđāļāđāļ§āļ āļāļĒāļēāļĨāļĄāļāļĨāļēāļ§āļāļāļ§āļē āļāļāđāļāđāļāļāļēāļāļŠāđāļĨāļāļāļāļāļāļāļāļāļāđāļĢāļē āđāļĨāļ° āļĢāļ°āļ
āļāļāļĨāļāļŠāļāļāļāļāļāđāļĢāļēāļāļ§āļĒ
āļāļāļāļāļāļāļāđāļĨāļ°āļāļāđāļŦāļŠāļāļ
āļāļāļāļāļ āļĨāļĨāļēāļāļĢāļ°āļāļĨ āļāđāļĢāļĒāļāđāļĢāļĒāļ āļŠāļāļ§āļāļĨāļāļŠāļāļ 2013 āđāļāļāļŦāļēāļāļāļŦāļĄāļāđāļāļāļĨāļāļŠāļāļāļāļāļāļāļāļ°āļ§āļāļĒāļāļēāļĢāļŠāļēāļĢāļŠāļāđāļāļĻ
Transport Layer 3-2
Chapter 3 Transport Layer
āđāļāļēāļŦāļĄāļēāļĒ āđāļāļēāđāļāļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļāļāļāļēāļĢ
āđāļŦāļāļĢāļāļēāļĢāļāļ Transport āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing demultiplexing)
āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (reliable data transfer)
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ (flow control)
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāđāļāļĢāļāļāļēāļĒ (congestion control)
āđāļĢāļĒāļāļĢāđāļāļĒāļ§āļāļāđāļāļĢāđāļāļāļāļĨāđāļāļāļ
Transport āļāļāļ Internet UDP āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ
(connectionless transport) TCP āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ āđāļāļāļāļāļĄāļāļēāļĢ
āđāļāļāļĄāļāļāļāļāļ (connection-oriented reliable transport)
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP
Transport Layer 3-3
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-4
Transport services and protocols
āđāļŦāļāļĢāļāļēāļĢāļāļēāļĢāļŠāļāļŠāļēāļĢāļāđāļāļāļĄ (āđāļāļ logic) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠāļāļāļāđāļāļāļāļĨāđāļāļāļāļāļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļēāļāđ
transport protocols āļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļŠāļ āļ āļēāļāļēāļĢāđāļĒāļ
āļāļāļĄāļĨāļāļāļāđāļāļ segments āđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ network layer
āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļĢāļ āļĢāļ§āļāļĢāļ§āļĄ segments āđāļĨāļ°āļāļĢāļ°āļāļāļāđāļŦāđāļāļāļāļāļāļ§āļēāļĄāđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ app
āļĄāđāļāļĢāđāļāļāļāļĨāļāđāļŦāļāļĢāļāļēāļĢāđāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļāļāđāļāļĢāđāļāļāļāļĨ Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
āļāļ Transport vs āļāļ Network
āļāļ network āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ
āļāļ transport āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠ āđāļāļāļĢāļāļēāļĢāļāļ§āļĒ āđāļĨāļ° āļāļ§āļĒāđāļŠāļĢāļĄ
āļāļĢāļāļēāļĢāļāļāļāļāļ network
āđāļāļ 12 āļāļāđāļāļāļēāļ Ann āļŠāļāļāļāļŦāļĄāļēāļĒ 12 āļāļāļāđāļāļŦāļēāđāļāļ 12 āļāļāđāļāļāļēāļāļāļāļ Bill
āđāļāļĢāļāļ = āļāļēāļ āđāļāļĢāđāļāļŠ = āđāļāļ āļāļāļāļ§āļēāļĄāļāļāļāđāļāļĢāđāļāļĢāļĄ = āļāļāļŦāļĄāļēāļĒāđāļ
āļāļāļ āđāļāļĢāđāļāļāļāļĨāļāļ transport = Ann
āđāļĨāļ° Bill āļāļāļāļāđāļĒāļāļāļāļŦāļĄāļēāļĒāđāļŦāļĨāļ āđ āđāļāļĢāđāļāļāļāļĨāļāļ network = āļāļĢāļāļēāļĢ
āļāļāļāđāļāļĢāļĐāļāļĒ
āļāļāļĄāļēāđāļŦāļĄāļāļāļāļāļāļēāļ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-2
Chapter 3 Transport Layer
āđāļāļēāļŦāļĄāļēāļĒ āđāļāļēāđāļāļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļāļāļāļēāļĢ
āđāļŦāļāļĢāļāļēāļĢāļāļ Transport āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing demultiplexing)
āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (reliable data transfer)
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ (flow control)
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāđāļāļĢāļāļāļēāļĒ (congestion control)
āđāļĢāļĒāļāļĢāđāļāļĒāļ§āļāļāđāļāļĢāđāļāļāļāļĨāđāļāļāļ
Transport āļāļāļ Internet UDP āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ
(connectionless transport) TCP āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ āđāļāļāļāļāļĄāļāļēāļĢ
āđāļāļāļĄāļāļāļāļāļ (connection-oriented reliable transport)
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP
Transport Layer 3-3
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-4
Transport services and protocols
āđāļŦāļāļĢāļāļēāļĢāļāļēāļĢāļŠāļāļŠāļēāļĢāļāđāļāļāļĄ (āđāļāļ logic) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠāļāļāļāđāļāļāļāļĨāđāļāļāļāļāļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļēāļāđ
transport protocols āļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļŠāļ āļ āļēāļāļēāļĢāđāļĒāļ
āļāļāļĄāļĨāļāļāļāđāļāļ segments āđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ network layer
āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļĢāļ āļĢāļ§āļāļĢāļ§āļĄ segments āđāļĨāļ°āļāļĢāļ°āļāļāļāđāļŦāđāļāļāļāļāļāļ§āļēāļĄāđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ app
āļĄāđāļāļĢāđāļāļāļāļĨāļāđāļŦāļāļĢāļāļēāļĢāđāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļāļāđāļāļĢāđāļāļāļāļĨ Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
āļāļ Transport vs āļāļ Network
āļāļ network āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ
āļāļ transport āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠ āđāļāļāļĢāļāļēāļĢāļāļ§āļĒ āđāļĨāļ° āļāļ§āļĒāđāļŠāļĢāļĄ
āļāļĢāļāļēāļĢāļāļāļāļāļ network
āđāļāļ 12 āļāļāđāļāļāļēāļ Ann āļŠāļāļāļāļŦāļĄāļēāļĒ 12 āļāļāļāđāļāļŦāļēāđāļāļ 12 āļāļāđāļāļāļēāļāļāļāļ Bill
āđāļāļĢāļāļ = āļāļēāļ āđāļāļĢāđāļāļŠ = āđāļāļ āļāļāļāļ§āļēāļĄāļāļāļāđāļāļĢāđāļāļĢāļĄ = āļāļāļŦāļĄāļēāļĒāđāļ
āļāļāļ āđāļāļĢāđāļāļāļāļĨāļāļ transport = Ann
āđāļĨāļ° Bill āļāļāļāļāđāļĒāļāļāļāļŦāļĄāļēāļĒāđāļŦāļĨāļ āđ āđāļāļĢāđāļāļāļāļĨāļāļ network = āļāļĢāļāļēāļĢ
āļāļāļāđāļāļĢāļĐāļāļĒ
āļāļāļĄāļēāđāļŦāļĄāļāļāļāļāļāļēāļ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-3
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-4
Transport services and protocols
āđāļŦāļāļĢāļāļēāļĢāļāļēāļĢāļŠāļāļŠāļēāļĢāļāđāļāļāļĄ (āđāļāļ logic) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠāļāļāļāđāļāļāļāļĨāđāļāļāļāļāļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļēāļāđ
transport protocols āļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļŠāļ āļ āļēāļāļēāļĢāđāļĒāļ
āļāļāļĄāļĨāļāļāļāđāļāļ segments āđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ network layer
āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļĢāļ āļĢāļ§āļāļĢāļ§āļĄ segments āđāļĨāļ°āļāļĢāļ°āļāļāļāđāļŦāđāļāļāļāļāļāļ§āļēāļĄāđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ app
āļĄāđāļāļĢāđāļāļāļāļĨāļāđāļŦāļāļĢāļāļēāļĢāđāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļāļāđāļāļĢāđāļāļāļāļĨ Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
āļāļ Transport vs āļāļ Network
āļāļ network āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ
āļāļ transport āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠ āđāļāļāļĢāļāļēāļĢāļāļ§āļĒ āđāļĨāļ° āļāļ§āļĒāđāļŠāļĢāļĄ
āļāļĢāļāļēāļĢāļāļāļāļāļ network
āđāļāļ 12 āļāļāđāļāļāļēāļ Ann āļŠāļāļāļāļŦāļĄāļēāļĒ 12 āļāļāļāđāļāļŦāļēāđāļāļ 12 āļāļāđāļāļāļēāļāļāļāļ Bill
āđāļāļĢāļāļ = āļāļēāļ āđāļāļĢāđāļāļŠ = āđāļāļ āļāļāļāļ§āļēāļĄāļāļāļāđāļāļĢāđāļāļĢāļĄ = āļāļāļŦāļĄāļēāļĒāđāļ
āļāļāļ āđāļāļĢāđāļāļāļāļĨāļāļ transport = Ann
āđāļĨāļ° Bill āļāļāļāļāđāļĒāļāļāļāļŦāļĄāļēāļĒāđāļŦāļĨāļ āđ āđāļāļĢāđāļāļāļāļĨāļāļ network = āļāļĢāļāļēāļĢ
āļāļāļāđāļāļĢāļĐāļāļĒ
āļāļāļĄāļēāđāļŦāļĄāļāļāļāļāļāļēāļ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-4
Transport services and protocols
āđāļŦāļāļĢāļāļēāļĢāļāļēāļĢāļŠāļāļŠāļēāļĢāļāđāļāļāļĄ (āđāļāļ logic) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠāļāļāļāđāļāļāļāļĨāđāļāļāļāļāļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļēāļāđ
transport protocols āļ āļēāļāļēāļāļāļĒāļāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļŠāļ āļ āļēāļāļēāļĢāđāļĒāļ
āļāļāļĄāļĨāļāļāļāđāļāļ segments āđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ network layer
āđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļāļāļ§āļĢāļ āļĢāļ§āļāļĢāļ§āļĄ segments āđāļĨāļ°āļāļĢāļ°āļāļāļāđāļŦāđāļāļāļāļāļāļ§āļēāļĄāđāļĨāļ§āļŠāļāļāļāđāļāļĒāļāļāļ app
āļĄāđāļāļĢāđāļāļāļāļĨāļāđāļŦāļāļĢāļāļēāļĢāđāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļĄāļēāļāļāļ§āļēāļŦāļāļāđāļāļĢāđāļāļāļāļĨ Internet TCP and UDP
application transport network data link physical
application transport network data link physical
Transport Layer 3-5
āļāļ Transport vs āļāļ Network
āļāļ network āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ
āļāļ transport āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠ āđāļāļāļĢāļāļēāļĢāļāļ§āļĒ āđāļĨāļ° āļāļ§āļĒāđāļŠāļĢāļĄ
āļāļĢāļāļēāļĢāļāļāļāļāļ network
āđāļāļ 12 āļāļāđāļāļāļēāļ Ann āļŠāļāļāļāļŦāļĄāļēāļĒ 12 āļāļāļāđāļāļŦāļēāđāļāļ 12 āļāļāđāļāļāļēāļāļāļāļ Bill
āđāļāļĢāļāļ = āļāļēāļ āđāļāļĢāđāļāļŠ = āđāļāļ āļāļāļāļ§āļēāļĄāļāļāļāđāļāļĢāđāļāļĢāļĄ = āļāļāļŦāļĄāļēāļĒāđāļ
āļāļāļ āđāļāļĢāđāļāļāļāļĨāļāļ transport = Ann
āđāļĨāļ° Bill āļāļāļāļāđāļĒāļāļāļāļŦāļĄāļēāļĒāđāļŦāļĨāļ āđ āđāļāļĢāđāļāļāļāļĨāļāļ network = āļāļĢāļāļēāļĢ
āļāļāļāđāļāļĢāļĐāļāļĒ
āļāļāļĄāļēāđāļŦāļĄāļāļāļāļāļāļēāļ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-5
āļāļ Transport vs āļāļ Network
āļāļ network āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ
āļāļ transport āļāļēāļĢāļŠāļāļŠāļēāļĢ (āđāļāļāļāļĢāļĢāļāļ°) āļĢāļ°āļŦāļ§āļēāļāđāļāļĢāđāļāļŠ āđāļāļāļĢāļāļēāļĢāļāļ§āļĒ āđāļĨāļ° āļāļ§āļĒāđāļŠāļĢāļĄ
āļāļĢāļāļēāļĢāļāļāļāļāļ network
āđāļāļ 12 āļāļāđāļāļāļēāļ Ann āļŠāļāļāļāļŦāļĄāļēāļĒ 12 āļāļāļāđāļāļŦāļēāđāļāļ 12 āļāļāđāļāļāļēāļāļāļāļ Bill
āđāļāļĢāļāļ = āļāļēāļ āđāļāļĢāđāļāļŠ = āđāļāļ āļāļāļāļ§āļēāļĄāļāļāļāđāļāļĢāđāļāļĢāļĄ = āļāļāļŦāļĄāļēāļĒāđāļ
āļāļāļ āđāļāļĢāđāļāļāļāļĨāļāļ transport = Ann
āđāļĨāļ° Bill āļāļāļāļāđāļĒāļāļāļāļŦāļĄāļēāļĒāđāļŦāļĨāļ āđ āđāļāļĢāđāļāļāļāļĨāļāļ network = āļāļĢāļāļēāļĢ
āļāļāļāđāļāļĢāļĐāļāļĒ
āļāļāļĄāļēāđāļŦāļĄāļāļāļāļāļāļēāļ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-6
āđāļāļĢāđāļāļāļāļĨāļāļāļāļĢāļēāļāļŠāļāļāļĢāļāļāļāļāļāļāđāļāļāļĢāđāļāļ āļŠāļāļāļāļĄāļĨāđāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļēāđāļ§āđāļ
āļŦāļĢāļāļāļēāđāļāļāļāļāđāļ (TCP) āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨāđāļ
āđāļāļĢāļāļāļēāļĒ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ
āļŠāļāļāļāļĄāļĨāđāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āđāļĄāļāļēāđāļāļāļāļ UDP āđāļĄāļĄāļāļ°āđāļĢāđāļāļĄāđāļāļĄāļāļēāļāļāļ IP āļāđāļāļ
ldquobest-effortrdquo
āđāļĄāđāļŦāļāļĢāļāļēāļĢāđāļŦāļĨāļēāļ āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļāļ§āļēāļĄāļĨāļēāļāļē āļāļēāļĢāļĢāļāļāļĢāļ°āļāļāđāļāļāļāļ§āļāļ
application transport network data link physical
application transport network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
network data link physical
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-7
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-8
āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āđāļĒāļāļāļāļĄāļĨ (Multiplexingdemultiplexing)
socket
āđāļāļāļāļĄāļĨāļŠāļ§āļ header āđāļāļāļŠāļ segment āļāđāļāļĄāļēāđāļāļĒāļ socket āļāļāļāļāļāļ
demultiplexing āļāļāļĢāļ āļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļēāļāļŦāļĨāļēāļĒ āđ socket āđāļŠ header āļāļāļāļāļ transport āđāļāļēāđāļ (header āļāļ°āļāļāđāļāđāļāļāļ āļēāļāļēāļĢ demultiplexing āļ āļēāļĒāļŦāļĨāļ)
multiplexing āļāļāļŠāļ
transport
application
physical
link
network
P2 P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3 process
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-9
āļ āļē demultiplexing āļāļĒāļēāļāđāļĢ
source port dest port
32 bits
application data
(payload)
other header fields
TCPUDP segment format
host āļĢāļāļāļēāļāļēāđāļāļĢāļĄāļāļēāļāļāļ IP āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ
āđāļāļāļāļĨāļēāļĒāļāļēāļ āđāļāļĨāļ°āļāļēāļāļēāđāļāļĢāļĄāļāļ°āļĄ segment āļāļāļāļāļ
transportāļāļĒ āđāļāļĨāļ° segment āļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļāļ
āļāļēāļāđāļĨāļ°āļāļĨāļēāļĒāļāļēāļ (source and destination port number)
host āđāļāļāļāļĄāļĨāļŦāļĄāļēāļĒāđāļĨāļāđāļāļāđāļĨāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļ āđāļāļāļ āļēāđāļāļāđāļĄāļāļāđāļāļĒāļ socket āļāļāļāļāļāļ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-10
demultiplexing āļāļĢāļāļāđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connectionless)
datagrams āļāļāļ IP āļāļĄ āđāļĨāļ port āļāļĨāļēāļĒāļāļēāļāļāļ§āđāļāļĒāļ§āļāļ āđāļĄāļāļ°āļĄāļāļāļĒ IP āđāļĨāļ°āļŦāļĢāļ āđāļĨāļ port āļāļāļāđāļāļĢāļāļāļāļāļāļēāļāļāļēāļāļāļ (process āļāļŠāļ datagram āđāļāļāļāļāļĨāļ° process āđāļāļŠāļāļĄāļēāļ process āļāļĢāļāļāļ§āđāļāļĒāļ§āļāļ) āļāļ°āļāļāļ āļēāđāļāļĒāļ socket āđāļāļĒāļ§āļāļ āļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ
āļāļēāļāļāļāļāđāļĨāļ§ socket āļāļāļāļŠāļĢāļēāļāļāļ°āļĄāļŦāļĄāļēāļĒāđāļĨāļ port āļ āļēāļāļ
DatagramSocket mySocket1 = new DatagramSocket(12534)
āđāļĄāļ host āļĢāļ segment āļāļāļ UDP āļāļĢāļ§āļāļŠāļāļāļŦāļĄāļēāļĒāđāļĨāļ port āđāļ
segment āļ āļē segment āļāļāļ UDP āđāļāļĒāļ
socket āļāļāļāļāļ port āļāļ
āđāļĄāļāļāļ°āļŠāļĢāļēāļāļāļēāļāļēāđāļāļĢāļĄāđāļāļāļŠāļāđāļāļĒāļ
socket āļāđāļāļ UDP āļāļāļāļ āļēāļāļēāļĢāļĢāļ°āļ āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ port āļāļĨāļēāļĒāļāļēāļ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-11
Connectionless demux example
DatagramSocket serverSocket = new DatagramSocket
(6428)
transport
application
physical
link
network
P3 transport
application
physical
link
network
P1
transport
application
physical
link
network
P4
DatagramSocket mySocket1 = new DatagramSocket (5775)
DatagramSocket mySocket2 = new DatagramSocket
(9157)
source port 9157 dest port 6428
source port 6428 dest port 9157
source port dest port
source port dest port
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-12
socket āđāļāļ TCP āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ āļāļāļĄāļāļāļāļāļĢāļ°āļāļāļāļāļāļ source IP address
(āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļāļāļēāļ)
source port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļāļāļēāļ )
dest IP address (āļŦāļĄāļēāļĒāđāļĨāļāđāļāļāļāļĨāļēāļĒāļāļēāļ)
dest port number (āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāļāļāļĨāļēāļĒāļāļēāļ )
demux āļāļ°āļāļāļēāļāļāļŠāļŠāļ§āļāđāļāļāļ āļē packet āđāļāļĒāļ sockets āļāđāļŦāļĄāļēāļ°āļŠāļĄ
āđāļāļĢāļāļāđāļāļĢāļāđāļ§āļāļĢāļāļēāļāđāļāļ sockets āđāļāļ TCP āļ āļēāļāļ§āļāļĄāļēāļāļāļĢāļāļĄāļāļ āļāļ āđāļāļĨāļ° socket āļāļāļĢāļ°āļāļāļ§āļĒ 4 āļŠāļ§āļ
(āđāļāļāļ°āļĄāļŠāļ§āļāļ 3 āļāļāļŦāļĄāļēāļĒāđāļĨāļ IP āļāļĨāļēāļĒāļāļēāļāđāļŦāļĄāļāļ āđ āļāļ)
web servers āļāļ°āļĄ socket āļŦāļĨāļēāļĒ āđ socket āđāļ§āļŠ āļēāļŦāļĢāļāđāļāļāļĄāļāļāļāļāđāļāļĨāļ° client HTTP āđāļāļ non-persistent āļāļ°āđāļ
socket āļāđāļāļāļāļēāļāļāļāļŠ āļēāļŦāļĢāļāđāļāļĨāļ° request
demux āļāļĢāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (Connection-oriented)
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-13
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
P4
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
network
P6 P5 P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
āļāļ 3 segment āļĄāļāļāļĒ IP āļāļĨāļēāļĒāļāļēāļ āļāļ B āđāļĨāļ° āđāļĨāļāļāļāļĢāļ āļāļĨāļēāļĒāļāļēāļāļāļ 80 āđāļāļāļāđāļĒāļāļŠāļāđāļāļĒāļ socket āļāļāļēāļāļāļ
server IP address B
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-14
Connection-oriented demux example
transport
application
physical
link
network
P3 transport
application
physical
link
transport
application
physical
link
network
P2
source IPport A9157 dest IP port B80
source IPport B80 dest IPport A9157
host IP address A
host IP address C
server IP address B
network
P3
source IPport C5775 dest IPport B80
source IPport C9157 dest IPport B80
P4
threaded server
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-15
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-16
UDP User Datagram Protocol [RFC 768]
āđāļāļ protocol āļāļāļ Internet āļāđāļĄāđāļāļĄāļŠāļ§āļāđāļāļĄāđāļāļĄāļāļ°āđāļĢ
āļāļĢāļāļēāļĢāđāļāļ ldquoāļāļ°āļāļĒāļēāļĒāļēāļĄāđāļŦāļāļāļŠāļrdquo (best effort) āļāļāļāļ segment āđāļāļ UDP āļāļēāļ āļŠāļāļŦāļēāļĒ āđāļāļāļ app āļāļāļāļāļĢāļāđāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļ
āđāļĄāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļĄāļĄāļāļēāļĢāļ āļē handshake āļĢāļ°āļŦāļ§āļēāļāļāļŠāļ
āđāļĨāļ°āļāļĢāļ āđāļāļĨāļ° segment āļāđāļāļ UDP āļāļ°āļāļ
āļāļāļāļēāļĢāđāļāļāļāļŠāļĢāļ°āļāļēāļ segment āļāļ āđ
UDP āđāļāđāļ app āļāļŠāļ multimedia āļāļĒāļēāļāļāļāđāļāļāļ
(āļāļāļāļāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ āđāļ sensitive āļāļāļāļāļĢāļēāļāļēāļĢāļŠāļ)
DNS SNMP
āļāļēāļāļ°āđāļŦ āļāļēāļĢāļāļēāļĒāđāļāļāļāļāļĄāļĨāļāļ UDP āļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļ§āļēāļ āđāļāļĄāļāļ§āļēāļĄāļāļēāđāļāļāļāļāļāļāļ application āļĄāļāļēāļĢāļāļāļāļāļāļāļāļāļĨāļēāļ (āļāļāļāļĒāļāļ āđāļāļĨāļ°
application)
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-17
UDP āļŠāļ§āļāļŦāļ§āļāļāļ segment (segment header)
source port dest port
32 bits
application data
(payload)
UDP segment format
length checksum
āļāļ§āļēāļĒāļēāļ§āļāļāļ segment āļāļāļ UDP (āļŦāļāļ§āļĒāđāļāļ byte) āļĢāļ§āļĄāļāļ§āļēāļĄāļĒāļēāļ§
āļāļāļ header āļāļ§āļĒ
āđāļĄāļāļāļāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āļāļāđāļāļāļŠāļ§āļāļāđāļāļĄāļāļ§āļēāļĄāļĨāļēāļāļē)
āļāļēāļĒ āđāļĄāļāļāļāļāļ āđāļĄāļāļāļāļĄāļŠāļāļēāļāļ°āļāļāļāļāļēāļĢāđāļāļāļĄāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
āļŠāļ§āļāļŦāļ§ (header) āļĄāļāļāļēāļāđāļĨāļ āđāļĄāļĄāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ UDP
āļŠāļēāļĄāļēāļĢāļāļŠāļāļāļāļĄāļĨāđāļāļĢāļ§āļāđāļĢāļ§āļāļēāļĄāļāļāļāļāļāļēāļĢ
āļ āļēāđāļĄāļāļāļāļāļāļĄ UDP
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-18
checksum āļāļāļ UDP
āļāļŠāļ āļāļāļāļēāļĢāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļ°āđāļāļāļĒāđāļ
segment āļĢāļ§āļĄāļāļāļāļāļĄāļĨāļŠāļ§āļāļŦāļ§āļāļēāļ āđ āļāđāļāļāļĨ āļēāļāļāļāļāļāļ āļēāļāļ§āļāđāļāļĄ 16 āļāļāļŦāļĨāļēāļĒāļ āļēāļāļ§āļ
checksum āļāļĨāļĢāļ§āļĄāļāļāļāļāļāļĄāļĨāļāļēāļ āđ āđāļ segment
āļāļŠāļāđāļŠ checksum āđāļāļēāđāļāđāļ field checksum āđāļ header āļāļāļ UDP
āļāļĢāļ āļ āļēāļāļ§āļāļŦāļē checksum āļāļāļ segment āļāđāļ
āļĢāļāļĄāļēāđāļŦāļĄ āļāļĢāļ§āļāļŠāļāļāļāļē checksum āđāļ field āļāļāļ
header āļāļ āļāļēāļāđāļāļāđāļāļāļēāļāļāļēāļĢāļ āļēāļāļ§āļ āļ§āļēāđāļāļēāļāļāļŦāļĢāļāđāļĄ āļāļēāđāļĄ āđāļŠāļāļāļ§āļēāļāļāļāļāļāļāļāļĨāļēāļ āļāļēāđāļ āđāļŠāļāļāļ§āļē āđāļĄāļāļāļāļāļāļāļāļĨāļēāļ āđāļ
āļāļĢāļ āđ āđāļĨāļ§ āļāļāļēāļāļāļ°āļĄāļāļāļāļāļāļĨāļēāļāđāļāļāļĒāļ (āļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļ°āļāļĨāļēāļ§āļ āļēāļĒāļŦāļĨāļ)
āļāļāļĄāļāļŦāļĄāļēāļĒ āļāļĢāļ§āļāļŠāļāļāļāļāļāļāļāļĨāļēāļ āđāļāļ bits āļāļāļēāđāļāļāļāļĨāļāđāļ segment
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-19
Internet checksum āļāļ§āļāļĒāļēāļ
āļāļ§āļāļĒāļēāļ āļāļēāļĢāļāļ§āļ 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 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
wraparound
sum
checksum
Note āļāļāļ°āļāļāļ§āļāļāļ§āđāļĨāļ āđāļĄāļ bitāļ 16 (bit āļāļēāļĒāļŠāļ) āļĄāļāļēāļĢāļāļāđāļĨāļ āđāļŦāļ āļēāđāļĨāļāļāļāđāļāļāļ§āļāļāļ bit āļ 1 āđāļĨāļ§āļāļ flip bit āļāļ bit āđāļāļāđāļŦāđāļ checksum
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-20
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-21
Principles of reliable data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-22
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer āļŠ āļēāļāļāđāļāļāļ application transport link
āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-23
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļ§āļēāļĄāļāļēāđāļāļāļāļ data transfer
āļāļāļāļāļēāļāļāđāļĄāļāļēāđāļāļāļāļāļĄāļĨāļāļĐāļāļ°āļāļāļ°āđāļāļāļāļ§āļ āļēāļŦāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāļ protocol āđāļāļāļāļēāļĒāļāļāļĄāļĨāļ reliable (reliable data transfer protocol rdt)
āļŠ āļēāļāļāđāļāļāļ application transport link āļāļ top-10 āļāļāļāļŦāļ§āļāļāļāļēāļāļāļēāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-24
Reliable data transfer āđāļĢāļĄāļāļ
āļāļēāļāļāļŠāļ āļāļēāļāļāļĢāļ
rdt_send() āļāļāđāļĢāļĒāļāļāļēāļāļāļāļāļēāļāļāļ (āđāļāļ āđāļāļĒ app) āļ āļēāļŦāļāļēāļāļāļēāļāļāļāļĄāļĨāđāļāļāđāļŦāļāļāļĄāļĨāļāļāļŠāļāđāļ
āļĒāļāļāļāļāļēāļāļāļāļāļāļāļāļĢāļ
udt_send() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāļāļāļ°āđāļāļāļāļēāļĒ packet āļāļēāļāļāļāļāļāļēāļĢ
āļŠāļāļŠāļēāļĢāļ unreliable āđāļāļĒāļāļāļĢāļ
rdt_rcv() āļāļāđāļĢāļĒāļāđāļāļĒ OS āđāļĄāļ OS āđāļāļĢāļ packet āļāļĄāļēāļāļāļāļāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļēāļāļāļĢāļ
deliver_data() āļāļāđāļĢāļĒāļāđāļāļĒ rdt āđāļāļāđāļŦāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļāļ
Transport Layer 3-25
āđāļĢāļēāļāļ° āļāļāļĒ āđ āļāļāļāļē protocol āļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļŦāļĢāļ reliable
data transfer protocol (rdt) āļāļāļāļ āļāļāļēāļĢāļāļēāđāļāļāļēāļ°āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļāļāļēāļāđāļāļĒāļ§āļāļāļ
āđāļāļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (control info) āļāļ°āļāļāļŠāļāđāļāļāļĨāļāļāļāļŠāļāļāļāļēāļ
āđāļ finite state machines (FSM) āđāļāļāļ āļēāļŦāļāļāļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļāļāļŠāļāđāļĨāļ°āļāļĢāļ
state 1
state 2
āđāļŦāļāļāļēāļĢāļāļāļ āļēāđāļŦāđāļāļāļāļēāļĢāđāļāļĨāļĒāļāļāļēāļāļāļāļ State āļāļēāļĢāļāļĢāļ°āļ āļēāļāļāļ°āđāļāļĨāļĒāļāļāļēāļ State
āļŠāļāļēāļāļ° (state) āđāļĄāļāļāļĒāđāļ state āļāļāļāļāļ state āļāļāđāļāļāļ°āļāļāļāļĒāļāļāđāļŦāļāļāļēāļĢāļāļāļāļ°
āđāļāļāļāļ āļ state āļāļāļāļāļ
āđāļŦāļāļāļēāļĢāļ āļāļēāļĢāļāļĢāļ°āļ āļē
Reliable data transfer āđāļĢāļĄāļāļ
Transport Layer 3-26
rdt10 āļāļēāļĢāđāļāļāļāļēāļĒāļāļāļĄāļĨāđāļāļ reliable āļāļēāļāļāļāļāļŠāļāļāļēāļāđāļāļ reliable
āļŠāļĄāļĄāļāđāļŦ āļāļāļāļāļēāļāļāļāļĒāļāļēāļāđāļāđāļāļāļāļāļāļāļēāļāļāđāļāļāļāļāđāļ āđāļĄāļĄāļāļēāļĢāļāļāļāļĨāļēāļāļāļāļāļāļ āđāļĄāļĄāļāļāļĄāļĨāļŠāļāļŦāļēāļĒ
FSMs āļŠ āļēāļŦāļĢāļāļāļŠāļ āđāļĨāļ° āļŠ āļēāļŦāļĢāļāļ āļĢāļ āļāļŠāļāļŠāļāļāļāļĄāļĨāđāļāļĒāļāļāļāļāļēāļāļĨāļēāļ āļāļĢāļāļĢāļāļāļāļĄāļĨāļāļēāļāļāļāļāļēāļāļĨāļēāļ
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļāļ packet = make_pkt(data) udt_send(packet)
rdt_send(data)
extract (packetdata) deliver_data(data)
āļĢāļāļĢāļāļāļēāļĢāđāļĢāļĒāļāļāļēāļāļāļ
āļāļēāļāļĨāļēāļ
rdt_rcv(packet)
āļāļŠāļ āļāļĢāļ
Transport Layer 3-27
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit 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 rdt20 (beyond rdt10) error detection receiver feedback control msgs (ACKNAK) rcvr-gtsender
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
āļāļāļāđāļĨāļ§ āļĄāļāļĐāļĒāđāļāļ§āļāļāļēāļĢāđāļāđāļāļāļēāļĢāđāļāđāļ ldquoerrorsrdquo āļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāļŠāļāļāļāļē
Transport Layer 3-28
āļāļāļāļŠāļāļāļēāļāļāļēāļāļāļĨāļāļāļēāļāļēāļ bit āđāļ packet āđāļāļ§āļāļāļēāļĢ checksum āđāļāļāļāļĢāļ§āļāļŠāļāļ bit errors
āļ āļēāļāļēāļĄ āļāļ°āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļāļāļĄāļĨāđāļŦāļāļāļāļāļāđāļāļāļĒāļēāļāđāļĢ āļāļēāļĢāļāļāļāļĢāļ (acknowledgements (ACKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļēāđāļāļĢāļ packet āđāļĨāļ§ āļāļēāļĢāļāļāļāļāļāđāļŠāļ (negative acknowledgements (NAKs)) āļāļĢāļāđāļāļāļāļŠāļāļ§āļē packet āļĄ
errors sender āļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāļĢāļ āđāļĄāļāđāļāļĢāļ NAK
āļāļĨāđāļāļāđāļāļĄāļāļ in rdt20 (āđāļāļĄāļāļēāļ rdt10) āļāļēāļĢāļāļĢāļ§āļāļāļāļāļ§āļēāļĄāļāļāļāļĨāļēāļ āļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļāļĄāļĨāļŠ āļēāļŦāļĢāļāļāļēāļĢāļāļ§āļāļāļĄ (ACKNAK) āļāļēāļāļāļĢāļāđāļāļĒāļāļāļŠāļ
rdt20 āļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŠāļēāļĢāļāļĄ bit errors
rdt_send(data)
Transport Layer 3-29
rdt20 āļāļāļ āļēāļŦāļāļāļāļāļ FSM
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below sender
receiver
L
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
rdt_send(data)
Transport Layer 3-30
rdt20 operation with no errors
L
Wait for call from above
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-31
rdt20 error scenario
Wait for call from below L
rdt_send(data)
Wait for call from above
sndpkt = make_pkt(data checksum) udt_send(sndpkt)
extract(rcvpktdata) deliver_data(data) udt_send(ACK)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) ampamp corrupt(rcvpkt)
Wait for ACK or NAK
Wait for call from below
Transport Layer 3-32
rdt20 has a fatal flaw
āļāļ°āđāļāļāļāļ°āđāļĢāļāļāļāļē ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āļāļŠāļāđāļĄāļĢāļ§āļēāļāļĢāļāļĢāļ pkt āļāļĢāļāļāļ§āļ
āļŦāļĢāļāđāļĄ āđāļĄāļāļ§āļĢāļŠāļ pkt āļ āļēāļāļāļāļĢāļ āđāļāļĢāļēāļ°
pkt āļ āļēāļāļ
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļāļĄāļĨāļāļ āļēāļāļāļ āļāļŠāļāļāļ°āļŠāļ packet āļāļāļāļĢāļāļāļē
ACKNAK āđāļāļāđāļŠāļĒāļŦāļēāļĒ āđāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļŦāđāļāļĨāļ°
packet āļāļĢāļāļāļāļāļāļ packet āļāļ āļēāļāļ
stop and wait āļāļŠāļāļ āļēāļāļēāļĢāļŠāļpacketāđāļĨāļ°āļĢāļāđāļŦāļāļĢāļāļāļāļāļāļĨāļāļāļ§āļĒ ACKNAK āļāļāļāļāļāļ°āļŠāļ packet āļāļāđāļ
Transport Layer 3-33
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
Wait for
ACK or
NAK 0 udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt)
Wait for
call 1 from
above
Wait for
ACK or
NAK 1
L L
Transport Layer 3-34
Wait for
0 from
below
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
Wait for
1 from
below
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq0(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
not corrupt(rcvpkt) ampamp
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) ampamp (corrupt(rcvpkt)
sndpkt = make_pkt(ACK chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK chksum)
udt_send(sndpkt)
rdt21 āļāļŠāļāļāļāļāļēāļĢāļāļ ACKNAKs āļāđāļĄāļāļāļāļāļ
Transport Layer 3-35
rdt21 āļāļ āļāļĢāļēāļĒ
āļāļŠāļ āđāļŠāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļpacket āļŦāļĄāļēāļĒāđāļĨāļ seq (01) āļāļāļ
āļāļāļŠāļ āļēāđāļĄ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē ACKNAK āļ
āđāļāļĢāļāđāļŠāļĒāđāļāļŦāļĢāļāđāļĄ āļ āļēāļāļ§āļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāļŠāļāļ
āđāļāļēāļāļāļāļ āļēāļāļ§āļāļŠāļāļēāļāļ° āđāļāļĢāļēāļ°āļāļŠāļāļāļāļāđāļāļāļŠāļāļēāļāļ°āđāļāļldquoāļ āļērdquo
āļ§āļē pkt āļāļāđāļāļāļ°āļāļāļāļĄāđāļĨāļ seq 0 āļŦāļĢāļ 1
āļāļĢāļ āļāļāļāļāļĢāļ§āļāļŠāļāļāļ§āļē pkt āļāđāļāļĢāļāļ āļēāļāļ
pkt āļāđāļāļĢāļāļāļāļāļŦāļāļēāļŦāļĢāļāđāļĄ āļāļĢāļāļāļ°āđāļāļāļŠāļāļēāļāļ°āļāļĢāļ°āļāļ§āļē 0 āļŦāļĢāļ 1
āļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļ§āļēāļāļ°āđāļ
āļāļāļŠāļāđāļāļ āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļē ACKNAK āļŠāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļāļāļāļāļāļāļŦāļĢāļāđāļĄ
Transport Layer 3-36
rdt22 protocol āļāđāļĄāļāļāļāđāļ NAK
āļ āļēāļāļēāļāđāļŦāļĄāļāļāļāļ rdt21 āđāļāđāļāđāļ ACKs āđāļāļāļāļāļ°āļŠāļ NAK āļāļĢāļāļŠāļ ACK āļŠ āļēāļŦāļĢāļ pkt āļŠāļāļāļēāļĒāļāđāļāļĢāļāļāļāļāļāļ
āļāļāļĢāļāļāļ°āļāļāļāļĢāļ§āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļāļāļ ACK āđāļāļāļ§āļĒ
āļāļ°āļŠāļ ACK āļ āļēāđāļāļāļāļŠāļāļāļēāđāļĄāđāļāļĢāļ pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļ āļāļĨāļĨāļāļāļāļ°āļāļāļāļĄāļēāđāļŦāļĄāļāļāļāļĢāļāļāļŠāļ NAK āļāļŠāļāļāļāļāļŠāļ pkt āļāļ§āļĨāļēāļŠāļāđāļāđāļŦāļĄāļāļāļāļĢāļ
rdt22 sender receiver fragments
Transport Layer 3-37
rdt22 sender receiver fragments
Wait for
call 0 from
above
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
Wait for
ACK
0
sender FSM fragment
rdt_rcv(rcvpkt) ampamp notcorrupt(rcvpkt)
ampamp has_seq1(rcvpkt)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(ACK1 chksum)
udt_send(sndpkt)
Wait for
0 from
below
rdt_rcv(rcvpkt) ampamp
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
receiver FSM fragment
L
Transport Layer 3-38
rdt30 āļāļāļāļŠāļāļāļēāļāļāļĄāļāļ§āļēāļĄāļāļāļāļĨāļēāļāđāļĨāļ° pkt āļŠāļāļŦāļēāļĒ
āđāļāļĄāļāļāļŠāļāļāļĐāļāļēāļ āļāļāļāļŠāļāļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļŠāļĒāđāļāļāđāļāļ (āđāļĄāļ§āļēāļāļ°āđāļāļāļāļāļĄāļĨāļŦāļĢāļ ACKs) āđāļ āļāļĨāđāļ checksum āļŦāļĄāļēāļĒāđāļĨāļ seq
ACKs āđāļĨāļ° āļāļēāļĢāļŠāļāļ āļē āļŠāļēāļĄāļēāļĢāļāļāļ§āļĒ āđāļāļĄāļāļāļĒāļāđāļĄāđāļāļāļēāļāļāļāļ
āļ§āļ āļāļŠāļāļĢāļ ACK āļāļĨāļāļĄāļēāđāļāļāļ§āļāđāļ§āļĨāļēāļ ldquoāļŠāļĄāđāļŦāļāļŠāļĄāļāļĨrdquo
āļŠāļ pkt āđāļāļĄāđāļāđāļŦāļĄāļāļāļāļĢāļāļāļēāđāļĄāđāļāļĢāļ ACK āļ āļēāļĒāđāļāļāļ§āļāđāļ§āļĨāļēāļ
āļāļē pkt (āļŦāļĢāļ ACK) āļĄāļēāļāļāļĨāļēāļāļē (āđāļĄāđāļāļŦāļēāļĒāđāļ) āļāļēāļĢāļŠāļāđāļŦāļĄāļāļāļ°āđāļāļāļāļēāļĢāļŠāļāļ āļē āļāļ seq
āđāļāļāļāļāļēāļĢāđāļĢāļāļāđāļāļĒāļ§āļāļāļāļāļĄāļĨāļ āļēāđāļ āļāļĢāļāļāļāļāļĢāļ°āļāđāļĨāļ seq āļāļāļ pkt āļāļ āļēāļĨāļ
āļāļ ACKed
āļāļāļāđāļāļāļēāļĢāļāļāđāļ§āļĨāļēāļāļāļĒāļŦāļĨāļ (timer)
Transport Layer 3-39
rdt30 sender
sndpkt = make_pkt(0 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Wait
for
ACK0
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt1) )
Wait for
call 1 from
above
sndpkt = make_pkt(1 data checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt0)
rdt_rcv(rcvpkt) ampamp
( corrupt(rcvpkt) ||
isACK(rcvpkt0) )
rdt_rcv(rcvpkt)
ampamp notcorrupt(rcvpkt)
ampamp isACK(rcvpkt1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Wait for
call 0from
above
Wait
for
ACK1
L
rdt_rcv(rcvpkt)
L
L
L
Transport Layer 3-40
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
pkt1
ack1
ack0
ack0
(a) no loss
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0 pkt0
pkt0
ack1
ack0
ack0
(b) packet loss
pkt1 X
loss
pkt1 timeout
resend pkt1
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-41
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt0
send ack0
send ack1
send ack0
rcv ack0
send pkt0
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt0
ack1
ack0
ack0
(c) ACK loss
ack1 X
loss
pkt1 timeout
resend pkt1
rcv pkt1 send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0 rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) premature timeout delayed ACK
pkt1 timeout
resend pkt1
ack1
send ack1
send pkt0 rcv ack1
pkt0
ack1
ack0
send pkt0 rcv ack1 pkt0
rcv pkt0 send ack0
ack0
rcv pkt0
send ack0 (detect duplicate)
āļāļāļ° rdt30 āļ āļēāđāļāļāļāļēāļĢ
Transport Layer 3-42
āļāļĢāļ°āļŠāļāļāļ āļēāļāļāļāļ rdt30
rdt30 is correct but performance stinks eg 1 Gbps link 15 ms prop delay 8000 bit packet
U sender utilization ndash fraction of time sender busy sending
U sender =
008
30008 = 000027
L R
RTT + L R =
if RTT=30 msec 1KB pkt every 30 msec 33kBsec thruput over 1 Gbps link
network protocol limits use of physical resources
Dtrans = L R
8000 bits
109 bitssec = = 8 microsecs
Transport Layer 3-43
rdt30 stop-and-wait operation
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļāļāļāļŠāļ t = 0
āļāļŠāļ āļāļĢāļ
RTT
āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļāļāļŠāļ t = L R
āļāļāđāļĢāļāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļāļāļŠāļāļāļēāļĒāļāļāļāđāļāļāđāļāļāļĄāļēāļāļ āļŠāļ ACK
āđāļāļĢāļ ACK āļŠāļāđāļāļāđāļāļāļāļāđāļ t = RTT + L R
U sender =
008
30008 = 000027
L R
RTT + L R =
Transport Layer 3-44
protocols āđāļāļ pipelined
pipelining āļāļŠāļāļŠāļāļŦāļĨāļēāļĒ packet āđāļāļĒāļāļāļĢāļāļāļ āđ āļ pkt āđāļŦāļĨāļēāļāļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļĢāļĒāļāļĒāļāļāļāļāļĢāļ (not yet acked) āļāļ§āļāļāļāļāļŦāļĄāļēāļĒāđāļĨāļ sequence āļāļ°āļāļāļāđāļāļĄāļāļ āļāļāļāļāļāļāļāļĄāļĨ (buffer) āļāļāļŠāļāđāļĨāļ°āļāļĢāļ
protocols āđāļāļ pipelined āđāļāļāļāļ§āđāļāļĄāļŠāļāļāđāļāļ go-Back-N selective repeat
Transport Layer 3-45
Pipelining āļāļ§āļĒāđāļāļĄ utilization
first packet bit transmitted t = 0
sender receiver
RTT
last bit transmitted t = L R
first packet bit arrives
last packet bit arrives send ACK
ACK arrives send next
packet t = RTT + L R
last bit of 2nd packet arrives send ACK
last bit of 3rd packet arrives send ACK
3-packet pipelining increases
utilization by a factor of 3
U sender =
0024
30008 = 000081
3L R
RTT + L R =
Transport Layer 3-46
protocols āđāļāļ pipeline āļ āļēāļāļĢāļ§āļĄ
Go-back-N āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ
ack āđāļāđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāđāļāļŠāļ cumulative ack āđāļĄ ack packet āļāļēāļĄāļāļāļāđāļŦāđāļāļ gap
āļāļŠāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāļŠāļāđāļ
āļāļēāļāļāļŠāļāļāļĒāļāđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļāđāļāļāđāļāļ
āļāļāļŦāļĄāļāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļāļāļĢāļ
Selective Repeat āļāļŠāļāļŠāļēāļĄāļēāļĢāļāļŠāļāđāļāļāđāļāļāļāđāļĄāļĒāļāļāļ ack āđāļ
āđāļĄāđāļāļ N āđāļāļāđāļāļāđāļ pipeline
āļāļĢāļāļāļ°āļāļāļāļŠāļ ack āļāļĨāļāđāļŦāđāļāļĨāļ°āđāļāļāđāļāļ
āļāļŠāļāļāļ°āļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļĨāļ°āđāļāļāđāļāļāļ
āđāļĄāđāļ ack āđāļĄāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāđāļāļŦāļĄāļ āļāļŠāļāļāļ°āļŠāļ
āđāļāļāļēāļ°āđāļāļāđāļāļāļāļāđāļāļēāļāļ
Transport Layer 3-47
Go-Back-N āļāļŠāļ
āļŦāļĄāļēāļĒāđāļĨāļ seq (k bit) āļāļ°āļāļĒāđāļ header āļāļāļ packet āļāļāļāļēāļāđāļŦāļāļāļēāļ ldquowindowrdquo (āļāļāļ pkt āļāļāļāļāļāđāļĨāļ°āļĒāļāđāļĄāļāļ ack) āđāļĄāđāļāļ N
ACK(n) āļāļ° ack āđāļāļāđāļāļāļāļāļŦāļĄāļāđāļāļāļāļāļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļēāļāļ n - ldquoāļāļēāļĢ ACK āđāļāļāļĢāļ§āļĄ (cumulative ACK)rdquo āļāļēāļāļĄāļāļēāļĢāđāļāļĢāļ ACKs āļŦāļĄāļēāļĒāđāļĨāļ seq āđāļāļĄāļ āļē (āļāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļāļēāļ receiver)
āļĄāļāļēāļĢāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļāđāļāļāđāļāļāļāđāļāļāļāļēāļāļāļĒ āļāļāđāļāļāļāļēāļāļāļēāļāļāļŠāļāđāļĨāļ°āļĒāļāđāļĄāđāļ ACK (pkt āļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļĒāļāļŠāļāđāļ window)
timeout(n) āđāļ§āļĨāļēāļŦāļĄāļāļ pkt n āļāļŠāļāļāļ°āļŠāļ pkt n āđāļĨāļ° pkt āļāļāļŦāļĄāļāđāļ window (āļāļāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļŠāļāļāļ§āļē n) āļāļāļāļĢāļ
Transport Layer 3-48
GBN FSM āļāļēāļāļāļŠāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Wait start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
hellip
udt_send(sndpkt[nextseqnum-1])
timeout
rdt_send(data)
if (nextseqnum lt base+N)
sndpkt[nextseqnum] = make_pkt(nextseqnumdatachksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
else
refuse_data(data)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) ampamp
notcorrupt(rcvpkt)
base=1
nextseqnum=1
rdt_rcv(rcvpkt)
ampamp corrupt(rcvpkt)
L
Transport Layer 3-49
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 (donrsquot buffer) no receiver buffering re-ACK pkt with highest in-order seq
Wait
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
ampamp notcurrupt(rcvpkt)
ampamp hasseqnum(rcvpktexpectedseqnum)
extract(rcvpktdata)
deliver_data(data)
sndpkt = make_pkt(expectedseqnumACKchksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnumACKchksum)
L
GBN FSM āļāļēāļāļāļĢāļāļāđāļāļĄāļāļēāļāļāļāļāđāļāļĄ
Transport Layer 3-50
GBN in action
send pkt0 send pkt1 send pkt2 send pkt3
(wait)
sender receiver
receive pkt0 send ack0 receive pkt1 send ack1 receive pkt3 discard (re)send ack1 rcv ack0 send pkt4
rcv ack1 send pkt5
pkt 2 timeout send pkt2 send pkt3 send pkt4 send pkt5
X loss
receive pkt4 discard (re)send ack1 receive pkt5 discard (re)send ack1
rcv pkt2 deliver send ack2 rcv pkt3 deliver send ack3 rcv pkt4 deliver send ack4 rcv pkt5 deliver send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8
sender window (N=4)
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
Transport Layer 3-51
Selective repeat
āļ āļĢāļ Ack āđāļāļĨāļ°āđāļāļāđāļāļāļāđāļāļĢāļāļĄāļēāļāļāļāļāļ āđāļāļ (buffer) āđāļāļāđāļāļ āđāļāļēāļāļ āļēāđāļāļ āđāļāļāļāļāļ°āļŠāļāļāļāļĄāļĨāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ§ āđāļāļĒāļ layer
āļāļāđāļāđāļāļāļēāļĒāļāļŠāļ
āļāļŠāļāđāļāļŠāļāđāļāļāđāļāļāļ āļēāđāļāļāļēāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack āđāļāļēāļāļ āļāļ§āļāļāđāļ§āļĨāļē (āļāļēāļāļāļāļāļŠāļ) āļāļ°āļāļāđāļ§āļĨāļēāļāļāļāđāļāļĨāļ°āđāļāļāđāļāļāļāđāļĄāđāļāļĢāļ Ack
Window āļāļāļāļāļŠāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļĒ N āļŦāļĄāļēāļĒāđāļĨāļāļāļāļāļ āļ āļēāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāđāļāļāđāļāļāļāļŠāļāđāļāđāļĨāļ§ āđāļĨāļ°āđāļĄāđāļāļĢāļ Ack
Transport Layer 3-52
Selective repeat sender receiver windows
Transport Layer 3-53
Selective repeat
āļāļāļĄāļĨāļĄāļēāļāļēāļ layer āļāļēāļāļāļ āļāļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļ§āļēāļāđāļ window āđāļŦ
āļŠāļ pkt āđāļ
timeout(n) āļŠāļ pkt n āļ āļē āļāļāđāļ§āļĨāļēāđāļŦāļĄ
ACK(n) in [sendbase sendbase+N] āļĢāļ§āļē āļāļĢāļāđāļāļĢāļ pkt n āđāļĨāļ§ āļāļē n āđāļāļāđāļāļāļŦāļĄāļēāļĒāđāļĨāļāđāļĢāļāļŠāļāđāļāļŦāļāļēāļāļēāļ
(n āđāļāļēāļāļ sendbase) āļāđāļĄāđāļ āļāļ ack āđāļĨāļāļ window āđāļāļāļēāļāļāļēāļāļāļ§āļē āđāļāļĒāđāļĨāļāļāđāļāļĒāļāļŦāļĄāļēāļĒāđāļĨāļāļāđāļĄāđāļāļāļ ack
āļāļŠāļ pkt n in [rcvbase rcvbase+N-1] āļŠāļ ACK(n) āļāļēāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ buffer āļāļēāļāļēāļĄāļĨ āļēāļāļ āļŠāļ (āļĢāļ§āļĄāļāļāđāļŦāļŠāļ pkt āļ
āđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāđāļĨāļ°āļāļĒāđāļāļāļāđāļāļāļĢ) āđāļĨāļāļ window āđāļāļāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāđāļāļāļāļ pkt āļāļĒāļāđāļĄāđāļāļĢāļāļāļēāļāļāļŠāļ
pkt n in [rcvbase-Nrcvbase-1] ACK(n)
otherwise āļāļāđāļāđāļĄāļāļāļāļŠāļāđāļ
āļāļĢāļ
Transport Layer 3-54
āļāļāļ° Selective repeat āļ āļēāđāļāļāļāļēāļĢ
āļŠāļ pkt0
sender receiver
āļĢāļ pkt0 āļŠāļ ack0
āļĢāļ pkt1 āļŠāļ ack1
āļĢāļ pkt3 buffer āļŠāļ ack3 āļĢāļ ack0 āļŠāļ pkt4
āļĢāļ ack1 āļŠāļ pkt5
pkt 2 timeout send pkt2
X loss
āļĢāļ pkt4 buffer āļŠāļ ack4
āļĢāļ pkt5 buffer āļŠāļ ack5
āļĢāļ pkt2 deliver pkt2
pkt3 pkt4 pkt5 āļŠāļ ack2
āļāļāļāļ ack3 āļĄāļēāļāļāđāļĨāļ§
sender window (N=4)
āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§ āļāļāļāļ ack4 āļĄāļēāļāļāđāļĨāļ§
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ ack2 āļĄāļēāļāļ
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
āļŠāļ pkt1 āļŠāļ pkt2
āļŠāļ pkt3
(wait)
Transport Layer 3-55
Selective repeat dilemma
āļāļ§āļāļĒāļēāļ āļŦāļĄāļēāļĒāđāļĨāļ seq 0 1 2 3 āļāļāļēāļāļāļāļ window =3
receiver window (after receipt)
sender window (after receipt)
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2 X
X
X
will accept packet with seq number 0
(b) oops
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet with seq number 0
0 1 2 3 0 1 2 pkt3
(a) no problem
āļāļĢāļāđāļĄāļŠāļēāļĄāļēāļĢāļāđāļŦāļāļāļēāļāļāļŠāļāđāļ āļāļĪāļāļāļĢāļĢāļĄāļāļĢāļāļāļ°āđāļŦāļĄāļāļāļāļāļāļ 2 āļŠāļāļēāļāļāļēāļĢāļ
āļĄāļāļēāļāļāļĒāļēāļāļāļāļ (āļĄāļēāļ)
āļāļĢāļāđāļĄāđāļŦāļāļāļāļāļ§āļēāļĄāđāļāļāļāļēāļāļāļāļāļāļ 2 āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ
āđāļāđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ (b) āļāļāļĄāļĨāđāļāļēāļāļāļāļŠāļāļ āļē āđāļĄāļāļāļĢāļāļĢāļāļĄāļē āļāļ°āļāļāļ§āļēāđāļāļāļāļāļĄāļĨāđāļŦāļĄ
Q āļāļāļēāļāļāļāļ seq āļāļāļāļāļēāļāļāļāļ
window āđāļāļĒāļ§āļāļāļāļāļāļĒāļāđāļāđāļāļāļāļāļ°āļŦāļĨāļāđāļĨāļĒāļāļāļāļŦāļēāđāļāļāļ§āļāļĒāļēāļ (b)
Transport Layer 3-56
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-57
TCP āļ āļēāļāļĢāļ§āļĄ RFCs 79311221323 2018 2581
āļāļāļĄāļĨāđāļāļāļŠāļāļāļāļĻāļāļēāļ āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāđāļāđāļĨāļ°āļāļĨāļāđāļāļāļēāļĢ
āđāļāļāļĄāļāļ (connection) āđāļāļĒāļ§āļāļ MSS āļāļāļēāļ segment āļāđāļŦāļāļŠāļāļ
TCP āļāļ°āļĢāļāđāļ (Max Segment Size)
connection-oriented handshaking (āļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļ
āļāļāļāļ§āļēāļĄāļāļ§āļāļāļĄ) āļāļāļāļēāļŠāļāļēāļāļ°āļāļāļāļāđāļŦāļāļŠāļāđāļĨāļ°āļāļĢāļ āļāļāļāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļāļ§āļēāļĄ
flow controlled āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļāļāļāļ§āļēāļāļāļĢāļāļāļ°āļĢāļ
āđāļ
point-to-point (āļŠāļāļēāļāļāļāļ-āđāļ-āļŠāļāļēāļāļāļāļ) āļāļŠāļāļŦāļāļāļāļ āļāļĢāļāļŦāļāļāļāļ
āļŠāļēāļĒāļāļāļĄāļĨāđāļāļāđāļāļāļāđāļĢāļĒāļāļĨ āļēāļāļāđāļĨāļ°āļāļāļĄāļĨāđāļĄāļŠāļāļŦāļēāļĒ (reliable in-order byte steam) āđāļĄāļĄ ldquoāļāļāļāđāļāļrdquo āļāļāļāļāļāļāļ§āļēāļĄ
(āļāļāļāļ§āļēāļĄāļāļ°āļĄāļēāļāļāļāļĢāļāļāļāđāļāļāļāļāļ)
pipelined āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļĄ
āļāļāļĢāļēāļāļēāļĢāđāļŦāļĨāļāļāļ TCP āļāļ°āļ āļēāļŦāļāļāļāļāļēāļāļāļāļ window
Transport Layer 3-58
TCP segment structure
source port dest port
32 bits
application
data
(variable length)
sequence number
acknowledgement number
receive window
Urg data pointer checksum
F S R P A U head
len
not
used
options (variable length)
URG āļāļāļĄāļĨāđāļĢāļāļāļ§āļ (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
ACK ACK valid
PSH āļāļĨāļāļāļāļĄāļĨāđāļŦāļāļ app (āđāļāļĒāļāļ§ āđ āđāļ āđāļĄāļāļāđāļ)
RST SYN FIN āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļāļ
(āļ āļēāļŠāļ setup teardown)
āļ āļēāļāļ§āļ bytes āļ āļāļĢāļāđāļāļĄāđāļāļāļ°āļĢāļ
āļāļāđāļāļĒāđāļ byte āļāļāļāļāļāļĄāļĨ (āđāļĄāđāļ segment)
Internet checksum
(āđāļŦāļĄāļāļāđāļ UDP)
Transport Layer 3-59
TCP seq numbers ACKs
āļŦāļĄāļēāļĒāđāļĨāļ sequence āđāļĨāļāļāļāļ byte stream āļāļ°āđāļāļ byte
āđāļĢāļāļāļāļāļāļāļĄāļĨāļāļāļ segment āļ acknowledgements āđāļĨāļ seq āļāļāļ byte āļāļāđāļāļāļāļāļāļēāļāļŦāļāļ
āļāļēāļāļŦāļ§āļāļ§āļēāļāļ°āđāļ cumulative ACK (ACK āđāļāļāļĢāļ§āļĄ)
Q āļāļĢāļāļāļāļāļēāļĢāļāļ segment āļāļĄāļēāļāļāđāļĄāđāļĢāļĒāļāļĨ āļēāļāļāļāļĒāļēāļāđāļĢ A TCP āđāļĄāļĄāļĢāļēāļĒāļĨāļ°āđāļāļĒāļāļŠāļ§āļāļ ndash āļāļāļāļĒ
āļāļāļāļāļāļāļ°āļĄāļēāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄ TCP source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāđāļāļēāļĄāļēāļāļāļāļŠāļ
A
sent ACKed
sent not-yet ACKed (ldquoin-flightrdquo)
usable but not yet sent
not usable
window size N
sender sequence number space
source port dest port
sequence number acknowledgement number
checksum
rwnd urg pointer
segment āļāļēāļāļāļāļāļēāļāļāļŠāļ
Transport Layer 3-60
TCP seq numbers ACKs
User types lsquoCrsquo
host ACKs receipt
of echoed lsquoCrsquo
host ACKs receipt of lsquoCrsquo echoes back lsquoCrsquo
āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļ telnet āļāļĒāļēāļāļāļēāļĒ
Host B Host A
Seq=42 ACK=79 data = lsquoCrsquo
Seq=79 ACK=43 data = lsquoCrsquo
Seq=43 ACK=80
Transport Layer 3-61
TCP round trip time timeout
Q āđāļĢāļēāļāļ§āļĢāļāļ°āļ āļēāļŦāļāļ time out āđāļ§āļāđāļāļēāđāļ
āļĄāļēāļāļāļ§āļēāđāļ§āļĨāļēāļāļāļ RTT āđāļāđāļ§āļĨāļēāļāļāļ RTT āļāļāđāļāļĢāļāļĢāļ§āļ
āļ āļēāļŦāļāļāđāļ§āļāļāļĒāđāļāļāđāļ timeout āļāļāļāļ āļēāļŦāļāļ āļ āļēāđāļŦāļĄāļāļēāļĢ retransmissions āđāļāļĒāđāļĄāļ āļēāđāļāļ
āļ āļēāļŦāļāļāđāļ§āļĄāļēāļāđāļāļāđāļ āļĢāļ°āļāļāļāļāļāļŠāļāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļ segment āļāļēāđāļāļāđāļ
Q āļāļ°āļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āļāļĒāļēāļāđāļĢ
SampleRTT āļ§āļāļāļēāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāļāđāļāđāļĢāļĄāļŠāļ sengment āļāļāļāļĢāļ°āļāļāđāļāļĢāļACK āđāļĄāļŠāļāđāļāļāļēāļĢ retransmissions
SampleRTT āļĄāļāļēāđāļāļĢāļāļĢāļ§āļ āđāļĢāļēāļāļāļāļāļēāļĢāļāļĢāļ°āļĄāļēāļāđāļ§āļĨāļēāļāļāļ RTT āđāļŦ smooth āļāļ§āļē āđāļāļāļēāđāļāļĨāļĒāļāļāļāļāļēāļŦāļĨāļēāļĒ āđ āļāļē āđāļĄāđāļāđāļ
āđāļ§āļĨāļēāļāļāļ SampleRTT āļāļāļāļāļ
Transport Layer 3-62
RTT gaiacsumassedu to fantasiaeurecomfr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RT
T (
mil
lise
con
ds)
SampleRTT Estimated RTT
EstimatedRTT = (1- )EstimatedRTT + SampleRTT
āļāļēāđāļāļĨāļĒāļāļāļāļāļēāļĢāđāļāļĨāļāļāļāļāļ§āļāļ āļēāļŦāļāļāđāļāļ exponential āļāļē SampleRTT āļāđāļāļāļāļāļāļ°āļĄāļāļĨāļāļ EstimatedRTT āļĨāļāļĨāļāđāļāļ exponentially āđāļāļĒāļāļ§āđāļāļāļ°āļ āļēāļŦāļāļāļāļē = 0125
TCP round trip time timeout
RTT (
mill
iseco
nds)
RTT gaiacsumassedu to fantasiaeurecomfr
sampleRTT
EstimatedRTT
time (seconds)
Transport Layer 3-63
āļāļ§āļāđāļ§āļĨāļēāļāļāļ timeout EstimatedRTT āļāļ§āļāļāļāļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāđāļāļēāđāļ§ āļĒāļāļāļēāļāļāļ EstimatedRTT āļāđāļāļĢāļāļĢāļ§āļāļĄāļēāļāđāļāļēāđāļĢ -gt āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāļāđāļāļāļāļ§āļēāļĄāļĄāļēāļāļāļāļāļēāļĄ
āļĄāļāļĢāļ°āđāļĄāļāļāļēāļāļēāļĢāđāļāļĨāļĒāļāđāļāļĨāļāļāļāļ SampleRTT āļāļēāļ EstimatedRTT
DevRTT = (1-)DevRTT +
|SampleRTT-EstimatedRTT|
TCP round trip time timeout
(typically = 025)
TimeoutInterval = EstimatedRTT + 4DevRTT
estimated RTT ldquoāļāļ§āļāđāļ§āļĨāļēāļāđāļāļrdquo
Transport Layer 3-64
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-65
TCP reliable data transfer
TCP āļŠāļĢāļēāļāļāļĢāļāļēāļĢāđāļāļ reliable āļāļĒāļāļāļāļĢāļāļēāļĢāļāļāļ IP āļāđāļāļāđāļāļ unreliable segments āļāļāļŠāļāđāļāļ pipeline cumulative acks āļĄ timer āļŠ āļēāļŦāļĢāļāļŠāļāđāļŦāļĄāļāļēāļāļ§āđāļāļĒāļ§
TCP āļŠāļ segment āđāļŦāļĄāđāļĄāļ āđāļŦāļāļāļēāļĢāļ timeout āđāļāļĢāļ acks āļ āļē āđ āļāļ
āđāļĢāļēāļĄāļēāđāļĢāļĄāļāļāļāļāļēāļĢāļāļēāļāļēāļāļāļēāļāļāļŠāļāļāļāļ TCP āļāļĒāļēāļāļāļēāļĒāļāļāļ āļĒāļāđāļĄāļāļāļāļŠāļāđāļ acks āļ āļē āļĒāļāđāļĄāļāļāļāļŠāļāđāļāļāļēāļĢāļāļ§āļāļāļĄ flow āđāļĨāļ°
āļāļ§āļēāļĄāļāļāļāļ
Transport Layer 3-66
āđāļŦāļāļāļēāļĢāļāļāļāļ TCP sender
āđāļĄāļāđāļāļāļāļĄāļĨāļāļēāļ app āļŠāļĢāļēāļ segment āļāļ§āļĒāļŦāļĄāļēāļĒāđāļĨāļ seq āđāļĨāļ seq āļāļāļŦāļĄāļēāļĒāđāļĨāļāļāļāļāđāļāļāđāļĢāļ
āļāļāļāļāļāļĄāļĨāđāļāđāļāļĨāļ° segment āļŦāļēāļ timer āļĒāļāđāļĄāđāļāļĒāļāļāļāļ āļāļ°āđāļĢāļĄ
āļāļāđāļ§āļĨāļē āļāļēāļĢāļāļāđāļ§āļĨāļēāđāļāļāļāļāđāļ§āļĨāļēāļŠ āļēāļŦāļĢāļ
segment āđāļāļēāļāļŠāļāļĒāļāđāļĄāđāļāļĢāļ ack āļāļ§āļāđāļ§āļĨāļēāļāļŦāļĄāļāļāļēāļĒ
TimeOutInterval
timeout āļŠāļāđāļŦāļĄāđāļāļāļēāļ° segment āļāđāļāļ
timeout āļāļāđāļ§āļĨāļēāļāļāđāļŦāļĄ āđāļĄāļāđāļāļĢāļ ack āļāļē ack āđāļāļ ack āļāļāļ segment
āļāļāļāļŦāļāļēāļĒāļāđāļĄāđāļāļĢāļ ack Update āļŠāļāļāļĢāļ§āļē āļāļ ACK āđāļĨāļ§ āđāļĢāļĄāļāļāđāļ§āļĨāļēāļāļ āļāļēāļĒāļāļāļāļĄ segment
āļāļĒāļāđāļĄāđāļāļĢāļ acked
Transport Layer 3-67
āļāļēāļāļāļŠāļāļāļāļ TCP (āļāļĒāļēāļāļāļēāļĒ)
wait
for
event
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
L
create segment seq NextSeqNum
pass segment to IP (ie ldquosendrdquo)
NextSeqNum = NextSeqNum + length(data)
if (timer currently not running)
start timer
data received from application above
retransmit not-yet-acked segment with smallest seq start timer
timeout
if (y gt SendBase)
SendBase = y
SendBasendash1 last cumulatively ACKed byte
if (there are currently not-yet-acked segments)
start timer
else stop timer
ACK received with ACK field value y
Transport Layer 3-68
TCP retransmission scenarios
lost ACK scenario
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
X tim
eout
ACK=100
premature timeout
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=92 8 bytes of data
tim
eout
ACK=120
Seq=100 20 bytes of data
ACK=120
SendBase=100
SendBase=120
SendBase=120
SendBase=92
Transport Layer 3-69
TCP retransmission scenarios
X
cumulative ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
Seq=120 15 bytes of data
tim
eout
Seq=100 20 bytes of data
ACK=120
Transport Layer 3-70
āļāļēāļĢāļŠāļĢāļēāļ ACK āļāļāļ TCP [RFC 1122 RFC 2581]
āđāļŦāļāļāļēāļĢāļāļāļāļĢāļ āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ) āđāļāļĒāļāļāļĄāļĨāļāļāļŦāļĄāļāļāļāļāļāđāļĨāļ seq āļāļāļēāļāļŦāļ§āļāđāļ§ āļāļ ACK āļŦāļĄāļāđāļĨāļ§
āđāļĄāļ Segment āļāļĄāļēāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ (āļāļāļāļ āļĄāļŦāļĄāļēāļĒāđāļĨāļ seq āļāļāļāļāļāļēāļĢ āļ āļēāđāļŦ āđāļĄāļĄ gap āđāļ segment āļāđāļāļĄāļē) āđāļāļĄāļāļēāļ segment āļĒāļāđāļĄāđāļ ACK
Segment āļĄāļēāļāļāđāļāļāđāļĄāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļ āđāļāļĒāļĄāđāļĨāļ seq āļŠāļāļāļ§āļēāļāļāļāļāļāļēāļĢ āļ āļēāđāļŦāļĄ gap (āļāļāļāđāļŦāļ§) āđāļāļāļāļ Segment āļ āļēāļĄāļēāļāļ āļāļāļ°āđāļāļĄāļāļēāļāļŠāļ§āļāļŦāļĢāļāđāļāļĄāđāļāļĄāļāļāļāđāļŦāļ§
TCP receiver action āļāļĒāļēāđāļāļāļŠāļ ACK āļĢāļāļāļ segment āļāļ āđāļāļĒāļĢāļāļŠāļ 500ms āļŦāļēāļāļĒāļāđāļĄāļĄ segment āļĄāļē āļāļŠāļ ACK āļŠāļ ACK āđāļāļāļĢāļ§āļĄ (cumulative) āđāļāļāļāļāđāļāļāļĢāļāđāļāļĒāļ§ āļāļāļāļ°āđāļāļāļāļēāļĢ Ack segment āļāļĄāļēāđāļāļāđāļĢāļĒāļāļāļēāļĄāļĨ āļēāļāļāļāļāļŠāļāļ segments āļŠāļ ACK āļ āļē āđāļāļāļāļ āđāļāļĒāđāļŠāđāļĨāļ seq āļāļāļ byte āļāļāļāļāļāļēāļĢ āļŠāļ ACK āđāļāļāļĢāļ§āļĄāļāļāļ āđāļāļĒ segment āļāļāļ° Ack āđāļĢāļĄāļāļēāļāļāļēāļāļāļāļāļĒāļāļ§āļēāļāļāļ gap
Transport Layer 3-71
TCP fast retransmit
āļĢāļ°āļĒāļ°āđāļ§āļĨāļēāđāļāļāļēāļĢ time-out āļĄāļāļāļ°āļāļāļāļāļēāļāļĒāļēāļ§ (āđāļāļĒāđāļāļĢāļĒāļāđāļāļĒāļ) āļ āļēāđāļŦāđāļāđāļ§āļĨāļēāļāļāļāļāļēāļāļāļēāļāļāļāļāļāļāļ°
āļŠāļ packet āļāļāļāļĢāļ
āđāļāđāļāļĒ āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļŠāļāđāļŠāļĒ pack āđāļāļĒāļāļ ACKs āļāļ āļē āđ āļāļ āļāļŠāļāļĄāļāļŠāļ segment āļāļ āđ āļāļ āļāļāļāļ āļāļē segment āļŦāļāļāļŦāļēāļĒāđāļ āļāļ
āđāļāļāđāļāđāļāļāļāļ°āļĄ ACKs āļ āļē āđ āļāļāļ āļēāļāļ§āļāļĄāļēāļ
āļāļēāļāļŠāļāđāļāļĢāļ ACKs āļŠ āļēāļŦāļĢāļāļāļāļĄāļĨāđāļāļĒāļ§āļāļ 3 ACKS (ACKs āļāļ āļēāļāļāļŠāļēāļĄāļāļĢāļ) āļāļŠāļāļāļāļāļŠāļ seq āļāļĒāļāđāļĄāļāļ acked (āļĢāļ°āļāđāļĨāļ seq āļāđāļĨāļāļāļŠāļ) āļĄāđāļāļ§āđāļāļĄāļ§āļē segment āļāļĒāļāđāļĄāļāļ
ack āļāļ°āļŦāļēāļĒāđāļāđāļĨāļĒ āļāļāļāļ āļāļāđāļĄāļāļāļāļĢāļāđāļŦāļŦāļĄāļāđāļ§āļĨāļē
TCP fast retransmit
Transport Layer 3-72
X
fast retransmit after sender receipt of triple duplicate ACK
Host B Host A
Seq=92 8 bytes of data
ACK=100
tim
eout
ACK=100
ACK=100
ACK=100
TCP fast retransmit
Seq=100 20 bytes of data
Seq=100 20 bytes of data
Transport Layer 3-73
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-74
TCP flow control application
process
buffer āļāļēāļāļāļĢāļ āļāļāļ TCP socket
TCP code
IP code
application
OS
protocol stack āļāļēāļāļāļĢāļ
application āļĨāļāļāļāļĄāļĨāļāļēāļ buffer āļāļāļ TCP socket hellip
hellip āļāļēāļāļ§āļē TCP āļŠāļāļāļāļĄāļĨ āļāļāđāļ (āļāļāļ°āļāļāļŠāļāļ āļēāļĨāļāļāļ°āļŠāļ)
from sender
āļāļĢāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļĄāļāļŠāļāđāļ āļāļāļāļ āļāļŠāļāļāļ°āđāļĄāļŠāļāļāļāļĄāļĨāđāļĢāļ§āđāļ āļŦāļĢāļ āļĄāļēāļāđāļāļāđāļāļāļāļĨāļ (Overflow) buffer āļāļāļāļāļĢāļ
flow control
Transport Layer 3-75
āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļĄāļĨāļāļāļ TCP
āļāļāļĄāļĨāļāļāļĒ buffer
buffer āļŠāļ§āļāļāļĒāļāļ§āļēāļ rwnd
RcvBuffer
āļŠāļ§āļāļāļāļāļāļāļĄāļĨ (payload) āđāļ segment āļāļāļ TCP
āđāļāļĒāļ process āļāļāļ application
āļāļĢāļāļĢāļ°āļāļāļāļēāļāļāļāļ buffer āļāļ§āļēāļāđāļ§āđāļ field rwnd āļāļāļĒāđāļāļŠāļ§āļāļŦāļ§āļāļāļ TCP āļāļāļ°āļŠāļāđāļāļĒāļāļāļŠāļ āļāđāļāļĒāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļāļāļāļēāļāļāļāļ RcvBuffer āđāļ
āđāļāļĒāđāļ API āļāļāļāļē option āļāļāļ socket (āļāļēāđāļĢāļĄāļāļāļāļ§āđāļāļāļ 4096 āđāļāļ)
āļāļāļĢāļ°āļāļāļāļāļāļāļāļēāļĢāļāļ°āļāļĢāļāļāļāļēāļ RcvBuffer āļāļāđāļāļĄāļ
āļāļŠāļāļ āļēāļāļāļ āļēāļāļ§āļāļāļāļāļāļāļĄāļĨāļāļĒāļāđāļĄāļāļ acked (ldquoāļāļĒāđāļāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo) āđāļŦāđāļāļēāļāļāļāļē rwnd āļāļāļāļāļāļĄāļĨāļāļĢāļ
āđāļāļāļāļēāļĢāļĢāļāļāļĢāļ°āļāļāļ§āļē buffer āļāļāļāļāļĢāļāļāļ°āđāļĄāļĨāļ
āļāļēāļĢbuffer āđāļāļāļēāļāļāļāļāļāļĢāļ
Transport Layer 3-76
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-77
āļāļēāļĢāļāļāļāļēāļĢāļāļāļāļēāļĢāđāļāļāļĄāļāļ āļāļāļāļāļāļ°āļĄāļāļēāļĢāđāļĨāļāđāļāļĨāļĒāļāļāļāļĄāļĨāļāļ āļāļŠāļāđāļĨāļ°āļāļĢāļāļāļāļāļāļāļĨāļāļāļāļāļāļ āļāļāļĨāļāļĢāļ§āļĄāđāļāļāļēāļĢāļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ (āđāļāļĨāļ°āļāļāļāļ°āļĢāļ§āļēāļāļāļāļēāļĒāļāļĒāļēāļāļāļ°āđāļāļāļĄāļāļāļŦāļĢāļāđāļĄ) āļāļāļĨāļāļāļēāļāļēāļĢāļēāļĄāđāļāļāļĢāļŠ āļēāļŦāļĢāļāļāļēāļĢāđāļāļāļĄāļāļ
connection state ESTAB connection variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
connection state ESTAB connection Variables
seq client-to-server server-to-client rcvBuffer size
at serverclient
application
network
Socket clientSocket =
newSocket(hostnameport
number)
Socket connectionSocket =
welcomeSocketaccept()
Transport Layer 3-78
Q 2-way handshake āļāļ°āļ āļēāļāļēāļāđāļāđāļŠāļĄāļāđāļāļŦāļĢāļāđāļĄāļāļ network
āļāļ§āļēāļĄāļĨāļēāļāļēāļāļēāļāđāļāļĨāļĒāļāđāļ āļāļāļāļ§āļēāļĄāļāļēāļāļāļāļŠāļāļ āļēāļāļ§āļāļĒāļēāļ (āđāļāļ
req_conn(x)) āđāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨ
āļāļāļĄāļĨāļāļēāļāļŠāļĨāļāļāļ āđāļĄāļŠāļēāļĄāļēāļĢāļāļĢāđāļāļ§āļēāļāļāļāļāđāļāļĢāļāļŦāļĢāļāđāļĄ
āđāļāļĢāļāļāļāļĄāļĨāļāļ°āđāļĢ
2-way handshake
āļĄāļēāļāļĒāļāļāđāļāļāļ°
āļāļāļĨāļ ESTAB
ESTAB
choose x
req_conn(x)
ESTAB
ESTAB acc_conn(x)
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-79
āđāļŦāļāļāļēāļĢāļāļāļāļāļĨāļēāļāļāļāļ 2-way handshake
retransmit req_conn(x)
ESTAB
req_conn(x)
half open connection (no client)
client terminates
server forgets x
connection x completes
retransmit req_conn(x)
ESTAB
req_conn(x)
data(x+1)
retransmit data(x+1)
accept data(x+1)
choose x req_conn(x)
ESTAB
ESTAB
acc_conn(x)
client terminates
ESTAB
choose x req_conn(x)
ESTAB
acc_conn(x)
data(x+1) accept data(x+1)
connection x completes server
forgets x
āļāļāļĨāļāļāļāļ°āļŠāļĢāļēāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-80
3-way handshake āļāļāļ TCP
SYNbit=1 Seq=x
choose init seq num x send TCP SYN msg
ESTAB
SYNbit=1 Seq=y ACKbit=1 ACKnum=x+1
choose init seq num y send TCP SYNACK msg acking SYN
ACKbit=1 ACKnum=y+1
received SYNACK(x) indicates server is live send ACK for SYNACK
this segment may contain client-to-server data
received ACK(y) indicates client is live
SYNSENT
ESTAB
SYN RCVD
client state
LISTEN
server state
LISTEN
Transport Layer 3-81
closed
L
listen
SYN rcvd
SYN sent
ESTAB
Socket clientSocket =
newSocket(hostnameport
number)
SYN(seq=x)
Socket connectionSocket =
welcomeSocketaccept()
SYN(x) SYNACK(seq=yACKnum=x+1)
create new socket for communication back to client
SYNACK(seq=yACKnum=x+1)
ACK(ACKnum=y+1)
ACK(ACKnum=y+1)
L
FSM āļāļāļ 3-way handshake āļāļāļ TCP
Transport Layer 3-82
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
client server āđāļĨāļāđāļāļāļĄāļāļāļāđāļāļĨāļ°āļāļēāļāļāļāļāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĒāđāļāļĨāļ°āļāļēāļāļāļ°āļŠāļ TCP segment āļāļ§āļĒ FIN bit = 1
āļāļāļāļāļĨāļ FIN āļāļ§āļĒ ACK āđāļāļāļāļ°āļāļĢāļ FIN ACK āļāļŠāļēāļĄāļēāļĢāļāļĢāļ§āļĄāļāļĒāđāļāđāļāļāđāļāļāļāļŠāļ FIN āļĄāļēāđāļāļāļ§āļĒ
āđāļāļĨāļ°āļāļēāļāļŠāļēāļĄāļēāļĢāļāļŠāļ FIN āđāļāļāļĢāļāļĄ āđ āļāļ
Transport Layer 3-83
FIN_WAIT_2
CLOSE_WAIT
FINbit=1 seq=y
ACKbit=1 ACKnum=y+1
ACKbit=1 ACKnum=x+1
wait for server close
can still send data
can no longer send data
LAST_ACK
CLOSED
TIMED_WAIT
timed wait for 2max
segment lifetime
CLOSED
FIN_WAIT_1 FINbit=1 seq=x can no longer send but can receive data
clientSocketclose()
client state
server state
ESTAB ESTAB
TCP āļāļēāļĢāļŦāļĒāļāļāļēāļĢāđāļāļāļĄāļāļ
Transport Layer 3-84
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-85
āļāļ§āļēāļĄāļāļāļāļ āļāļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĄāđāļāļāļāļēāļāļāļēāļĢ ldquoāđāļĄāļāļ āļēāļāļ§āļāļāļāļŠāļāļĄāļēāļāđāļāļāđāļ āļ āļēāļĨāļāļŠāļāļāļāļĄāļĨāļĄāļēāļ
āđāļāļāđāļāļāļ§āļĒāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļĢāļ§āđāļāļāļāļ§āļēāļ Network āļāļ°āļĢāļāđāļŦāļ§rdquo āđāļāļāļāļēāļāļāļēāļ flow control āļāļĨāļāļāļēāļāļāđāļāļāļāļāļāļēāļāļāļ§āļēāļĄāļāļāļāļ
packets āļŦāļēāļĒ (buffer āļĨāļāļ routers) āļĨāļēāļāļēāļĄāļēāļ (āđāļāļēāļāļ§āđāļ buffers āļāļāļ router)
āđāļāļāļāļāļŦāļēāļāļāļāļŠāļāđāļāļāļ 10 āļāļāļāļāļāļāđ
āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ
Transport Layer 3-86
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 1
āļĄāļāļŠāļāđāļĨāļ°āļāļĢāļāļāļĒāļēāļāļĨāļ°āļŠāļāļāļāļ Router 1 āļāļ§ āđāļĄāļ āļēāļāļ buffers āļāļ§āļēāļĄāļāļāļāļ link R āđāļĄāļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļāļāļāļŦāļāļāļāļēāļĢāđāļāļāļĄāļāļ R2
buffer āļ link āļāļēāļāļāļāļĄ buffer āđāļĄāļāļāļ
Host A
āļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļ lin
Host B
āļāļāļĢāļēāļāļāļĄāļĨāļāļŠāļāļŠ āļēāđāļĢāļ lout
R2
R2
lou
t
lin R2 de
lay
lin
āļāđāļĨāļĒāļāļ°āļĄāļēāļāļāļāđāļĄāļāļāļāļĢāļēāļŠāļāļāļāļĄāļĨāļāļāļāļāļāđāļāļēāđāļāļĨāļāļ§āļēāļĄāļāļāļāļ link
Transport Layer 3-87
Router 1 āļāļ§ Buffer āđāļāļĄāļāļāļēāļ buffer āļ āļēāļāļ āļāļāļāļŠāļ pkt āđāļāļ āļēāļāļē pkt āļāļ timeout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ application = āļāļāļĄāļĨāļāļāļāļāļēāļāļāļ application lin = lout
āļāļāļĄāļĨāđāļāļēāļāļāļāļāļ transport āļāļ°āļĢāļ§āļĄāļāļāļāļāļŠāļāļ āļēāļāļ§āļĒ lin lin
Buffer āļāļāļ link āļāđāļāļĢāļ§āļĄāļāļāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A
lin āļāļāļĄāļĨāļāļāļāļāļ
Host B
lout lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
lsquo
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-88
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļāļŠāļāļĢāļāļ§āļēāļĄāđāļāļāđāļāđāļāđāļāļĢāļāļāļēāļĒ āļāļŠāļāļŠāļāđāļāļāļēāļ°āļāļāļāļāđāļĢāļēāđāļāļāļĢāļĄ buffer āđāļŦāļĨāļāļāļĒ
Buffer āļāļāļ link āļāđāļāļĢāļāļĒāļēāļāļ āļēāļāļ
lout copy
āļĄ buffer āļ§āļēāļ
R2
R2
lou
t
lin
Host B
A
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-89
lout copy
no buffer space
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
A
Host B
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-90
lout
free buffer space
R2
R2 lin
lou
t
āđāļĄāļāļŠāļāļāļāļĄāļĨāļ R2 āļāļēāļ packets āļāļāļŠāļāļ āļē āđāļ goodput āļĒāļāļāļāļĄāļāļēāļĨāđāļāļēāļŦāļē R2 (āļ āļēāđāļĄ)
A
Host B
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļāļĄāļāļ āļŠāļĄāļĄāļāļ§āļēāļāļŠāļāļĢāļ§āļēāļāļāļĄāļĨāđāļāļŦāļēāļĒāļāļēāļāļāļēāļĢāļāļ drop āļ router āđāļĄāļ buffer āđāļāļĄ āļāļŠāļāļŠāļāļāļāļĄāļĨāļ āļēāļāļāļāđāļĄāļāļĢāļ§āļēāļĄ
Packet āļŠāļāļŦāļēāļĒ
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļāļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-91
A
lin lout lin
copy
free buffer space
timeout
R2
R2 lin
lou
t
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Host B
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļ
āđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļ
āļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
Transport Layer 3-92
R2
lou
t
ldquoāļāļĨrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļāļāđāļŦāđāļāļāļāļĄāļĨāđāļāļāļāļĢāļēāļāļāļāļāļāļēāļĢ (goodput) āļāļāļāļ āļēāļāļēāļāļĄāļēāļāļāļ (āļŠāļāļ āļē) āđāļĄāļāļāļāļāļŠāļ packets āļ āļēāđāļāļĒāļāđāļĄāļ āļēāđāļāļ link āļāļ°āļāļāļāļĨ āļēāđāļĨāļĒāļāļŦāļĨāļēāļĒ copy āļāļāļ
āļāļāļĄāļĨāđāļāļĒāļ§āļāļ āļ āļēāđāļŦ goodput āļĨāļāļĨāļ
R2 lin
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļ 2
āđāļāļāļ§āļēāļĄāđāļāļāļāļĢāļ āļĄāļāļēāļĢāļŠāļāļ āļē 1 packets āļŦāļēāļĒāļŦāļĢāļāļāļāļŦāļĨāļāļĢāļ°āļŦāļ§āļēāļāđāļŠāļāļāļēāļāđāļāļāļāļāļēāļ buffers āđāļāļĄ 2 āđāļāļāļēāļāļāļĢāļ Timer āļāļāļāļāļŠāļāļŦāļĄāļāđāļ§āļĨāļēāļĨāļāļāļāļāđāļ§āļĨāļēāļāļāļāļ§āļĢ āļāļŠāļāļāļāļŠāļāļāļāļĄāļĨāļ āļēāđāļāļāļāļŦāļāļ packets āļāļ packet āļāļāļāļāļāļ°āļāļāļŠāļāđāļāļāļāļāļĢāļ
āđāļĄāļāļ āļēāļĨāļāļŠāļāļāļāļāļĢāļē R2 āļāļēāļ packet āļāļ°āļāļāļŠāļāļ āļē āđāļāļāļāļĢāļ§āļĄāļāļēāļĢāļŠāļāļāļāļĄāļĨāļ āļē āļāļāļāļĄāļĨāđāļĄāđāļāļŦāļēāļĒ āđāļ timeout āļāļāļāđāļ§āļĨāļēāļāļ§āļĒ
Transport Layer 3-93
āļĄāļāļŠāļāļāļāļĄāļĨāļāļ 4 āđāļŪāļŠāļ āđāļŠāļāļāļēāļāļāļāļāļāļēāļāļŦāļĨāļēāļĒāļāļ āļŦāļĄāļāđāļ§āļĨāļēāļŠāļāđāļāļāļāļĄāļĨāļ āļē
Q āđāļāļāļāļ°āđāļĢāļāļāđāļĄāļ Îŧin āđāļĨāļ° Îŧinrsquo āđāļāļĄāļāļ
Buffer āļāļāļāđāļŠāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļāļĢāļ§āļĄāļāļāļĄāļāļāļēāļāļ āļēāļāļ
Host A lout
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
Host B
Host C Host D
A āđāļĄāļ Îŧinrsquo āļāļāļāļāļāļĄāļĨāđāļŠāļāļŠāđāļāļāļĄāļāļāļēāļāđāļāļĄāļāļ āļāļāļĄāļĨāđāļ
āđāļŠāļāļŠāļ āļēāđāļāļāļāļāļ°āļāļ drop āļ āļēāđāļŦ throughput āļāļāļ connection āļŠāļ āļēāđāļāļāđāļŦāļĨāļ 0
lin āļāļāļĄāļĨāļāļāļāļāļ lin āļāļāļĄāļĨāļāļāļāļāļ āļāļ§āļāļāļ
āļāļāļĄāļĨāļāļāļāļāļŠāļāļ āļē
Transport Layer 3-94
āļāļāļŦāļāļ ldquoāļāļĨāđāļŠāļĒrdquo āļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļĄāļāđāļāļāđāļāļāļāļāļāļāđāļ āļāļāļāđāļāļēāļāļāļ§āļē āļāļĢāļĒāļēāļāļĢāđāļāļĢāļāļāļēāļĒ (āļāđāļāļŠāļāļāļāļĄāļĨāļāļāļ
āļŦāļāļēāļāļāļāļĄāļĨāļāļāļ°āļāļāļāļ) āļāļāđāļāđāļāļāļĒāļēāļāđāļĢāļāļē
āļāļāđāļŦāļāđāļĨāļ°āļāļĨāļāļāļāļāļ§āļēāļĄāļāļāļāļ āđāļŦāļāļāļēāļĢāļāļ āļēāļĨāļāļāļ 3
C2
C2
lou
t
linrsquo
Transport Layer 3-95
āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
2 āđāļāļ§āļāļēāļāđāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļāđāļāđāļāļĢāļāļāļāļĨāļēāļĒāļāļēāļ (end-end)
āđāļĄāļĄāļāļēāļĢāđāļāļāļāļĨāļ (feedback) āļāļēāļāđāļāļĢāļāļāļēāļĒ
āļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļ°āļāļāđāļāļēāđāļāļĒāđāļāļĢāļāļāļāļāļĒāļāļĨāļēāļĒāļāļēāļāļāļāļāļĒāļŠāļāđāļāļ loss delay
āđāļāļāļ§āļāļāļāļ TCP
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāđāļāļĒāđāļŦāļāļāļāļĢāļāđāļāļĢāļāļāļēāļĒāļāļ§āļĒ
routers āļāļ°āļ āļēāļāļēāļĢāđāļāļ feedback āđāļāļāļĢāļ°āļāļāļāļĨāļēāļĒāļāļēāļ āđāļ bit 1 bit āđāļāļāļĢāļ°āļāļāļāļāļ§āļēāļĄ
āđāļāļāļ (SNA DECbit TCPIP ECN ATM) āļŦāļĢāļ āļĢāļ°āļāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļāđāļāļ
āļŠ āļēāļŦāļĢāļāļāļŠāļ
Transport Layer 3-96
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
ABR available bit rate ldquoāļāļĢāļāļēāļĢāļāļĄāļāļ§āļēāļĄāļĒāļāļŦāļĒāļrdquo āļāļēāđāļŠāļāļāļēāļāļāļāļāļāļŠāļ ldquoāļĄāļāļāļĄāļĨāļāļāļĒāļāļ§āļē
āļāļ§āļēāļĄāļāļ°āļĄāļēāļrdquo āļāļŠāļāļāļ°āđāļāļāļĢāļ°āđāļĒāļāļāļāļēāļ
bandwidth āļāđāļŦāļĨāļāļāļĒ āļāļē path āļāļāļāļāļŠāļāđāļāļāļ
āļāļŠāļāļāļ°āļāļāļĒ āđ āļĨāļāļāļāļĢāļēāļŠāļāđāļŦāđāļŦāļĨāļāđāļāļēāļāļāļĢāļēāļāļēāļĢāļŠāļāļāļāļ āļēāļāļĢāļāļāļĢāļ°āļāļāđāļ§
RM (resource management) cells āļŠāļāđāļāļĒāļāļŠāļ āđāļāļĢāļ āđ āđāļāļāļ cell āļāđāļāļāļāļāļĄāļĨ bits āđāļ RM cell āļāļāļāļāļāļēāđāļāļĒ switches
(ldquoāđāļāļĢāļāļāļēāļĒāļāļāļĒāļāļ§āļĒrdquo) NI bit āđāļĄāđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļ (āļāļ§āļēāļĄāđāļāļāļ
āļĢāļ°āļāļāļāļĨāļēāļ) CI bit āļāļēāļĢāļāļāļāļāļāļāļāļāļ§āļēāļĄāđāļāļāļ
āļāļĢāļāđāļĄāđāļāļāļēāđāļ bit āļāļāļāļ RM cells āđāļĨāļ°āļŠāļāđāļāđāļŦāļāļŠāļ
Transport Layer 3-97
field āļāļāļĄāļĨ ER (explicit rate) āļāļāļēāļ 2 byte āđāļ cell RM switch āļāđāļāļāļāļāļēāļāļĨāļāļāļē ER āđāļ cell āļāļāļāļ āļāļāļĢāļēāļāļāļŠāļāļāļ°āļŠāļāļāļāļĄāļĨāļāļ°āđāļāļāļāļāļĢāļēāļāļēāļĢāļŠāļāļĄāļēāļāļāļŠāļāļ link āđāļāđāļŠāļāļāļēāļāļāļ°āļĢāļāļāļĢāļāđāļ
bit EFCI āđāļ cell āļāļāļĄāļĨ āļāļāļāļāļāļēāđāļ§āļ 1 āđāļ switch āļāļĄāļāļāļĄāļĨāđāļāļāļ āļāļē cell āļāļāļĄāļĨāļāļāļāļŦāļāļē RM cell āļāļāļāļāļāļē EFCI āļāļĢāļāļāļ°āļāļāļāļē bit CI āđāļ cell RM āļ
āļŠāļāļāļĨāļāđāļŦāļāļŠāļ
RM cell data cell
āļāļĢāļāļĻāļāļĐāļē āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ ATM āđāļāļ ABR
Transport Layer 3-98
Chapter 3 Outline
31 āļāļĢāļāļēāļĢāđāļāļāļ Transport 32 āļāļēāļĢāļĢāļ§āļĄāđāļĨāļ°āļāļēāļĢāđāļĒāļāļāļāļĄāļĨ
(multiplexing and demultiplexing)
33 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļĄāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļ (connectionless transport) UDP
34 āļŦāļĨāļāļāļēāļĢāļāļēāļ āđ āļāļāļāļāļēāļĢāļŠāļāļāļāļĄāļĨāļāđāļ§āđāļāđāļ (principles of reliable data transfer)
35 āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļāļāļĄāļāļēāļĢāđāļāļāļĄāļāļāļāļāļ (connection-oriented transport) TCP āđāļāļĢāļāļŠāļĢāļēāļāļŠāļ§āļāļāļāļĄāļĨ (segment) āļāļēāļĢāļŠāļāļāļāļĄāļĨāļāļāļēāđāļāļāļāļāļāļēāđāļ§āđāļāđāļ
(reliable data transfer) āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨ (flow control) āļāļēāļĢāļāļāļāļēāļĢāļāļēāļĢāđāļāļāļĄāļāļ (connection
management)
36 āļŦāļĨāļāļāļēāļĢāļāļāļāļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ (congestion control)
37 congestion control āļāļāļ TCP
Transport Layer 3-99
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP additive increase (āđāļāļĄāđāļāļāļāļ§āļ) multiplicative decrease (āļĨāļāđāļāļāđāļāļēāļāļ§)
āļ§āļ āļāļŠāļāđāļāļĄāļāļāļĢāļēāļŠāļ (window size) āļāļ§āļēāļāļŦāļē bandwidth āļāļĄāđāļŦāđāļāđāļ āļāļāļāļ§āļēāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļ°āđāļāļāļāļ additive increase āđāļāļĄ cwnd āļāļĨāļ° 1 MSS āļāļ āđ RTT āļāļāļāļ§āļēāļāļ° pkt āļāļ°āļŦāļēāļĒ multiplicative decrease āļāļāļĨāļ cwnd āđāļŦāļĨāļāļāļĢāļāđāļāļĒāļ§āļŦāļĨāļāļāļēāļāļāļēāļĢāļŠāļāļŦāļēāļĒ
cwnd
āļāļāļē
āļāļāļāļ co
nges
tion
wind
ow āļāļāļāļāļŠ
āļāđāļāļ
TCP
āļāļĪāļāļāļĢāļĢāļĄāļāļāļ AIMD āđāļāļ āļĨāļāļĐāļāļ°āļāļāđāļĨāļāļĒ āļŦāļē bandwidth
āļāļāļēāļ window āđāļāļĄāđāļāļāļāļ§āļ hellip hellip āļāļāļāļ§āļēāļāļ°āđāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒ (āļāļēāļāļāļ āļāļāļĨāļāđāļŦāļĨāļāļāļĢāļāļāļ)
time
Transport Layer 3-100
āļāļŠāļāļ āļēāļāļāļāļēāļĢāļŠāļ
āļāļāļēāļ cwnd āļāļ°āđāļāļĨāļĒāļāđāļāļĨāļāđāļāļĄāļē āļāļāļāļāļāļ§āļēāļĄāļāļāļāļāļāļāļāđāļāļĢāļāļāļēāļĒāļāļāļŠāļāđāļāļĢāļĄāļē
āļāļāļĢāļēāļāļēāļĢāļŠāļ TCP āļāļĒāļēāļāļāļĢāļēāļ§ āđ āļŠāļāļāļāļĄāļĨāļ āļēāļāļ§āļ
cwnd bytes āļĢāļ ACKS āđāļāļāļāļĢāļ°āļĄāļēāļāļāļē RTT āļāļēāļāļāļāļŠāļāđāļāļāļāļāļĄāļĨāđāļāļĄ
byte āļŠāļāļāļēāļĒāļ āļāļ ACKed āļŠāļ āđāļāļĒāļāđāļĄāļāļ
ACK (ldquoāļāļĒāļĢāļ°āļŦāļ§āļēāļāļāļēāļĢāđāļāļāļāļēāļrdquo)
byte āļŠāļāļāļēāļĒāļāļŠāļāđāļ
cwnd
LastByteSent-
LastByteAcked lt cwnd
āļāļ§āļāđāļĨāļ sequence number āļāļāļāļāļŠāļ
rate ~ ~ cwnd
RTT bytessec
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļ TCP āļĢāļēāļĒāļĨāļ°āđāļāļĒāļ
Transport Layer 3-101
TCP Slow Start
āđāļĄāļāđāļĢāļĄāļāļēāļĢāđāļāļāļĄāļāļ āđāļāļĄāļāļāļĢāļēāļāļēāļĢāļŠāļāđāļāļāļĒāļāļ āļēāļĨāļ (exponentially) āļāļāļāļ§āļēāļāļ°āđāļāļāļāļ loss āļāļĢāļāđāļĢāļ āđāļĢāļĄāļāļāļāļāļēāļ cwnd = 1 MSS āđāļāļĄāļāļāļēāļ cwnd āļŦāļāļāđāļāļēāļāļ§āļāļ āđ RTT āļāļāļāļ āđāļāļĒāđāļāļĄāļāļāļēāļ cwnd āđāļ 1 MSS
āļŠ āļēāļŦāļĢāļāļāļ āđ ACK āļāđāļāļĢāļ
āļŠāļĢāļ āļāļāļĢāļēāļŠāļāđāļĢāļĄāđāļĢāļāļāļ°āļāļēāđāļāļāļēāļāļ°āđāļāļĄāđāļāļāļāļĢāļ°āđāļāļāļāļāļāļĒāļēāļāļĢāļ§āļāđāļĢāļ§
Host A
RTT
Host B
time
Transport Layer 3-102
TCP āļāļēāļĢāļŦāļē loss āđāļĨāļ°āļāļēāļĢāļāļāļāļŠāļāļāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒ timeout cwnd āļāļāļāļāđāļ§āļ 1 MSS āļāļēāļāļāļāļŦāļāļēāļāļēāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļĨāļāļĒāļāļ āļēāļĨāļ (exponential āđāļŦāļĄāļāļāđāļ slow start)
āļāļāđāļāļāļāļāļē threshold āļāļēāļāļāļāļāļ°āđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
āļāļē loss āļāļāļĢāļ°āļāđāļāļĒāđāļāļĢāļ ACK āļ āļē 3 ACKs (3 duplicate acks) TCP RENO
ACKs āļ āļē āļĢāļ°āļāļāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļēāļĢāļŠāļ segments āļāļāļāđāļāļĢāļāļāļēāļĒ
cwnd āļāļāļāļāđāļŦāļĨāļāļāļĢāļāļāļāļāļēāļāļāļāđāļāļĄāļāļāđāļāļāđāļāļāđāļŠāļ
TCP Tahoe āļāļ°āļāļāļāļē cwnd āđāļāļ 1 āđāļŠāļĄāļ (āđāļĄāļ§āļēāļāļ° timeout āļŦāļĢāļ 3 dup acks)
Transport Layer 3-103
Q āđāļĄāļāđāļĢ TCP āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļāļēāļāļāļēāļĢāđāļāļĄāļāļāđāļāļ exponential āđāļāļāđāļāļāđāļāļāđāļŠāļ
A āđāļĄāļ cwnd āļāļāđāļāļĄāđāļāļ 12 āļāļāļ ldquoāļāļēāļāļĄāļēāļāļāļŠāļrdquo āļāļāļāļĄāļāļāļāļāļāļ°āđāļāļ timeout
āļāļēāļĢāļ āļēāđāļāļāļāļēāļĢ āļāļ§āđāļāļĢ ssthresh āļāļāļ°āđāļāļ Loss ssthresh āļāļ°āļāļ
āļāļāļāļēāļ 12 āļāļāļāļāļē cwnd āļāļāļāđāļāļāđāļŦāļāđāļāļāđāļāļĒāļ§ (āļāļē cwnd āļāļĄāļēāļāļāļŠāļāļāļāļāđāļāļāđāļŦāļāļāļēāļĢāļ)
TCP āļāļēāļ slow start āđāļāļ CA (Congestion Avoidance)
Transport Layer 3-104
āļŠāļĢāļ TCP Congestion Control
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0
retransmit missing segment
L
cwnd gt ssthresh
congestion
avoidance
cwnd = cwnd + MSS (MSScwnd) dupACKcount = 0 transmit new segment(s) as allowed
new ACK
dupACKcount++
duplicate ACK
fast
recovery
cwnd = cwnd + MSS transmit new segment(s) as allowed
duplicate ACK
ssthresh= cwnd2 cwnd = ssthresh + 3
retransmit missing segment
dupACKcount == 3
timeout
ssthresh = cwnd2 cwnd = 1 dupACKcount = 0
retransmit missing segment
ssthresh= cwnd2 cwnd = ssthresh + 3 retransmit missing segment
dupACKcount == 3 cwnd = ssthresh dupACKcount = 0
New ACK
slow
start
timeout
ssthresh = cwnd2 cwnd = 1 MSS dupACKcount = 0 retransmit missing segment
cwnd = cwnd+MSS dupACKcount = 0 transmit new segment(s) as allowed
new ACK dupACKcount++
duplicate ACK
L
cwnd = 1 MSS ssthresh = 64 KB dupACKcount = 0
New ACK
New ACK
New ACK
Transport Layer 3-105
Throughput āļāļāļ TCP
āļāļēāđāļāļĨāļĒ throughput āļāļāļ TCP āđāļāļ function āļāļāļāļāļāļēāļāļāļāļ window āđāļĨāļ° RTT āđāļĄāļŠāļāđāļ slow start āļŠāļĄāļĄāļāļ§āļēāļāļāļĄāļĨāļāļāļŠāļāļāļĨāļāļ
W āļāļāļēāļāļāļāļ window (āļŦāļāļ§āļĒāđāļāļ bytes) āļāļēāļĢāļŠāļāđāļŠāļĒāļāđāļāļāļāļ āļāļēāđāļāļĨāļĒāļāļāļēāļāļāļāļ window (āļ āļēāļāļ§āļ byte āļāđāļāļāļāļēāļāļāļĒ) āļāļ frac34 W āļāļēāđāļāļĨāļĒāļāļāļ throughput āļāļ 34W āļāļ RTT
W
W2
avg TCP thruput = 3 4
W RTT
bytessec
Transport Layer 3-106
TCP āđāļāļāļāļēāļāļ TCP āđāļ ldquopipes āļāļĒāļēāļ§āđāļĨāļ°āļĄāļāļ§āļēāļĄāļāļŠāļrdquo
āļāļ§āļāļĒāļēāļ 1500 byte segments 100ms RTT āļāļāļāļāļēāļĢāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10 Gbps
requires W = 83333 in-flight segments āļāļ§āļēāļĄāđāļāļāđāļāđāļāļāļāļāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāđāļāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļĄāļĨ L [Mathis 1997]
āđāļāļāļāļāļ°āļĄāļāļāļāļāļēāļāļāļēāļĢāļŠāļāļāļāļēāļ 10Gbps āļāļāļāļĄāļāļēāļĢāļŠāļāļŦāļēāļĒāļāļāļāļāļāļĄāļĨāđāļāļĒāļāđāļ =
210-10 ndash āļāļāļĒāļĄāļēāļ āļāļāļāļ āļāļāļāļĄ TCP āļĢāļāđāļŦāļĄāļŠ āļēāļŦāļĢāļāļāļēāļĢāļŠāļāđāļāļāļāļ§āļēāļĄāđāļĢāļ§āļŠāļ
TCP throughput = 122 MSS RTT L
Transport Layer 3-107
āđāļāļēāļŦāļĄāļēāļĒāļāļāļ fairness āļāļēāļĄ TCP session āļ āļēāļāļ§āļ K session āđāļāļāļĢāļāļĒāļēāļāļĢ bandwidth R āļĢāļ§āļĄāļāļ āđāļāļĨāļ° session āļāļ§āļĢāļāļ°āđāļāļĨāļĒāļāļĢāļāļĒāļēāļāļĢāđāļŦāļĄāļāļāļāļāļ RK
TCP connection 1
router āļāļāļāļ§āļ āļĄāļāļ§āļēāļĄāļ R
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (Fairness) āļāļāļ TCP
TCP connection 2
Transport Layer 3-108
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļāļāļāļ TCP āļāļāļāļ°āđāļĢ session 2 session āđāļāļāļāļāđāļāļāļĢāļāļĒāļēāļāļĢ additive increase āđāļŦāļāļ§āļēāļĄāļāļāđāļŠāļāđāļāļēāļāļ 1 (session āļāļ 2 āļāļāļĒ āđ āđāļ throughput āđāļāļĄāļāļĨāļ°
āļāļ) multiplicative decrease āļĨāļ throughput āđāļāļāļĢāļāļŦāļāļ
R
R
āđāļŠāļāļĢāļ°āļāđāļāļāļāļ§āļāļāđāļāļĢāļ§āļĄāđāļāļēāļāļ
Throuput āļāļāļ āļāļēāļĢāđāļāļāļĄāļāļāļ 1
congestion avoidance (CA) additive increase āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
congestion avoidance (CA) additive increase
āļŠāļāđāļŠāļĒ āļĨāļāļāļāļēāļāļāļāļ window āļĨāļāđāļāļāļĢāļāļāļ
Transport Layer 3-109
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ (āļāļ)
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āđāļĨāļ° UDP āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāļĒāļāļĢāļāđāļĄ
āđāļ TCP āđāļĄāļāļāļāļāļēāļĢāđāļŦāļāļāļĢāļēāļāļēāļĢāļŠāļāļĨāļāļĨāļāđāļāļĢāļēāļ°
āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļ
āļĄāļĨāļāļĄāđāļāļĒāđāļāļāļāļĨāđāļāļāļāļāļāđāļ UDP āđāļāļ āļŠāļāđāļŠāļĒāļāļ§āļāđāļāļāļ§āļĒāļāļ§āļēāļĄāđāļĢāļ§āļāļāļ āļāļ
āļāļāļāļēāļĢāļŠāļāđāļŠāļĒāļāļāļĄāļĨ
āļāļ§āļēāļĄāđāļŠāļĄāļāļ āļēāļ āļāļēāļĢāđāļāļāļĄāļāļ TCP āđāļāļāļāļāļēāļ āđāļāļāļāļĨāđāļāļāļāļŠāļēāļĄāļēāļĢāļāļāļāļ°āđāļāļāļŦāļĨāļēāļĒāļāļēāļĢ
āđāļāļāļĄāļāļāļĢāļ°āļŦāļ§āļēāļāđāļāļĢāļāļ 2 āđāļāļĢāļāļāđāļāļāļāļāļēāļāđāļ
āđāļ§āļāļāļĢāļēāļ§āđāļāļāļĢāļ āļēāđāļāļāļ āļāļ§āļāļĒāļēāļāđāļāļ link āļāļĄāļāļ§āļēāļĄāļ R āļāļāļĄ 9 āļāļēāļĢ
āđāļāļāļĄāļāļ āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 1 TCP āļāļ°āđāļāļĢāļāļ rate
R10 āļāļēāđāļāļāđāļŦāļĄāļāļāļāļāļēāļĢ 11 TCPs āļāļ°āđāļāļĢāļāļ R2
Transport Layer 3-110
Chapter 3 āļāļāļŠāļĢāļ
āļŦāļĨāļāļāļēāļĢāđāļāļāļāļŦāļĨāļāļāļēāļĢāđāļŦāļāļĢāļāļēāļĢāļāļtransport multiplexing demultiplexing āļāļēāļĢāļŠāļāļāļāļĄāļĨāđāļāļāđāļ§āđāļāđāļ āļāļēāļĢāļāļ§āļāļāļĄāļāļēāļĢāđāļŦāļĨāļāļāļāļāļāļĄāļĨ āļāļēāļĢāļāļ§āļāļāļĄāļāļ§āļēāļĄāļāļāļāļāļāļāļāļāļāļĄāļĨ
āļāļĢāļāļĻāļāļĐāļēāđāļĨāļ°āļāļēāļĢāļāļāļāļāļāļ internet UDP TCP
āļāļāđāļ āļāļāļāļāļēāļāļāļĨāļēāļĒāļāļēāļāļāļāļāļĢāļ°āļāļ
āđāļāļĢāļāļāļēāļĒ (application transport layers)
āđāļāļēāđāļāļĒāļāļŠāđāļāļāļāļāļāđāļāļĢāļāļāļēāļĒ