Các dịch vụ lớp truyền tải
Ghép/tách kênh (Multiplexing và demultiplexing)
 Giao thức truyền tải không kết nối UDP
 Các nguyên lý truyền số liệu tin cậy
VAI TRÒ LỚP TRUYỀN TẢI 
Truyền và nhận các tín hiệu mang thông tin
bit trên đường truyền vật lý
Physical
Truyên data qua môt liên kêt giữa hai điêm nôi
trực tiêp
Data Link
(Ethernet, ADSL...)
Tim đường va chuyên tiêp goi tin giữa cac nut
mang
Network
(IP, ICMP...)
Cung câp cơ chê truyên tai data giữa cac ứng
dung ma không phu thuôc mang
Transport
(UDP, TCP...)
Application Hô trợ cac ứng dung truyên thông
(HTTP, SMTP, FTP...)
                
              
                                            
                                
            
 
            
                
54 trang | 
Chia sẻ: candy98 | Lượt xem: 962 | Lượt tải: 0
              
            Bạn đang xem trước 20 trang tài liệu Bài giảng Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3-Lớp truyền tải 3-1
Chapter 3
LỚP TRUYỀN TẢI
Nguyễn Hồng Sơn
Chương 3-Lớp truyền tải 3-2
TỔNG QUAN
r Các nguyên lý của 
dịch vụ lớp truyền tải:
m Ghép/tách kênh 
(multiplexing/demulti
plexing)
m Truyền số liệu tin cậy
m Điều khiển luồng (flow
control)
m Kiểm soát nghẽn 
(congestion control)
r Giao thức truyền tải UDP
Chương 3-Lớp truyền tải 3-3
NỘI DUNG
r Các dịch vụ lớp truyền 
tải
r Ghép/tách kênh 
(Multiplexing và
demultiplexing)
r Giao thức truyền tải 
không kết nối UDP
r Các nguyên lý truyền số
liệu tin cậy
Chương 3-Lớp truyền tải 3-4
VAI TRO  LỚP TRUYÊN TA I
Truyên va  nhân ca c tin hiê u mang thông tin 
bit trên đường truyên vâ t ly
Physical
Truyên data qua mô t liên kêt giữa hai điêm nô i 
trực tiê p
Data Link
(Ethernet, ADSL...)
Ti m đường va  chuyên tiê p go i tin giữa ca c nu t 
ma ng
Network
(IP, ICMP...)
Cung câ p cơ chê truyên ta i data giữa ca c ứng 
du ng ma  không phu thuôc ma ng
Transport
(UDP, TCP...)
 Hô  trợ ca c ứng du ng truyên thôngApplication
(HTTP, SMTP, FTP...)
Chương 3-Lớp truyền tải 3-5
Giao thức và dịch vụ truyền tải
r Thực hiện giao tiếp logic giữa 
các quá trình ứng dụng chạy 
trên các host khác nhau
r Các giao thức truyền tải chạy 
trên các đầu cuối
m Bên truyền: chia data 
thành các phân đoạn 
(segment) và chuyển xuống 
lớp mạng.
m Bên nhận: tái lập các 
segment thành data và
chuyển cho lớp ứng dụng
r Có nhiều giao thức truyền tải
m Internet: TCP và UDP
application
transport
network
data link
physical
application
transport
network
data link
physical
Truyền tải từ đầu cuối đến đầu cuối
Chương 3-Lớp truyền tải 3-6
Các giao thức lớp truyền tải trên 
Internet
r Chuyển phát theo thứ
tự, tin cậy (TCP)
m Kiểm soát nghẽn
m Điều khiển luồng
m Thiết lập kết nối
r Chuyển phát không theo 
thứ tự, không tin cậy 
(UDP)
r Các dịch vụ không được 
hỗ trợ:
m Kiểm soát trễ
m Đảm bảo băng thông
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
application
transport
network
data link
physical
Truyền tải từ đầu cuối đến đầu cuối
Chương 3-Lớp truyền tải 3-7
Ly  do co  hai chê  đô truyê n ta i
r Ca c ứng du ng la  đa da ng: co  loai câ n đô  
chinh xa c cao, co loa i câ n nhanh (thời gian 
thực)
r TCP: cho ca c ứng du ng nhay ca m với lô i 
(data services) vi  du  email, truyê n file
r UDP: cho cac ứng du ng châ p nhâ n lô i nhưng 
nhay ca m với trê  như VoIP, Video streaming
Chương 3-Lớp truyền tải 3-8
NỘI DUNG
r Các dịch vụ lớp truyền tải
r Ghép/tách kênh (Multiplexing và
demultiplexing)
r Giao thức truyền tải không kết nối UDP
r Các nguyên lý truyền số liệu tin cậy
Chương 3-Lớp truyền tải 3-9
Ghép/tách kênh 
application
transport
network
link
physical
P1 application
transport
network
link
physical
application
transport
network
link
physical
P2P3 P4P1
host 1 host 2 host 3
= process= socket
Chuyển các data nhận được 
đến đúng socket
Tách tại host thu:
Tập hợp data từ nhiều socket,
 đóng gói và gắn header
