Tải bản đầy đủ (.pdf) (55 trang)

mạng máy tínhchương 3 tang van chuyen sinhvienzone com

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.13 MB, 55 trang )

Chương 3

Tầng Vận chuyển
(Transport layer)
A note on the use of these ppt slides:
We’re making these slides freely available to all (faculty, students, readers).
They’re in PowerPoint form so you see the animations; and can add, modify,
and delete slides (including this one) and slide content to suit your needs.
They obviously represent a lot of work on our part. In return for use, we only
ask the following:
 If you use these slides (e.g.,
(e g in a class) that you mention their source
(after all, we’d like people to use our book!)
 If you post any slides on a www site, that you note that they are adapted
from (or perhaps identical to) our slides, and note our copyright of this
material.
Thanks and enjoy! JFK/KWR

Computer
Networking: A
Top Down
Approach

6th edition
Jim Kurose, Keith Ross
Addison-Wesley
March 2012

All material copyright 1996-2012
J.F Kurose and K.W. Ross, All Rights Reserved
Tầng Transport 3-1



Chương 3: Tầng Vận chuyển
Mục tiêu:


g y lý
ý
Hiểu về các nguyên
đằng sau các dịch vụ
tầng Vận chuyển:



 multiplexing/demultiplexi
ng
 Truyền dữ liệu tin cậy
 Điều khiển luồng (flow
control)
l)
 Điều khiển tắc nghẽn
(congestion control)

m hiểu về các g
Tìm
giao
thức tầng Vận chuyển
trên Internet:

 UDP: vận chuyển phi kết
nối

 TCP: vận chuyển tin cậy
