Bài giảng Mạng máy tính - Chương 3: Tầng giao vận - Bùi Trọng Tùng

Tổng quan về tầng giao vận (1)

 Cung cấp phương tiện truyền

giữa các ứng dụng cuối

 Bên gửi:

 Nhận dữ liệu từ ứng dụng

 Đặt dữ liệu vào các gói tin và

chuyển cho tầng mạng

 Nếu dữ liệu quá lớn, nó sẽ được

chia làm nhiều phần và đặt vào

nhiều đoạn tin khác nhau

 Bên nhận:

 Nhận các đoạn tin từ tầng mạng

 Tập hợp dữ liệu và chuyển lên

cho ứng dụng

application

transport

network

data link

physical

application

transport

network

data link

physical

43

Tổng quan về tầng giao vận (2)

 Được cài đặt trên các hệ

thống cuối

 Không cài đặt trên các

routers, switches

 Hai dạng dịch vụ giao vận

 Tin cậy, hướng liên kết, e.g

TCP

 Không tin cậy, không liên kết,

e.g. UDP

 Đơn vị truyền: datagram

(UDP), segment (TCP)

application

transport

network

data link

physical

application

transport

network

data link

physical

network

data link

physical

network

data link

physical

network

data link

physical

network

data link

physical

network

data link

physical

network

data link

physical

network

data link

physical

5

Tại sao lại cần 2 loại dịch vụ?

 Các yêu cầu đến từ tầng ứng dụng là đa dạng

 Các ứng dụng cần dịch vụ với 100% độ tin cậy như

mail, web

 Sử dụng dịch vụ của TCP

 Các ứng dụng cần chuyển dữ liệu nhanh, có khả

năng chịu lỗi, e.g. VoIP, Video Streaming

 Sử dụng dịch vụ của UDP

pdf 36 trang kimcuc 7100
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 3: Tầng giao vận - Bùi Trọng Tùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Mạng máy tính - Chương 3: Tầng giao vận - Bùi Trọng Tùng

Bài giảng Mạng máy tính - Chương 3: Tầng giao vận - Bùi Trọng Tùng
1Chương 3. 
Tầng giao vận
1
1. Tổng quan về tầng giao vận
Nhắc lại kiến trúc phân tầng
Hướng liên kết vs. Không liên kết
UDP & TCP
2
2Nhắc lại về kiến trúc phân tầng
Application
(HTTP, Mail, )
Network
(IP, ICMP)
Datalink
(Ethernet, ADSL)
Physical
(bits)
Hỗ trợ các ứng dụng trên mạng
Điều khiển truyền dữ liệu giữa các tiến trình 
của tầng ứng dụng
Chọn đường và chuyển tiếp gói tin giữa 
các máy, các mạng
Hỗ trợ việc truyền thông cho các thành 
phần kế tiếp trên cùng 1 mạng
Truyền và nhận dòng bit trên đường 
truyền vật lý
Transport
(UDP, TCP)
3
Tổng quan về tầng giao vận (1)
 Cung cấp phương tiện truyền
giữa các ứng dụng cuối
 Bên gửi: 
 Nhận dữ liệu từ ứng dụng
 Đặt dữ liệu vào các gói tin và
chuyển cho tầng mạng
 Nếu dữ liệu quá lớn, nó sẽ được
chia làm nhiều phần và đặt vào
nhiều đoạn tin khác nhau
 Bên nhận: 
 Nhận các đoạn tin từ tầng mạng
 Tập hợp dữ liệu và chuyển lên
cho ứng dụng
application
transport
network
data link
physical
application
transport
network
data link
physical
4
3Tổng quan về tầng giao vận (2)
 Được cài đặt trên các hệ 
thống cuối
 Không cài đặt trên các 
routers, switches
 Hai dạng dịch vụ giao vận
 Tin cậy, hướng liên kết, e.g 
TCP
 Không tin cậy, không liên kết, 
e.g. UDP
 Đơn vị truyền: datagram 
