• These slides are a combination of two great sources: – Kurose and Ross Textbook slides
– Steve Deering IETF Plenary Talk
IP Datagram Format
ver length
32 bits
data (variable length, typically a TCP
or UDP segment)
16-bit identifier
Internet checksum
time to live
32 bit source IP address
IP protocol version number
header length (bytes)
max number remaining hops
(decremented at each router)
for fragmentation/ reassembly
total datagram length (bytes)
upper layer protocol to deliver payload to
head. len
type of service
“type” of data flgs fragment offset
upper layer
32 bit destination IP address
Options (if any) E.g. timestamp, record route taken, specify list of routers to visit.
how much overhead with TCP?
• 20 bytes of TCP • 20 bytes of IP • = 40 bytes + app
layer overhead
IP Fragmentation • network links have MTU
(max.transfer size) - largest possible link-level frame. – different link types,
different MTUs • large IP datagram divided
(“fragmented”) within net – one datagram becomes
several datagrams – “reassembled” only at
final destination – IP header bits used to
identify, order related fragments
fragmentation: in: one large datagram out: 3 smaller datagrams
reassembly
TCP RFCs: 793, 1122, 1323, 2018, 2581
• full duplex data: – bi-directional data flow in
same connection – MSS: maximum segment
size
• connection-oriented: – handshaking (exchange
of control msgs) init’s sender, receiver state before data exchange
• flow controlled: – sender will not overwhelm
receiver
• point-to-point: – one sender, one receiver
• reliable, in-order byte steam: – no “message boundaries”
• pipelined: – TCP congestion and flow
control set window size
• send & receive buffers
socketdoor
TCPsend buffer
TCPreceive buffer
socketdoor
segment
applicationwrites data
applicationreads data
TCP segment structure
source port # dest port #
32 bits
application data
(variable length)
sequence number acknowledgement number
Receive window
Urg data pnter checksum F S R P A U head
len not used
Options (variable length)
URG: urgent data (generally not used)
ACK: ACK # valid
PSH: push data now (generally not used)
RST, SYN, FIN: connection estab (setup, teardown
commands)
# bytes rcvr willing to accept
counting by bytes of data (not segments!)
Internet checksum
(as in UDP)
TCP Flow control
(Suppose TCP receiver discards out-of-order segments)
• spare room in buffer = RcvWindow = RcvBuffer-[LastByteRcvd -
LastByteRead]
• Rcvr advertises spare room by including value of RcvWindow in segments
• Sender limits unACKed data to RcvWindow – guarantees receive
buffer doesn’t overflow
TCP Congestion Control Review • When CongWin is below Threshold, sender in slow-
start phase, window grows exponentially.
• When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly.
• When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold.
• When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS.
TCP: retransmission scenarios Host A
Seq=100, 20 bytes data
time
premature timeout
Host B
Seq=92, 8 bytes data
Seq=92, 8 bytes data
Seq=
92 t
imeo
ut
Host A
Seq=92, 8 bytes data
ACK=100
loss
tim
eout
lost ACK scenario
Host B
X
Seq=92, 8 bytes data
ACK=100
time
Seq=
92 t
imeo
ut
SendBase = 100
SendBase = 120
SendBase = 120
Sendbase = 100
TCP Timeouts Setting the timeout • EstimtedRTT plus “safety margin”
– large variation in EstimatedRTT -> larger safety margin • first estimate of how much SampleRTT deviates from EstimatedRTT:
TimeoutInterval = EstimatedRTT + 4*DevRTT
DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT| (typically, β = 0.25)
Then set timeout interval:
Example RTT estimation: RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
100
150
200
250
300
350
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
RTT
(mill
isec
onds
)
SampleRTT Estimated RTT
TCP Window Size Over Time
8 Kbytes
16 Kbytes
24 Kbytes
time
congestionwindow
Long-lived TCP connection
Event State TCP Sender Action Commentary ACK receipt for previously unacked data
Slow Start (SS)
CongWin = CongWin + MSS, If (CongWin > Threshold) set state to “Congestion Avoidance”
Resulting in a doubling of CongWin every RTT
ACK receipt for previously unacked data
Congestion Avoidance (CA)
CongWin = CongWin+MSS * (MSS/CongWin)
Additive increase, resulting in increase of CongWin by 1 MSS every RTT
Loss event detected by triple duplicate ACK
SS or CA Threshold = CongWin/2, CongWin = Threshold, Set state to “Congestion Avoidance”
Fast recovery, implementing multiplicative decrease. CongWin will not drop below 1 MSS.
Timeout SS or CA Threshold = CongWin/2, CongWin = 1 MSS, Set state to “Slow Start”
Enter slow start
Duplicate ACK
SS or CA Increment duplicate ACK count for segment being acked
CongWin and Threshold not changed
IPv6 • Initial motivation: 32-bit address space
soon to be completely allocated. • Additional motivation:
– header format helps speed processing/forwarding
– header changes to facilitate QoS IPv6 datagram format: – fixed-length 40 byte header – no fragmentation allowed
IPv6 Header (Cont) Priority: identify priority among datagrams in flow Flow Label: identify datagrams in same “flow.” (concept of“flow” not well defined). Next header: identify upper layer protocol for data
Other Changes from IPv4
• Checksum: removed entirely to reduce processing time at each hop
• Options: allowed, but outside of header, indicated by “Next Header” field
• ICMPv6: new version of ICMP – additional message types, e.g. “Packet
Too Big” – multicast group management functions