Professional Documents
Culture Documents
1
2
Nhắc lại về kiến trúc phân tầng
Transport
Điều khiển truyền dữ liệu giữa các tiến trình
(UDP, TCP) của tầng ứng dụng
Network
Chọn đường và chuyển tiếp gói tin giữa
(IP, ICMP…) các máy, các mạng
Datalink Hỗ trợ việc truyền thông cho các thành
(Ethernet, ADSL…) phần kế tiếp trên cùng 1 mạng
2
4
Tổng quan về tầng giao vận (2)
Được cài đặt trên các hệ application
transport
network
thống cuối data link
physical
network
Không cài đặt trên các network
data link
data link
physical
3
6
Ứng dụng và dịch vụ giao vận
application
4
8
Mux/Demux hoạt động ntn?
32 bits
Số hiệu cổng dịch vụ/ứng source IP address
Network
dụng (Port Number): Một số destination IP address
16 bit là định danh của tiến
(other header fields)
trình ứng dụng
Nút mạng nhận gói tin với các
Transport Application
source port # dest port #
địa chỉ:
Địa chỉ IP nguồn other header fields
Địa chỉ IP đích
Số hiệu cổng nguồn
Số hiệu cổng đích segment of
application data
Địa chỉ IP và số hiệu cổng (payload)
được sử dụng để xác định
socket nhận dữ liệu
9
Socket là gì?
10
5
10
2.UDP (User Datagram Protocol)
Tổng quan
Khuôn dạng gói tin
11
11
6
12
Khuôn dạng bức tin
(datagram)
13
14
7
14
3. TCP (Transmission
Control Protocol)
15
15
16
8
16
Kênh có lỗi bit, không bị mất
tin
Truyền thông tin cậy: đảm bảo dữ liệu được
truyền đi thành công
Phát hiện lỗi?
Checksum
Làm thế nào để báo cho bên gửi?
ACK (acknowledgements): gói tin được nhận
thành công
NAK (negative acknowledgements): gói tin bị lỗi
Phản ứng của bên gửi?
Truyền lại nếu là NAK
17
17
Hoạt động
stop-and-wait
Sender Receiver
send pkt
pkt is OK
send ACK
rcv ACK
send next
packet
pkt is corrupted
send NAK
rcv NAK
resend pkt
Time Time
18
9
18
Lỗi ACK/NAK
Sender Receiver
Cần truyền lại
Xử lý việc lặp gói
send pkt0
tin ntn?
pkt0 is OK
Thêm Seq.#
send ACK
rcv ACK
send pkt1
pkt1 is
error
send NAK
rcv NAK!
rcv pkt1
resend pkt1
OK,
Time Time
19
19
send pkt0
pkt0 is OK
send ACK0
rcv ACK0
send pkt1
Gói tin nhận
pkt1 is OK được lỗi
Nhận được
rcv ACK1 send ACK1 gửi lại ACK
ACK với Seq#
không đổi send pkt2 trước đó
gửi lại gói tin pkt2 is corrupted
resend pkt2
Time Time 20
10
20
Kênh có lỗi bit và mất gói tin
21
21
Minh họa
sender receiver sender receiver
send pkt0 pkt0 send pkt0 pkt0
rcv pkt0 rcv pkt0
ack0 send ack0 ack0 send ack0
rcv ack0 rcv ack0
send pkt1 pkt1 send pkt1 pkt1
rcv pkt1 X
ack1 send ack1 loss
rcv ack1
send pkt2 pkt2
rcv pkt2 timeout
ack2 send ack2 resend pkt1 pkt1
rcv pkt1
ack1 send ack1
rcv ack1
send pkt2 pkt2
(a) Không có mất gói tin rcv pkt2
ack2 send ack2
11
22
Hiểu nhầm đây là ack cho
Minh họa gói tin pkt1 gửi lại trước đó
sender receiver
sender receiver send pkt0 pkt0
send pkt0 pkt0 rcv pkt0
ack0 send ack0
rcv pkt0
send ack0 rcv ack0
ack0 send pkt1 pkt1
rcv ack0 rcv pkt1
send pkt1 pkt1
rcv pkt1 send ack1
ack1 ack1
send ack1
X
loss timeout
resend pkt1 pkt1
rcv pkt1
timeout
resend pkt1 pkt1 rcv ack1 pkt2 (detect duplicate)
rcv pkt1 send pkt2 send ack1
(detect duplicate) ack1
ack1 send ack1 rcv ack1 rcv pkt2
rcv ack1 ack2 send ack2
pkt2 send pkt2 pkt2
send pkt2 rcv pkt2
rcv pkt2 ack2 (detect duplicate)
ack2 send ack2 send ack2
(c) mất ACK báo nhận Hiểu nhầm đây là (d) timeout sớm/ACK tới trễ
ack báo lỗi pkt2 23
23
time time
12
24
Ví dụ
L = 1000 byte
R = 8 Mbps
RTT = 50ms
H=?
L/R = 1000 x 8 / 8 x 106 = 1 ms
H = 1/(50 + 1) ~ 2%
25
25
Pipeline
Gửi liên tục một lượng hữu hạn các gói tin mà
không cần chờ ACK
Số thứ tự các gói tin phải tăng dần
Dữ liệu gửi đi chờ sẵn ở bộ đệm gửi
Dữ liệu tới đích chờ ở bộ đệm nhận
26
13
26
Hiệu năng của pipeline
sender receiver
bit đầu tiên được gửi đi 0
bit cuối cùng được gửi đi L / R
time time
L: Kích thước gói tin
R: Băng thông ∗ /
RTT: Round trip time =
+ /
n: Số gói tin gửi liên tục
27
27
Ví dụ
L = 1000 byte
R = 8 Mbps
RTT = 50ms
n = 20
H=?
L/R = 1000 x 8 / 8 x 106 = 1 ms
H = 20 x 1/(50 + 1) ~ 40%
Liệu có thể tăng n để H > 100%
28
14
28
Go-back-N
Cửa sổ gửi
#Seq kích thước Swnd đã gửi,
đã nhận ACK đang gửi
đã gửi,
chưa gửi
chưa nhận
ACK
29
Go-back-N
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
012345678 send pkt3 Xloss receive pkt1, send ack1
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
30
15
30
Selective Repeat
Cửa sổ gửi
#Seq kích thước Swnd đã gửi,
đã nhận ACK đang gửi
đã gửi,
chưa nhận chưa gửi
ACK
Cửa sổ nhận
đã nhận,
#Seq kích thước Rwnd đã nhận đúng
chưa đúng
thứ tự
thứ tự
chưa nhận
31
31
Selective Repeat
Bên gửi Bên nhận
Chỉ gửi gói tin trong cửa Chỉ nhận gói tin trong cửa
sổ gửi sổ nhận
Dùng 1 timer cho mỗi gói Nhận pkti:
tin trong cửa sổ Gửi lại ACKi
Nếu timeout cho gói tin Không đúng thứ tự: đưa
pkti chỉ gửi lại pkti vào bộ đệm
Đúng thứ tự: chuyển cho
Nhận được ACKi:
tầng ứng dụng cùng với các
Đánh dấu pkti đã có ACK gói tin trong bộ đệm đã trở
Nếu i là giá trị nhỏ nhất thành đúng thứ tự sau khi
trong các gói tin chưa nhận nhận pkti
ACK, dịch cửa sổ sang vị trí
gói tin tiếp theo chưa nhận
ACK 32
16
32
Selective Repeat Điều gì xảy ra nếu kích
thước cửa số lớn hơn
½ giá trị Seq# lớn nhất?
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
send pkt2 receive pkt0, send ack0
012345678
send pkt3 Xloss receive pkt1, send ack1
012345678
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5 receive pkt4, buffer,
send ack4
record ack3 arrived receive pkt5, buffer,
send ack5
pkt 2 timeout
012345678 send pkt2
012345678 record ack4 arrived
012345678 rcv pkt2; deliver pkt2,
record ack5 arrived
012345678 pkt3, pkt4, pkt5; send ack2
33
pkt0
Giả sử Seq# = {0, 1 , 2 0123012
0123012 pkt1 0123012
,3} 0123012 pkt2 0123012
X
Phía nhận không phân 0123012
pkt0 will accept packet
biệt được 2 trường hợp (a) pkt0 là gói tin mới
with seq number 0
lý X 0123012
X
timeout
retransmit pkt0 X
0123012 pkt0
will accept packet
with seq number 0
(b) pkt0 là gói tin bị lặp
34
17
34
3.2. Hoạt động của TCP
35
35
18
36
Khuôn dạng đoạn tin - TCP segment
32 bits
URG: Dữ liệu khẩn - Dùng để truyền dữ
source port # dest port #
liệu tin cậy
sequence number - Tính theo bytes
ACK: ACK #
acknowledgement number
head not
PSH: Chuyển dữ liệu len used
UAP R S F Receive window
-Số lượng bytes
ngay checksum Urg data pointer có thế nhận
RST, SYN, FIN: - Điều khiển luồng
Options (variable length)
Ký hiệu cho các
gói tin đặc biệt
application
data
(variable length)
37
37
Mỗi một liên kết TCP giữa hai tiến trình được
xác định bởi bộ 4 thông số (4-tuple):
Địa chỉ IP nguồn
Tầng mạng
Địa chỉ IP đích
Số hiệu cổng nguồn
Tầng giao vận
Số hiệu cổng đích
38
19
38
TCP cung cấp dịch vụ tin cậy ntn?
Kiểm soát lỗi dữ liệu: checksum
Kiểm soát mất gói tin: phát lại khi có time-out
Kiểm soát dữ liệu đã được nhận chưa:
Seq. #
Cơ chế báo nhận
Ack
Chu trình làm việc của TCP:
Thiết lập liên kết
Bắt tay ba bước
Truyền/nhận dữ liệu: có thể thực hiện đồng
thời(duplex) trên liên kết
Đóng liên kết 39
39
20
40
Nếu chỉ dùng 2 bước
A
Time out
41
41
42
21
42
Cơ chế báo nhận trong TCP
Host A Host B
Seq. #:
Số hiệu của byte
User
đầu tiên của đoạn types
tin trong dòng dữ ‘computer’
liệu
Gửi ACK
ACK: báo nhận
Số hiệu byte đầu
host ACKs
tiên mong muốn receipt
nhận từ đối tác
User
types
‘network’ time
43
43
User
types
‘computer’
host ACKs
receipt
User
types
‘network’
44
22
44
Đóng liên kết
A B
A state B state
ESTAB ESTAB
close(socket)
FIN_WAIT_1 không gửi tiếp FIN, seq=x
nhưng vẫn nhận
dữ liệu
CLOSE_WAIT
ACK, ACKnum=x+1 có thể tiếp tục
FIN_WAIT_2 đợi nhận FIN gửi dữ liệu
từ server
LAST_ACK
FIN, seq=y
TIMED_WAIT ngừng gửi dữ liệu
CLOSED
45
45
Server application
Creates a listen socket
CLOSED
Wait Receive ACK
CLOSED
Send nothing
Send SYN
Send FIN
Receive ACK
Send nothing Receive FIN Receive ACK
FIN_WAIT_1 Send ACK ESTABLISHED Send nothing
Client application
Initiates close connection
46
23
46
Pipeline trong TCP
Go-back-N hay Selective Repeat?
Bên gửi:
Nếu nhận được ACK# = i thì coi tất cả gói tin trước đó đã tới
đích (ngay cả khi chưa nhận được các ACK# < i). Dịch cửa sổ
sang vị trí i
Nếu có timeout của gói tin Seq# = i chỉ gửi lại gói tin đó
Bên nhận:
Đưa vào bộ đệm các gói tin không đúng thứ tự và gửi ACK
thuật toán lai
47
47
24
48
Tính toán timeout(Đọc thêm)
Dựa trên giá trị RTT (> 1 RTT)
Nhưng RTT thay đổi theo từng lượt gửi
Timeout quá dài: hiệu năng giảm
Timeout quá ngắn: không đủ thời gian để ACK báo về
Ước lượng RTT
EstimatedRTTi =
*EstimatedRTTi-1 + (1-)*SampleRTTi-1
EstimatedRTT: RTT ước lượng
SampleRTT: RTT đo được
0 < < 1: Jacobson đề nghị = 0.875
49
49
Độ lệch:
DevRTTi = (1-)*DevRTTi-1 +
*|SampleRTTi-1 - EstimatedRTTi-1|
Jacobson đề nghị = 0.25
Timeout:
TimeOutIntervali =
EstimatedRTTi + 4*DevRTTi
50
25
50
Ước lượng RTT – Ví dụ
1 40 20 120 80
15
2 45 25 145
3
4
5 ?
51
51
timeout
timeout
ACK=100
ACK=120
26
52
Phát lại như thế nào? (tiếp)
Host A Host B
timeout
ACK=100
X
ACK=120
53
53
Seq# = i, size = N
Đợi 500ms,
nếu không có ACK# = i + N
gói tin kế tiếp
ACK# = i + N
27
54
Hoạt động của bên nhận
Nhận gói tin đúng thứ tự Seq Nhận gói tin không
= i, trong bộ đệm có gói tin đúng thức tự: thực
không đúng thứ tự liền kề
hiện cơ chế hồi
phục nhanh
Bên nhận
Seq# = i, size = N
ACK# = i + N + M
Seq# = i + N
ACK tích lũy size = M
(cumulative ACK)
55
55
28
56
3.3. Kiểm soát luồng
57
57
A A B
B
58
29
58
Kiểm soát luồng (2)
59
59
30
60
Trao đổi thông tin về Rwnd
A B
Bên nhận sẽ báo cho
bên gửi biết Rwnd trong
các đoạn tin
Bên gửi đặt kích
thước cửa sổ gửi theo
Rwnd
61
61
bottleneck
router
capacity R
TCP connection 2
62
31
62
3.4. Điều khiển tắc nghẽn
trong TCP
63
63
64
32
64
Nguyên lý kiểm soát tắc nghẽn
14
Tránh tắc nghẽn 12 Slow-start
65
65
66
33
66
Kiểm soát tắc nghẽn – minh họa
cwnd
22
Timeout
20
18
Threshold is set to half of cwnd (20)
Threshold=16
16 And slow start starts
14
3 ACKs
12 SS
Threshold=10 Threshold is set to half of cwnd (12)
10
AI And additive increase starts
8
SS
AI
6 Threshold=6
4
AI
2
Step
67
67
Ví dụ
Giả sử phía gửi đang có Cwnd = 14000 byte, ngưỡng
ssthresh = 16800 byte, 1MSS = 1400 byte
Phía gửi có thể gửi một lượng dữ liệu tối đa là bao nhiêu
nếu:
1. Nhận được một gói tin ACK báo thành công có Rwnd =
8600 byte:
Cwnd < ssthresh: đang ở trạng thái Slow Start
Nhận được ACK: Cwnd = min (2*Cwnd, ssthresh) = 16800
Lượng dữ liệu gửi tối đa = min (Rwnd, Cwnd) = 8600 byte
68
34
68
Ví dụ
Giả sử phía gửi đang có Cwnd = 14000 byte, ngưỡng
ssthresh = 16800 byte, 1MSS = 1400 byte
Phía gửi có thể gửi một lượng dữ liệu tối đa là bao nhiêu
nếu:
(2) Nhận được một gói tin ACK báo thành công có Rwnd =
28000 byte
Cwnd < ssthresh: đang ở trạng thái Slow Start
Nhận được ACK: Cwnd = min (2*Cwnd, ssthresh) = 16800
Lượng dữ liệu gửi tối đa = min (Rwnd, Cwnd) = 16800 byte
69
69
Ví dụ
Giả sử phía gửi đang có Cwnd = 14000 byte, ngưỡng
ssthresh = 16800 byte, 1MSS = 1400 byte
Phía gửi có thể gửi một lượng dữ liệu tối đa là bao nhiêu
nếu:
(3) Nhận được một 3 gói tin ACK giống nhau có Rwnd =
28000 byte:
ssthresh = Cwnd/2 = 14000 / 2 = 7000
Cwnd = ssthresh = 7000 chuyển sang tránh tắc nghẽn
Lượng dữ liệu tối đa có thể gửi:
min(Rwnd, Cwnd) = min (28000, 7000) = 7000 byte
70
35
70
Ví dụ
Giả sử phía gửi đang có Cwnd = 14000 byte, ngưỡng
ssthresh = 16800 byte, 1MSS = 1400 byte
Phía gửi có thể gửi một lượng dữ liệu tối đa là bao nhiêu
nếu:
(4) Xảy ra time-out
Ssthresh = Cwnd /2 = 7000
Cwnd = 1 MSS = 1400 byte bắt đầu ở Slow Start
Lượng dữ liệu gửi đi tối đa: 1400 byte.
71
71
Tổng kết
72
36
72
Tài liệu tham khảo
Keio University
“Computer Networking: A Top Down Approach”,
J.Kurose
“Computer Network”, Berkeley University
73
73
37