(UDP), segment (TCP)
application
transport
network
data link
physical
application
transport
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
network
data link
physical
5
Tại sao lại cần 2 loại dịch vụ?
 Các yêu cầu đến từ tầng ứng dụng là đa dạng
 Các ứng dụng cần dịch vụ với 100% độ tin cậy như 
mail, web
 Sử dụng dịch vụ của TCP
 Các ứng dụng cần chuyển dữ liệu nhanh, có khả 
năng chịu lỗi, e.g. VoIP, Video Streaming
 Sử dụng dịch vụ của UDP
6
4Ứng dụng và dịch vụ giao vận
Ứng dụng
e-mail
remote terminal access
Web 
file transfer
streaming multimedia
Internet telephony
Giao thức 
ứng dụng
SMTP
Telnet
HTTP
FTP 
giao thức riêng
(e.g. RealNetworks)
giao thức riêng
(e.g., Vonage,Dialpad)
Giao thức
giao vận
TCP
TCP
TCP
TCP
TCP or UDP
thường là UDP
7
2. Các chức năng chung
Dồn kênh/phân kênh
Mã kiểm soát lỗi
8
5Dồn kênh/phân kênh - Mux/Demux
process
socket
Sử dụng thông tin trên tiêu
đề gói tin để gửi dữ liệu tới
đúng socket
Nhận: Phân kênhNhận dữ liệu từ các tiến trình 
tầng ứng dụng khác nhau (qua 
socket), đóng gói theo giao 
thức tầng giao vận và gửi trên 
liên kết mạng
Gửi: Dồn kênh
transport
application
physical
link
network
P2P1
transport
application
physical
link
network
P4
transport
application
physical
link
network
P3
9
Mux/Demux hoạt động ntn?
 Nút mạng nhận gói tin với các 
địa chỉ:
 Địa chỉ IP nguồn
 Địa chỉ IP đích
 Số hiệu cổng nguồn
 Số hiệu cổng đích
 Địa chỉ IP và số hiệu cổng 
được sử dụng để xác định 
socket nhận dữ liệu
source port # dest port #
32 bits
segment of
application data 
(payload)
other header fields
source IP address
destination IP address
(other header fields)
N
etw
o
rk
Tran
sp
o
rt
A
p
p
licatio
n
10
6Checksum
 Phát hiện lỗi bit trong các đoạn tin/gói tin
 Gửi:(nguyên lý chung)
 Chia dữ liệu thành các phần có kích thước n bit
 Tính tổng các phần. Nếu kết quả tràn quá n bit, cộng các bit tràn 
vào phần kết quả
 Đảo bit kết quả cuối cùng được checksum
 Truyền checksum kèm theo dữ liệu
 Nhận:
 Tách dữ liệu và checksum
 Chia dữ liệu thành các phần có kích thước n bit
 Tính tổng các phần và checksum. Nếu kết quả tràn quá n bit, 
cộng các bit tràn vào phần kết quả
 Nếu kết quả cuối xuất hiện bit 0 dữ liệu bị lỗi
11
3.UDP (User Datagram Protocol)
Tổng quan
Khuôn dạng gói tin
12
7Đặc điểm chung
 Giao thức hướng không kết nối (connectionless)
 Truyền tin “best-effort”: chỉ gửi 1 lần, không phát lại
 Vì sao cần UDP? 
 Không cần thiết lập liên kết (giảm độ trễ)
 Đơn giản: Không cần lưu lại trạng thái liên kết ở bên gửi và 
bên nhận
 Phần đầu đoạn tin nhỏ
 Không có quản lý tắc nghẽn: UDP cứ gửi dữ liệu nhanh 
nhất, nhiều nhất nếu có thể
 UDP có những chức năng cơ bản gì?
 Dồn kênh/phân kênh
 Phát hiện lỗi bit bằng checksum
