You are on page 1of 26

Chapter 3

LỚP TRUYỀN TẢI

Chương 3-Lớp truyền tải 3-1

TỔNG QUAN
❒ Các nguyên lý của ❒ Giao thức truyền tải UDP
dịch vụ lớp truyền tải:
❍ Ghép/tách kênh
(multiplexing/demulti
plexing)
❍ Truyền số liệu tin cậy
❍ Điều khiển luồng (flow
control)
❍ Kiểm soát nghẽn
(congestion control)

Chương 3-Lớp truyền tải 3-2

1
NỘI DUNG
❒ 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

Chương 3-Lớp truyền tải 3-3

VAI TRO LỚP TRUYÊN TAI

Application Hô trợ cac ứng dung truyên thông


(HTTP, SMTP, FTP...)
Transport Cung câp cơ chê truyên tai data giữa cac ứng
(UDP, TCP...) dung ma không phu thuôc mang

Network Tim đường va chuyên tiêp goi tin giữa cac nut
(IP, ICMP...) mang

Data Link Truyên data qua môt liên kêt giữa hai điêm nôi
(Ethernet, ADSL...) trực tiêp

Physical Truyên va nhân cac tin hiêu mang thông tin
bit trên đường truyên vât ly

Chương 3-Lớp truyền tải 3-4

2
Giao thức và dịch vụ truyền tải
application
transport
❒ Thực hiện giao tiếp logic giữa network
data link
các quá trình ứng dụng chạy physical

Tr
trên các host khác nhau

uy

n
tả
❒ Các giao thức truyền tải chạy

it

đầ
trên các đầu cuối

u
cu
ối
❍ Bên truyền: chia data

đế
n
thành các phân đoạn

đầ
u
cu
(segment) và chuyển xuống

ối
lớp mạng. application
transport
❍ Bên nhận: tái lập các network
data link
segment thành data và physical

chuyển cho lớp ứng dụng


❒ Có nhiều giao thức truyền tải
❍ Internet: TCP và UDP

Chương 3-Lớp truyền tải 3-5

Các giao thức lớp truyền tải trên


Internet
application
❒ Chuyển phát theo thứ transport
network
tự, tin cậy (TCP) data link
physical
network
Tr

❍ Kiểm soát nghẽn data link


uy

physical network
ề n

data link
Điều khiển luồng
tả

❍ physical
it

Thiết lập kết nối


đầ


u
cu

Chuyển phát không theo network



data link
ến

physicalnetwork
thứ tự, không tin cậy
đầ

data link
u

physical
cu

(UDP) network
ối

data link
application
physical
❒ Các dịch vụ không được network
data link
transport
network
physical data link
hỗ trợ: physical

❍ Kiểm soát trễ


❍ Đảm bảo băng thông

Chương 3-Lớp truyền tải 3-6

3
Ly do co hai chê đô truyên tai
❒ Cac ứng dung la đa dang: co loai cân đô
chinh xac cao, co loai cân nhanh (thời gian
thực)
❒ TCP: cho cac ứng dung nhay cam với lôi
(data services) vi du email, truyên file
❒ UDP: cho cac ứng dung châp nhân lôi nhưng
nhay cam với trê như VoIP, Video streaming

Chương 3-Lớp truyền tải 3-7

NỘI DUNG
❒ 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

Chương 3-Lớp truyền tải 3-8

4
Ghép/tách kênh
Ghép tại host tryền: Tách tại host thu:

Chuyển các data nhận được


Tập hợp data từ nhiều socket, đến đúng socket
đóng gói và gắn header

= socket = process

application P3 P1
P1 application P2 P4 application

transport transport transport

network network network

link link link

physical physical physical

host 2 host 3
host 1 Chương 3-Lớp truyền tải 3-9

Cách tách kênh


❒ host nhận gói IP
❍Mỗi gói có một địa chỉ IP 32 bits
nguồn và địa chỉ IP đích
source port # dest port #
❍ Mỗi gói IP chứa một
segment lớp truyền tải
❍ Mỗi segment có chỉ số port Các field khác
nguồn và đích
❒ host dùng địa chỉ IP và chỉ số
port để chuyển segment đến Data của ứng dụng
đúng socket

Định dạng của TCP/UDP segment

Chương 3-Lớp truyền tải 3-10

