Professional Documents
Culture Documents
4 ComputerNetword Transport Layer
4 ComputerNetword Transport Layer
Lớp Transport
Computer Networking:
A Top Down Approach
Featuring the Internet,
3rd edition.
Jim Kurose, Keith Ross
Addison-Wesley, July
2004.
J.F Kurose and K.W. Ross, All Rights Reserved Lớp Transport 1
Chương 5: Lớp Transport
Mục tiêu:
D hiểu các nguyên tắc D nghiên cứu về các giao
đằng sau các dịch vụ thức lớp Transport trên
lớp transport: Internet:
O multiplexing/demultipl O UDP: vận chuyển không kết
exing nối (connectionless)
O truyền dữ liệu tin cậy O TCP: vận chuyển hướng kết
O điều khiển luồng nối (connection-oriented)
O điều khiển tắc nghẽn O điều khiển tắc nghẽn TCP
Lớp Transport 2
Chương 5: Nội dung trình bày
D 5.1 Các dịch vụ D 5.5 Vận chuyển hướng
lớp Transport kết nối: TCP
D 5.2 Multiplexing O cấu trúc phân đoạn
và demultiplexing O truyền dữ liệu tin cậy
điều khiển luồng
D 5.3 Vận chuyển
O
Lớp Transport 4
Các dịch vụ và giao thức Transport
D cung cấp truyền thông logic application
transport
chạy trên các host khác nhau network
data link network
D các giao thức transport chạy physical
network
data link
physical
trên các hệ thống đầu cuối data link
physical
network network
data link
physical
O phía nhận: tái kết hợp các
đoạn thành các thông điệp, application
transport
chuyển cho lớp application network
data link
Lớp Transport 6
Các giao thức lớp transport trên
Internet
D tin cậy, truyền theo application
transport
Lớp Transport 7
5.2 Multiplexing và
demultiplexing
Lớp Transport 8
Multiplexing/demultiplexing
Demultiplexing tại host nhận: Multiplexing tại host gửi:
thu nhặt dữ liệu từ nhiều
vận chuyển các đoạn đã nhận
socket, đóng gói dữ liệu với
được đến đúng socket
header (sẽ dùng sau đó cho
demultiplexing)
= socket = tiến trình
P1 P2 P4 application
application P3 P1 application
host 2 host 3
host 1
Lớp Transport 9
Demultiplexing làm việc như thế nào
D host nhận các IP datagrams
O mỗi datagram có địa chỉ IP
nguồn và IP đích
O mỗi datagram mang 1 đoạn
của lớp transport
O mỗi đoạn có số port nguồn
và đích
D host dùng địa chỉ IP & số
port để điều hướng đoạn đến
socket thích hợp
Lớp Transport 10
Demultiplexing không kết nối
D Khi host nhận đoạn UDP:
D Tạo các sockets với các số
O kiểm tra port đích trong
port:
đoạn
DatagramSocket mySocket1 = new
DatagramSocket(12534); O điều hướng đoạn UDP đến
Lớp Transport 11
Demultiplexing không kết nối
(tt)
DatagramSocket serverSocket = new DatagramSocket(6428);
P1
P2 P3 P1
Lớp Transport 12
Demultiplexing hướng kết nối
D TCP socket được xác D Host server có thể
định bởi bộ 4: hỗ trợ nhiều TCP
O địa chỉ IP nguồn socket đồng thời:
O số port nguồn O mỗi socket được xác định
O địa chỉ IP đích bởi bộ 4 của nó
O số port đích D Web server có các
D host nhận dùng cả 4 socket khác nhau cho mỗi
giá trị trên để điều kết nối từ client
hướng đoạn đến socket O kết nối HTTP không bền
thích hợp vững sẽ có socket khác
nhau cho mỗi yêu cầu
Lớp Transport 13
Demultiplexing hướng kết nối
(tt)
P1
P1 P4 P5 P6 P2 P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
Lớp Transport 14
Demultiplexing hướng kết nối:
Threaded Web Server
P1
P1 P4 P2 P3
SP: 5775
DP: 80
S-IP: B
D-IP:C
Lớp Transport 15
5.3 Vận chuyển không kết nối:
UDP
Lớp Transport 16
UDP: User Datagram Protocol [RFC 768]
D giao thức Internet
transport “đơn giản hóa”
Có UDP để làm gì?
D không thiết lập kết nối (giúp
D dịch vụ “best effort”, các
đoạn UDP có thể: có thể thêm delay)
D đơn giản: không trạng thái
O mất mát
kết nối tại nơi gửi, nơi nhận
O vận chuyển không thứ tự
D header của đoạn nhỏ
đến ứng dụng
D không điều khiển tắc nghẽn:
D connectionless (không kết
UDP có thể gửi nhanh nhất
nối):
theo mong muốn
O không bắt tay giữa bên
nhận và bên gửi UDP
O mỗi đoạn UDP được quản
lý độc lập
Lớp Transport 17
UDP: (tt)
D thường dùng cho các ứng
dụng streaming multimedia 32 bits
source port # dest port #
O chịu mất mát Độ dài
O cảm nhận tốc độ đoạn UDP length checksum
bao gồm cả dữ liệu
D ngoài ra, UDP dùng header ứng dụng
O DNS
(thông điệp)
O SNMP
D truyền tin cậy trên UDP:
thêm khả năng này tại lớp
application
O sửa lỗi
Lớp Transport 18
UDP checksum
Mục tiêu: kiểm tra các “lỗi” (các bit cờ đã bật lên)
trong các đoạn đã truyền
Lớp Transport 19
Ví dụ Checksum
D Lưu ý
O Khi cộng các số, một bit nhớ ở phía cao nhất có
thể sẽ phải thêm vào kết quả
D Ví dụ: cộng hai số nguyên 16-bit
1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
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
bit dư
tổng 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
Lớp Transport 20
5.4 Các nguyên lý của việc
truyền dữ liệu tin cậy
Lớp Transport 21
Các nguyên lý truyền dữ liệu tin cậy
D quan trọng trong các lớp application, transport, link
D là danh sách 10 vấn đề quan trọng nhất của mạng
D các đặc thù của kênh truyền không tin cậy sẽ xác định sự phức
tạp của giao thức truyền dữ liệu data transfer protocol (rdt)
Lớp Transport 22
Các nguyên lý truyền dữ liệu tin cậy
D quan trọng trong các lớp application, transport, link
D là danh sách 10 vấn đề quan trọng nhất của mạng
D các đặc thù của kênh truyền không tin cậy sẽ xác định sự phức
tạp của giao thức truyền dữ liệu data transfer protocol (rdt)
Lớp Transport 23
Các nguyên lý truyền dữ liệu tin cậy
D quan trọng trong các lớp application, transport, link
D là danh sách 10 vấn đề quan trọng nhất của mạng
D các đặc thù của kênh truyền không tin cậy sẽ xác định sự phức
tạp của giao thức truyền dữ liệu data transfer protocol (rdt)
Lớp Transport 24
Truyền dữ liệu tin cậy
rdt_send(): được gọi bởi lớp app. deliver_data(): được gọi
Chuyển dữ liệu cần truyền đến lớp bởi rdt để truyền dữ liệu đến
cao hơn bên nhận lớp cao hơn
bên bên
gửi nhận
udt_send(): được gọi bởi rdt_rcv(): được gọi khi gói đến
rdt, để truyền các gói trên kênh bên nhận
kênh không tin cậy đến nơi
nhận
Lớp Transport 25
Truyền dữ liệu tin cậy
Sẽ:
D chỉ xem xét truyền dữ liệu theo 1 hướng duy
nhất
O nhưng điều khiển luồng thông tin sẽ theo cả 2 chiều!
D dùng máy trạng thái hữu hạn (finite state
machines-FSM) để xác định bên gửi, bên nhận
Lớp Transport 26
Rdt1.0: truyền dữ liệu tin cậy trên 1 kênh truyền tin
cậy
D kênh ưu tiên tin cậy hoàn toàn
O không có các lỗi
O không mất mát các gói
Lớp Transport 27
Rdt2.0: kênh với các lỗi
D kênh ưu tiên có thể bật lên một số bit trong gói
O checksum để kiểm tra các lỗi
Lớp Transport 28
rdt2.0: đặc tả FSM
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
bên nhận
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
chờ gọi từ chờ ACK rdt_rcv(rcvpkt) &&
lớp trên hoặc udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)
Lớp Transport 29
rdt2.0: hoạt động khi không lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
chờ gọi từ chờ ACK rdt_rcv(rcvpkt) &&
lớp dưới hoặc udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Lớp Transport 30
rdt2.0: hoạt động khi có lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
chờ gọi từ chờ ACK rdt_rcv(rcvpkt) &&
lớp dưới hoặc udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Lớp Transport 31
rdt2.0 có lỗ hổng nghiêm trọng!
Điều gì xảy ra nếu Quản lý trùng lặp:
ACK/NAK bị hỏng? D bêngửi truyền lại gói hiện tại
D bên gửi không biết điều gì nếu ACK/NAK bị hỏng
đã xảy ra tại bên nhận! D bên gửi thêm số thứ tự vào
D không thể đơn phương mỗi gói
truyền lại: khả năng trùng D bên nhận hủy (không nhận)
lặp gói trùng lặp
dừng và chờ
bên gửi gửi 1 gói,
sau đó dừng lại chờ phản hồi
từ bên nhận
Lớp Transport 32
rdt2.1: bên gửi quản lý các ACK/NAK bị
hỏng
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
chờ gọi 0 chờ ACK
hoặc NAK isNAK(rcvpkt) )
từ lớp trên udt_send(sndpkt)
0
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
chờ ACK chờ gọi 1
hoặc NAK từ lớp trên
rdt_rcv(rcvpkt) && 1
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
rdt2.1 sender
Lớp Transport 33
rdt2.1: bên gửi quản lý các ACK/NAK bị
hỏng
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
chờ chờ
rdt_rcv(rcvpkt) && 0 từ 1 từ rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && dưới dưới not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
rdt2.1 receiver udt_send(sndpkt)
Lớp Transport 34
rdt2.1: thảo luận
bên gửi: bên nhận:
D số thứ tự # thêm vào D phải kiểm tra có
gói nhận trùng gói không
D chỉ cần hai số thứ O trạng thái chỉ rõ có hay
tự (0,1) là đủ. Tại không mong chờ số thứ
tự 0 hoặc 1
sao?
D chú ý: bên nhận không
D phải kiểm tra nếu việc
biết ACK/NAK vừa rồi
nhận ACK/NAK bị hỏng
của nó có được bên gửi
D số trạng thái tăng lên nhận tốt hay không
2 lần
O trạng thái phải “nhớ” gói
“hiện tại” có số thứ tự là
0 hay 1 Lớp Transport 35
rdt2.2: một giao thức không cần
NAK
D chức năng giống như rdt2.1, chỉ dùng các ACK
D thay cho NAK, bên nhận gửi ACK cho gói vừa rồi đã
nhận tốt
O bên nhận phải rõ ràng chèn số thứ tự của gói vừa ACK
D trùng ACK tại bên gửi hậu quả giống như hành động
của NAK: truyền lại gói vừa rồi
Lớp Transport 36
rdt2.2: gửi, nhận các mảnh
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Chờ cho Chờ cho
ACK isACK(rcvpkt,1) )
gọi 0 từ
trên 0 udt_send(sndpkt)
gửi phân mảnh
FSM rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) ||
has_seq1(rcvpkt)) Chờ
cho gọi
nhận phân mảnh
udt_send(sndpkt) 0 từ FSM
dưới
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) Lớp Transport 37
rdt3.0: các kênh với lỗi và mất mát
Giả định mới: kênh ưu tiên Cách tiếp cận: bên gửi chờ
cũng có thể làm mất ACK trong khoảng thời
các gói (dữ liệu hoặc gian “chấp nhận được”
các ACK) D truyền lại nếu không nhận ACK
O checksum, số thứ tự, các trong khoảng thời gian này
ACK, các việc truyền lại D nếu gói (hoặc ACK) chỉ trễ
sẽ hỗ trợ nhưng không đủ (không mất):
O truyền lại sẽ gây trùng,
nhưng dùng số thứ tự sẽ
giải quyết được
O bên nhận phải xác định số
thứ tự của gói vừa gửi ACK
D cần bộ định thì đếm lùi
Lớp Transport 38
rdt3.0 gửi
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer
Chờ cho Chờ
cho timeout
gọi 0 từ udt_send(sndpkt)
trên ACK 0
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Chờ Chờ cho
timeout cho gọi 1
udt_send(sndpkt) ACK 1 từ trên
start_timer rdt_rcv(rcvpkt)
rdt_send(data)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
Lớp Transport 39
hành động của rdt3.0
Lớp Transport 40
hành động của rdt3.0
Lớp Transport 41
Hiệu suất của rdt3.0
D rdt3.0 làm việc được, nhưng đánh giá hiệu suất hơi rắc rối
D ví dụ: liên kết 1 Gbps, trễ lan truyền giữa hai đầu cuối là 15
ms, gói 1KB:
L (độ dài gói tính bằng bits) 8kb/pkt
dtrans = = = 8 microsec
R (tốc độ truyền, bps) 10**9 b/sec
O gói 1KB mỗi 30 msec -> 33kB/s trên đường truyền 1 Gbps
O giao thức network hạn chế việc dùng các tài nguyên vật lý!
Lớp Transport 42
rdt3.0: hoạt động dừng-và-chờ
gửi nhận
gói đầu tiên đã truyền, t = 0
gói cuối cùng đã truyền, t = L / R
Lớp Transport 43
Các giao thức Pipelined
Pipelining: bên gửi cho phép gửi nhiều gói đồng thời,
không cần chờ báo nhận được
O nhóm các số thứ tự phải tăng dần
O phải có bộ nhớ đệm tại nơi gửi và/hoặc nơi nhận
Lớp Transport 45
Go-Back-N
Bên gửi:
D k-bit số thứ tự trong header của gói
D “cửa sổ” tăng lên đến N, cho phép gửi các gói liên tục không cần
ACK
D ACK(n): ACKs tất cả các gói đến, chứa số thứ tự n – “ACK tích lũy”
O có thể nhận các ACK trùng lặp (xem bên nhận)
D định thì cho mỗi gói trên đường truyền
D timeout(n): gửi lại gói n và tất cả các gói có số thứ tự cao hơn
trong cửa sổ
Lớp Transport 46
GBN: bên gửi mở rộng 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
chờ 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 Lớp Transport 47
GBN: bên nhận mở rộng FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 chờ extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
ACK-duy nhất: luôn luôn gửi ACK cho gói đã nhận đúng,
với số thứ tự xếp hạng cao nhất
O có thể sinh ra các ACK trùng nhau
O chỉ cần nhớ expectedseqnum
D gói không theo thứ tự:
O hủy -> không nhận vào bộ đệm!
O gửi lại ACK với số thứ tự xếp hạng cao nhất
Lớp Transport 48
GBN
hoạt động
Lớp Transport 49
Lặp có lựa chọn
D bên nhận thông báo đã nhận đúng tất cả từng gói
một
O đệm (buffer) các gói nếu cần thiết
D bên gửi chỉ gửi lại các gói nào không nhận được
ACK
O bên gửi định thì đối với mỗi gói không gửi ACK
D cửa sổ bên gửi
O N số thứ tự liên tục
O hạn chế số thứ tự các gói không gửi ACK
Lớp Transport 50
Lặp có lựa chọn: các cửa sổ gửi, nhận
Lớp Transport 51
Lặp có lựa chọn
Gửi Nhận
dữ liệu từ lớp trên: gói n trong [rcvbase, rcvbase+N-
1]
D nếu số thứ tự kế tiếp sẵn
sàng trong cửa sổ, gửi gói D gửi ACK(n)
D không thứ tự: đệm (buffer)
timeout(n):
D có thứ tự: truyền (cũng
D gửi lại gói n, tái khởi tạo bộ
truyền các gói đã đệm, có
định thì
thứ tự), dịch chuyển cửa sổ
ACK(n) trong đến gói chưa nhận kế tiếp
[sendbase,sendbase+N]:
gói n trong [rcvbase-N,rcvbase-
D đánh dấu gói n là đã nhận 1]
D nếu gói không ACK có n nhỏ D ACK(n)
nhất, dịch chuyển cửa sổ
base đến số thứ tự không ngược lại:
ACK kế tiếp D lờ đi
Lớp Transport 52
Hoạt động của lặp có lựa chọn
Lớp Tr
ansport 53
Lặp có lựa chọn:
tình trạng khó
giải quyết
Ví dụ:
D Số thứ tự: 0, 1, 2, 3
D Kích thước cửa sổ = 3
Lớp Transport 55
TCP: Tổng quan RFCs: 793, 1122, 1323, 2018, 2581
Lớp Transport 56
TCP: cấu trúc đoạn
32 bits
URG: dữ liệu khẩn cấp đếm bởi số byte
(thường không dùng) port # nguồn port # đích
của dữ liệu
ACK: ACK # số thứ tự
hợp lệ số ACK
head not
PSH: push data now len used
UA P R S F cửa sổ nhận
(thường không dùng) số byte bên
checksum con trỏ URG
nhận sẵn
RST, SYN, FIN: sàng chấp
Tùy chọn (độ dài thay đổi)
thiết lập kết nối nhận
(các lệnh thiết lập,
chia nhỏ)
dữ liệu ứng dụng
Internet (độ dài thay đổi)
checksum
(giống UDP)
Lớp Transport 57
Các số thứ tự TCP và ACK
Các số thứ tự:
Host A Host B
O dòng byte “đánh
số” byte đầu tiên User
nhập
trong dữ liệu của ‘C’
đoạn host ACKs
báo nhận
các ACK: ‘C’, phản hồi
O số thứ tự của byte ngược lại ‘C’
kế tiếp được chờ đợi
từ phía bên kia host ACKs
O ACK tích lũy nhận phản hồi
‘C’
Hỏi: làm thế nào bên nhận
quản lý các đoạn không
thứ tự
time
O Trả lời: TCP không tình huống telnet đơn giản
đề cập, tùy thuộc
người hiện thực Lớp Transport 58
TCP Round Trip Time vàTimeout
Hỏi: Làm thế nào để Hỏi : Làm thế nào để thiết lập
thiết lập giá trị TCP RTT?
timeout? D SampleRTT: thời gian được đo từ
D dài hơn RTT khi truyền đoạn đến khi báo nhận
O khác với RTT
ACK
O lờ đi việc truyền lại
D quá ngắn: timeout sớm
D SampleRTT sẽ thay đổi, muốn ước
O truyền lại không cần
thiết lượng RTT “mượt hơn”
O tính trung bình một số giá trị
D quá dài: phản ứng chậm
đối với việc mất mát gói đo được gần đó, không chỉ
SampleRTT hiện tại
Lớp Transport 59
TCP Round Trip Time và Timeout
EstimatedRTT = (1 – α) * EstimatedRTT + α * SampleRTT
Lớp Transport 69
Ví dụ đánh giá RTT:
RTT: gaia.cs.umass.edu to fantasia.eurecom.fr
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)
Lớp Transport 61
TCP Round Trip Time và Timeout
Thiết lập timeout
D EstimtedRTT cộng “hệ số dự trữ an toàn”
O sự biến thiên lớn trong EstimatedRTT -> hệ số dự trữ an toàn
lớn hơn
D ước lượng đầu tiên về sự biến thiên của SampleRTT từ
EstimatedRTT :
DevRTT = ()*DevRTT +
*|SampleRTT-EstimatedRTT|
Lớp Transport 62
TCP: truyền dữ liệu tin cậy
D TCP tạo dịch vụ rdt D Truyền lại được
trên dịch vụ không tin kích hoạt bởi:
cậy IP O các sự kiện timeout
D các đoạn Pipelined O các ack trùng lặp
D các ACK tích lũy D lúc đầu khảo sát các
Lớp Transport 63
TCP các sự kiện:
dữ liệu đã nhận từ ứng timeout:
dụng: D gửi lại đoạn nào gây
D tạo đoạn với số thứ ra timeout
tự của nó D khởi động lại bộ
D số thứ tự là số theo định thì
byte dữ liệu đầu tiên Ack đã nhận:
D khởi động bộ định O cập nhật cái gì sẽ được
thì nếu chưa chạy ACK
khởi động bộ định thì
D khoảng thời gian
O
nếu có các đoạn còn chờ
hết hạn:
TimeOutInterval
Lớp Transport 64
NextSeqNum = InitialSeqNum
SendBase = InitialSeqNum
Lớp Transport 65
TCP: các tình huống truyền lại
Host A Host B Host A Host B
Seq=92 timeout
timeout
X
loss
Sendbase
= 100
Seq=92 timeout
SendBase
= 120
SendBase
= 100 SendBase
= 120 timeout sớm
time time
tình huống mất ACK Lớp Transport 66
TCP: các tình huống truyền lại (tt)
Host A Host B
timeout
X
loss
SendBase
= 120
time
tình huống ACK tích lũy
Lớp Transport 67
TCP sinh ra ACK [RFC 1122, RFC 2581]
Sự kiện tại bên nhận TCP bên nhận hành động
Đoạn đến với đúng số thứ tự ACK trễ. Chờ đến 500ms
mong muốn. Tất cả dữ liệu đến cho đoạn kế tiếp. Nếu không có đoạn
đã được ACK kế tiếp, gửi ACK
Đoạn đến với đúng số thứ tự Gửi ngay một ACK tích lũy, chấp nhận
mong muốn. Một đoạn khác đang cho cả các đoạn theo thứ tự
chờ ACK
Các đoạn đến không thứ tự Gửi ngay ACK trùng lặp, chỉ thị số thứ tự
lớn hơn số thứ tự đoạn mong muốn. đoạn của byte kế tiếp đang mong chờ
Có khoảng trống
Đoạn đến lấp đầy từng phần Gửi ngay ACK, với điều kiện là đoạn
hoặc toàn bộ khoảng trống bắt đầu ngay điểm có khoảng trống
Lớp Transport 68
Truyền lại nhanh
D Chu kỳ Time-out D Nếu bên gửi nhận 3
thường tương đối dài: ACK của cùng một dữ
O độ trễ dài trước khi gửi liệu, nó cho là đoạn sau
lại gói đã mất dữ liệu đã ACK bị mất:
D Xác nhận các đoạn O Truyền lại nhanh: gửi lại
đã mất bằng các ACK đoạn trước khi bộ định thì
trùng lặp. hết hạn
O bên gửi thường gửi nhiều
đoạn song song
O Nếu đoạn bị mất, sẽ xảy
ra tình trạng giống như
nhiều ACK trùng nhau
Lớp Transport 69
Giải thuật truyền lại nhanh:
Lớp Transport 70
TCP điều khiển luồng
điều khiển luồng
bên gửi sẽ không làm
D bên nhận của kết tràn bộ đệm vì truyền
nối TCP có một bộ quá nhiều và quá nhanh
đệm nhận:
Lớp Transport 72
TCP quản lý kết nối
Chú ý: Bên gửi và bên nhận pp bắt tay 3 bước:
TCP thiết lập “kết nối” trước
khi trao đổi dữ liệu Bước 1: client host gửi đoạnTCP
SYN đến server
D khởi tạo các biến TCP:
O các số thứ tự đoạn
O xác định số thứ tự khởi đầu
O thông tin các bộ đệm,
O không phải dữ liệu
điều khiển luồng (như Bước 2: server host nhận SYN,
RcvWindow) trả lời với đoạn SYNACK
D client: người khởi xướng kết O server cấp phát các bộ
nối đệm
Socket clientSocket = new
Socket("hostname","port O xác định số thứ tự khởi đầu
đóng
client đóng socket:
clientSocket.close();
đã đóng
Lớp Transport 74
TCP quản lý kết nối (tt)
đã đóng
Lớp Transport 75
TCP quản lý kết nối (tt)
Lớp Transport 76
5.6 Các nguyên lý của điều
khiển tắc nghẽn
Lớp Transport 77
Các nguyên lý điều khiển tắc nghẽn
Tắc nghẽn:
D “quá nhiều nguồn gửi quá nhanh và quá nhiều dữ liệu
đến mạng”
D khác với điều khiển luồng!
D các biểu hiện:
O các gói bị mất (tràn bộ đệm tại các router)
O các độ trễ quá dài (xếp hàng trong bộ đệm của
router)
D là 1 trong 10 vấn đề nan giải nhất!
Lớp Transport 78
Các nguyên nhân/chi phí của tắc nghẽn:
tình huống 1 Host A
in : original data
out
• 2 gửi, 2 nhận
• 1 router, các bộ unlimited shared
đệm không giới hạn
Host B
output link buffers
Lớp Transport 80
Các nguyên nhân/chi phí của tắc nghẽn:
tình huống 2 =
D luôn luôn: in out
D truyền lại “hoàn toàn” chỉ khi mất mát: > out
in
D truyền lại vì trễ (không mất) làm cho lớn hơn với cùng
in
out
R/2 R/2 R/2
R/3
out
out
out
R/4
a. b. c.
“các chi phí” của tắc nghẽn:
D nhiều việc (truyền lại)
D các truyền lại không cần thiết: liên kết nhiều bản sao của gói
Lớp Transport 81
Các nguyên nhân/chi phí của tắc nghẽn:
tình huống 3
D 4 người gửi Hỏi: điều gì xảy ra nếu và
in in
D các đường qua nhiều hop tăng lên?
D timeout/truyền lại
Host A out
in : dữ liệu gốc
'in : dữ liệu gốc, cùng
với dữ liệu truyền lại
chia sẻ vô hạn
các bộ đệm ouput
Host B
Lớp Transport 82
Các nguyên nhân/chi phí của tắc nghẽn:
tình huống 3
H
o
s o
u
t
A t
H
o
s
t
B
Lớp Transport 83
Các cách tiếp cận đối với điều khiển tắc
nghẽn
2 cách:
Lớp Transport 84
Ví dụ: điều khiển tắc nghẽn ATM ABR
Lớp Transport 85
Ví dụ: điều khiển tắc nghẽn ATM ABR
D EFCI bit trong các ô dữ liệu: được cài giá trị 1 trong
switch đã tắc nghẽn
O nếu ô dữ liệu đứng trước ô RM có cài EFCI, bên gửi sẽ cài bit
CI trong ô RM trả về
Lớp Transport 86
5.7 Điều khiển tắc nghẽn TCP
Lớp Transport 87
TCP điều khiển tắc nghẽn: additive tăng lên,
multiplicative giảm xuống
D Cách tiếp cận: tăng tốc độ truyền (kích thước cửa sổ),
tìm khả năng băng thông có thể, cho đến khi có mất
mát xảy ra
O additive tăng lên: tăng CongWin bởi 1 MSS mỗi RTT
cho đến khi có mất mát xảy ra
O multiplicative giảm xuống: bỏ CongWin trong nửa
giai đoạn sau khi mất mát congestion
window
24
Tìm kiếm
kích thước cửa sổ
Kbytes
băng thông
tắc nghẽn
16
Kbytes
8 Kbytes
time
time
Lớp Transport 88
TCP điều khiển tắc nghẽn: chi
tiết
D bên gửi hạn chế việc truyền: Làm thế nào bên gửi nhận
LastByteSent-LastByteAcked biết tắc nghẽn?
CongWin D mất mát xảy ra =
timeout hoặc 3 ack
D Công thức,
trùng lặp
CongWin
tốc độ = Bytes/s D bên gửi giảm tốc độ
RTT (CongWin) sau khi mất
D CongWin thay đổi, chức năng mát xảy ra
là nhận biết tắc nghẽn trên 3 cơ chế:
mạng O AIMD
O khởi động chậm
O thận trọng sau khi có
các sự kiện timeout
Lớp Transport 89
TCP khởi động chậm
D Khi kết nối bắt đầu, D Khi kết nối bắt đầu,
CongWin = 1 MSS tăng tốc lên rất nhanh
O Ví dụ: MSS = 500 bytes & cho đến khi sự cố mất
RTT = 200 ms mát xảy ra đầu tiên
O tốc độ khởi tạo = 20 kbps
D băng thông sẵn sàng có
thể >> MSS/RTT
O mong muốn nhanh chóng
tăng tốc lên tốc độ có thể
đáp ứng
Lớp Transport 90
TCP khởi động chậm (tt)
D Khi kết nối bắt đầu, Host A Host B
tăng tốc lên rất nhanh
cho đến khi sự cố mất
RTT
mát xảy ra đầu tiên:
O nhân đôi CongWin mỗi
RTT
O hoàn thành nhờ tăng
CongWin ứng với mỗi
ACK đã nhận
D Tổng kết: tốc độ khởi
đầu là chậm nhưng sau
đó tăng tốc rất nhanh thời gian
Lớp Transport 91
Tinh chế
Hỏi: Khi nào việc tăng
tốc trở thành tuyến
tính?
Trả lời: Khi CongWin
đạt đến 1/2 giá trị
của nó trước khi
timeout.
Hiện thực:
D Ngưỡng thay đổi
D Tại thời điểm có sự cố mất
mát, ngưỡng được cài giá trị
bằng ½ của CongWin ngay
trước đó
Lớp Transport 92
Tinh chế: nhận biết mất mát
D Sau 3 ACK trùng lặp:
OCongWin sẽ giảm 1/2 Nguyên lý:
O kích thước cửa sổ tăng
tuyến tính 0 3 ACK trùng nhau chỉ ra
D nhưng sau sự cố timeout: khả năng truyền của mạng
0 timeout chỉ thị “nhiều
O CongWin thay giá trị
cảnh báo” về tình huống
bằng 1 MSS;
tắc nghẽn
O kích thước cửa sổ tăng
cấp lũy thừa
O khi đến một ngưỡng thì
tăng tuyến tính
Lớp Transport 93
Tổng kết: TCP điều khiển tắc nghẽn
Lớp Transport 97
TCP: tính công bằng
Mục tiêu: nếu K phiên làm việc TCP chia sẻ kết nối cổ
chai của băng thông là R, mỗi phiên có tốc độ
trung bình là R/K
router cổ chai
TCP
khả năng R
kết nối 2
Lớp Transport 98
Tại sao phải TCP công bằng?
2 phiên làm việc cạnh tranh nhau:
D Additive tăng, lưu lượng tăng
D multiplicative giảm lưu lượng tương xứng
Connection 1 throughput R
Lớp Transport 99
TCP: tính công bằng (tt)
Tính công bằng & UDP Tính công bằng & các kết nối
TCP song song
D nhiều ứng dụng
thường không dùng D không có gì ngăn cản
TCP việc ứng dụng mở các kết
nối song song giữa 2
không muốn tốc độ bị
host.
O
điều tiết do điều khiển
tắc nghẽn D Trình duyệt Web làm
D Thay bằng dùng UDP: giống như thế
O truyền audio/video với D Ví dụ: tốc độ R hỗ trợ
tốc độ ổn định, chịu 9 kết nối ;
được mất mát
O ứng dụng mới yêu cầu 1 TCP,
D Nghiên cứu: giao thức có tốc độ R/10
thân thiện với TCP O ứng dụng mới yêu cầu 11 TCP,
có tốc độ R/2 !
P = min{Q, K −1}
- trong đó Q là số lần server rảnh nếu đối tượng đã khởi tạo kích thước
tượng
= S/R
O
delay = + 2RTT + P
idleTime
R
p
fourth window
= 8S/R
p=1
O P
S S
= + 2RTT + [ + RTT − 2 k −1 ]
R k =1 R R S complete
O S object
= + 2RTT + P[RTT + ] − (2 −1)
P transmission
delivered
R R R time at
time at server
client
K = min{k : 20 S + 21 S +L + 2 k −1 S O}
= min{k : 20 + 21 +L + 2 k −1 O / S}
O
= min{k : 2 k −1 }
S
O
= min{k : k log 2 ( +1)}
S
= log (
O
2 S
+1)