hướng kết nối
(connection oriented
(connection-oriented
reliable transport)
 Điều khiển tắc nghẽn
TCP
Tầng Transport 3-2

SinhVienZone.com

/>
1


Chương 3: Nội dung
3.1 các dịch vụ tầng
Vận chuyển
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy

3.5 vận chuyển hướng kết
nối: TCP
nố
CP

 Cấu trúc segment
 Truyền dữ liệu tin cậy
 Điều khiển luồng (flow
control)
 Quản lý kết nối

3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-3

Các giao thức và dịch vụ
tầng Vận chuyển






Cung cấp truyền thông logic giữa
các tiến trình ứng dụng đang chạy
trên các host khác nhau
Các giao thức (protocol) chạy trên
các hệ thống đầu cuối
 Phía gửi: chia nhỏ các thông điệp
(message) ứng dụng thành các
segments, sau đó chuyển các
segments này cho tầng Mạng
ậ tái kết hợp

ợp các
 Phía nhận:
segments thành các thông điệp
(message), các thông điệp này
được chuyển lên tầng Ứng dụng
Có nhiều hơn 1 giao thức tầng Vận
chuyển dành cho các ứng dụng
 Internet: TCP và UDP

application
transport
network
data link
physical

application
transport
network
data link
physical

Tầng Transport 3-4

SinhVienZone.com

/>
2


Quan hệ giữa Tầng Vận chuyển và

tầng Mạng


Tầng Mạng:

truyền
y thông
g
l i giữa
logic
i các
á
host
 Tầng Vận chuyển:
truyền thông
logic giữa các
tiến trình
 Dựa
D vào
à và
à tăng

cường các dịch vụ
tầng Mạng

Tình huống tương tự:

12 đứa trẻ ở nhà Ann gửi
nh
hững bức th

hư đến 12
đứa trẻ ở nhà Bill:








hosts = nhà
Các tiến trình
(processes) = những đứa
trẻ
Thông điệp tầng Ứng
ụ g = các bức thư
dụng
trong các
á phong
h

Giao thức tầng Vận
chuyển = Ann and Bill
Giao thức tầng Mạng=
dịch vụ bưu điện
Tầng Transport 3-5

Các giao thức tầng Vận chuyển trên
Internet



Tin cậy, truyền theo
thứ tự (TCP)
 Điề
Điền khiển
khiể tắc
tắ nghẽn
hẽ
 Điều khiển luồng
 Thiết lập kết nối



Không tin cậy, truyền
không theo thứ tự:
UDP

 Không
hô rườm rà,
à mở rộng
“nỗ lực tốt nhất” (besteffort) của IP



application
transport
network
data link
physical
network

data link
physical

network
data link
d
l k
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

Không có các dịch vụ:
 Bảo đảm độ trễ
 Bảo đảm băng thông

SinhVienZone.com

Tầng Transport 3-6

/>
3


Chương 3 Nội dung
3.1 các dịch vụ tầng
Vận chuyển
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy

3.5 vận chuyển hướng kết
nối: TCP
nố
CP

 Cấu trúc segment
 Truyền dữ liệu tin cậy
 Điều khiển luồng (flow
control)
 Quản lý kết nối

3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-7

Multiplexing/demultiplexing
multiplexingtại bên gửi:
xử lý dữ liệu từ nhiều
m thông
g tin
socket,, thêm
header về tầng Vận chuyển
vào segment (được sử dụng
sau cho demultiplexing)

demultiplexing tại bên nhận:

sử dụng thông tin trong
header để chuyển segment
vừa nhận vào đúng socket

application
application


P1

P2

application

P3

transport

P4

transport

network

transport

link

network

network
link
physical

physical

socket

tiến trình

link
physical

Tầng Transport 3-8

SinhVienZone.com

/>
4


demultiplexing làm việc như thế nào


host nhận các gói dữ
ệu (datagram) IP
liệu

32 bits
Số port nguồn

 Mỗi gói dữ liệu có địa chỉ
IP nguồn và đích
 Mỗi gói dữ liệu mang một
segment tầng Vận chuyển
 Mỗi segment có số port
nguồn và đích




Số port đích

other header fields

application
data
(
(payload)
l d)

hostt dùng
h
dù các
á đị
địa chỉ
hỉ
IP và số port để gởi
segment đến socket
thích hợp

Định dạng segment TCP/UDP

Tầng Transport 3-9

Demultiplexing không kết nối
Ôn lại: socket đã tạo có




số port của host cục bộ
((host-local p
port #)) :

DatagramSocket mySocket1
= new DatagramSocket(12534);



Khi host nhận
g
UDP :
segment

 Kiểm tra số port đích
trong segment
 Đưa segment UDP đến
socket có số port đó



Ôn lại: khi tạo gói dữ

liệu (datagram) để gởi
D
vào đến socket UDP
socket, phải xác định
 Địa chỉ IP đích
 Số port đích


Các gói dữ liệu IP với
cùng số port đích,
nhưng
h
khá địa
khác
đ chỉ
h IP
nguồn và/hoặc khác số
port nguồn sẽ được
chuyển đến cùng
socket tại máy đích
Tầng Transport 3-10

SinhVienZone.com

/>
5


Demultiplexing không kết nối:
ví dụ
DatagramSocket
mySocket2 = new
DatagramSocket
(9157);

DatagramSocket
serverSocket = new

DatagramSocket
(6428);

DatagramSocket
mySocket1 = new
D t
DatagramSocket
S k t
(5775);

application

application

application

P1

P3

P4

transport

transport

transport

network


network

network

link

link

link

physical

physical
h i l
Port nguồn: 6428
Port đích: 9157

ph si l
physical
Port nguồn: ?
Port đích: ?
Port nguồn: ?
Port đích: ?

Port nguồn: 9157
Port đích: 6428

Tầng Transport 3-11

Demux hướng kết nối



Socket TCP được
xác định bở
bởi 4 yếu
tố:







Địa chỉ IP nguồn
Số port nguồn
Địa chỉ IP nguồn
Số port đích

demux: nơi nhận
dùng tất cả 4 giá trị
trên để điều hướng
segment đến socket
thích hợp



host server có thể hỗ
ợ nhiều socket TCP
trợ
đồng thời:

 Mỗi socket được xác
định bởi bộ 4 của nó



Các web server có
các socket khác nhau
cho mỗi kết nối từ
client
 Kết nối HTTP không
bền vững sẽ có socket
khác nhau cho mỗi yêu
cầu

Tầng Transport 3-12

SinhVienZone.com

/>
6


Demultiplexing hướng kết nối: ví dụ
application
application

P4

P3


P5

application

P6

P3

P2

transport
transport

network

network

link

link

physical

physical

network
link
physical

server:

địa chỉ IP
B
Địa chỉ IP nguồn,port: B,80
Địa chỉ IP đích,port: A,9157

host: địa
chỉ IP A

transport

host: địa
chỉ IP C

IP nguồn,port: C,5775
IP đích,port: B,80

IP nguồn,port: A,9157
IP đích, port: B,80

IP nguồn,port: C,9157
IP đích,port: B,80

Ba segment, tất cả được đưa đến địa chỉ IP: B,
Port đích: 80 được demultiplex đến các socket khác nhau

Tầng Transport 3-13

Demultiplexing hướng kết nối: ví dụ
threaded server
application

application

P3

application

P4

P3

P2

transport
transport

network

network

link

link

physical

physical

host: địa
chỉ IP A


transport
network
link

server:
địa chỉ IP
B
IP nguồn,port: B,80
IP đích,port: A,9157
IP nguồn,port: A,9157
IP đích, port: B,80

physical

host: địa
chỉ IP C

IP nguồn,port: C,5775
IP đích,port: B,80
IP nguồn,port: C,9157
IP đích,port: B,80

Tầng Transport 3-14

SinhVienZone.com

/>
7



Chương 3 Nội dung
3.1 các dịch vụ tầng
Vận chuyển
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy

3.5 vận chuyển hướng kết
nối: TCP
nố
CP
 Cấu trúc segment
 Truyền dữ liệu tin cậy
 Điều khiển luồng (flow
control)
 Quản lý kết nối

3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-15

UDP: User Datagram Protocol [RFC 768]







“đơn giản,” “bare bones” là
giao thức thuộc tầng Vận
chuyển
y
Dịch vụ “best effort” (“nỗ
lực tốt nhất”), các segment
UDP có thể bị:
 Mất mát
 Vận chuyển không theo thứ
tự đến ứng dụng đích
Connectionless (phi kết nối):
 Không bắt tay giữa bên
nhận và gửi UDP
 Mỗi segment UDP được xử
lý độc lập



Ứng dụng UDP:

 Các ứng dụng đa
phương tiện trực tuyến
(chịu mất mát(loss
tolerant), (cần tốc độ)
(rate sensitive) )
 DNS

 SNMP



Truyền tin cậy trên
UDP
UDP:

 Thêm độ tin cậy tại
tầng Ứng dụng
 Phục hồi lỗi tại các ứng
dụng cụ thể!
Tầng Transport 3-16

SinhVienZone.com

/>
8


UDP: segment header
32 bits
Số port nguồn

Số port đích

length

checksum


Độ dài được tính
bằng byte của
segment UDP, bao
gồm cả heade
header

Tại sao có UDP?



Dữ liệu
ứng dụng
(payload)





Định dạng segment UDP

Không thiết lập kết nối (có
thể gây ra độ trễ)
Đơn giản: không trạng thái
kết nối tại nơi gửi và nhận
Kích thước header nhỏ
Không điều khiển tắc nghẽn:
UDP có thể gửi dữ liệu nhanh
như mong muốn
Tầng Transport 3-17


UDP checksum
Mục tiêu: dò tìm “các lỗi” (các bit cờ được bật)
g các segment
g
đã được truyền
y
trong

bên gửi:

bên nhận:









Xét nội dung của
segment, bao gồm các
trường của header, là
chuỗi các số nguyên
16-bit
checksum:
h k
tổ bù 1
tổng
của các chuỗi số 16

bit trong nội dung
segment
Bên gửi đặt giá trị
checksum vào trường
checksum UDP

SinhVienZone.com



Tính toán checksum của
segment đã nhận
Kiểm tra giá trị trên có bằng
với giá trị trong trường
checksum hay không
không:
 NO – có lỗi xảy ra
 YES – không có lỗi. Nhưng
có thể còn lỗi khác nữa
không? Xem phần sau….
Tầng Transport 3-18

/>
9


Internet checksum: ví dụ
Ví dụ: cộng 2 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

bit dư

1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

tổng 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

Lưu ý: khi cộng các số, bit nhớ ở phía cao nhất cần
được thêm vào kết quả

Tầng Transport 3-19

Chương 3 Nội dung
3.1 các dịch vụ tầng
Vận chuyển
3.2 multiplexing và
demultiplexing
3.3 vận chuyển phi kết
nối: UDP
3.4 các nguyên lý
truyền dữ liệu tin
cậy

3.5 vận chuyển hướng kết
nố
CP
nối: TCP
 Cấu trúc segment
 Truyền dữ liệu tin cậy
 Điều khiển luồng (flow

control)
 Quản lý kết nối

3.6 các nguyên lý về điều
khiển tắc nghẽn
3.7 điều khiển tắc nghẽn
TCP
Tầng Transport 3-20

SinhVienZone.com

/>
10


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


Quan trọng trong các tầng Ứng dụng, Vận
chuyển và Liên kết dữ liệu
 Top 10 danh sách các chủ đề mạng quan trọng



Các đặc điểm của kênh truyền không tin cậy sẽ xác
định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt)
Tầng Transport 3-21

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



Quan trọng trong các tầng Ứng dụng, Vận
chuyển và Liên kết dữ liệu
 Top 10 danh sách các chủ đề mạng quan trọng



Các đặc điểm của kênh truyền không tin cậy sẽ xác
định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt)
Tầng Transport 3-22

SinhVienZone.com

/>
11


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


quan trọng trong các tầng Ừng dụng, Vận
chuyển và Liên kết dữ liệu

 Top 10 danh sách các chủ đề mạng quan trọng



Các đặc điểm của kênh truyền không tin cậy sẽ xác

định sự phức tạp của giao thức truyền dữ liệu (data
transfer protocol) (rdt)
Transport Layer 3-23

Truyền dữ liệu tin cậy: bắt đầu
rdt_send(): được gọi bởi tầng trên,
(tầng Ứng dụng). Chuyển dữ liệu cần
y đến tầng
g Ứng
g dụng
ụ g bên nhận

truyền

Bên
gửi

udt_send(): được gọi bởi rdt,
để truyền các gói trên kênh
không tin cậy đến nơi nhận

deliver_data(): được gọi bởi rdt để
chuyển dữ liệu đến tầng cao hơn

Bên
nhận

rdt_rcv(): được gọi khi gói dữ
liệu đến kênh của bên nhận
Tầng Transport 3-24


SinhVienZone.com

/>
12


Truyền dữ liệu tin cậy: bắt đầu
Chúng ta sẽ:
 Từng bước phát triển truyền dữ liệu tin cậy
(rdt) bên phía người gửi và nhận
 Chỉ xem xét chuyển dữ liệu theo 1 hướng
 Nhưng điều khiển thông tin sẽ theo cả 2 hướng!



Sử dụng finite state machines (FSM) để xác
định bên gửi và nhận Sự kiện gây chuyển trạng thái

Trạng thái: khi ở “trạng
thái” này thì trạng
thái kế tiếp được xác
định duy nhất bởi sự
kiện kế tiếp

Các hành động được thực hiện khi
chuyển trạng thái
trạng
thái
1


trạng
thái 2

Sự kiện
Các hành động

Tầng Transport 3-25

rdt1.0: truyền tin cậy trên 1 kênh tin cậy


Kênh cơ bản tin cậy hoàn toàn (underlying channel
perfectly reliable)
 không
g có bit lỗi
 không mất mát gói



Các FSMs riêng biệt cho bên gửi và nhận:

 Bên gửi gửi dữ liệu vào kênh cơ bản (underlying channel)
 Bên nhận đọc dữ liệu từ kênh cơ bản (underlying channel)
chờ gọi
từ tầng
trên

rdt_send(data)
(

)
packet = make_pkt(data)
udt_send(packet)

bên gửi

chờ gọ
gọi
từ tầng
dưới

rdt_rcv(packet)
_ (p
)
extract (packet,data)
deliver_data(data)

bên nhận
Tầng Transport 3-26

SinhVienZone.com

/>
13


rdt2.0: kênh với các lỗi


Kênh cơ bản có thể đảo các bit trong packet




Câu hỏi: làm sao khôi phục các lỗi:



 checksum để kiểm tra các lỗi

 acknowledgements (ACKs): receiver explicitly
tells sender that pkt received OK
 negative acknowledgements (NAKs): receiver
explicitly tells sender that pkt had errors
 sender
retransmits
receipt
of NAK
Làm
thế nào pkt
để on
con
người
phục hồi
new mechanisms in rdt2.0 (beyond rdt1.0):
“lỗi”
lỗi trong cuộc trò chuyện?
 error detection
d t ti
 receiver feedback: control msgs (ACK,NAK)
rcvr->sender


Tầng Transport 3-27

rdt2.0: kênh với các lỗi


Kênh cơ bản có thể đảo các bit trong packet



Câu hỏi: làm sao khôi phục các lỗi:



 checksum để kiểm tra các lỗi

 acknowledgements (ACKs): bên nhận thông báo
cho bên gửi rằng packet được nhận thành công
(OK)
 negative acknowledgements (NAKs): bên nhận
thông báo cho bên gửi rằng packet đã bị lỗi
 Bên gửi truyền lại gói nào được xác nhận là NAK
Các cơ chế mới trong rdt2.0 (sau rdt1.0):
 Phát hiện lỗi
 Phản hồi: các thông điệp điều khiển (ACK,NAK) từ
bên nhận đến bên gửi
Tầng Transport 3-28

SinhVienZone.com


/>
14


rdt2.0: đặc điểm kỹ thuật FSM
rdt_send(data)
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
i NAK(
isNAK(rcvpkt)
kt)
Chờ gọi
Chờ ACK
từ tầng
hoặc
udt_send(sndpkt)
trên
NAK
rdt_rcv(rcvpkt) && isACK(rcvpkt)


Bên gửi

Bên nhận
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Chờ gọi
từ tầng

dưới
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Tầng Transport 3-29

rdt2.0: hoạt động khi không lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
i NAK(
isNAK(rcvpkt)
kt)
Chờ gọi
Chờ ACK
từ tầng
hoặc
udt_send(sndpkt)
trên
NAK
rdt_rcv(rcvpkt) && isACK(rcvpkt)


rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Chờ gọi

từ tầng
dưới
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Tầng Transport 3-30

SinhVienZone.com

/>
15


rdt2.0: hoạt động khi có lỗi
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
i NAK(
isNAK(rcvpkt)
kt)
Chờ gọi
Chờ ACK
từ tầng
hoặc
udt_send(sndpkt)
trên
NAK

rdt_rcv(rcvpkt) && isACK(rcvpkt)

rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Chờ gọi
từ tầng
dưới



rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
Tầng Transport 3-31

rdt2.0 có lỗ hổng nghiêm trọng!
Điều gì xảy ra nếu
g
ACK/NAK bịị hỏng?




Bên gửi sẽ không biết
điều gì đã xảy ra ở bên
nhận!
Không thể đơn phương

truyền lại: có thể trùng
lặp

Xử lý trùng lặp:




Bên gửi truyền lại packet
hiện thời nếu ACK/NAK bị
hỏng
Bên gửi thêm số thứ tự vào
trong mỗi packet

(sequence number)


Bên nhận hủy packet bị
trùng lặp

dừng và chờ
Bên gửi gửi một
packet, sau đó chờ
phản hồi từ bên nhận

Tầng Transport 3-32

SinhVienZone.com

/>

16


rdt2.1: bên gửi, xử lý các ACK/NAK
bị hỏng
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
Wait for
call 0 from
above

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)



rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )

( corrupt(rcvpkt)
t(
kt) ||

isNAK(rcvpkt) )
udt_send(sndpkt)

Wait for
ACK or
NAK 0


Wait for
ACK or
NAK 1

udt_send(sndpkt)

Wait for
call 1 from
above

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

Tầng Transport 3-33

rdt2.1: bên nhận, xử lý các ACK/NAK bị
hỏng

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)


rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq1(rcvpkt)
sndpkt = make_pkt(ACK,
make pkt(ACK chksum)
udt_send(sndpkt)

sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt)
Wait for
0 from
below

Wait for
1 from
below

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)


rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make
make_pkt(ACK,
pkt(ACK chksum)
udt_send(sndpkt)

extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
Tầng Transport 3-34

SinhVienZone.com

/>
17


rdt2.1: thảo luận
Bên gửi:
Bên nhận:
 Số thứ tự (seq #)
 Phải kiểm tra gói
đ
được
thêm
hê vào
à packet

k
vừa nhận
h có
ó trùng
ù
hay không
 2 số thứ tự (0,1) là
 Trạng thái chỉ rõ có
đủ. Tại sao?
hay không 0 hoặc 1
 Phải kiểm tra có hay
là số thứ tự của gói
không ACK/NAK vừa
được mong chờ
ậ bịị hỏng
g
nhận
 Chú ý: bên nhận có
 Số trạng thái tăng lên
thể không biết
2 lần
ACK/NAK vừa rồi
 Trạng thái phải “nhớ”
có được bên gửi
xem packet “mong đợi”
nhận tốt hay không
có số thứ tự là 0 hay 1

Tầng Transport 3-35


rdt2.2: một giao thức không cần NAK



Chức năng giống như rdt2.1, chỉ dùng các ACK
Thay cho NAK,
NAK bên nhận gởi ACK cho gói cuối
cùng được nhận thành công
 Bên nhận phải ghi rõ số thứ tự của gói vừa được
ACK



ACK bị trùng tại bên gửi dẫn tới kết quả giống
như hành động của NAK: truyền lại gói vừa rồi

Tầng Transport 3-36

SinhVienZone.com

/>
18


rdt2.2: các phần bên nhận và gửi
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||

Wait
for
Wait for
isACK(rcvpkt,1) )
ACK
call 0 from
0
udt_send(sndpkt)
above

sender FSM
fragment

rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
q ( p ))
has_seq1(rcvpkt))
udt_send(sndpkt)