5
Tách kênh không kết nối
❒ Khi host nhận UDP
❒ Tạo socket với các chỉ số
segment:
port :
DatagramSocket mySocket1 = new ❍ Kiểm tra chỉ số port đích
DatagramSocket(12534); ❍ Chuyển UDP segment đến
DatagramSocket mySocket2 = new socket ứng với port này
DatagramSocket(12535);
❒ Một UDP socket được nhận
dạng bởi hai thành tố:
(địa chỉ IP đích, địa chỉ port đích)

Chương 3-Lớp truyền tải 3-11

Tách kênh không kết nối


DatagramSocket serverSocket = new DatagramSocket(6428);

P2 P1
P1
P3

SP: 6428 SP: 6428


DP: 9157 DP: 5775

SP: 9157 SP: 5775


client DP: 6428 DP: 6428 Client
server
IP: A IP:B
IP: C

Chương 3-Lớp truyền tải 3-12

6
Tách kênh hướng kết nối
❒ Một TCP socket được ❒ Server có thể có đồng
nhận dạng bởi bốn yếu thời nhiều TCP socket:
tố: ❍ Mỗi socket được nhận dạng
❍ source IP address bởi một bộ gồm bốn yếu tố
❍ source port number ❒ Web server có các
❍ dest IP address socket khác nhau cho mỗi
❍ dest port number kết nối với client
❒ Host nhận gói dùng tất ❍ HTTP không liên tục sẽ có
cả bốn yếu tố để chuyển các socket khác nhau cho
mỗi request
segment đến đúng
socket

Chương 3-Lớp truyền tải 3-13

Tách kênh hướng kết nối (2)

P1 P4 P5 P6 P2 P1P3

SP: 5775
DP: 80
S-IP: B
D-IP:C

SP: 9157 SP: 9157


client DP: 80 DP: 80 Client
server
IP: A S-IP: A S-IP: B IP:B
IP: C
D-IP:C D-IP:C

Chương 3-Lớp truyền tải 3-14

7
Tách kênh hướng kết nối
Threaded Web Server

P1 P4 P2 P1P3

SP: 5775
DP: 80
S-IP: B
D-IP:C

SP: 9157 SP: 9157


client DP: 80 DP: 80 Client
server
IP: A S-IP: A S-IP: B IP:B
IP: C
D-IP:C D-IP:C

Chương 3-Lớp truyền tải 3-15

NỘI DUNG
❒ 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

Chương 3-Lớp truyền tải 3-16

8
UDP (User Datagram Protocol)
❒ Là giao thức truyền tải
Internet chỉ chứa tính năng Lý do đưa ra UDP?
thiết yếu.
❒ Giảm trễ: không thiết lập
❒ Được đặc tả trong RFC 768 kết nối
❒ Thuộc dịch vụ “best effort” , ❒ Đơn giản: không có trạng
các UDP segment có thể: thái kết nối tại các host
❍ Bị mất ❒ Kích thước header nhỏ
❍ Chuyển phát không đúng thứ ❒ Không phải kiểm soát nghẽn
tự
❒ Không kết nối (connectionless):
❍ Không có "bắt tay" giữa
UDP truyền và UDP nhận
❍ Mỗi UDP segment được kiểm
soát một cách độc lập với
các segment khác
Chương 3-Lớp truyền tải 3-17

UDP
❒ Thường được dùng cho các
ứng dụng streaming 32 bits
multimedia source port # dest port #
Chiều dài của
❍ Chịu thất thoát UDP segment, length checksum
❍ rate sensitive gồm header

❒ Các ứng dụng khác


dùng UDP có
❍DNS Data
❍SNMP
❒ 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 Định dạng UDP segment
❍ Sửa lỗi ứng dụng đặc
biệt Chương 3-Lớp truyền tải 3-18

9
UDP checksum
Mục đích: phát hiện lỗi

Host truyền: Host nhận:


❒ Nội dung segment là tuần ❒ Tính checksum cho segment
tự các số nguyên 16 bit nhận được
❒ checksum: cộng tất cả các ❒ Kiểm tra xem tổng tính được
số trong phần nội dung và có bằng với tổng nhận được
cộng 1 (bù 1) vào kết quả hay không:
❒ Đặt giá trị tổng ❍ Không --> có lỗi
(checksum) vào trường ❍ Bằng --> không có lỗi
checksum của UDP

