Bài giảng Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn

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 VAI TRÒ LỚP TRUYỀN TẢI Truyền và nhận các tín hiệu mang thông tin bit trên đường truyền vật lý 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 Transport (UDP, TCP...) Application Hô trợ cac ứng dung truyên thông (HTTP, SMTP, FTP...)

pdf54 trang | Chia sẻ: candy98 | Lượt xem: 561 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Mạng máy tính - Chương 3: Lớp truyền tải - Nguyễn Hồng Sơn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3-Lớp truyền tải 3-1 Chapter 3 LỚP TRUYỀN TẢI Nguyễn Hồng Sơn Chương 3-Lớp truyền tải 3-2 TỔNG QUAN r Các nguyên lý của dịch vụ lớp truyền tải: m Ghép/tách kênh (multiplexing/demulti plexing) m Truyền số liệu tin cậy m Điều khiển luồng (flow control) m Kiểm soát nghẽn (congestion control) r Giao thức truyền tải UDP Chương 3-Lớp truyền tải 3-3 NỘI DUNG r Các dịch vụ lớp truyền tải r Ghép/tách kênh (Multiplexing và demultiplexing) r Giao thức truyền tải không kết nối UDP r Các nguyên lý truyền số liệu tin cậy Chương 3-Lớp truyền tải 3-4 VAI TRO  LỚP TRUYÊN TA I Truyên va  nhân ca c 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...) Ti m đường va  chuyên tiê p go i tin giữa ca c nu t ma ng Network (IP, ICMP...) Cung câ p cơ chê truyên ta i data giữa ca c ứng du ng ma  không phu thuôc ma ng Transport (UDP, TCP...) Hô  trợ ca c ứng du ng truyên thôngApplication (HTTP, SMTP, FTP...) Chương 3-Lớp truyền tải 3-5 Giao thức và dịch vụ truyền tải r 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 r Các giao thức truyền tải chạy trên các đầu cuối m Bên truyền: chia data thành các phân đoạn (segment) và chuyển xuống lớp mạng. m Bên nhận: tái lập các segment thành data và chuyển cho lớp ứng dụng r Có nhiều giao thức truyền tải m Internet: TCP và UDP application transport network data link physical application transport network data link physical Truyền tải từ đầu cuối đến đầu cuối Chương 3-Lớp truyền tải 3-6 Các giao thức lớp truyền tải trên Internet r Chuyển phát theo thứ tự, tin cậy (TCP) m Kiểm soát nghẽn m Điều khiển luồng m Thiết lập kết nối r Chuyển phát không theo thứ tự, không tin cậy (UDP) r Các dịch vụ không được hỗ trợ: m Kiểm soát trễ m Đảm bảo băng thông 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 network data link physical application transport network data link physical Truyền tải từ đầu cuối đến đầu cuối Chương 3-Lớp truyền tải 3-7 Ly  do co  hai chê  đô truyê n ta i r Ca c ứng du ng la  đa da ng: co  loai câ n đô  chinh xa c cao, co loa i câ n nhanh (thời gian thực) r TCP: cho ca c ứng du ng nhay ca m với lô i (data services) vi  du  email, truyê n file r UDP: cho cac ứng du ng châ p nhâ n lô i nhưng nhay ca m với trê  như VoIP, Video streaming Chương 3-Lớp truyền tải 3-8 NỘI DUNG r Các dịch vụ lớp truyền tải r Ghép/tách kênh (Multiplexing và demultiplexing) r Giao thức truyền tải không kết nối UDP r Các nguyên lý truyền số liệu tin cậy Chương 3-Lớp truyền tải 3-9 Ghép/tách kênh application transport network link physical P1 application transport network link physical application transport network link physical P2P3 P4P1 host 1 host 2 host 3 = process= socket Chuyển các data nhận được đến đúng socket 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: Chương 3-Lớp truyền tải 3-10 Cách tách kênh r host nhận gói IP m Mỗi gói có một địa chỉ IP nguồn và địa chỉ IP đích m Mỗi gói IP chứa một segment lớp truyền tải m Mỗi segment có chỉ số port nguồn và đích r host dùng địa chỉ IP và chỉ số port để chuyển segment đến đúng socket source port # dest port # 32 bits Data của ứng dụng Các field khác Định dạng của TCP/UDP segment Chương 3-Lớp truyền tải 3-11 Tách kênh không kết nối r Tạo socket với các chỉ số port : DatagramSocket mySocket1 = new DatagramSocket(12534); DatagramSocket mySocket2 = new DatagramSocket(12535); r Một UDP socket được nhận dạng bởi hai thành tố: (địa chỉ IP đích, địa chỉ port đích) r Khi host nhận UDP segment: m Kiểm tra chỉ số port đích m Chuyển UDP segment đến socket ứng với port này Chương 3-Lớp truyền tải 3-12 Tách kênh không kết nối DatagramSocket serverSocket = new DatagramSocket(6428); Client IP:B P2 client IP: A P1P1P3 server IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 SP: 6428 DP: 5775 SP: 5775 DP: 6428 Chương 3-Lớp truyền tải 3-13 Tách kênh hướng kết nối r Một TCP socket được nhận dạng bởi bốn yếu tố: m source IP address m source port number m dest IP address m dest port number r Host nhận gói dùng tất cả bốn yếu tố để chuyển segment đến đúng socket r Server có thể có đồng thời nhiều TCP socket: m Mỗi socket được nhận dạng bởi một bộ gồm bốn yếu tố r Web server có các socket khác nhau cho mỗi kết nối với client m HTTP không liên tục sẽ có các socket khác nhau cho mỗi request Chương 3-Lớp truyền tải 3-14 Tách kênh hướng kết nối (2) Client IP:B P1 client IP: A P1P2P4 server IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P5 P6 P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B Chương 3-Lớp truyền tải 3-15 Tách kênh hướng kết nối Threaded Web Server Client IP:B P1 client IP: A P1P2 server IP: C SP: 9157 DP: 80 SP: 9157 DP: 80 P4 P3 D-IP:C S-IP: A D-IP:C S-IP: B SP: 5775 DP: 80 D-IP:C S-IP: B Chương 3-Lớp truyền tải 3-16 NỘI DUNG r Các dịch vụ lớp truyền tải r Ghép/tách kênh (Multiplexing và demultiplexing) r Giao thức truyền tải không kết nối UDP r Các nguyên lý truyền số liệu tin cậy Chương 3-Lớp truyền tải 3-17 UDP (User Datagram Protocol) r Là giao thức truyền tải Internet chỉ chứa tính năng thiết yếu. r Được đặc tả trong RFC 768 r Thuộc dịch vụ “best effort” , các UDP segment có thể: m Bị mất m Chuyển phát không đúng thứ tự r Không kết nối (connectionless): m Không có "bắt tay" giữa UDP truyền và UDP nhận m Mỗi UDP segment được kiểm soát một cách độc lập với các segment khác Lý do đưa ra UDP? r Giảm trễ: không thiết lập kết nối r Đơn giản: không có trạng thái kết nối tại các host r Kích thước header nhỏ r Không phải kiểm soát nghẽn Chương 3-Lớp truyền tải 3-18 UDP r Thường được dùng cho các ứng dụng streaming multimedia m Chịu thất thoát m rate sensitive r Các ứng dụng khác dùng UDP có m DNS m SNMP r 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 dụng m Sửa lỗi ứng dụng đặc biệt source port # dest port # 32 bits Data Định dạng UDP segment length checksum Chiều dài của UDP segment, gồm header Chương 3-Lớp truyền tải 3-19 UDP checksum Host truyền: r Nội dung segment là tuần tự các số nguyên 16 bit r checksum: cộng tất cả các số trong phần nội dung và cộng 1 (bù 1) vào kết quả r Đặt giá trị tổng (checksum) vào trường checksum của UDP Host nhận: r Tính checksum cho segment nhận được r Kiểm tra xem tổng tính được có bằng với tổng nhận được hay không: m Không --> có lỗi m Bằng --> không có lỗi Mục đích: phát hiện lỗi Chương 3-Lớp truyền tải 3-20 Ví dụ tính Checksum r Lưu ý m Khi cộng, số nhớ từ bit có ý nghĩa lớn nhất được cộng vào kết quả r 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 sum checksum Chương 3-Lớp truyền tải 3-21 NỘI DUNG r Các dịch vụ lớp truyền tải r Ghép/tách kênh (Multiplexing và demultiplexing) r Giao thức truyền tải không kết nối UDP r Các nguyên lý truyền số liệu tin cậy Chương 3-Lớp truyền tải 3-22 Các nguyên lý truyền số liệu tin cậy r Quan trọng trong các lớp ứng dụng, truyền tải và liên kết số liệu r Một trong 10 chủ đề liên mạng quan trọng nhất Dịch vụ truyền/nhận data Xây dựng dịch vụ Chương 3-Lớp truyền tải 3-23 Truyền số liệu tin cậy (2) Host truyền Host nhận rdt_send(): được gọi từ lớp trên. Số liệu được chuyển qua để chuyển đến máy thu udt_send(): được gọi bởi rdt, để truyền gói qua kênh không tin cậy đến máy thu rdt_rcv(): được gọi khi gói đến deliver_data(): được gọi bởi rdt để chuyển data lên lớp trên rdt: reliable data transfer protocol udt: unreliable data transfer protocol Chương 3-Lớp truyền tải 3-24 Truyền số liệu tin cậy (3) r Tìm hiểu phía truyền và nhận của rdt r Chỉ xem xét truyền một hướng m Thông tin điều khiển sẽ theo hai hướng r Dùng sơ đồ trạng thái (finite state machine) để đặc tả máy truyền và nhận state 1 state 2 Sự kiện gây ra chuyển trạng thái Các hành động Trạng thái: khi đang ở trạng thái này, trạng thái kế tiếp được xác định bởi sự kiện kế tiếp Sự kiện Hành động Chương 3-Lớp truyền tải 3-25 Rdt1.0: truyền tin cậy qua một kênh tin cậy r Kênh truyền bên dưới hoàn toàn tin cậy m Không có lỗi m Không mất gói r Sơ đồ trạng thái tách biệt cho truyền và nhận: m Máy truyền gửi data xuống kênh m 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) Máy truyền Máy thu Chương 3-Lớp truyền tải 3-26 Rdt2.0: kênh có lỗi r Kênh bên dưới có xảy ra lỗi truyền bit m Dùng checksum để phát hiện lỗi bit r Cách thức sửa lỗi : m acknowledgements (ACKs): máy thu thông báo cho máy truyền rằng đã nhận tốt m negative acknowledgements (NAKs): máy thu thông báo gói đã bị lỗi m Máy truyền gửi lại gói khi nhận NAK r Các cơ chế mới trong rdt2.0 : m Phát hiện lỗi m Phản hồi của máy thu, dùng ACK, NAK Chương 3-Lớp truyền tải 3-27 rdt2.0: đặc tả sơ đồ trạng thái Đợi gọi từ trên snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Đợi ACK hay NAK Đợi gọi từ dưới Máy truyền Máy thu rdt_send(data) Λ Chương 3-Lớp truyền tải 3-28 rdt2.0: hoạt động không lỗi Đợi gọi từ trên snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Đợi ACK hay NAK Đợi gọi từ dưới rdt_send(data) Λ Chương 3-Lớp truyền tải 3-29 rdt2.0: Hoạt động có lỗi Đợi gọi từ trên snkpkt = make_pkt(data, checksum) udt_send(sndpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) Đợi ACK hay NAK Đợi gọi từ dưới rdt_send(data) Λ Chương 3-Lớp truyền tải 3-30 rdt2.0: tình huống đặc biệt Điều gì xảy ra nếu ACK/NAK bị mất? r Máy truyền không biết điều gì xảy ra tại máy thu! r Truyền lại có thể trùng Xử lý trùng: r Máy truyền gửi lại gói nếu chờ ACK/NAK quá lâu r Máy truyền thêm số tuần tự vào mỗi gói r Máy thu loại bỏ gói trùng, không chuyển lên trên Máy truyền gửi gói và vào trạng thái đợi báo nhận ACK Idle RQ (stop and wait) Chương 3-Lớp truyền tải 3-31 rdt2.1: máy truyền, kiểm soát mất ACK/NAK Đợi gọi 0 từ trên sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) Đợi ACK hay NAK 0 udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) Đợi gọi 1 từ trên Đợi ACK hay NAK 1 ΛΛ Chương 3-Lớp truyền tải 3-32 rdt2.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) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, 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) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Chương 3-Lớp truyền tải 3-33 rdt2.1: Nhận xét Máy truyền: r seq # được thêm vào gói r Hai số tuần tự là đủ r Phải kiểm tra để phòng ACK/NAK mất r Hai trạng thái m Phải nhớ gói hiện hành có số tuần tự là 0 hay 1 Máy thu: r Phải kiểm tra xem gói nhận có bị trùng không m Trạng thái chỉ ra số tuần tự mong đợi r Máy thu không thể biết tình trạng ACK/NAK tại máy truyền Chương 3-Lớp truyền tải 3-34 rdt2.2: NAK-free protocol r Giống như rdt2.1, chỉ dùng ACK r Thay vì NAK, máy thu gửi ACK cho gói sau cùng nhận tốt m Máy thu sẽ chỉ rõ số tuần tự gói nhận tốt trong ACK phản hồi r 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 Chương 3-Lớp truyền tải 3-35 rdt2.2: sơ đồ trạng thái Đợi gọi 0 từ trên sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) Đợi ACK 0 Máy truyền Đợi 0 từ dưới rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt) Máy thu Λ Chương 3-Lớp truyền tải 3-36 rdt3.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) m 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ý r Truyền lại nếu không thấy ACK trong thời gian đợi r Nếu gói hay ACK bị trễ: m Truyền lại sẽ bị trùng, nhưng có số tuần tự để kiểm soát m Máy thu phải chỉ ra số tuần tự của gói đang báo nhận ACK r Yêu cầu bộ định thời đếm lui Chương 3-Lớp truyền tải 3-37 rdt3.0 máy truyền sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) Đợi ACK 0 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) Đợi gọi 1 từ trên sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer rdt_send(data) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) stop_timer stop_timer udt_send(sndpkt) start_timer timeout udt_send(sndpkt) start_timer timeout rdt_rcv(rcvpkt) Đợi gọi 0 từ trên Đợi ACK1 Λ rdt_rcv(rcvpkt) Λ Λ Λ Chương 3-Lớp truyền tải 3-38 rdt3.0 Hoạt động Không mất Mất gói Chương 3-Lớp truyền tải 3-39 rdt3.0 hoạt động (2) Mất ACK Time out sớm Chương 3-Lớp truyền tải 3-40 Hiệu năng của rdt3.0 r Ví dụ: 1 Gbps, Tp=15 ms , Kích thước gói =8000 bit : m 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 = m 1KB pkt mỗi 30 msec -> thông lượng 33kB/sec qua liên kết 1Gbps m Giao thức mạng đã giới hạn sử dụng tài nguyên vật lý! dsmicrosecon8 bps10 bits8000 9 === R Ldtrans Chương 3-Lớp truyền tải 3-41 rdt3.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 sender receiver RTT Truyền bit sau cùng của gói, t = L / R Bit đầu đến Bit sau cùng đến, gửi ACK ACK đến, gửi gói kế, t = RTT + L / R U sender = .008 30.008 = 0.00027 microsec L / R RTT + L / R = Chương 3-Lớp truyền tải 3-42 Cá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 m Tăng chỉ số tuần tự m Đệm tại máy truyền và máy nhận r ARQ liên tục: Selective repeat và Go-back-N Automatic Repeat reQuest Chương 3-Lớp truyền tải 3-43 Kỹ thuật Pipelining Truyền bit đầu của gói, t = 0 sender receiver RTT Truyền bit sau cùng của gói, t = L / R Nhận bit đầu của gói Bit sau cùng của gói đến, gửi ACK ACK đến, gửi gói kế tiếp, t = RTT + L / R Bit sau cùng của gói thứ hai đến, gửi ACK Bit sau cùng của gói thứ ba đến, gửi ACK U sender = .024 30.008 = 0.0008 microsecon 3 * L / R RTT + L / R = tăng utilization lên ba lần Nhằm gia tăng hiệu quả sử dụng đường truyền (utilization) Chương 3-Lớp truyền tải 3-44 Các giao thức theo ARQ liên tục Go-back-N r Máy truyền có thể có đến N gói chưa được báo nhận đã gửi qua trong ống r Máy thu chỉ gửi ACK cho gói mà từ nó về trước đều nhận tốt r Máy truyền có bộ định thời cho các gói chưa được báo nhận m Nếu định thời hết hạn, truyền lại tất cả các gói đang chờ Selective Repeat r Máy truyền có thể có đến N gói chưa được báo nhận đã gửi qua trong ống r Máy thu gửi ACK cho từng gói nhận tốt r Máy truyền có bộ định thời cho từng gói chưa được báo nhận m Nếu định thời hết hạn, chỉ truyền lại gói tương ứng Chương 3-Lớp truyền tải 3-45 Go-Back-N Máy truyền: r Số tuần tự k-bit (seq #) trong header của gói r “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 r ACK(n): báo nhận cho tất cả các gói đến n m Có thể nhận trùng ACK r Bộ định thời cho các gói đang đợi r timeout(n): truyền lại tất cả các gói từ n trở đ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ếpGói chờ báo nhận Cửa sồ truyền Chương 3-Lớp truyền tải 3-46 Sơ đồ 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) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base=1 nextseqnum=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) Λ Chương 3-Lớp truyền tải 3-47 Đợi udt_send(sndpkt) default rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum) Λ 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 Chương 3-Lớp truyền tải 3-48 Hoạt động của Go-Back-N Chương 3-Lớp truyền tải 3-49 Selective Repeat r Máy thu báo nhận cho từng gói mà nó nhận tốt m Đệm gói khi cần (chờ đúng thứ tự để giao cho giao thức cao hơn) r Máy truyền chỉ gửi lại gói không nhận được ACK m Bộ định thời cho mỗi gói truyền chưa có báo nhận r Cửa sổ truyền m 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 m Giới hạn số gói được truyền liên tục Chương 3-Lớp truyền tải 3-50 Selective 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 (a) Tuần tự nhậ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 Chờ gói có tuần tự này Chương 3-Lớp truyền tải 3-51 Selective repeat data từ trên : r Nếu tuần tự kế sẵn sàng, truyền gói (cửa sổ còn chỗ) timeout(n): r Tr