Wait for
0 from
below

rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)


receiver FSM
fragment


rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt)

Tầng Transport 3-37

rdt3.0: các kênh với lỗi và mất mát
Giả định mới: kênh
truyền cũng có thể
làm mất gói
ói (dữ liệu,
liệu
các ACK)

 checksum, số thứ tự,
các ACK, việc truyền
lại sẽ hỗ trợ… nhưng
không đủ

Cách tiếp cận: bên gửi chờ
ACK trong khoảng thời
gian
hợp
ian “h
p lý”







Truyền lại nếu không nhận
được ACK trong khoảng thời
gian này
Nếu gói (hoặc ACK) chỉ trễ
(không mất):
 Việc truyền lại sẽ gây
trùng nhưng số thứ tự đã
trùng,
xử lý trường hợp này
 Bên nhận phải xác định số
thứ tự của gói vừa gửi
ACK
Yêu cầu bộ định thì đếm lùi
Tầng Transport 3-38

SinhVienZone.com

/>
19


rdt3.0 bên gửi
rdt_send(data)

rdt_rcv(rcvpkt)




rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,1)

rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,0) )

timeout
udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer

stop_timer
timeout
udt_send(sndpkt)
dt
d( d kt)
start_timer



Wait
for

ACK0

Wait for
call 0from
above



rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isACK(rcvpkt,1) )

sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
start_timer

Wait
for
ACK1

Wait for
call 1 from
above

rdt_rcv(rcvpkt)



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

udt_send(sndpkt)
start_timer

Tầng Transport 3-39

Hành động của rdt3.0
bên nhận

bên gửi
Gửi pkt0
Nhận ack0
Gửi pkt1
Nhận ack1
Nhận pkt0

pkt0
ack0
pkt1
ack1
pkt0
ack0

Gửi pkt0
Nhận pkt0
Gửi ack0
Nhận pkt1
Nhận ack1
Gửi pkt0
Nhận ack0


(a) Không mất mát

bên nhận

bên gửi

Nhận ack0
Nhận pkt1

pkt0
ack0

Nhận pkt0
Gửi ack0

pkt1

X

loss

timeout

Gửi lại pkt1

Nhận ack1
Gửi pkt0

pkt1
ack1

k1
pkt0
ack0

Nhận pkt1
Gửi ack1
k1
Nhận pkt0
Gửi ack0

(b) Mất gói
Tầng Transport 3-40

SinhVienZone.com

/>
20


Hành động của rdt3.0

bên nhận

bên gửi

bên nhận

bên gửi
Gửi pkt0


pkt0

Nhận ack0
Gửi pkt1