Chương 3-Lớp truyền tải 3-19

Ví dụ tính Checksum
❒ Lưu ý
❍ Khi cộng, số nhớ từ bit có ý nghĩa lớn nhất được
cộng vào kết quả
❒ 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

sum 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0
checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

Chương 3-Lớp truyền tải 3-20

10
NỘI DUNG
❒ 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

Chương 3-Lớp truyền tải 3-21

Các nguyên lý truyền số liệu tin cậy


❒ Quan trọng trong các lớp ứng dụng, truyền tải và liên kết số
liệu
❒ 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-22

11
Truyền số liệu tin cậy (2)
rdt_send(): được gọi từ lớp trên. deliver_data(): được gọi bởi
Số liệu được chuyển qua để chuyển đến rdt để chuyển data lên lớp trên
máy thu

Host Host
truyền nhận

udt_send(): được gọi bởi rdt, rdt_rcv(): được gọi khi gói đến
để truyền gói qua kênh không tin
cậy đến máy thu
rdt: reliable data transfer protocol Chương 3-Lớp truyền tải 3-23
udt: unreliable data transfer protocol

Truyền số liệu tin cậy (3)


❒ Tìm hiểu phía truyền và nhận của rdt
❒ Chỉ xem xét truyền một hướng
❍ Thông tin điều khiển sẽ theo hai hướng
❒ Dùng sơ đồ trạng thái (finite state machine) để
đặc tả máy truyền và nhận

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 state state
1 Sự kiện
thái kế tiếp được xác 2
định bởi sự kiện kế Hành động
tiếp

Chương 3-Lớp truyền tải 3-24

12
Rdt1.0: truyền tin cậy qua một kênh tin cậy
❒ Kênh truyền bên dưới hoàn toàn tin cậy
❍ Không có lỗi
❍ Không mất gói
❒ Sơ đồ trạng thái tách biệt cho truyền và nhận:
❍ Máy truyền gửi data xuống kênh
❍ Máy thu đọc data từ kênh bên dưới

Đợi gọi rdt_send(data) Đợi gọi rdt_rcv(packet)


từ trên từ dưới extract (packet,data)
packet = make_pkt(data) deliver_data(data)
rdt_send(packet)

Máy truyền Máy thu

Chương 3-Lớp truyền tải 3-25

Rdt2.0: kênh có lỗi


❒ Kênh bên dưới có xảy ra lỗi truyền bit
❍ Dùng checksum để phát hiện lỗi bit
❒ Cách thức sửa lỗi :
❍ acknowledgements (ACKs): máy thu thông báo cho máy
truyền rằng đã nhận tốt
❍ negative acknowledgements (NAKs): máy thu thông báo gói
đã bị lỗi
❍ Máy truyền gửi lại gói khi nhận NAK
❒ Các cơ chế mới trong rdt2.0 :
❍ Phát hiện lỗi
❍ Phản hồi của máy thu, dùng ACK, NAK

Chương 3-Lớp truyền tải 3-26

13
rdt2.0: đặc tả sơ đồ trạng thái
rdt_send(data)
snkpkt = make_pkt(data, checksum) Máy thu
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Đợi gọi Đợi ACK rdt_rcv(rcvpkt) &&
từ trên hay NAK udt_send(sndpkt) corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Λ Đợi gọi từ
dưới
Máy truyền
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Chương 3-Lớp truyền tải 3-27

rdt2.0: hoạt động không lỗi


rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Đợi gọi Đợi ACK rdt_rcv(rcvpkt) &&
từ trên hay NAK udt_send(sndpkt) corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Đợi gọi
Λ từ dưới

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Chương 3-Lớp truyền tải 3-28

14
rdt2.0: Hoạt động có lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Đợi gọi Đợi ACK rdt_rcv(rcvpkt) &&
từ trên hay NAK udt_send(sndpkt) corrupt(rcvpkt)
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Đợi gọi
Λ từ dưới

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Chương 3-Lớp truyền tải 3-29

rdt2.0: tình huống đặc biệt