13
Khuôn dạng bức tin 
(datagram) 
source port # dest port #
32 bits
Application
data 
(message)
Khuôn dạng đơn vị 
dữ liệu của UDP
length checksum
Độ dài toàn
bộ bức tin
tính theo byte
 UDP sử dụng đơn vị 
dữ liệu gọi là –
datagram (bức tin)
14
8mux/demux trên ứng dụng UDP
transport
application
physical
link
network
P2
transport
application
physical
link
network
P1
transport
application
physical
link
network
P3
source port: 9157
dest port: 6428
source port: 6428
dest port: 9157
source port: 6428
dest port: 5775
source port: 5775
dest port: 6428
Host A Host C
Host B
15
Mỗi tiến trình chỉ cần sử dụng một socket duy nhất 
để trao đổi dữ liệu với các tiến trình khác
Các vấn đề của UDP
 Không có kiểm soát tắc nghẽn
 Làm Internet bị quá tải 
 Không bảo đảm được độ tin cậy
 Các ứng dụng phải cài đặt cơ chế tự kiểm soát độ 
tin cậy
 Việc phát triển ứng dụng sẽ phức tạp hơn
16
94. TCP (Transmission 
Control Protocol)
17
4.1.Khái niệm về truyền thông 
tin cậy
18
10
Kênh có lỗi bit, không bị mất 
tin
 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 
19
Hoạt động
Time Time
Sender Receiver
send pkt 
pkt is corrupted
send NAK
rcv ACK 
send next 
packet 
rcv NAK 
resend pkt 
pkt is OK
send ACK
stop-and-wait
20
11
Lỗi ACK/NAK
 Cần truyền lại
 Xử lý việc lặp gói 
tin ntn?
 Thêm Seq.#
Time Time
Sender Receiver
send pkt0 
pkt1 is OK
send ACK
rcv ACK 
send pkt1 
rcv sth corrupted! 
resend pkt1 
pkt0 is OK
send ACK
rcv pkt1 
duplicate, 
discard it
21
Giải pháp không dùng NAK
Time Time
Sender Receiver
send pkt0 
pkt1 is OK
send ACK1
rcv ACK0 
send pkt1 
rcv ACK1 
send pkt2 
pkt0 is OK
send ACK0
pkt2 is corrupted
send ACK1rcv ACK1 
resend pkt2 
Gói tin nhận 
được lỗi 
gửi lại ACK 
trước đó
Nhận được 
ACK với Seq# 
không đổi 
gửi lại gói tin
22
12
Kênh có lỗi bit và mất gói tin
 Dữ liệu và ACK có thể bị mất
 Nếu không nhận được ACK?
 Truyền lại như thế nào?
 Timeout!
 Thời gian chờ là bao lâu?
 Ít nhất là 1 RTT (Round Trip Time)
 Mỗi gói tin gửi đi cần 1 timer
 Nếu gói tin vẫn đến đích và ACK bị mất?
 Dùng số hiệu gói tin
23
Minh họa
sender receiver
rcv pkt1
rcv pkt2
send ack0
send ack1
send ack2
rcv ack0
send pkt2
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt2
pkt1
ack1
ack0
ack2
(a) Không có mất gói tin
sender receiver
rcv pkt1
rcv pkt2
send ack0
send ack1
send ack2
rcv ack0
send pkt2
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt2
ack1
ack0
ack2
(b) mất gói tin gửi đi
pkt1
X
loss
pkt1
timeout
resend pkt1
24
13
Minh họa
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
rcv pkt2
send ack0
send ack1
send ack2
rcv ack0
send pkt2
send pkt1
rcv ack1
send pkt0
rcv pkt0
pkt0
pkt2
ack1
ack0
ack2
(c) mất ACK báo nhận
ack1
X
loss
pkt1
timeout
resend pkt1
rcv pkt1
send ack1
(detect duplicate)
pkt1
sender receiver
rcv pkt1
send ack0
rcv ack0
send pkt1
send pkt0
rcv pkt0
pkt0
ack0
(d) timeout sớm/ACK tới trễ
pkt1
timeout
resend pkt1
ack1
send ack1
send pkt2
rcv ack1
pkt2
ack1
ack2
send pkt2
rcv ack1 pkt2
rcv pkt2
send ack2ack2
rcv pkt2
send ack2
(detect duplicate)
Hiểu nhầm đây là ack cho 
gói tin pkt1 gửi lại trước đó
Hiểu nhầm đây là 
ack báo lỗi pkt2 25
Hiệu năng của stop-and-wait
bit đầu tiên được gửi đi t = 0
sender
time
RTT
bit cuối cùng được gửi đi t = L / R
Nhận được ACK, gửi gói tiếp theo 
t = RTT + L / R
time
L: Kích thước gói tin
R: Băng thông
RTT: Round trip time
 =
