Bài giảng Mạng máy tính - Chapter 3: Transport Layer (Part II) - Hồ Phương Đắc
TCP: Overview RFCs: 793, 1122, 1323, 2018, 2581
point-to-point:
full duplex data:
one sender, one receiver
bi-directional data flow
in same connection
reliable, in-order byte
steam:
MSS: maximum segment
size
no “message boundaries”
connection-oriented:
pipelined:
handshaking (exchange
of control msgs) init’s
sender, receiver state
before data exchange
TCP congestion and flow
control set window size
send & receive buffers
flow controlled:
application
writes data
application
reads data
sender will not
socket
door
socket
door
TCP
send buffer
TCP
receive buffer
overwhelm receiver
segment
3: Transport Layer
3b-1
TCP segment structure
32 bits
URG: urgent data
counting
source port #
sequence number
acknowledgement number
dest port #
(generally not used)
by bytes
of data
(not segments!)
ACK: ACK #
valid
head not
UAP
RS rcvr window size
F
PSH: push data now
(generally not used)
len used
# bytes
rcvr willing
to accept
checksum
ptr urgent data
RST, SYN, FIN:
connection estab
(setup, teardown
commands)
Options (variable length)
application
data
(variable length)
Internet
checksum
(as in UDP)
3: Transport Layer
3b-2
TCP seq. #’s and ACKs
Seq. #’s:
Host B
Host A
byte stream
User
“number” of first
types
byte in segment’s
‘C’
host ACKs
receipt of
‘C’, echoes
back ‘C’
data
ACKs:
seq # of next byte
expected from
other side
host ACKs
receipt
of echoed
‘C’
cumulative ACK
Q: how receiver handles
out-of-order segments
A: TCP spec doesn’t
say, - up to
time
simple telnet scenario
implementor
3: Transport Layer
3b-3
TCP: reliable data transfer
event: data received
from application above
create, send segment
simplified sender, assuming
•one way data transfer
•no flow, congestion control
event: timer timeout for
wait
segment with seq # y
for
retransmit segment
event
event: ACK received,
with ACK # y
ACK processing
3: Transport Layer
3b-4
00 sendbase = initial_sequence number
01 nextseqnum = initial_sequence number
02
TCP:
03 loop (forever) {
reliable
data
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
switch(event)
event: data received from application above
create TCP segment with sequence number nextseqnum
start timer for segment nextseqnum
pass segment to IP
nextseqnum = nextseqnum + length(data)
event: timer timeout for segment with sequence number y
retransmit segment with sequence number y
compue new timeout interval for segment y
restart timer for sequence number y
event: ACK received, with ACK field value of y
if (y > sendbase) { /* cumulative ACK of all data up to y */
cancel all timers for segments with sequence numbers < y
sendbase = y
transfer
Simplified
TCP
sender
}
else { /* a duplicate ACK for already ACKed segment */
increment number of duplicate ACKs received for y
if (number of duplicate ACKS received for y == 3) {
/* TCP fast retransmit */
resend segment with sequence number y
restart timer for segment y
}
} /* end of loop forever */
3: Transport Layer
3b-5
TCP ACK generation [RFC 1122, RFC 2581]
TCP Receiver action
Event
delayed ACK. Wait up to 500ms
for next segment. If no next segment,
send ACK
in-order segment arrival,
no gaps,
everything else already ACKed
immediately send single
cumulative ACK
in-order segment arrival,
no gaps,
one delayed ACK pending
send duplicate ACK, indicating seq. #
of next expected byte
out-of-order segment arrival
higher-than-expect seq. #
gap detected
immediate ACK if segment starts
at lower end of gap
arrival of segment that
partially or completely fills gap
3: Transport Layer
3b-6
TCP: retransmission scenarios
Host A
Host B
Host A
Host B
X
loss
time
time
premature timeout,
cumulative ACKs
lost ACK scenario
3: Transport Layer
3b-7
TCP Flow Control
receiver: explicitly
informs sender of
(dynamically changing)
amount of free buffer
space
flow control
sender won’t overrun
receiver’s buffers by
transmitting too much,
too fast
RcvWindow field in
RcvBuffer= size or TCP Receive Buffer
TCP segment
sender: keeps the amount
RcvWindow= amount of spare room in Buffer
of transmitted,
unACKed data less than
most recently received
RcvWindow
receiver buffering
3: Transport Layer
3b-8
TCP Round Trip Time and Timeout
Q: how to estimate RTT?
Q: how to set TCP
timeout value?
SampleRTT: measured time from
segment transmission until ACK
receipt
longer than RTT
note: RTT will vary
ignore retransmissions,
too short: premature
cumulatively ACKed segments
timeout
SampleRTTwill vary, want
unnecessary
estimated RTT “smoother”
retransmissions
use several recent
measurements, not just
current SampleRTT
too long: slow reaction
to segment loss
3: Transport Layer
3b-9
TCP Round Trip Time and Timeout
EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT
Exponential weighted moving average
influence of given sample decreases exponentially fast
typical value of x: 0.1
Setting the timeout
EstimtedRTTplus “safety margin”
large variation in EstimatedRTT ->larger safety margin
Timeout = EstimatedRTT + 4*Deviation
Deviation = (1-x)*Deviation +
x*|SampleRTT-EstimatedRTT|
3: Transport Layer
3b-10
TCP Connection Management
Recall: TCP sender, receiver Three way handshake:
establish “connection”
Step 1: client end system
sends TCP SYN control
segment to server
before exchanging data
segments
initialize TCP variables:
seq. #s
specifies initial seq #
buffers, flow control
Step 2: server end system
receives SYN, replies with
SYNACK control segment
info (e.g. RcvWindow)
client: connection initiator
Socket clientSocket = new
Socket("hostname","port
ACKs received SYN
allocates buffers
number");
specifies server->
server: contacted by client
receiver initial seq. #
Socket connectionSocket =
welcomeSocket.accept();
3: Transport Layer
3b-11
TCP Connection Management (cont.)
client
server
Closing a connection:
close
client closes socket:
clientSocket.close();
Step 1: client end system
sends TCP FIN control
segment to server
close
Step 2: server receives
FIN, replies with ACK.
Closes connection, sends
FIN.
closed
3: Transport Layer
3b-12
TCP Connection Management (cont.)
client
server
Step 3: client receives FIN,
replies with ACK.
closing
Enters “timed wait” -
will respond with ACK
to received FINs
closing
closed
Step 4: server, receives
ACK. Connection closed.
Note: with small
modification, can handly
simultaneous FINs.
closed
3: Transport Layer
3b-13
TCP Connection Management (cont)
TCP server
lifecycle
TCP client
lifecycle
3: Transport Layer
3b-14
Principles of Congestion Control
Congestion:
informally: “too many sources sending too much
data too fast for network to handle”
different from flow control!
manifestations:
lost packets (buffer overflow at routers)
long delays (queueing in router buffers)
a top-10 problem!
3: Transport Layer
3b-15
Causes/costs of congestion: scenario 1
two senders, two
receivers
one router,
infinite buffers
no retransmission
large delays
when congested
maximum
achievable
throughput
3: Transport Layer
3b-16
Causes/costs of congestion: scenario 2
one router, finite buffers
sender retransmission of lost packet
3: Transport Layer
3b-17
Causes/costs of congestion: scenario 2
=
lout
always: lin
(goodput)
>
lin
“perfect” retransmission only when loss:
lout
retransmission of delayed (not lost) packet makes
larger
lin
lout
(than perfect case) for same
“costs” of congestion:
more work (retrans) for given “goodput”
unneeded retransmissions: link carries multiple copies of pkt
3: Transport Layer
3b-18
Causes/costs of congestion: scenario 3
four senders
multihop paths
timeout/retransmit
Q: what happens aslin
and increase ?
lin
3: Transport Layer
3b-19
Causes/costs of congestion: scenario 3
Another “cost” of congestion:
when packet dropped, any “upstream transmission
capacity used for that packet was wasted!
3: Transport Layer
3b-20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chapter 3: Transport Layer (Part II) - Hồ Phương Đắc", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_mang_may_tinh_chapter_3_transport_layer_part_ii_ho.ppt