Académique Documents
Professionnel Documents
Culture Documents
application
writes data
TCP
send buffer
application
reads data
TCP
receive buffer
data segment
socket
layer
ACK segment
32 bits
source port #
dest port #
sequence number
acknowledgement number
head not
UA P R S F
len used
checksum
listen()
port 80
accept()
read()
Sending Data
socket
layer
application
writes data
TCP
send buffer
application
reads data
data segment
ACK segment
TCP
receive buffer
socket
layer
Preventing Congestion
Sender may not only overrun receiver, but may also overrun
intermediate routers:
No way to explicitly know router buffer occupancy,
so we need to infer it from packet losses
Assumption is that losses stem from congestion, namely, that
intermediate routers have no available buffers
Slow Start
Loss occurs OR
CW > slow start threshold
sender receiver
RTT
Initial CW = 1.
After each ACK, CW += 1;
Continue until:
one segm
ent
two segm
ents
four segm
ents
time
Congestion Avoidance
Until (loss) {
after CW packets ACKed:
CW += 1;
}
ssthresh = CW/2;
Depending on loss type:
SACK/Fast Retransmit:
CW/= 2; continue;
Course grained timeout:
CW = 1; go to slow start.
(This is for TCP Reno/SACK: TCP
Seq=9
timeout
sender receiver
2, 8 b
ytes d
ata
=100
ACK
loss
Seq=9
2,
8 byte
AC K
s data
=100
time
lost ACK scenario
10
Fast Retransmit
Receiver expects N, gets N+1:
sender receiver
ACK 3000
SEQ=300
0
, size=100
0
SEQ=400 X
0
SEQ=500
0
SEQ=600
0
ACK 3000
ACK 3000
ACK 3000
SEQ=300
0
, size=100
0
time
12
server
X)
FIN(
ACK(X
close()
+1)
FIN(Y
)
)
(Y+1
K
C
A
timed wait
closed
13
14
CLOSED
server application
calls listen()
client application
calls connect()
send SYN
LISTEN
SYN_SENT
receive SYN
send SYN + ACK
SYN_RCVD
receive SYN
send ACK
receive ACK
ESTABLISHED
15
ESTABLISHED
close() called
send FIN
receive FIN
send ACK
FIN_WAIT_1
receive ACK
of FIN
receive FIN
send ACK
FIN_WAIT_2
receive FIN
send ACK
CLOSE_WAIT
close() called
send FIN
CLOSING
receive ACK
of FIN
LAST_ACK
TIME_WAIT
receive ACK
wait 2*MSL
(240 seconds)
CLOSED
16
Web
Mail
News
Peer-to-peer (Napster, Gnutella, FreeNet, KaZaa)
17