Chương 6 Tầng vận chuyển MẠNG MÁY TÍNH Chức năng - 1 Cung cấp kênh truyền dữ liệu ở mức logic giữa 2 tiến trình trên 2 Application máy application transport network network Presentation data link network data link physical data link physical physical Session network data link physical Transport network data link physical Network network data link Data link physical Physical application application transport transport network network data data link link physical Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh physical 2 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 3 Nhắc lại source message M application segment Ht M transport packet Hn Ht M network frame Hl Hn Ht M link physical link physical switch destination Hn Ht M network M application Hl Hn Ht M link Hn Ht M Ht M transport physical Hn Ht M network link router Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 4 physical tầng vận chuyển - 1 P2 P3 M M application Process nhận? P1 transport Ht D Ht D P4 M Gởi đến Process? M network H n segment M application application Ht D DHt D transport transport network H n segment network Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 5 tầng vận chuyển - 2 Thực thi ở end-system Bên gởi: thực hiện Dồn kênh 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) Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 6 tầng vận chuyển - 3 Hỗ trợ Truyền dữ liệu đáng tin cậy • Đ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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 7 Dồn kênh – Phân kênh - 1 Dồn 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 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 Khi đóng gói dữ liệu ở tầng transport, header sẽ thêm vào: Source port Destination port Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 8 Dồn kênh – Phân kênh - 2 32 bits source port # dest port # other header fields application data (message) Cấu trúc của một segment Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 9 Dồn kênh – Phân kênh - 3 P2 P1 P1 6428 5775 SP: 6428 DP: 5775 SP: 5775 server Client DP: 6428 IP: B IP:A Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 10 Nội dung Giới thiệu Giao thức UDP Nguyên tắc truyền dữ liệu đáng tin cậy Giao thức TCP Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 11 UDP - 1 UDP: User Datagram Protocol [rfc768] Dịch vụ “nỗ lực” để truyền nhanh Gói tin UDP có thể: • Mất • Không đúng thứ tự Không kết nối: • Không có handshaking giữa bên gửi và nhận • Mỗi gói tin UDP được xử lý độc lập • Không có trạng thái kết nối Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 12 UDP - 2 32 bits Chiều dài gói tin source port # dest port # (tính cả header) length checksum Application data (message) UDP segment format Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 13 UDP - 3 Application M Transport U1 U2 U3 …. U Các segment đến không đúng thứ tự??? Application Transport …. Mất segment? Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 14 UDP - 4 Tại sao lại sử dụng UDP? Không thiết lập kết nối Đơn giản: • không quản lý trạng thái nối kết • Không kiểm soát luồng Header nhỏ Nhanh Truyền thông tin cậy qua UDP Tầng application phát hiện và phục hồi lỗi Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 15 UDP - 5 Thường sử dụng cho các ứng dụng multimedia Chịu lỗi Yêu cầu tốc độ Một số ứng dụng sử dụng UDP DNS SNMP TFTP … Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 16 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 17 Bài toán Làm sao để truyền đáng tin cậy??? Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 18 Nguyên lý truyền dữ liệu đáng tin cậy application Bên gửi Bên nhận transport Đường truyền tin cậy Nghi thức Nghi thức truyền tin cậy 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 19 Nội dung Nghi thức truyền dữ liệu đáng tin cậy RDT 1.0 Pipeline Go-back-N Gởi lại có chọn Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 20 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 • 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 21 Giải quyết mất gói Bên nhận Gởi tín hiệu báo • 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 22 Giao thức RDT 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 toà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: • 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 23 Nguyên lý pipe line 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 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) Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 24 Rdt1.0 : đường truyền lý tưởng 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 rdt_send(data) Wait for rdt_rcv(packet) call from call from extract (packet,data) packet = below above deliver_data(data) make_pkt(data) udt_send(packet) sender receiver Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 25 Rdt2.0 kênh truyền có lỗi bit - 1 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 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: Nhận dạng lỗi Cơ chế phản hồi: ACK, NAK Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 26 Rdt2.0 FSM - 2 rdt_send(data) snkpkt = make_pkt(data, checksum) receiver udt_send(sndpkt) rdt_rcv(rcvpkt) && Wait for Wait for isNAK(rcvpkt) rdt_rcv(rcvpkt) && call from ACK or udt_send(sndpkt) corrupt(rcvpkt) above NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for L call from sender below ACK/NAK sai??? rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 27 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. 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 Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 28 Rdt2.1 bên gửi xử lí lỗi ACK/NAK rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && Wait for ( corrupt(rcvpkt) || Wait for call 0 from ACK or isNAK(rcvpkt) ) above NAK 0 udt_send(sndpkt) rdt_rcv(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) && isACK(rcvpkt) L L Wait for Wait for ACK or call 1 from rdt_rcv(rcvpkt) && NAK 1 above ( corrupt(rcvpkt) || rdt_send(data) isNAK(rcvpkt) ) udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 29 Rdt2.1 bên nhận xử lí lỗi 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) Wait for Wait for rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && below below 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) Khoa Công nghệ thông tin - Đại học Khoa học tự nhiên TP Hồ Chí Minh 30 Rdt2.1 thảo luận Bên gửi Bên nhận Thêm số thứ tự vào gói • Phải kiểm tra nếu tin nhận trùng 0 và 1???