/
 + /
receiver
bit đầu tiên tới đích
bit cuối cùng tới đích
26
14
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
27
Hiệu năng của pipeline
sender receiver
RTT
bit cuối cùng được gửi đi L / R
Nhận được ACK, gửi gói tiếp theo 
RTT + 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
 =
 ∗ /
 + /
bit đầu tiên được gửi đi 0
các gói tin tới 
đích
28
15
Go-back-N
Bên gửi
• Chỉ gửi gói tin trong cửa sổ.
Chỉ dùng 1 bộ đếm (timer) cho
gói tin đầu tiên trong cửa sổ
• Nếu nhận được ACKi, dịch
cửa sổ sang vị trí (i+1). Đặt lại
timer
• Nếu timeout cho gói tin pkti gửi
lại tất cả gói tin trong cửa sổ
Bên nhận
• Gửi ACKi cho gói tin pkti đã
nhận được theo thứ tự
• Gói tin đến không theo thứ
tự: hủy gói tin và gửi lại
ACK của gói tin gần nhất
còn đúng thứ tự
đã gửi,
đã nhận ACK
đã gửi,
chưa nhận 
ACK
đang gửi
chưa gửi
#Seq
Cửa sổ gửi
kích thước Swnd
29
Go-back-N
send pkt0
send pkt1
send pkt2
send pkt3
(wait)
sender receiver
receive pkt0, send ack0
receive pkt1, send ack1
receive pkt3, discard, 
(re)send ack1rcv ack0, send pkt4
rcv ack1, send pkt5
pkt 2 timeout
send pkt2
send pkt3
send pkt4
send pkt5
Xloss
receive pkt4, discard, 
(re)send ack1
receive pkt5, discard, 
(re)send ack1
rcv pkt2, deliver, send ack2
rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5
ignore duplicate ACK
0 1 2 3 4 5 6 7 8 
sender window (N=4)
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
30
16
Selective Repeat
 Gửi: chỉ gửi gói tin trong cửa sổ gửi
 Nhận: chỉ nhận gói tin trong cửa sổ nhận
 Sử dụng bộ đệm để lưu tạm thời các gói tin tới chưa đúng thứ tự
đã gửi,
đã nhận ACK
đã gửi,
chưa nhận 
ACK
đang gửi
chưa gửi
#Seq
Cửa sổ gửi
kích thước Swnd
#Seq
Cửa sổ nhận
kích thước Rwnd đã nhận đúng 
thứ tự
chưa nhận
đã nhận,
chưa đúng 
thứ tự
31
Selective Repeat
Bên gửi
 Chỉ gửi gói tin trong cửa
sổ gửi
 Dùng 1 timer cho mỗi gói
tin trong cửa sổ
 Nếu timeout cho gói tin 
pkti chỉ gửi lại pkti
 Nhận được ACKi:
 Đánh dấu pkti đã có ACK
 Nếu i là giá trị nhỏ nhất
trong các gói tin chưa nhận
ACK, dịch cửa sổ sang vị trí
gói tin tiếp theo chưa nhận
ACK
Bên nhận
 Chỉ nhận gói tin trong cửa 
sổ nhận
 Nhận pkti:
 Gửi lại ACKi
 Không đúng thứ tự: đưa 
