Giáo trình Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn
Selective repeat
data từ trên :
Nếu tuần tự kế sẵn sàng,
truyền gói (cửa sổ còn chỗ)
timeout(n):
Truyền lại gói n, khởi động
lại bộ định thời
ACK(n) trong khoảng tuần tự
trong cửa sổ:
Loại chỉ số tuần tự n khỏi
danh sách đợi
Tăng biên dưới của cửa sổ
lên 1
Máy truyền
Gói n trong khoảng của sổ
thu
Gửi ACK(n)
Không đúng trật tự: đệm lại
Đúng trật tự: chuyển giao
cho lớp trên, cửa sổ hướng
đến chỉ số gói kế tiếp
Gói n chờ nhận đến
Gửi ACK(n)
54 trang |
Chia sẻ: thucuc2301 | Lượt xem: 645 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình 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 Truyền lại gói n, khởi động
lại bộ định thời
ACK(n) trong khoảng tuần tự
trong cửa sổ:
r Loại chỉ số tuần tự n khỏi
danh sách đợi
r Tăng biên dưới của cửa sổ
lên 1
Máy truyền
Gói n trong khoảng của sổ
thu
r Gửi ACK(n)
r Không đúng trật tự: đệm lại
r Đúng trật tự: chuyển giao
cho lớp trên, cửa sổ hướng
đến chỉ số gói kế tiếp
Gói n chờ nhận đến
r Gửi ACK(n)
Máy thu
Chương 3-Lớp truyền tải 3-52
Hoạt động của Selective repeat
Chương 3-Lớp truyền tải 3-53
r seq #’s: 0, 1, 2, 3
r window size=3
r Quan hệ giữa chỉ số
tuần tự và kích thước
cửa sổ
Ví dụ
Chương 3-Lớp truyền tải 3-54
HẾT CHƯƠNG 3
Các file đính kèm theo tài liệu này:
- mmt_ch3_2975_2005051.pdf