Professional Documents
Culture Documents
Transport Layer
lo
gi
ca
khác nhau.
le
nd
Các giao thức vận chuyển chạy trên
-e
nd
các host
tr
a
Phía gửi: chia message ở tầng
ns
po
Application thành các segments,
rt
sau đó gửi các segment này application
xuống tầng Network transport
network
Phía nhận: ráp các segments data link
physical
thành các message, sau đó gửi lên
tầng Application
Có nhiều hơn 2 giao thức vận chuyển
để các ứng dụng mạng sd
Internet: TCP và UDP
Transport Layer 3-4
Transport vs. network layer
Tầng Network: truyền Household analogy:
thông logic giữa các 12 đứa trẻ gửi thư cho 12 đứa
hosts trẻ khác.
Tầng Transport : truyền Tiến trình = đứa trẻ
thông logic giữa các Message ở tầng Ứng dụng =
tiến trình thư trong phong bì
relies on, enhances, hosts = gia đình
network layer services
Giao thức vận chuyển = Ann
và Bill
Giao thức ở tầng mạng = Dịch
vụ bưu chính
lo
network
physical
gi
congestion control data link
ca
physical
le
flow control
nd
-e
connection setup
nd
network
tr
data link
Vận chuyển ko bảo đảm
a
physicalnetwork
ns
po
data link
rt
physical
network
effort” IP physical
P3 P1
P1 P2 P4 application
application application
host 2 host 3
host 1
Transport Layer 3-8
How demultiplexing works
Host bên nhận nhận IP datagrams
Mỗi datagram có source IP address,
32 bits
destination IP address
Mỗi datagram mang 1 segment (là
source port # dest port #
đơn vị dữ liệu ở Tầng Transport)
Mỗi segment có source port number, other header fields
destination port number .
Host bên nhận sử dụng địa chỉ IP và số
hiệu port để chuyển giao segment đến
application
socket tương ứng.
data
Hai cách demultiplexing khác nhau ứng
(message)
với cách truyền thông hướng kết nối
(connection-oriented)và phi kết nối
(connectionless)
TCP/UDP segment format
P2 P1
P1
P3
P1 P4 P5 P6 P2 P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
P1 P4 P2 P1P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
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
Tổng 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
Checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
(bù 1 của Tổng)
Các đặc tính của kênh truyền không đáng tin cậy (unreliable
channel) sẽ quyết định độ phức tạp của giao thức truyền dữ liệu
đáng tin cậy (reliable data transfer protocol – viết tắt rdt).
Transport Layer 3-21
Principles of Reliable data transfer
Là chủ đề quan trọng ở tầng application, transport và link
Nằm trong 10 chủ đề về mạng quan trọng nhất.
Các đặc tính của kênh truyền không đáng tin cậy (unreliable
channel) sẽ quyết định độ phức tạp của giao thức truyền dữ liệu
đáng tin cậy (reliable data transfer protocol – viết tắt Transport
rdt). Layer 3-22
Principles of Reliable data transfer
Là chủ đề quan trong ở tầng application, transport và link
Nằm trong 10 chủ đề quan trọng nhất về mạng máy tính.
Các đặc tính của kênh truyền không đáng tin cậy (unreliable
channel) sẽ quyết định độ phức tạp của giao thức truyền dữ liệu
đáng tin cậy (reliable data transfer protocol – viết tắt Transport
rdt). Layer 3-23
Reliable data transfer: getting started
rdt_send(): called from above, deliver_data(): called by
(e.g., by app.). Passed data to rdt to deliver data to upper
deliver to receiver upper layer
send receive
side side
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
L/R .008
U = = = 0.00027
sender 30.008
RTT + L / R microsec
onds
3*L/R .024
U = = = 0.0008
sender 30.008
RTT + L / R microsecon
ds
Transport Layer 3-44
Pipelining Protocols
Go-back-N: tổng quan Selective Repeat: tổng quan
Bên gửi: cho phép lên đến N Bên gửi: cho phép lên đến
gói-tin-chưa-được-xác-nhận N gói-tin-chưa-được-xác-
trong pipeline nhận trong pipeline
Bên nhận: chỉ gửi các Bên nhận: Xác nhận cho
cumulative ACKs từng gói tin cụ thể
Không gửi ACK nếu các gói-tin- Bên gửi: đếm giờ cho từng
dữ-liệu đến ko đúng thứ tự.
gói tin chưa đuợc xác nhận
Bên gửi: canh giờ cho gói tin Nếu quá giờ: chỉ truyền lại gói
“cũ nhất” chưa-đuợc-xác-nhận tin chưa được xác nhận
Nếu quá giờ: truyền lại tất cả
các gói-tin-chưa-được-xác -
nhận.
ACK(n): xác nhận tất cả các gói tin tới số thứ tự n -“cumulative ACK”
o Có thể nhận trùng gói tin xác nhận (xem bên nhận)
Sử dụng bộ đếm giờ (timer) cho mỗi gói tin đang truyền
timeout(n): truyền lại gói tin n và tất cả các gói tin có số thứ tự cao
hơn đã gửi trong cửa sổ.
Transport Layer 3-46
GBN: sender extended FSM
rdt_send(data)
if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
if (base == nextseqnum)
start_timer
nextseqnum++
}
else
refuse_data(data)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-
1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer Transport Layer 3-47
GBN: receiver extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
ACK-only: luôn gửi ACK cho gói tin nhận được ko bị lỗi và có
số thứ tự đúng trật tự truyền cao nhất
Có thể phát sinh trùng lắp các gói tin ACK
Chỉ cần nhớ biến expectedseqnum
Với các gói tin đến sai thứ tự:
Vứt bỏ (không lưu vào vùng đệm) -> no receiver buffering!
Gửi lại gói tin ACK cho gói tin đến đúng thứ tự và có số thứ tự cao
nhất.
Transport Layer 3-48
GBN in
action
socket
applica tion
w rites data
ap plica tio n
reads data
sock et
bên nhận
door d oor
TCP TCP
send bu ffer receive bu ffer Transport Layer 3-56
se g m e n t
TCP segment structure
32 bits
URG: urgent data counting
(generally not used) source port # dest port #
by bytes
sequence number of data
ACK: ACK #
valid acknowledgement number (not segments!)
head not
PSH: push data now len used
UA P R S F Receive window
(generally not used) # bytes
checksum Urg data pointer
rcvr willing
RST, SYN, FIN: to accept
Options (variable length)
connection estab
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(as in UDP)
350
300
250
RTT (milliseconds)
200
150
100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
DevRTT = (1-)*DevRTT +
*|SampleRTT-EstimatedRTT|
sau đó thiết lập giá trị cho timeout theo công thức
Seq=9 Seq=9
2, 8 b 2, 8 b y te
y te s d a s data
ta Seq=
Seq=92 timeout
1 00, 2
0 by t
es da
timeout
t a
=100
ACK 0
10
X CK=
A AC K = 120
loss
Seq=9 Seq=9
2, 8 b 2, 8 b
y t es da Sendbase y t es da
ta
ta
= 100
Seq=92 timeout
SendBase
= 120 = 120
0 K
=10 AC
ACK
SendBase
= 100 SendBase
= 120 premature timeout
time time
lost ACK scenario
Transport Layer 3-67
TCP retransmission scenarios (more)
Host A Host B
Seq=9
2, 8 byte
s data
=100
timeout
Seq=1 A CK
00, 20
bytes
data
X
loss
SendBase C K =120
A
= 120
time
Cumulative ACK scenario
Có segment đến với số STT đúng Gửi ngay 1 ACK ứng với segment
như mong đợi. Còn có 1 segment vừa đến (cumulative ACK).
khác đang chờ xác nhận.
Có segment đến với số STT lớn Gửi ngay 1 ACK trong đó nêu STT
hơn STT mong đợi. Bên nhận phát của byte kế tiếp được chờ đợi
hiện trình trạng "không liên tục" (duplicate ACK)
Có segment đến để "bít khoảng Gửi ngay 1 ACK trong đó nêu STT
hở" (một phần hay toàn bộ) của byte kế tiếp được chờ đợi
Transport Layer 3-69
Fast Retransmit
Khoảng thời gian time-out Nếu bên gửi nhận được
thường hơi dài: 3 ACK cho cùng dữ liệu,
Chờ lâu (hơn cần thiết) nó giả sử rằng “segment
trước khi gửi lại gói tin bị
mất
đi sau dữ liệu đã được
Phát hiện segment bị mất
xác nhận” bị mất:
thông qua việc nhận trùng
fast retransmit: gửi lại
segment mà không chờ
lặp ACK
đến khi time-out.
Bên gửi thường gửi nhiều
segment theo loạt
Nếu 1 segment bị mất, có
khả năng có nhiều ACK
trùng lặp dành cho segment
ngay trước segment bị mất.
seq # x1
seq # x2
seq # x3
ACK x1
seq # x4 X
seq # x5
ACK x1
ACK x1
ACK x1
triple
duplicate
ACKs resen
d seq
X2
timeout
time
IP
(currently)
TCP data application
speed-matching service:
unused buffer
datagrams (in buffer) process
space Điều chỉnh tốc độ gửi phù
hợp với tốc độ “tiêu
thoát” dữ liệu (của ứng
Các process của ứng dụng dụng) ở bên nhận.
bên nhận có thể đọc dữ liệu
từ vùng đệm chậm hơn tốc
độ dữ liệu đến.
Transport Layer 3-74
TCP Flow control: how it works
(currently) Bên nhận: báo cho bên
IP TCP data application
unused buffer
datagrams space
(in buffer) process gửi biết kích thước vùng
đệm chưa sử dụng bằng
rwnd cách đặt giá trị rwnd
RcvBuffer
hiện hành vào trong
(giả sử bên nhận vứt bỏ các segment header của mọi
segment đến sai thứ tự) segment gửi cho bên gửi
Kích thước vùng đệm chưa Bên gửi: giới hạn số
client: bên khởi tạo kết nối đến Bước 2: server nhận segment SYN, và trả
server lời bằng segment SYNACK
Socket clientSocket = new server cấp phát vùng buffer
Socket("hostname","port number"); Chỉ định số thứ tự (seq.#) cho
timed wait
ACK
hiệu đóng kết nối từ phía mình
bằng cách gửi FIN.
closed
timed wait
đến đồng thời ACK
closed
closed
TCP server
lifecycle
TCP client
lifecycle
Congestion:
Nôm na: “Có quá nhiều máy, gửi quá nhiều dữ liệu,
gửi nhanh quá khả năng xử lý của mạng.
Khác với flow control!
Biểu hiện:
Mất gói tin (tràn vùng đệm của router)
Kéo dài thời gian (do xếp hàng chờ tại vùng đệm
router)
Là 1 trong 10 vấn đề được quan tâm nhất!
R/3
out
out
out
R/4
a. b. c.
“cái giá” của sự ùn tắt:
Truyền lại dữ liệu bị mất do tràn bộ đệm
Truyền lại ko cần thiết các gói tin mà bên gửi “tưởng bị mất”
Transport Layer 3-85
Causes/costs of congestion: scenario 3
H
o
s o
t
u
A
t
H
o
s
t
B
Host D R4 R1
Host C
R2
R3
Transport Layer 3-87
Approaches towards congestion control
Có 2 cách tiếp cận để kiểm soát ùn tắt:
network-assisted congestion
end-end congestion control:
control: Tầng mạng (cụ thể là router) cung
cấp thông tin feedback cho các host.
Tầng mạng ko cung cấp Sử dụng 1 bit trong các gói tin
thông tin nào về tình trạng để biểu thị trạng thái ùn tắt (VD
ùn tắt. trong mạng SNA, DECnet,
Các host suy diễn ra sự ùn TCP/IP RFC 3168, ATM ABR)
tắt do quan sát các dấu hiệu Thông tin có thể đến sender bằng 1
mất gói tin và thời gian bị trong 2 cách: trực tiếp từ router-
kéo dài. >sender, gián tiếp router->reveiver-
>sender
TCP chọn cách tiếp cận này.
X
TCP’s
X “sawtooth”
behavior
time
RTT
Năng lực của đường truyền có thể lớn
hơn MSS/RTT rất nhiều lần two segm
ents
Có nhu cầu tăng nhanh đến tốc độ
truyền phù hợp.
Gia tăng tốc độ truyền theo hàm mũ,
four segm
cho tới khi có sự kiện “mất segment” ents
xảy ra hoặc khi chạm ngưỡng.
Gấp đôi cwnd sau mỗi RTT
Làm điều này bằng cách tăng cwnd
lên 1 sau mỗi lần nhận được ACK.
time
duplicate ACK
dupACKcount++ new ACK
cwnd = cwnd+MSS
dupACKcount = 0
transmit new segment(s),as allowed
cwnd = 1 MSS
ssthresh = 64 KB cwnd > ssthresh
dupACKcount = 0 slow congestion
start timeout avoidance
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
timeout
retransmit missing segment
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment
TCP Reno
cwnd window size (in segments)
ssthresh
ssthresh
TCP Tahoe
Transmission round
duplicate ACK
dupACKcount++ new ACK
new ACK
.
cwnd = cwnd + MSS (MSS/cwnd)
dupACKcount = 0
cwnd = cwnd+MSS transmit new segment(s),as allowed
dupACKcount = 0
transmit new segment(s),as allowed
cwnd = 1 MSS
ssthresh = 64 KB cwnd > ssthresh
dupACKcount = 0
slow congestion
start timeout avoidance
ssthresh = cwnd/2
cwnd = 1 MSS duplicate ACK
dupACKcount = 0
timeout dupACKcount++
retransmit missing segment
ssthresh = cwnd/2
cwnd = 1 MSS
dupACKcount = 0
retransmit missing segment
timeout
ssthresh = cwnd/2
cwnd = 1 New ACK
dupACKcount = 0
retransmit missing segment cwnd = ssthresh dupACKcount == 3
dupACKcount == 3 dupACKcount = 0
ssthresh= cwnd/2 ssthresh= cwnd/2
cwnd = ssthresh + 3 cwnd = ssthresh + 3
retransmit missing segment retransmit missing segment
fast
recovery
duplicate ACK
cwnd = cwnd + MSS
transmit new segment(s), as allowed
Khi cwnd < ssthresh, bên gửi làm việc theo slow-
start, cửa sổ cwnd tăng nhanh theo hàm mũ.
Khi cwnd >= ssthresh, bên gửi làm việc theo
congestion-avoidance, cửa sổ cwnd tăng tuyến tính.
Khi nhận được 3 ACK trùng nhau,
ssthresh := cwnd/2, cwnd := ssthresh
Khi timeout xảy ra,
ssthresh := cwnd/2, cwnd := 1 MSS.
VD: Xét kết nối TCP với segment kích thước 1500
byte, RTT= 100ms, chúng ta muốn thông lượng 10
Gbps trên kết nối TCP này.
Cần phải có cửa sổ với kích thước W = 83,333 in-
flight segments
Thông lượng tính theo tỷ lệ mất gói tin (loss rate L):
1.22 MSS
RTT L
➜ L = 2·10-10 Wow
Phiên bản mới của TCP dành cho mạng tốc độ cao.
TCP connection 1
bottleneck
TCP
router
connection 2
capacity R
Connection 1 throughput R