3: Transport Layer
3a-1
Chương 3: Tầng giao vận
Mục tiêu :
Nguyên lý các dịch vụ của
tầng giao vận:
Phân kênh / Dồn kênh
Xây dựng ñường truyền tin
cậy
ðiều khiển lưu lượng
Kiểm soát tắc nghẽn
Cài ñặt những nguyên lý này
trên Internet như thế nào ?
Sẽ học cái gì ?
Các dịch vụ của tầng giao vận
Phân kênh / Dồn kênh
UDP : Giao thức không hướng nối
Nguyên lý xây dựng ñường truyền
tin cậy
TCP : Giao thức hướng nối
Tin cậy
ðiều khiển lưu lượng
Kiểm soát tắc nghẽn
Nguyên lý kiểm soát tắc nghẽn
Kiểm soát tắc nghẽn trong TCP
3: Transport Layer
3a-2
Dịch vụ và Giao thức ở tầng Giao vận
Cung cấp ñường truyền logic giữa
các tiến trình chạy trên các thiết bị
ñầu cuối.
Giao thức Giao vận chạy trên thiết
bị ñầu cuối
Phân biệt dịch vụ của tầng Giao
vận với tầng Mạng:
Tầng Mạng: Chuyển dữ liệu giữa
các thiết bị ñầu cuối.
Tầng Giao vận: Chuyển dữ liệu
giữa các tiến trình
Dựa trên tầng Mạng nhưng biến
ñổi, tăng cường
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
l
o
g
i
c
a
l
e
n
d
-
e
n
d
t
r
a
n
s
p
o
r
t
3: Transport Layer
3a-3
Giao thức ở tầng Giao vận
Có hai giao thức giao vận trên
Internet:
Tin cậy, Nhận theo ñúng thứ tự
gửi, một người nhận (TCP)
Kiểm soát tắc nghẽn
ðiều khiển lưu lượng
Thiết lập ñường truyền
Không tin cậy (“cố gắng tối ña”),
Không theo ñúng thứ tự: UDP
Cả TCP và UDP ñều không cung
cấp:
Chuyển theo thời gian thực
Băng thông tối thiểu
Nhiều người nhận tin cậy
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
l
o
g
i
c
a
l
e
n
d
-
e
n
d
t
r
a
n
s
p
o
r
t
3: Transport Layer
3a-4
application
transport
network
M
P2
application
transport
network
Phân kênh / Dồn kênh
Nhớ lại: segment – ðơn vị dữ liệu
trao ñổi giữa hai thực thể Giao
vận
Còn gọi là TPDU:
Transport Protocol Data
Unit
Bên nhận
H
t
H
n
Phân kênh: Chuyển các segment
nhận ñược cho Ứng dụng phù
hợp
segment
segment
M
application
transport
network
P1
M
M
M
P3
P4
Tiêu ñề
segment
Dữ liệu tầng Ứng
dụng
3: Transport Layer
3a-5
Phân kênh / Dồn kênh
Dồn kênh/Phân kênh:
Dựa trên ðịa chỉ IP, Số hiệu
cổng của bên Gửi và bên Nhận
source, dest port trong mỗi
segment
Nhớ lại: Các số hiệu cổng
của các ứng dụng thông
dụng
Lấy dữ liệu từ nhiều trình Ứng
dụng, Bổ sung thêm các tiêu ñề
(ñể sau này Phân kênh sử dụng
source port # dest port #
32 bits
application
data
(message)
other header fields
Khuôn dạng tổng quát của TCP/UDP
Dồn kênh:
3: Transport Layer
3a-6
Phân biệt Phân kênh và Dồn kênh
application
transport
network
link
physical
P1
application
transport
network
link
physical
application
transport
network
link
physical
P2
P3
P4
P1
host 1
host 2
host 3
= process= socket
Chuyển segment ñến ñúng
socket
Phân kênh ở nút nhận:
Lấy dữ liệu từ nhiều socket,
ñặt trong các phong bì khác
nhau (ñể phân kênh sau này)
Dồn kênh ở nút gửi
3: Transport Layer
3a-7
Ví dụ : Phân kênh / Dồn kênh
host A
server B
source port: x
dest. port: 23
source port:23
dest. port: x
Ứng dụng Telnet ñơn giản
Web client
host A
Web
server B
Web client
host C
Source IP: C
Dest IP: B
source port: x
dest. port: 80
Source IP: C
Dest IP: B
source port: y
dest. port: 80
port : Ứng dụng Web
Source IP: A
Dest IP: B
source port: x
dest. port: 80
3: Transport Layer
3a-8
Phân kênh bằng cách nào ?
Máy tính ñích nhận ñược IP
datagrams
Mỗi datagram có ñịa chỉ IP
ñích, IP nguồn
Mỗi datagram chứa một
segment của tầng giao vận
Mỗi segment chứa ñịa chỉ cổng
gửi, cổng nhận
(chú ý : cổng của các ứng dụng
thông dụng)
Máy tính ñích sử dụng ñịa chỉ IP
và cổng của bên gửi ñể chuyển
segment ñến socket thích hợp
source port # dest port #
32 bits
application
data
(message)
other header fields
TCP/UDP segment format
3: Transport Layer
3a-9
UDP: User Datagram Protocol [RFC 768]
Giao thức giao vận cực kỳ ñơn
giản, gần như không có gì
Dịch vụ kiểu “cố gắng tối ña”, các
segment của UDP có thể :
Mất.
Tầng ứng dụng chịu trách
nhiệm sắp xếp theo ñúng thứ
tự.
Không hướng nối:
Phía gửi, phía nhận không cần
“bắt tay”
Các segment UDP ñược xử lý
ñộc lập
Tại sao sử dụng UDP?
ðộ trễ nhỏ: Không có giai ñoạn
thiết lập ñương truyền
ðơn giản: Phía gửi và nhận
không phải ghi nhớ trạng thái
gửi/ nhận.
Tiêu ñề gói tin bé
Không có cơ chế kiểm soát tắc
nghẽn: Bên gửi có thể gửi dữ
liệu với tốc ñộ tối ña.
3: Transport Layer
3a-10
UDP (tiếp)
Thường ñược các ứng dụng ña
phương tiện sử dụng
Chấp nhận mất dữ liệu
Tốc ñộ truyền quan trọng
Một số ứng dụng khác cũng sử
dụng (Vì sao?):
DNS
SNMP
Muốn truyền tin cậy bằng UDP:
phải ñặt cơ chế tin cậy tại ứng
dụng
Ứng dụng chịu trách nhiệm
phát hiện và khắc phục lỗi!
source port # dest port #
32 bits
Dữ liệu tầng ứng dụng
(Thông ñiệp)
Khuôn dạng segment UDP
length
checksum
ðộ dài
Segment
UDP,
Tính theo
ñơn vị
byte, kể
cả phần
tiêu ñề
3: Transport Layer
3a-11
UDP checksum
Bên gửi:
Xem nội dung segment là các
số nguyên 16-bit liên tiếp (các
từ).
checksum: tổng bù 1 của các
từ
Phía gửi sẽ ñặt giá trị
checksum tính ñược vào
trường checksum trong tiêu ñề
gói tin UDP
Bên nhận:
Tính giá trị checksum của
segment vừa nhận ñược
Kiểm tra xem giá trị vừa tính ñược
có trùng với giá trị trong trường
checkum ở tiên ñề không:
KHÔNG TRÙNG – có lỗi
TRÙNG – Không phát hiện ñược
lỗi. Nhưng có thể có lỗi.
Mục tiêu: phát hiện “lỗi” (bit bị thay ñổi giá trị) trong segment
nhận ñược.
3: Transport Layer
3a-12
Ví dụ tính UDP Checksum
Note
Khi cộng hai số, nhớ ở bit cao nhất sẽ ñượ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
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
Dư
Tổng
Tổng kiểm tra
3: Transport Layer
3a-13
Nguyên lý Truyền tin cậy
Có thể áp dụng trong Tầng Giao vận và Liên kết dữ liệu
Một trong 10 vấn ñề quan trọng nhất của Mạng!
Các ñặc ñiểm của ñường truyền không tin cậy phía dưới sẽ quyết ñịnh
ñộ phức tạp của giao thức Truyền tin cậy (rdt)
3: Transport Layer
3a-14
Truyền tin cậy: Bắt ñầu như thế nào ?
PHÍA
GỬI
PHÍA
NHẬN
rdt_send(): Tầng trên gọi, (ví dụ Ứng
dụng.). Yêu cầu chuyển dữ liệu tin cậy
cho ñối tác bên kia
udt_send(): rdt gọi ñể chuyển
packet cho phía nhận qua ñường
truyền không tin cậy
rdt_rcv(): ñược gọi khi packet ñến phía
nhận
deliver_data(): Rdt gọi ñể chuyển
dữ liệu lên trên
3: Transport Layer
3a-15
Truyền tin cậy: Khởi ñầu
Chúng ta sẽ :
Phát triển dần dần cả phía Gửi và phía Nhận trong
Giao thức Truyền tin cậy (rdt)
Xét dữ liệu chỉ truyền trên một hướng
Nhưng thông tin ñiều khiển có thể truyền theo cả hai hướng!
Sử dụng máy Hữu hạn trạng thái (FSM) ñể miêu tả
phía Gửi và phía Nhận
state
1
state
2
Sự kiện gây chuyển trạng thái
Các hành ñộng sẽ thực hiện trước khi chuyển
Trạng thái: Chỉ thay ñổi
sang trạng thái khác khi
có sự kiện mang tính
duy nhất xảy ra
Sự kiện
Hành ñộng
3: Transport Layer
3a-16
Rdt1.0: Truyền tin cậy qua kênh truyền tin cậy
ðặc ñiểm của kênh truyền tin cậy
Bit trong gói tin không bị lỗi
Gói tin không bị mất
FSM cho bên Gửi và bên Nhận ñộc lập nhau:
Phía Gửi truyền gói tin qua kênh truyền phía dưới
Phía Nhận ñọc gói tin từ kênh truyền bên dưới
3: Transport Layer
3a-17
Rdt2.0: Kênh truyền có lỗi bit
Kênh truyền bên dưới có thể khiến bit trong gói tin lỗi
Ghi nhớ: checksum có thể ñược sử dụng ñể phát hiện lỗi
Vấn ñề: Khắc phục lỗi như thế nào ?
Biên nhận tích cực (ACK): Bên nhận thông báo tường minh cho
bên gửi mình nhận ñúng và chính xác gói tin.
Biên nhận tiêu cực (NAK): Bên nhận thông báo tường minh cho
bên gửi gói tin mình nhận có lỗi.
Phía gửi gửi lại gói tin khi nhận ñược NAK
Ví dụ nào trong cuộc sống sử dụng ACK, NAK?
Bổ sung thêm cơ chế mới trong rdt2.0 :
Phát hiện lỗi
Phản hồi tường minh: thông ñiệp phản hồi (ACK,NAK) Nhận
→
→→
→
Gửi
3: Transport Layer
3a-18
rdt2.0: ðặc tả FSM
FSM Gửi FSM Nhận
3: Transport Layer
3a-19
rdt2.0: Ví dụ không lỗi
FSM Gửi FSM Nhận
3: Transport Layer
3a-20
rdt2.0: Ví dụ có lỗi
FSM Gửi FSM Nhận
3: Transport Layer
3a-21
Tổng quan về rdt2.0
Gửi
d
a
t
a
(
n
)
Nhận
d
a
t
a
(
n
)
A
C
K
d
a
t
a
(
n
+
1
)
N
A
C
K
ðợi biên
nhận
ðợi dữ
liệu
3: Transport Layer
3a-22
rdt2.0 chưa hoàn chỉnh !
Chuyện gì xảy ra nếu ACK/NAK bị lỗi?
Mặc dù bên Gửi nhận ñược phản hồi, nhưng không biết
chuyện gì xảy ra ở phía Nhận !
Gửi
d
a
t
a
(
n
)
ðợi
Biên
nhận
?
3: Transport Layer
3a-23
Có hai trường hợp
sender
d
a
t
a
(
n
)
receiver
d
a
t
a
(
n
)
ðợi
dữ
liệu
N
A
C
K
sender
receiver
A
C
K
d
a
t
a
(
n
+
1
)
d
a
t
a
(
n
)
Chuyển
Chuyển
ðợi
Biên
nhận
ðợi
Biên
nhận
3: Transport Layer
3a-24
rdt2.0 Có lỗi nghiêm trọng !
Như vậy nếu gói tin
ACK/NAK bị lỗi
Phía Gửi không biết gì về trạng
thái phía Nhận !
Nếu truyền lại: Dữ liệu có thể
bị trùng lặp
Phải làm sao ?
Phía gửi lại biên nhận cho
phản hồi từ phía nhận? Nếu
chính gói phản hồi bị mất thì
sao ?
Truyền lại ? Có thể truyền lại
gói tin ñã ñược nhận ñúng !
Xử lý trùng lặp ?
Phía gửi ñánh Số thứ tự cho
mỗi gói tin gửi ñi.
Nếu gói tin phản hồi bị lỗi: phía
Gửi truyền lại gói tin.
Phía Nhận loại bỏ các gói tin
trùng lặp (không chuyển lên
trên)
Phía Gửi gửi một gói tin,
Dng lại và và Ch phía
nhận phản hồi.
Dừng và Chờ
3: Transport Layer
3a-25
rdt2.1: Khắc phục Phản hồi bị lỗi (bên Gửi)