ack0
pkt1
ack1

X

Gửi pkt0

Nhận pkt0
Gửi ack0

Nhận ack0
Gửi pkt1
kt1

Nhận pkt1
Gửi ack1

Gửi lại pkt1

pkt1

Nhận ack1
Gửi pkt0


ack1
pkt0
ack0

Nhận pkt1

timeout

(phát hiện trùng gói)

Gửi ack1

Nhận pkt0
Gửi ack0

ack0
pkt1

Nhận pkt1
Gửi ack1

ack1

loss

timeout

pkt0

resend pkt1

rcv ack1
send pkt0
rcv ack1
send pkt0

Nhận pkt0
Gửi ack0

pkt1

Nhận pkt1

(phát hiện trùng)

pkt0
ack1
ack0
pkt0

Gửi ack1
Nhận pkt0
Gửi ack0
Nhận pkt0

ack0

(phát hiệ trùng)

Gửi ack0


(d) Thời gian chờ quá ngắn / delayed ACK

(c) Mất ACK

Tầng Transport 3-41

Hiệu suất của rdt3.0



rdt3.0 làm việc được, nhưng đánh giá hiệu xuất hơi
rắc rối
ụ đường
g link 1 Gbps,
p , trễ lan truyền
y g
Ví dụ:
giữa 2 đầu
cuối là 15 ms, gói 8000 bit:
8000 bits
L
= 8 microsecs
Dtruyền = R =
109 bits/sec
 U sender: utilization – khoảng thời gian mà bên gửi gửi