Ghép tại host tryền:
Chương 3-Lớp truyền tải 3-10
Cách tách kênh
r host nhận gói IP
m Mỗi gói có một địa chỉ IP 
nguồn và địa chỉ IP đích
m Mỗi gói IP chứa một 
segment lớp truyền tải
m Mỗi segment có chỉ số port 
nguồn và đích
r host dùng địa chỉ IP và chỉ số 
port để chuyển segment đến 
đúng socket
source port # dest port #
32 bits
Data của ứng dụng
Các field khác
Định dạng của TCP/UDP segment 
Chương 3-Lớp truyền tải 3-11
Tách kênh không kết nối
r Tạo socket với các chỉ số
port :
DatagramSocket mySocket1 = new 
DatagramSocket(12534);
DatagramSocket mySocket2 = new 
DatagramSocket(12535);
r Một UDP socket được nhận 
dạng bởi hai thành tố:
(địa chỉ IP đích, địa chỉ port đích)
r Khi host nhận UDP
segment:
m Kiểm tra chỉ số port đích
m Chuyển UDP segment đến 
socket ứng với port này
Chương 3-Lớp truyền tải 3-12
Tách kênh không kết nối
DatagramSocket serverSocket = new DatagramSocket(6428);
Client
IP:B
P2
client
IP: A
P1P1P3
server
IP: C
SP: 6428
DP: 9157
SP: 9157
DP: 6428
SP: 6428
DP: 5775
SP: 5775
DP: 6428
Chương 3-Lớp truyền tải 3-13
Tách kênh hướng kết nối
r Một TCP socket được 
nhận dạng bởi bốn yếu 
tố:
m source IP address
m source port number
m dest IP address
m dest port number
r Host nhận gói dùng tất 
cả bốn yếu tố để chuyển 
segment đến đúng 
socket
r Server có thể có đồng 
thời nhiều TCP socket:
m Mỗi socket được nhận dạng 
bởi một bộ gồm bốn yếu tố
r Web server có các 
socket khác nhau cho mỗi 
kết nối với client
m HTTP không liên tục sẽ có
các socket khác nhau cho 
mỗi request
Chương 3-Lớp truyền tải 3-14
Tách kênh hướng kết nối (2)
Client
IP:B
P1
client
IP: A
P1P2P4
server
IP: C
SP: 9157
DP: 80
SP: 9157
DP: 80
P5 P6 P3
D-IP:C
S-IP: A
D-IP:C
S-IP: B
SP: 5775
DP: 80
D-IP:C
S-IP: B
Chương 3-Lớp truyền tải 3-15
Tách kênh hướng kết nối 
Threaded Web Server
Client
IP:B
P1
client
IP: A
P1P2
server
IP: C
SP: 9157
DP: 80
SP: 9157
DP: 80
P4 P3
D-IP:C
S-IP: A
D-IP:C
S-IP: B
SP: 5775
DP: 80
D-IP:C
S-IP: B
Chương 3-Lớp truyền tải 3-16
NỘI DUNG
r Các dịch vụ lớp truyền tải
r Ghép/tách kênh (Multiplexing và
demultiplexing)
r Giao thức truyền tải không kết nối UDP
r Các nguyên lý truyền số liệu tin cậy
Chương 3-Lớp truyền tải 3-17
UDP (User Datagram Protocol)
r Là giao thức truyền tải 
Internet chỉ chứa tính năng 
thiết yếu.
r Được đặc tả trong RFC 768
r Thuộc dịch vụ “best effort” ,
các UDP segment có thể:
m Bị mất
m Chuyển phát không đúng thứ
tự
r Không kết nối (connectionless):
m Không có "bắt tay" giữa 
UDP truyền và UDP nhận
m Mỗi UDP segment được kiểm 
soát một cách độc lập với 
các segment khác
Lý do đưa ra UDP?
r Giảm trễ: không thiết lập 
kết nối
r Đơn giản: không có trạng 
thái kết nối tại các host
r Kích thước header nhỏ
r Không phải kiểm soát nghẽn 
Chương 3-Lớp truyền tải 3-18
UDP
r Thường được dùng cho các 
ứng dụng streaming 
multimedia
m Chịu thất thoát
m rate sensitive
r Các ứng dụng khác 
dùng UDP có
m DNS
m SNMP
r Chuyển phát tin cậy qua 
UDP thường phải bổ sung 
đặc tính tin cậy vào lớp ứng 
dụng
m Sửa lỗi ứng dụng đặc 
biệt
source port # dest port #
32 bits
Data
Định dạng UDP segment
length checksum
Chiều dài của
UDP segment, 
gồm header
Chương 3-Lớp truyền tải 3-19
UDP checksum
Host truyền:
r Nội dung segment là tuần 
tự các số nguyên 16 bit
r checksum: cộng tất cả các 
số trong phần nội dung và
cộng 1 (bù 1) vào kết quả 
r Đặt giá trị tổng 
(checksum) vào trường 
checksum của UDP
Host nhận:
r Tính checksum cho segment 
nhận được
r Kiểm tra xem tổng tính được 
có bằng với tổng nhận được 
hay không:
m Không --> có lỗi
m Bằng --> không có lỗi
Mục đích: phát hiện lỗi 
Chương 3-Lớp truyền tải 3-20
Ví dụ tính Checksum
r Lưu ý
m Khi cộng, số nhớ từ bit có ý nghĩa lớn nhất được 
cộng vào kết quả
r Ví dụ: cộng hai số nguyên 16-bit
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
1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1
sum
checksum
Chương 3-Lớp truyền tải 3-21
NỘI DUNG
r Các dịch vụ lớp truyền tải
r Ghép/tách kênh (Multiplexing và
demultiplexing)
r Giao thức truyền tải không kết nối UDP
r Các nguyên lý truyền số liệu tin cậy
Chương 3-Lớp truyền tải 3-22
Các nguyên lý truyền số liệu tin cậy
r Quan trọng trong các lớp ứng dụng, truyền tải và liên kết số
liệu
r Một trong 10 chủ đề liên mạng quan trọng nhất
Dịch vụ truyền/nhận data Xây dựng dịch vụ
Chương 3-Lớp truyền tải 3-23
Truyền số liệu tin cậy (2)
Host 
truyền
Host 
nhận
rdt_send(): được gọi từ lớp trên. 
Số liệu được chuyển qua để chuyển đến 
máy thu
udt_send(): được gọi bởi rdt, 
để truyền gói qua kênh không tin 
cậy đến máy thu
rdt_rcv(): được gọi khi gói đến
deliver_data(): được gọi bởi 
rdt để chuyển data lên lớp trên
rdt: reliable data transfer protocol
udt: unreliable data transfer protocol 
Chương 3-Lớp truyền tải 3-24
Truyền số liệu tin cậy (3)
r Tìm hiểu phía truyền và nhận của rdt
r Chỉ xem xét truyền một hướng
m Thông tin điều khiển sẽ theo hai hướng
r Dùng sơ đồ trạng thái (finite state machine) để 
đặc tả máy truyền và nhận
state
1
state
2
Sự kiện gây ra chuyển trạng thái
Các hành động
Trạng thái: khi đang ở
trạng thái này, trạng 
thái kế tiếp được xác 
định bởi sự kiện kế
tiếp
Sự kiện
Hành động
Chương 3-Lớp truyền tải 3-25
Rdt1.0: truyền tin cậy qua một kênh tin cậy
r Kênh truyền bên dưới hoàn toàn tin cậy
m Không có lỗi
m Không mất gói
r Sơ đồ trạng thái tách biệt cho truyền và nhận:
m Máy truyền gửi data xuống kênh
m Máy thu đọc data từ kênh bên dưới
Đợi gọi
từ trên
packet = make_pkt(data)
rdt_send(packet)
rdt_send(data)
extract (packet,data)
deliver_data(data)
Đợi gọi
từ dưới
rdt_rcv(packet)
Máy truyền Máy thu
Chương 3-Lớp truyền tải 3-26
Rdt2.0: kênh có lỗi
r Kênh bên dưới có xảy ra lỗi truyền bit
m Dùng checksum để phát hiện lỗi bit
r Cách thức sửa lỗi :
m acknowledgements (ACKs): máy thu thông báo cho máy 
truyền rằng đã nhận tốt
m negative acknowledgements (NAKs): máy thu thông báo gói 
đã bị lỗi
m Máy truyền gửi lại gói khi nhận NAK
r Các cơ chế mới trong rdt2.0 :
m Phát hiện lỗi
m Phản hồi của máy thu, dùng ACK, NAK
Chương 3-Lớp truyền tải 3-27
rdt2.0: đặc tả sơ đồ trạng thái
Đợi gọi 
từ trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
Đợi ACK 
hay NAK
Đợi gọi từ 
dưới
Máy truyền
Máy thu
rdt_send(data)
Λ
Chương 3-Lớp truyền tải 3-28
rdt2.0: hoạt động không lỗi
Đợi gọi
từ trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
Đợi ACK 
hay NAK
Đợi gọi
từ dưới
rdt_send(data)
Λ
Chương 3-Lớp truyền tải 3-29
rdt2.0: Hoạt động có lỗi
Đợi gọi 
từ trên
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
udt_send(NAK)
rdt_rcv(rcvpkt) && 
corrupt(rcvpkt)
Đợi ACK 
hay NAK
Đợi gọi
từ dưới
rdt_send(data)
Λ
Chương 3-Lớp truyền tải 3-30
rdt2.0: tình huống đặc biệt
Điều gì xảy ra nếu 
ACK/NAK bị mất?
r Máy truyền không biết điều 
gì xảy ra tại máy thu!
r Truyền lại có thể trùng
Xử lý trùng:
r Máy truyền gửi lại gói nếu 
chờ ACK/NAK quá lâu
r Máy truyền thêm số tuần tự
vào mỗi gói
r Máy thu loại bỏ gói trùng, 
không chuyển lên trên
Máy truyền gửi gói và vào trạng thái
 đợi báo nhận ACK