vào bộ đệm
 Đúng thứ tự: chuyển cho 
tầng ứng dụng cùng với các 
gói tin trong bộ đệm đã trở 
thành đúng thứ tự sau khi 
nhận pkti
32
17
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?
send pkt0
send pkt1
send pkt2
send pkt3
(wait)
sender receiver
receive pkt0, send ack0
receive pkt1, send ack1
receive pkt3, buffer, 
send ack3rcv ack0, send pkt4
rcv ack1, send pkt5
pkt 2 timeout
send pkt2
Xloss
receive pkt4, buffer, 
send ack4
receive pkt5, buffer, 
send ack5
rcv pkt2; deliver pkt2,
pkt3, pkt4, pkt5; send ack2
record ack3 arrived
0 1 2 3 4 5 6 7 8 
sender window (N=4)
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
0 1 2 3 4 5 6 7 8 
record ack4 arrived
record ack5 arrived
Điều gì xảy ra nếu ack2 tới bên gửi 33
Kích thước cửa sổ quá lớn
34
receiversender
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2
pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
X
will accept packet
with seq number 0
0 1 2 3 0 1 2 pkt3
(a) pkt0 là gói tin mới
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2
pkt0
pkt1
pkt2
0 1 2 3 0 1 2 pkt0
timeout
retransmit pkt0
0 1 2 3 0 1 2
0 1 2 3 0 1 2
0 1 2 3 0 1 2X
X
X
will accept packet
with seq number 0
(b) pkt0 là gói tin bị lặp
receiversender
 Giả sử Seq# = {0, 1 , 2 
,3}
 Kích thước cửa sổ: 3
 Phía nhận không phân 
biệt được 2 trường hợp
 Trong trường hợp b, gói 
tin pkt0 gửi lại được bên 
nhận coi như gói tin mới, 
đưa vào bộ đệm chờ xử 
lý
18
4.2. Hoạt động của TCP 
Cấu trúc đoạn tin TCP
Quản lý liên kết
Kiểm soát luồng
Kiểm soát tắc nghẽn 
35
Tổng quan về TCP
 Giao thức hướng liên kết
 Bắt tay ba bước
 Giao thức truyền dữ liệu theo dòng byte, tin cậy
 Sử dụng vùng đệm
 Truyền theo kiểu pipeline 
 Tăng hiệu quả
 Kiểm soát luồng
 Bên gửi không làm quá tải bên nhận
 Kiểm soát tắc nghẽn
 Việc truyền dữ liệu không nên làm tắc nghẽn mạng
36
19
Khuôn dạng đoạn tin - TCP segment
source port # dest port #
32 bits
application
data 
(variable length)
sequence number
acknowledgement number
Receive window
Urg data pointerchecksum
FSRPAU
head
len
not
used
Options (variable length)
URG: Dữ liệu khẩn
ACK: ACK # 
PSH: Chuyển dữ liệu
ngay
RST, SYN, FIN:
Ký hiệu cho các 
gói tin đặc biệt
-Số lượng bytes 
có thế nhận
- Điều khiển luồng
- Dùng để truyền dữ 
liệu tin cậy
- Tính theo bytes
37
mux/demux trên ứng dụng TCP
transport
application
physical
link
network
P1
transport
application
physical
link
transport
application
physical
link
network
P2
source IP,port: A,9157
dest IP, port: B,80
source IP,port: B,80
dest IP,port: A,9157
client: IP 
address A
client: IP 
address C
server: IP 
address B
network
P3
source IP,port: C,5775
dest IP,port: B,80
source IP,port: C,9157
dest IP,port: B,80
P4
multi-thread server
38
Sử dụng socket khác nhau để trao đổi với các tiến 
trình khác nhau
20
Thông số của liên kết TCP
 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
 Địa chỉ IP đích
 Số hiệu cổng nguồn
 Số hiệu cổng đích
Tầng mạng
Tầng giao vận
39
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. #
 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