Điều gì xảy ra nếu Xử lý trùng:
ACK/NAK bị mất? ❒ Máy truyền gửi lại gói nếu
❒ Máy truyền không biết điều chờ ACK/NAK quá lâu
gì xảy ra tại máy thu! ❒ Máy truyền thêm số tuần tự
❒ Truyền lại có thể trùng vào mỗi gói
❒ Máy thu loại bỏ gói trùng,
không chuyển lên trên

Idle RQ (stop and wait)

Máy truyền gửi gói và vào trạng thái


đợi báo nhận ACK

Chương 3-Lớp truyền tải 3-30

15
rdt2.1: máy truyền, kiểm soát mất
ACK/NAK
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Đợi gọi 0 Đợi ACK
hay NAK 0
isNAK(rcvpkt) )
từ trên
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Λ
Λ
Đợi ACK Đợi gọi 1
hay NAK 1 từ trên
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum)


udt_send(sndpkt)

Chương 3-Lớp truyền tải 3-31

rdt2.1: máy thu, kiểm soát mất ACK/NAK


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)
Đợi 0 Đợi 1
rdt_rcv(rcvpkt) && từ dưới từ dưới rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && 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)
udt_send(sndpkt)

Chương 3-Lớp truyền tải 3-32

16
rdt2.2: NAK-free protocol

❒ Giống như rdt2.1, chỉ dùng ACK


❒ Thay vì NAK, máy thu gửi ACK cho gói sau cùng nhận
tốt
❍ Máy thu sẽ chỉ rõ só tuần tự gói nhận tốt trong ACK phản hồi
❒ 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-33

rdt2.2: sơ đồ trạng thái


rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Đợi gọi 0 Đợi ACK
0 isACK(rcvpkt,1) )
từ trên
udt_send(sndpkt)
Máy truyền
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || Λ
has_seq1(rcvpkt)) Đợi 0 Máy thu
từ dưới
udt_send(sndpkt)

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)


&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) Chương 3-Lớp truyền tải 3-34

17
rdt3.0: các kênh lỗi và mất gói

Giả sử: kênh bên dưới Giải pháp: máy truyền đợi
cũng có thể mất gói ACK một khoảng thời
(data hay ACK) gian hợp lý
❍ checksum, seq. #, ACKs, ❒ Truyền lại nếu không thấy ACK
truyền lại là hữu ích trong thời gian đợi
nhưng không đủ ❒ Nếu gói hay ACK bị trễ:
❍ Truyền lại sẽ bị trùng,
nhưng có số tuần tự để
kiểm soát
❍ Máy thu phải chỉ ra số tuần
tự của gói đang báo nhận
ACK
❒ Yêu cầu bộ định thời đếm lui

Chương 3-Lớp truyền tải 3-35

rdt3.0 máy truyền


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 Λ
Λ Đợi gọi 0 Đợi
ACK 0 timeout
từ trên
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Đợi Đợi gọi 1
timeout ACK1 từ trên
udt_send(sndpkt)
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
Λ

Chương 3-Lớp truyền tải 3-36

18
rdt3.0 Hoạt động

Không mất

Mất gói

Chương 3-Lớp truyền tải 3-37

rdt3.0 hoạt động (2)

Mất ACK Time out sớm

Chương 3-Lớp truyền tải 3-38

19
rdt3.0: hoạt động ARQ không liên
tục (Idle ARQ hay stop-and-wait)
sender receiver
Truyền bit đầu của gói, t = 0
Truyền bit sau cùng của gói,
t=L/R

Bit đầu đến


RTT Bit sau cùng đến, gửi ACK

ACK đến, gửi gói kế,


t = RTT + L / R

L/R .008
U = = = 0.00027
sender 30.008
RTT + L / R microsec

Chương 3-Lớp truyền tải 3-39

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
❍ Tăng chỉ số tuần tự
❍ Đệm tại máy truyền và máy nhận

❒ ARQ liên tục: selective repeat và Go-back-N

Chương 3-Lớp truyền tải 3-40

20
Kỹ thuật Pipelining
Nhằm gia tăng hiệu quả sử dụng đường truyền (utilization)

sender receiver
Truyền bit đầu của gói, t = 0
Truyền bit sau cùng của gói,
t=L/R

Nhận bit đầu của gói


RTT Bit sau cùng của gói đến, gửi ACK
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
ACK đến, gửi gói kế tiếp, t
= RTT + L / R

tăng utilization lên ba lần