Idle RQ (stop and wait)
Chương 3-Lớp truyền tải 3-31
rdt2.1: máy truyền, kiểm soát mất 
ACK/NAK
Đợi gọi 0 
từ trên
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
Đợi ACK 
hay NAK 0
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt) 
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt)
Đợi gọi 1 
từ trên
Đợi ACK 
hay NAK 1
ΛΛ
Chương 3-Lớp truyền tải 3-32
rdt2.1: máy thu, kiểm soát mất ACK/NAK
Đợi 0 
từ dưới
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Đợi 1 
từ dưới
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)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
Chương 3-Lớp truyền tải 3-33
rdt2.1: Nhận xét
Máy truyền:
r seq # được thêm vào 
gói
r Hai số tuần tự là đủ
r Phải kiểm tra để phòng 
ACK/NAK mất
r Hai trạng thái
m Phải nhớ gói hiện hành có
số tuần tự là 0 hay 1
Máy thu:
r Phải kiểm tra xem gói 
nhận có bị trùng không
m Trạng thái chỉ ra số tuần 
tự mong đợi
r Máy thu không thể biết 
tình trạng ACK/NAK 
tại máy truyền
Chương 3-Lớp truyền tải 3-34
rdt2.2: NAK-free protocol
r Giống như rdt2.1, chỉ dùng ACK
r Thay vì NAK, máy thu gửi ACK cho gói sau cùng nhận 
tốt
m Máy thu sẽ chỉ rõ số tuần tự gói nhận tốt trong ACK phản hồi
r Trùng ACK tại máy truyền dẫn đến hành động tương tự 
như NAK: truyền lại gói hiện hành
Chương 3-Lớp truyền tải 3-35
rdt2.2: sơ đồ trạng thái
Đợi gọi 0 
từ trên
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_send(data)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
Đợi ACK
0
Máy truyền
Đợi 0 
từ dưới
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) 
&& has_seq1(rcvpkt) 
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && 
(corrupt(rcvpkt) ||
has_seq1(rcvpkt))
udt_send(sndpkt)
Máy thu
Λ
Chương 3-Lớp truyền tải 3-36
rdt3.0: các kênh lỗi và mất gói
Giả sử: kênh bên dưới 
cũng có thể mất gói
(data hay ACK)
m checksum, seq. #, ACKs, 
truyền lại là hữu ích 
nhưng không đủ
Giải pháp: máy truyền đợi 
ACK một khoảng thời 
gian hợp lý
r Truyền lại nếu không thấy ACK 
trong thời gian đợi
r Nếu gói hay ACK bị trễ:
m Truyền lại sẽ bị trùng, 
nhưng có số tuần tự để
kiểm soát
m Máy thu phải chỉ ra số tuần 
tự của gói đang báo nhận 
ACK
r Yêu cầu bộ định thời đếm lui
Chương 3-Lớp truyền tải 3-37
rdt3.0 máy truyền
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
Đợi 
ACK 0
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )
Đợi gọi 1
từ trên
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
start_timer
rdt_send(data)
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,0)
rdt_rcv(rcvpkt) && 
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )
rdt_rcv(rcvpkt) 
&& notcorrupt(rcvpkt) 
&& isACK(rcvpkt,1)
stop_timer
stop_timer
udt_send(sndpkt)
start_timer
timeout
udt_send(sndpkt)
start_timer
timeout
rdt_rcv(rcvpkt)
Đợi gọi 0 
từ trên
Đợi
ACK1
Λ
rdt_rcv(rcvpkt)
Λ
Λ
Λ
Chương 3-Lớp truyền tải 3-38
rdt3.0 Hoạt động
Không mất
Mất gói
Chương 3-Lớp truyền tải 3-39
rdt3.0 hoạt động (2)
Mất ACK Time out sớm
Chương 3-Lớp truyền tải 3-40
Hiệu năng của rdt3.0
r Ví dụ: 1 Gbps, Tp=15 ms , Kích thước gói =8000 bit :
m U sender: utilization – tỉ lệ thời gian máy truyền thực sự làm công 
việc truyền
U 
sender = 
.008 
30.008 
= 0.00027 
microsec
L / R 
RTT + L / R 
= 
m 1KB pkt mỗi 30 msec -> thông lượng 33kB/sec qua liên kết 
1Gbps
m Giao thức mạng đã giới hạn sử dụng tài nguyên vật lý!
dsmicrosecon8
bps10
bits8000
9 === R
Ldtrans
Chương 3-Lớp truyền tải 3-41
rdt3.0: hoạt động ARQ không liên 
tục (Idle ARQ hay stop-and-wait)
Truyền bit đầu của gói, t = 0
sender receiver
RTT
Truyền bit sau cùng của gói, 
t = L / R
Bit đầu đến
Bit sau cùng đến, gửi ACK
ACK đến, gửi gói kế,
t = RTT + L / R
U 
sender = 
.008 
30.008 
= 0.00027 
microsec
L / R 
RTT + L / R 
= 
Chương 3-Lớp truyền tải 3-42
Các giao thức dùng kỹ thuật ống dẫn 
Pipelining: máy truyền cho phép nhiều gói được gửi 
liên tiếp không cần có báo nhận ACK
m Tăng chỉ số tuần tự
m Đệm tại máy truyền và máy nhận
r ARQ liên tục: Selective repeat và Go-back-N
Automatic Repeat reQuest
Chương 3-Lớp truyền tải 3-43
Kỹ thuật Pipelining
Truyền bit đầu của gói, t = 0
sender receiver
RTT 
Truyền bit sau cùng của gói,
t = L / R
Nhận bit đầu của gói
Bit sau cùng của gói đến, gửi ACK
ACK đến, gửi gói kế tiếp, t 
= RTT + L / R
Bit sau cùng của gói thứ hai đến, gửi ACK
Bit sau cùng của gói thứ ba đến, gửi ACK
U 
sender = 
.024 
30.008 
= 0.0008 
microsecon
3 * L / R 
RTT + L / R 
= 
tăng utilization lên ba lần
Nhằm gia tăng hiệu quả sử dụng đường truyền (utilization)
Chương 3-Lớp truyền tải 3-44
Các giao thức theo ARQ liên tục
Go-back-N
r Máy truyền có thể có 
đến N gói chưa được 
báo nhận đã gửi qua 
trong ống
r Máy thu chỉ gửi ACK 
cho gói mà từ nó về 
trước đều nhận tốt
r Máy truyền có bộ định 
thời cho các gói chưa 
được báo nhận
m Nếu định thời hết hạn, 
truyền lại tất cả các gói 
đang chờ
Selective Repeat
r Máy truyền có thể có 
đến N gói chưa được 
báo nhận đã gửi qua 
trong ống
r Máy thu gửi ACK cho 
từng gói nhận tốt
r Máy truyền có bộ định 
thời cho từng gói chưa 
được báo nhận
m Nếu định thời hết hạn, 
chỉ truyền lại gói tương 
ứng
Chương 3-Lớp truyền tải 3-45
Go-Back-N
Máy truyền:
r Số tuần tự k-bit (seq #) trong header của gói
r “cửa sổ”có kích thước N, số gói truyền liên tiếp chưa có báo nhận
r ACK(n): báo nhận cho tất cả các gói đến n
m Có thể nhận trùng ACK
r Bộ định thời cho các gói đang đợi
r timeout(n): truyền lại tất cả các gói từ n trở đi
Đã báo nhận
Chưa báo nhận
Còn trống
chưa dùng
Khe trống
Gói có số tuần tự
kế tiếpGói chờ báo nhận
Cửa sồ truyền
Chương 3-Lớp truyền tải 3-46
Sơ đồ trạng thái của máy truyền Go-
Back-N
Đợi start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])
udt_send(sndpkt[nextseqnum-1])
timeout
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 = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
rdt_rcv(rcvpkt) && 
notcorrupt(rcvpkt) 
base=1
nextseqnum=1
rdt_rcv(rcvpkt) 
&& corrupt(rcvpkt)
Λ
Chương 3-Lớp truyền tải 3-47
Đợi
udt_send(sndpkt)
default
rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum) 
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++
expectedseqnum=1
sndpkt = 
make_pkt(expectedseqnum,ACK,chksum)
Λ
Sơ đồ trạng thái của máy nhận Go-Back-N
Chỉ tất cả các trường hợp ngoại trừ trường hợp 
nhận đúng gói có thứ tự mong muốn
Chương 3-Lớp truyền tải 3-48
Hoạt động của 
Go-Back-N
Chương 3-Lớp truyền tải 3-49
Selective Repeat
r Máy thu báo nhận cho từng gói mà nó nhận tốt
m Đệm gói khi cần (chờ đúng thứ tự để giao cho giao thức 
cao hơn)
r Máy truyền chỉ gửi lại gói không nhận được ACK
m Bộ định thời cho mỗi gói truyền chưa có báo nhận
r Cửa sổ truyền
m Kích thước N, N chỉ số tuần tự liên tục được gán cho các 
gói để truyền đi
m Giới hạn số gói được truyền liên tục
Chương 3-Lớp truyền tải 3-50
Selective repeat: cửa sổ truyền và thu
Gói chờ báo nhận Gói có số tuần tự kế tiếp
Cửa sồ truyền 
Đã báo nhận
Chưa báo nhận
Còn trống
chưa dùng
Khe trống
(a) Tuần tự truyền với cửa sổ có kích thước N
(a) Tuần tự nhận với cửa sổ có kích thước N
Cửa sồ nhận
Ngoài trật tự 
nhưng đã 
báo nhận
Cần nhưng 
chưa thấy
Bộ đệm trống 
còn chứa thêm
Khe trống
Chờ gói có tuần tự này
Chương 3-Lớp truyền tải 3-51
Selective repeat
data từ trên :
r Nếu tuần tự kế sẵn sàng, 
truyền gói (cửa sổ còn chỗ)
timeout(n):
r Tr