Cơ chế báo nhận
40
21
Thiết lập liên kết TCP : 
Giao thức bắt tay 3 bước
 Bước 1: A gửi SYN cho B
 chỉ ra giá trị khởi tạo seq # của 
A
 không có dữ liệu
 Bước 2: B nhận SYN, trả lời 
bằng SYN/ACK
 B khởi tạo vùng đệm
 chỉ ra giá trị khởi tạo seq. # của 
B
 Bước 3: A nhận SYNACK, trả 
lời ACK, có thể kèm theo dữ 
liệu
A B
Tại sao không dùng giao thức bắt tay 2 bước
41
esta-
blished
esta-
blished
Cơ chế báo nhận trong TCP
sequence numbers:
Vị trí của byte đầu tiên 
trên payload của gói tin 
(segment) trong luồng 
dữ liệu 
acknowledgements:
Vị trí của byte tiếp theo 
muốn nhận trong luồng 
dữ liệu
source port # dest port #
sequence number
acknowledgement number
checksum
rwnd
urg pointer
Gói tin báo nhận
A
đã gửi
đã nhận
ACK
đã gửi
chưa nhận
ACK
đang
gửi
chưa
gửi
Kích thước cửa sổ
N
Chuỗi Seq# ở phía gửi
source port # dest port #
sequence number
acknowledgement number
checksum
rwnd
urg pointer
Gói tin gửi đi ở phía gửi
42
22
Cơ chế báo nhận trong TCP
Seq. #:
 Số hiệu của byte 
đầu tiên của đoạn 
tin trong dòng dữ 
liệu
ACK:
 Số hiệu byte đầu 
tiên mong muốn 
nhận từ đối tác
Host A Host B
User
types
‘computer’
host ACKs
receipt 
Gửi ACK 
báo nhận
time
43
User
types
‘network’
Đóng liên kết
44
FIN_WAIT_2
CLOSE_WAIT
FIN, seq=y
ACK, ACKnum=y+1
ACK, ACKnum=x+1
đợi nhận FIN
từ server
có thể tiếp tục
gửi dữ liệu
ngừng gửi dữ liệu
LAST_ACK
CLOSED
TIMED_WAIT
đợi trong
2 x thời gian gửi MSS
CLOSED
FIN_WAIT_1 FIN, seq=xkhông gửi tiếp 
nhưng vẫn nhận 
dữ liệu
close(socket)
A state B state
ESTABESTAB
A B
23
Chu trình sống của TCP (đơn giản hóa)
SYN_SENT
FIN_WAIT_1
FIN_WAIT_2 ESTABLISHED
Receive ACK
Send nothing
Receive SYN/ACK
Send ACK
CLOSED
TIME_WAIT
CLOSED
LISTENLAST_ACK
SYN_RCVDCLOSE_WAIT
ESTABLISHED
Receive SYN
Send SYN/ACK
Receive ACK
Send nothing
Receive FIN
Send ACK
Send FIN
Receive ACK
Send nothing
Server application
Creates a listen socket
Send SYN
Send FIN
Wait
Receive FIN
Send ACK
Client application
Initiates close connection
45
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
46
24
TCP: Hoạt động của bên gửi
Nhận dữ liệu từ tầng 
ứng dụng
 Đóng gói dữ liệu vào gói 
tin TCP với giá trị Seq# 
tương ứng
 Tính toán và thiết lập giá 
trị TimeOutInterval
cho bộ đếm thời gian 
(timer)
 Gửi gói tin TCP xuống 
tầng mạng và khởi động 
bộ đếm cho gói đầu tiên 
trong cửa sổ
timeout:
 Gửi lại gói tin bị timeout
 Khởi động lại bộ đếm
Nhận ACK# = i 
 Nếu là ACK cho gói tin nằm 
bên trái cửa sổ bỏ qua
 Ngược lại, trượt cửa sổ sang 
vị trí i
 Khởi động timer cho gói tin kế 
tiếp đang chờ ACK
47
Tính toán timeout
 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
