❍ Bên nhận: tái lập các segment thành data vàchuyển cho lớp ứng dụng ❒ Có nhiều giao thức truyền tải application transport network data link physical application transport network data l
Trang 1Chapter 3
LỚP TRUYỀN TẢI
Nguyễn Hồng Sơn
Trang 2❍ Truyền số liệu tin cậy
❍ Điều khiển luồng (flow
Trang 3❒ 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
Trang 4VAI TRO LỚP TRUYÊN TAI
Truyên va nhân cac 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 )
Tim đường va chuyên tiêp goi tin giữa cac nut mang
Network (IP, ICMP )
Cung câp cơ chê truyên tai data giữa cac ứng dung ma không phu thuôc mang
Trang 5Giao thức và dịch vụ truyền tải
❒ 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
❒ Các giao thức truyền tải chạy
trên các đầu cuối
❍ Bên truyền: chia data
thành các phân đoạn (segment) và chuyển xuống lớp mạng
❍ Bên nhận: tái lập các
segment thành data vàchuyển cho lớp ứng dụng
❒ Có nhiều giao thức truyền tải
application
transport
network data link physical
application
transport
network data link physical
Tr uyề
n tải từ đầ
u cuố
i đến đầ
u cuối
Trang 6Các giao thức lớp truyền tải trên
❒ Chuyển phát không theo
thứ tự, không tin cậy
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
Tr uyề
n t
ải từ đầ
u cuố
i đ ến đầ
u cuối
Trang 7Ly 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
Trang 8NỘ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
Trang 9application transport network link
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:
Trang 10Cách tách kênh
❒ host nhận gói IP
❍ Mỗi gói có một địa chỉ IP
nguồn và địa chỉ IP đích
❍ Mỗi gói IP chứa một
segment lớp truyền tải
❍ Mỗi segment có chỉ số port
Trang 11Tách kênh không kết nối
❒ Tạo socket với các chỉ số
❒ Khi host nhận UDP segment:
❍ Kiểm tra chỉ số port đích
❍ Chuyển UDP segment đến socket ứng với port này
Trang 12Tách kênh không kết nối
DatagramSocket serverSocket = new DatagramSocket(6428);
serverIP: C
SP: 6428 DP: 9157
SP: 9157 DP: 6428
SP: 6428 DP: 5775
SP: 5775 DP: 6428
Trang 13Tách kênh hướng kết nối
❍ Mỗi socket được nhận dạng bởi một bộ gồm bốn yếu tố
❒ Web server có các socket khác nhau cho mỗi kết nối với client
❍ HTTP không liên tục sẽ cócác socket khác nhau cho mỗi request
Trang 14Tách kênh hướng kết nối (2)
P4
serverIP: C
SP: 9157 DP: 80
SP: 9157 DP: 80
D-IP:C
S-IP: A D-IP:C
S-IP: B
SP: 5775 DP: 80 D-IP:C S-IP: B
Trang 15Tách kênh hướng kết nối
Threaded Web Server
serverIP: C
SP: 9157 DP: 80
SP: 9157 DP: 80
D-IP:C
S-IP: A D-IP:C
S-IP: B
SP: 5775 DP: 80 D-IP:C S-IP: B
Trang 16NỘ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
Trang 17UDP (User Datagram Protocol)
❒ Là giao thức truyền tải
Internet chỉ chứa tính năng
❍ Không có "bắt tay" giữa
UDP truyền và UDP nhận
Trang 18❒ 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
source port # dest port #
Trang 19(checksum) vào trường
checksum của UDP
❍ Không > có lỗi
❍ Bằng > không có lỗi
Mục đích: phát hiện lỗi
Trang 20checksum
Trang 21NỘ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
Trang 22Cá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
Trang 23Truyền số liệu tin cậy (2)
Host
Số liệu được chuyển qua để chuyển đến
máy thu
để truyền gói qua kênh không tin
rdt để chuyển data lên lớp trên
Trang 24Truyề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) để
Trang 25Rdt1.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
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)
Trang 26Rdt2.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
❍ 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
Trang 27Đợ i ACK hay NAK
Đợ i gọi từ dưới
Máy truyền
Máy thu
rdt_send(data)
Λ
Trang 28rdt2.0: hoạt động không lỗi
Đợ i ACK hay NAK
Đợ i gọi
từ dưới rdt_send(data)
Λ
Trang 29Đợ i ACK hay NAK
Đợ i gọi
từ dưới rdt_send(data)
Λ
Trang 30rdt2.0: tình huống đặc biệt
Điều gì xảy ra nếu
ACK/NAK bị mất?
❒ Máy truyền không biết điều
gì xảy ra tại máy thu!
Trang 31rdt2.1: máy truyền, kiểm soát mất
Λ Λ
Trang 32rdt2.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)
Đợ 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)
Trang 34rdt2.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
Trang 36rdt3.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)
❍ 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ý
❒ Truyền lại nếu không thấy ACK trong thời gian đợi
❒ 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
Trang 37rdt3.0 máy truyền
sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt)
start_timer rdt_send(data)
Đợ i ACK 0
udt_send(sndpkt) start_timer
Λ
rdt_rcv(rcvpkt)
Λ Λ
Trang 38rdt3.0 Hoạt động
Không mất
Trang 39rdt3.0 hoạt động (2)
Trang 40Hiệu năng của rdt3.0
❒ Ví dụ: 1 Gbps, Tp=15 ms , Kích thước gói =8000 bit :
❍ 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 =
❍ 1KB pkt mỗi 30 msec -> thông lượng 33kB/sec qua liên kết
1Gbps
ds microsecon
8 bps
trans
Trang 41rdt3.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
ACK đến, gửi gói kế,
Trang 42Cá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
Automatic Repeat reQuest
Trang 43tăng utilization lên ba lần
Nhằm gia tăng hiệu quả sử dụng đường truyền (utilization)
Trang 44Các giao thức theo ARQ liên tục
Go-back-N
❒ Máy truyền có thể có
đến N gói chưa được
báo nhận đã gửi qua
❒ Máy thu gửi ACK cho từng gói nhận tốt
❒ Máy truyền có bộ định thời cho từng gói chưa được báo nhận
❍ Nếu định thời hết hạn, chỉ truyền lại gói tương
Trang 45Má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
❒ 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
Đã 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ếp
Gói chờ báo nhận
Cửa sồ truyền
Trang 46Sơ đồ 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)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base=1 nextseqnum=1
rdt_rcv(rcvpkt)
&& corrupt(rcvpkt)
Λ
Trang 47deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt)
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
Trang 48Hoạt động của
Go-Back-N
Trang 49Selective 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
Trang 50Selective 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
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
Trang 51Gói n chờ nhận đến
❒ Gửi ACK(n)Máy thu
Trang 52Hoạt động của Selective repeat
Trang 54HẾT CHƯƠNG 3