được dữ liệu
U

sender =


L/R

RTT + L / R

=

.008

30 008
30.008

= 0.00027

 Nếu RTT=30 msec, gói 1KB mỗi 30 msec: thông lượng
33kB/sec trên đường link1 Gbps



Giao thức mạng hạn chế việc sử dụng các tài
nguyên vật lý!

Tầng Transport 3-42

SinhVienZone.com

/>
21


rdt3.0: hoạt động dừng-và-chờ

sender

receiver

bit đầu tiên của gói được truyền, t = 0
bit cuối cùng gói được truyền, t = L / R

Bit đầu tiên của gói đến
Bit cuối cùng của gói đến, gửi ACK

RTT

ACK đến, gửi gói kế tiếp,
t = RTT + L / R

U

sender =

L/R
RTT + L / R

=

.008
30.008

= 0.00027

Tầng Transport 3-43


Các giao thức Pipelined
pipelining: bên gửi cho phép gửi nhiều gói
đồng thời, không cần chờ báo xác nhận ACK
 Dải số thứ tự phải được tăng lên
 Phải có bộ nhớ đêm tại nơi gửi và/hoặc nhận



hai dạng phổ biến của các giao thức pipelined :
go-Back-N, selective repeat (lặp có lựa chọn)
Tầng Transport 3-44

SinhVienZone.com

/>
22


Pipelining: độ khả dụng tăng
bên gửi

bên nhận

bit đầu tiên của gói được truyền, t = 0
bit cuối cùng của gói được truyền,
t=L/R

bit đầu tiên của packet đến
bit cuối cùng của packet đến, gửi ACK


RTT

bit cuối cùng của packet thứ 2 đến, gửi ACK
bit cuối cùng của packet thứ 3 đến, gửi ACK

ACK đến, gửi gói
kế tiếp t = RTT + L / R

3-packet pipelining tăng
độ khả d
dung lê
lên gấp
ấ 3 lầ
lần!!

U

sender =