48
25
Tính toán timeout
 Độ lệch:
DevRTTi = (1-)*DevRTTi-1 +
*|SampleRTTi-1 - EstimatedRTTi-1|
 Jacobson đề nghị  = 0.25
 Timeout:
TimeOutIntervali =
EstimatedRTTi + 4*DevRTTi
49
Ước lượng RTT – Ví dụ
Packet# Estimated
RTT(ms)
DevRTT
(ms)
TimeoutInt
erval(ms)
SampleR
TT(ms)
1 40 20 120 80
2 45 25 145
15
3
4
5 ?
50
26
Phát lại như thế nào?
51
mất ACK
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8 bytes of data
Xtim
e
o
u
t
ACK=100
timeout quá ngắn
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=92, 8
bytes of data
ti
m
e
o
u
t
ACK=120
Seq=100, 20 bytes of data
ACK=120
ti
m
e
o
u
t
ti
m
e
o
u
t
Phát lại như thế nào? (tiếp)
52
X
Host BHost A
Seq=92, 8 bytes of data
ACK=100
Seq=120, 15 bytes of data
ti
m
e
o
u
t
Seq=100, 20 bytes of data
ACK=120
ACK tích lũy
27
Hoạt động của bên nhận
Sự kiện
Nhận 1 gói tin với Seq# = i 
đúng thứ tự
Nhận 1 gói tin với Seq# = i 
đúng thứ tự, trong khi 
chưa gửi ACK gói tin đã 
nhận thành công trước đó
Nhận 1 gói tin với Seq# = i 
đúng thứ tự, trong bộ đệm 
còn gói tin với Seq# = i+N
Nhận gói tin không đúng 
thứ tự
Hành động
Đợi 500ms, nếu không có 
gói kế tiếp, gửi ACK = 
i+Kích thước dữ liệu nhận 
được
Gửi ACK tích lũy ACK# = i 
+ Kích thước dữ liệu nhận 
được
Gửi ACK# = i + N + Kích 
thước dữ liệu nhận được 
trên gói tin N
Hồi phục nhanh
53
Hồi phục nhanh
 Thời gian timeout khá dài 
có thể làm giảm hiệu năng
 Cơ chế hồi phục nhanh:
 Bên nhận: Khi nhận gói tin 
không đúng thứ tự, gửi liên 
tiếp 2 gói tin lặp lại ACK# của 
gói tin còn đúng thứ tự trước 
đó
 Bên gửi: Nhận được 3 ACK# 
liên tiếp giống nhau, gửi lại 
ngay gói tin mà không chờ 
time-out
X
Host BHost A
Seq=92, 8 bytes of data
ACK=100
ti
m
e
o
u
t
ACK=100
ACK=100
Seq=100, 20 bytes of data
Seq=100, 20 bytes of data
54
28
3.3. Kiểm soát luồng
55
Kiểm soát luồng (1)
A B
A B
Chậm Quá tải
56
29
Kiểm soát luồng (2)
 Điều khiển lượng dữ liệu được gửi đi 
 Bảo đảm rằng hiệu quả là tốt 
 Không làm quá tải các bên
 Các bên sẽ có cửa sổ kiểm soát
 Rwnd: Cửa sổ nhận
 Cwnd: Cửa sổ kiểm soát tắc nghẽn
 Lượng dữ liệu gửi đi phải nhỏ hơn min(Rwnd, Cwnd)
57
Kiểm soát luồng trong TCP
 Kích thước vùng đệm trống
= Rwnd
= RcvBuffer-[LastByteRcvd 
- LastByteRead]
58
30
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
59
Tính công bằng trong TCP
 Nếu có K kết nối TCP chia sẻ đường truyền 