3*L/R .024
U = = = 0.0008
sender 30.008
RTT + L / R microsecon
Chương 3-Lớp truyền tải 3-41

Các giao thức theo ARQ liên tục


Go-back-N Selective Repeat
❒ Máy truyền có thể có ❒ Máy truyền có thể có
đến N gói chưa được đến N gói chưa được
báo nhận đã gửi qua báo nhận đã gửi qua
trong ống trong ống
❒ Máy thu chỉ gửi ACK ❒ Máy thu gửi ACK cho
cho gói mà từ nó về từng gói nhận tốt
trước đều nhận tốt ❒ Máy truyền có bộ định
❒ Máy truyền có bộ định thời cho từng gói chưa
thời cho các gói chưa được báo nhận
được báo nhận ❍ Nếu định thời hết hạn,
❍ Nếu định thời hết hạn, chỉ truyền lại gói tương
truyền lại tất cả các gói ứng
đang chờ
Chương 3-Lớp truyền tải 3-42

21
Go-Back-N
Máy truyền:
❒ Số tuần tự k-bit (seq #) trong header của gói
❒ “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
Gói có số tuần tự
Gói chờ báo nhận
kế tiếp Còn trống
Đã báo nhận
chưa dùng

Chưa báo nhận Khe trống


Cửa sồ truyền

❒ ACK(n): báo nhận cho tất cả các gói đến n


❍ Có thể nhận trùng ACK
❒ Bộ định thời cho các gói đang đợi
❒ timeout(n): truyền lại tất cả các gói từ n trở đi

Chương 3-Lớp truyền tải 3-43

Sơ đồ trạng thái của máy truyền Go-


Back-N
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
Đợi
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 Chương 3-Lớp truyền tải 3-44

22
Sơ đồ trạng thái của máy nhận Go-Back-N

default
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
Λ && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Đợi extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

Chương 3-Lớp truyền tải 3-45

Hoạt động của


Go-Back-N

Chương 3-Lớp truyền tải 3-46

23
Selective Repeat
❒ Máy thu báo nhận cho từng gói mà nó nhận tốt
❍ Đệm gói khi cần (chờ đúng thứ tự để giao cho giao thức
cao hơn)
❒ Máy truyền chỉ gửi lại gói không nhận được ACK
❍ Bộ định thời cho mỗi gói truyền chưa có báo nhận
❒ Cửa sổ truyền
❍ 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
❍ Giới hạn số gói được truyền liên tục

Chương 3-Lớp truyền tải 3-47

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òn trống
Đã báo nhận
chưa dùng

Chưa báo nhận Khe trống


Cửa sồ truyền

(a) Tuần tự truyền với cửa sổ có kích thước N

Ngoài trật tự
nhưng đã Bộ đệm trống
báo nhận còn chứa thêm
Cần nhưng Khe trống
chưa thấy
Cửa sồ nhận

Chờ gói có tuần tự này


(a) Tuần tự nhận với cửa sổ có kích thước N
Chương 3-Lớp truyền tải 3-48

24
Selective repeat
Máy truyền Máy thu
data từ trên : Gói n trong khoảng của sổ
❒ Nếu tuần tự kế sẵn sàng, thu
truyền gói (cửa sổ còn chỗ) ❒ Gửi ACK(n)
timeout(n): ❒ Không đúng trật tự: đệm lại
❒ Truyền lại gói n, khởi động ❒ Đúng trật tự: chuyển giao
lại bộ định thời cho lớp trên, cửa sổ hướng
đến chỉ số gói kế tiếp
ACK(n) trong khoảng tuần tự
trong cửa sổ: Gói n chờ nhận đến
❒ Loại chỉ số tuần tự n khỏi ❒ Gửi ACK(n)
danh sách đợi
❒ Tăng biên dưới của cửa sổ
lên 1

Chương 3-Lớp truyền tải 3-49

Hoạt động của Selective repeat

Chương 3-Lớp truyền tải 3-50

25
Ví dụ
❒ seq #’s: 0, 1, 2, 3
❒ window size=3
❒ Quan hệ giữa chỉ số
tuần tự và kích thước
cửa sổ

Chương 3-Lớp truyền tải 3-51

HẾT CHƯƠNG 3

Chương 3-Lớp truyền tải 3-52

26

You might also like