Tầng Vận chuyển
application
transport
network
data link
physical
network
data link
physical
Application
Presentation
network
data link
physical
Session
network
data link
physical
Transport
network
data link
physical
network
data link
physical
Network
Data link
Physical
application
application
transport
transport
network
network
data
data link
link
physical
physical
2
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Cung cấp kênh truyền dữ liệu ở mức logic
giữa 2 tiến trình trên 2 máy
03/2011
CHỨC NĂNG - 1
03/2011
NỘI DUNG
Giới thiệu
Nguyên tắc truyền dữ liệu đáng tin cậy
Giao thức TCP
Giao thức UDP
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
3
03/2011
NHẮC LẠI
source
packet
frame
H n Ht
Hl Hn Ht
M
M
M
M
application
transport
network
link
physical
link
physical
switch
destination
M
Ht
M
Hn Ht
M
application
transport
network
link
physical
Hn Ht
Hl Hn Ht
M
M
network
link
physical
Hn Ht
M
4
router
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
message
segment
Ht
-1
03/2011
TẦNG VẬN CHUYỂN
M
P1
Gởi đến Process?
Ht
D
M
DHt D
H n segment
M
application
transport
network
M
application
transport
network
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
P2
P3
Process nhận?
Ht
D
Ht
H n segment
D
M
P4
application
transport
network
5
-2
03/2011
TẦNG VẬN CHUYỂN
Thực thi ở end-system
Bên gởi: thực hiện Dồn kênh
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Nhận dữ liệu từ tầng ứng dụng (từ các socket)
Phân đoạn thông điệp ở tầng ứng dụng thành các
segment
Dán nhãn dữ liệu: đóng gói theo giao thức tại tầng
Transport
Chuyển các segment xuống tầng mạng (network layer)
Bên nhận: thực hiện Phân kênh
Nhận các segment từ tầng mạng
Phân rã các segment thành thông điệp tầng ứng dụng
Chuyển thông điệp lên tầng ứng dụng (đến socket tương
ứng)
6
-3
03/2011
TẦNG VẬN CHUYỂN
Hỗ trợ
Truyền dữ liệu đáng tin cậy
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Điều khiển luồng
Điều khiển tắt nghẽn
Thiết lập và duy trì kết nối
Truyền dữ liệu không đáng tin cậy
Nổ lực gởi dữ liệu hiệu quả nhất
Không hỗ trợ
Đảm bảo thời gian trễ
Đảm bảo băng thông
7
Dồn
03/2011
DỒN KÊNH – PHÂN KÊNH - 1
kênh (Multiplexing):
Thực hiện tại bên gởi
Thu thập dữ liệu từ các socket
dán nhãn dữ liệu với 1 header
Phân
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
kênh (Demultiplexing):
Thực hiện tại bên nhận
phân phối các segment nhận được cho socket tương ứng
đóng gói dữ liệu ở tầng transport, header sẽ
thêm vào:
Khi
Source port
Destination port
8
03/2011
DỒN KÊNH – PHÂN KÊNH - 2
32 bits
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
source port #
dest port #
other header fields
application
data
(message)
Cấu trúc của một segment
9
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
P2
03/2011
DỒN KÊNH – PHÂN KÊNH - 3
P1
P1
6428
5775
SP: 6428
DP: 5775
server
IP: B
SP: 5775
DP: 6428
Client
IP:A
10
03/2011
NỘI DUNG
Giới thiệu
Nguyên tắc truyền dữ liệu đáng tin cậy
Giao thức TCP
Giao thức UDP
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
11
03/2011
BÀI TOÁN
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Làm sao để truyền
đáng tin cậy???
12
application
transport
Bên nhận
Đường truyền tin cậy
Nghi thức
truyền tin cậy
Nghi thức
truyền tin cậy
Đường truyền không tin cậy
a. Cung cấp dvụ
b. Triển khai dvụ
Đặc tính của đường truyền khơng tin cậy quyết định độ
phức tạp của nghi thức truyền tin cậy
13
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Bên gửi
03/2011
NGUYÊN LÝ TRUYỀN DỮ LIỆU ĐÁNG TIN CẬY
03/2011
NỘI DUNG
Nghi thức truyền dữ liệu đáng tin cậy
RDT 1.0
RDT 2.0, RDT 2.1, RDT 2.2
RDT 3.0
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Pipeline
Go-back-N
Gởi lại có chọn
14
03/2011
GIẢI QUYẾT LỖI BIT
Bên gởi
Gởi kèm theo thông tin kiểm tra lỗi
Sử dụng các phương pháp kiểm tra lỗi
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Checksum, parity checkbit, CRC,..
Bên nhận
Kiểm tra có xảy ra lỗi bit?
Hành động khi xảy ra lỗi bit?
Báo về bên gởi
15
Bên nhận
Gởi tín hiệu báo
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
03/2011
GIẢI QUYẾT MẤT GĨI
Gởi gói tin báo hiệu ACK, NAK
Bên gởi
Định nghĩa trường hợp mất gói
Chờ nhận tín hiệu báo
Hành động khi phát hiện mất gói
16
RDT = Reliable Data Transfer
Nguyên tắc: dừng và chờ
Bên gởi
Gởi gói tin kèm theo thơng tin kiểm tra lỗi
Dừng và chờ đến khi nào gói tin vừa gởi đến được bên nhận an
tồn: nhận được gói tin ACK
Gởi lại khi có lỗi xảy ra: lỗi bit, mất gói
Bên nhận:
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
03/2011
GIAO THỨC RDT
Kiểm tra lỗi, trùng lắp dữ liệu
Gởi gói tin phản hồi
Phiên bản:
RDT 1.0
RDT 2.0
RDT 2.1
RDT 2.2
RDT 3.0
17
Cho phép gởi nhiều gói tin khi chưa nhận ACK
Sử dụng buffer để lưu các gói tin
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
03/2011
NGUYÊN LÝ PIPE LINE
Bên gởi: lưu gói tin đã gởi nhưng chưa ack
Bên nhận: lưu gói tin đã nhận đúng nhưng chưa đúng thứ
tự
Giải quyết mất gói
Go back N
Selective Repeat (gởi lại có chọn)
18
Giả thiết: kênh truyền bên dưới tuyệt đối
Không lỗi bit
Không mất gói tin
FSM (finite state machine) cho bên gửi và nhận
Bên gửi chuyển dữ liệu xuống kênh bên dưới
Bên nhận đọc dữ liệu từ kênh truyền bên dưới
Wait for
call from
above
rdt_send(data)
packet =
make_pkt(data)
udt_send(packet)
sender
Wait for
call from
below
rdt_rcv(packet)
extract (packet,data)
deliver_data(data)
receiver
19
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
03/2011
RDT1.0 : ĐƯỜNG TRUYỀN LÝ TƯỞNG
Giả
thiết: kênh truyền có thể xảy ra lỗi bit
Sử dụng các cơ chế kiểm tra lỗi
checksum
Làm
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
03/2011
RDT2.0 KÊNH TRUYỀN CÓ LỖI BIT - 1
sao để khắc phục khi nhận ra lỗi?
Acknowledgement(ACKs): bên nhận báo cho bên
gửi đã nhận được dữ liệu
Nagetive acknowledgement(NAKs): bên nhận báo
gói tin bị lỗi
Bên gửi sẽ gửi lại gói tin khi nhận NAK
So
với rdt1.0, rdt2.0:
Nhận dạng lỗi
Cơ chế phản hồi: ACK, NAK
20
call from
above
ACK or
NAK
udt_send(sndpkt)
rdt_rcv(rcvpkt) && isACK(rcvpkt)
L
sender
ACK/NAK sai???
receiver
rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
udt_send(NAK)
Wait for
call from
below
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
21
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
rdt_send(data)
snkpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for
Wait for
03/2011
RDT2.0 FSM - 2
03/2011
RDT2.0 - 3
Giải quyết:
Bên gửi gửi lại gói tin khi nhận ACK/NAK sai
Bên gửi đánh số thứ tự cho mỗi gói tin
Bên nhận sẽ loại bỏ gói tin trùng.
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Dừng và đợi
Bên gửi gửi một gói tin và chờ phản hồi từ bên nhận
22
03/2011
RDT2.1 BÊN GỬI XỬ LÍ LỖI ACK/NAK
Wait for
call 0 from
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
Wait for
ACK or
NAK 1
Wait for
ACK or
NAK 0
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
Wait for
call 1 from
above
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt)
23
03/2011
RDT2.1 BÊN NHẬN XỬ LÍ LỖI ACK/NAK
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, 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)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) &&
has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
24
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
0 và 1???
Phải kiểm tra: ACK/NAK sai
khơng
Phải nhớ gói tin hiện thời có
thứ tự 0 hay 1
Bên nhận
• Phải kiểm tra nếu
nhận trùng
– So sánh trạng thái
đang chờ (0 hay 1) với
trạng thái gói tin nhận
được
• Bên nhận khơng biết
ACK/NAK cuối cùng
có chuyển tới bên gửi
an tồn khơng?
25
BM MMT&VT - KHOA CNTT - ĐH KHTN TP.HCM
Bên gửi
Thêm số thứ tự vào gói tin
03/2011
RDT2.1 THẢO LUẬN