3L / R
RTT + L / R

=

.0024
30.008

= 0.00081


Tầng Transport 3-45

Pipelined protocols: tổng quan
Go-back-N:
Lặp có lựa chọn (Selective
Repeat):
 Bên gửi có thể có đến N
packet không cần ACK trong  Bên gửi có thể có đến N
đường ống ( pipeline)
packet không cần ACK
 Bên nhận chỉ gởi cumulative
trong đường ống
ack (xác nhận tích lũy)
(pipeline)
 Sẽ không thông báo nhận
 Bên nhận gửi rcvr ack
packet thành công nếu có
riêng biệt (individual
gián đoạn
ack) cho mỗi packet

Bên
nhận duy trì bộ định
 bên gửi có bộ định thì cho
thì cho mỗi packet
packet sớm nhất mà không
cần ACK (oldest unacked
không được ACK
packet)
 Khi bộ định thì của

 Khi bộ định thì hết, truyền
packet nào hết hạn, thì
chỉ truyền lại packet
lại thất cả các packet mà
không được ACK đó
không được ACK
Tầng Transport 3-46

SinhVienZone.com

/>
23


Go-Back-N: bên gửi








Số thứ tự k-bit trong header của packet
“cửa sổ”(“window”) lên đến N gói, cho phép gửi liên tiếp
không cần ACK

ACK(n): thông báo nhận tất cả các packet lên đến n, bao
gồm
g

m n số th
thứ tự - “ACK
K tích
t ch lũy”(“cumulative
ũy ( cumu at
ACK”)
K )
 Có thể nhận ACK trùng (xem bên nhận)
Định thì cho packet sớm nhất đang trong tiến trình xử
lý (oldest in-flight pkt)
timeout(n): truyền lại packet n và tất cả các packet có
số thứ tự cao hơn trong cửa sổ (window)
Tầng Transport 3-47

GBN: trạng thái mở rộng tại bên gửi
rdt_send(data)


base=1
nextseqnum=1

if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum)
udt_send(sndpkt[nextseqnum])
q
)
if ((base == nextseqnum)
start_timer
nextseqnum++
}

else
refuse_data(data)

Wait
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)

timeout
start_timer
udt_send(sndpkt[base])
udt_send(sndpkt[base+1])

udt_send(sndpkt[nextseqnum-1])

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer

SinhVienZone.com

Tầng Transport 3-48

/>
24



GBN: trạng thái mở rộng tại bên nhận
default
udt_send(sndpkt)



Wait
expectedseqnum=1
sndpkt =
make_pkt(expectedseqnum,ACK,chksum)

rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
&& hasseqnum(rcvpkt,expectedseqnum)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

ACK-duy nhất: luôn luôn gửi ACK cho gói đã nhận
chính xác, với số thứ tự xếp hạng cao nhất
((highest
g
in-order seqq #))
 Có thể sinh ra các ACK trùng nhau
 Chỉ cần nhớ expectedseqnum




Packet không theo thứ tự(out-of-order pkt):

 hủy (discard): không giữ trong bộ đệm bên nhận!
 Gửi lại ACK với số thứ tự xếp hạng cao nhất Tầng Transport

3-49

Hoạt động GBN
sender window (N=4)
012345678
012345678
012345678
012345678

012345678
012345678

bên gửi
send pkt0
send pkt1
send pkt2
send pkt3
(wait)

rcv ack0, send pkt4
rcv ack1, send pkt5
ignore duplicate ACK

pkt 2 timeout
012345678

012345678
012345678
012345678

send
send
send
send

pkt2
pkt3
pkt4
pkt5

bên nhận

Xloss

receive pkt0, send ack0
receive pkt1,
pkt1 send ack1
receive pkt3, discard,
(re)send ack1
receive pkt4, discard,
(re)send ack1
receive pkt5, discard,
(re)send ack1

rcv
rcv

rcv
rcv

pkt2,
pkt3,
pkt4,
pkt5,

deliver,
deliver,
deliver,
deliver,

send ack2
send ack3
send ack4
send ack5

Tầng Transport 3-50

SinhVienZone.com

/>
25


×