có băng thông R thì mỗi kết nối có tốc độ 
truyền trung bình là R/K
60
TCP connection 1
bottleneck
router
capacity R
TCP connection 2
31
4.4. Điều khiển tắc nghẽn 
trong TCP
61
Tổng quan về tắc nghẽn
 Khi nào tắc nghẽn xảy ra ?
 Quá nhiều cặp gửi-nhận trên mạng
 Truyền quá nhiều làm cho mạng quá tải 
 Hậu quả của việc nghẽn mạng
 Mất gói tin
 Thông lượng giảm, độ trễ tăng
 Tình trạng của mạng sẽ trở nên tồi tệ hơn.
Congestion
occur
62
32
Nguyên lý kiểm soát tắc nghẽn
 Slow-start
 Tăng tốc độ theo hàm số mũ 
 Tiếp tục tăng đến một 
ngưỡng nào đó
 Tránh tắc nghẽn
 Tăng dẫn tốc độ theo hàm 
tuyến tính cho đến khi phát 
hiện tắc nghẽn
 Phát hiện tắc nghẽn
 Gói tin bị mất
2
4
6
8
10
12
14
16
18
20
SS
Threshold=16
cwnd
63
TCP Slow Start (1)
 Ý tưởng cơ bản
 Đặt cwnd bằng 1 MSS (Maximum segment size)
 1460 bytes (giá trị này có thể được thỏa thuận trong quá 
trình thiết lập liên kết)
 Tăng cwnd lên gấp đôi
 Khi nhận được ACK
 Bắt đầu chậm, nhưng tăng theo hàm mũ
 Tăng cho đến một ngưỡng: ssthresh
 Sau đó, TCP chuyển sang trạng thái tránh tắc 
nghẽn
64
33
TCP Slow Start (2) 
Host A
R
T
T
Host B
time
65
Tránh tắc nghẽn - Congestion 
avoidance
 ý tưởng cơ bản
 Tăng cwnd theo 
cấp số cộng sau khi 
nó đạt tới ssthresh
 Khi bên gửi nhận 
được ACK
 Tăng cwnd thêm 1 
MSS
Host A Host B
R
T
T
time
66
34
Phản ứng của TCP (1)
 Giảm tốc độ gửi
 Phát hiện tắc nghẽn?
 Nếu như phải truyền lại
 Có thể đoán mạng đang có “tắc nghẽn”
 Khi nào thì phải truyền lại?
 Timeout!
 Nhận được nhiều ACK cùng ACK#
67
Phản ứng của TCP (2)
 Khi có timeout của bên gửi
 TCP đặt ngưỡng ssthresh xuống còn một nửa giá trị hiện 
tại của cwnd
 TCP đặt cwnd về 1 MSS
 TCP chuyển về slow start
 Hồi phục nhanh:
 Nút nhận: nhận được 1 gói tin không đúng thứ tự thì gửi 
liên tiếp 3 ACK giống nhau.
 Nút gửi: nhận được 3 ACK giống nhau
 TCP đặt ngưỡng ssthresh xuống còn một nửa giá trị hiện tại của 
cwnd
 TCP đặt cwnd về giá trị hiện tại của ngưỡng mới
 TCP chuyển trạng thái “congestion avoidance”
68
35
Kiểm soát tắc nghẽn – minh họa
2
4
6
8
10
12
14
16
18
20
22
Timeout
3 ACKs
SS
SS
AI
AI
AI
Threshold=16
Threshold=10
Threshold=6
Threshold is set to half of cwnd (20)
And slow start starts
Threshold is set to half of cwnd (12)
And additive increase starts
cwnd
Step
69
Tổng kết
 Có hai dạng giao thức giao vận
 UDP và TCP
 Best effort vs. reliable transport protocol
 Các cơ chế bảo đảm độ tin cậy
 Báo nhận
 Truyền lại
 Kiểm soát luồng và kiểm soát tắc nghẽn
70
36
Tài liệu tham khảo
 Keio University
 “Computer Networking: A Top Down Approach”, 
J.Kurose
 “Computer Network”, Berkeley University
71

File đính kèm:

  • pdfbai_giang_mang_may_tinh_chuong_3_tang_giao_van_bui_trong_tun.pdf