Bài giảng Mạng máy tính - Chương 3: Tầng Transport

pdf 110 trang ngocly 70
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Mạng máy tính - Chương 3: Tầng Transport", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_mang_may_tinh_chuong_3_tang_transport.pdf

Nội dung text: Bài giảng Mạng máy tính - Chương 3: Tầng Transport

  1. Chương 3 Tầng Transport A note on the use of these ppt slides: We’re making these slides freely available to all (faculty, students, readers). Computer They’re in PowerPoint form so you see the animations; and can add, modify, and delete slides (including this one) and slide content to suit your needs. Networking: A Top They obviously represent a lot of work on our part. In return for use, we only ask the following: Down Approach  If you use these slides (e.g., in a class) that you mention their source th (after all, we’d like people to use our book!) 6 edition  If you post any slides on a www site, that you note that they are adapted Jim Kurose, Keith Ross from (or perhaps identical to) our slides, and note our copyright of this Addison-Wesley material. March 2012 Thanks and enjoy! JFK/KWR All material copyright 1996-2012 J.F Kurose and K.W. Ross, All Rights Reserved Tầng Transport 3-1
  2. Chương 3: Tầng Transport Mục tiêu:  Hiểu về các nguyên lý  Tìm hiểu về các giao đằng sau các dịch vụ thức tầng transport tầng transport: trên Internet: . multiplexing/demultiplexi . UDP: vận chuyển phi kết ng nối . Truyền dữ liệu tin cậy . TCP: vận chuyển tin cậy . Điều khiển luồng (flow hướng kết nối control) (connection-oriented . Điều khiển tắc nghẽn reliable transport) (congestion control) . Điều khiển tắc nghẽn TCP Tầng Transport 3-2
  3. Chương 3: Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-3
  4. Các giao thức và dịch vụ tầng Transport application  ấ ề ữ transport Cung c p truy n thông logic gi a network các tiến trình ứng dụng đang chạy data link trên có host khác nhau physical  Các giao thức protocols chạy trên các hệ thống đầu cuối . Phía gửi: chia nhỏ các thông điệp (message) ứng dụng thành các segments, sau đó chuyển các segments này cho tầng network . Phía nhận: tái kết hợp các application segments thành các thông điệp transport network (message), các thông điệp này data link được chuyển lên tầng Application physical  Có nhiều hơn 1 giao thức tầng transport dành cho các ứng dụng . Internet: TCP và UDP Tầng Transport 3-4
  5. Tầng Transport với tầng network  Tầng network: Tình huống tương tự: truyền thông 12 đứa trẻ ở nhà Ann gửi logic giữa các những bức thư đến 12 host đứa trẻ ở nhà Bill:  hosts = nhà  Tầng transport :  Các tiến trình truyền thông (processes) = những đứa logic giữa các trẻ ế  Thông điệp tầng ứng ti n trình dụng = các bức thư . Dựa vào và tăng trong các phong bì cường các dịch vụ  Giao thức tầng tầng network transport = Ann and Bill  Giao thức tầng network= dịch vụ bưu điện Tầng Transport 3-5
  6. Các giao thức tầng transport trên Internet application transport  Tin cậy, truyền theo network data link thứ tự (TCP) physical network network data link . Điền khiển tắc nghẽn data link physical physical network . Điều khiển luồng data link . Thiết lập kết nối physical network data link  Không tin cậy, truyền physical network không theo thứ tự: data link physical network UDP data link application physical network transport . Không rườm rà, mở rộng data link network physical data link “nổ lực tốt nhất” (best- physical effort) của IP  Không có các dịch vụ: . Bảo đảm độ trễ . Bảo đảm băng thông Tầng Transport 3-6
  7. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-7
  8. Multiplexing/demultiplexing multiplexingtại bên gửi: xử lý dữ liệu từ nhiều demultiplexing tại bên nhận: socket, thêm thông tin header về tầng transport ử ụ ượ ử ụ s d ng thông tin trong vào segment (đ c s d ng header để chuyển segment sau cho demultiplexing) vừa nhận vào đúng socket application application P1 P2 application socket P3 P4 transport tiến trình transport network transport network link network link physical link physical physical Tầng Transport 3-8
  9. demultiplexing làm việc như thế nào  host nhận các khung dữ 32 bits liệu (datagram) IP Số port nguồn Số port đích . Mỗi khung dữ liệu có địa chỉ IP nguồn và đích other header fields . Mỗi khung dữ liệu mang một segment tầng transport application . Mỗi segment có số port data nguồn và đích (payload)  host dùng các địa chỉ IP và số port để gởi segment đến socket Định dạng segment TCP/UDP thích hợp Tầng Transport 3-9
  10. Demultiplexing không kết nối  Ôn lại: socket đã tạo có số  Ôn lại: khi tạo khung dữ port của host cục bộ liệu (datagram) để gởi (host-local port #) : vào đến socket UDP DatagramSocket mySocket1 socket, phải xác định = new DatagramSocket(12534); . Địa chỉ IP đích . Số port đích  Khi host nhận Các khung dữ liệu IP segment UDP : với số cùng số port ư ị . ể ố đích, nh ng khác đ a Ki m tra s port đích chỉ IP nguồn và/hoặc trong segment khác số port nguồn sẽ . Đưa segment UDP đến được chuyển đến cùng socket có số port đó socket tại máy đích Tầng Transport 3-10
  11. Demultiplexing không kết nối: ví dụ DatagramSocket DatagramSocket serverSocket = new DatagramSocket DatagramSocket mySocket2 = new mySocket1 = new DatagramSocket (6428); DatagramSocket (9157); application (5775); application P1 application P3 P4 transport transport transport network network link network link physical link physical physical Port nguồn: 6428 Port nguồn: ? Port đích: 9157 Port đích: ? Port nguồn: 9157 Port nguồn: ? Port đích: 6428 Port đích: ? Tầng Transport 3-11
  12. Demux hướng kết nối  Socket TCP được  host server có thể hổ xác định bởi 4 yếu trợ nhiều socket TCP tố: đồng thời: . Địa chỉ ip nguồn . Mỗi socket được xác . Số port nguồn định bởi bộ 4 của nó . Địa chỉ IP đích  Các web server có . Số port đích các socket khác nhau ỗ ế ố ừ  demux: nơi nhận cho m i k t n i t dùng tất cả 4 giá trị client trên để điều hướng . Kết nối HTTP không ế bền vững sẽ có socket segment đ n socket khác nhau cho mỗi yêu thích hợp cầu Tầng Transport 3-12
  13. Demultiplexing hướng kết nối: ví dụ application application P4 P5 P6 application P3 P2 P3 transport transport transport network network link network link physical link physical server: địa physical chỉ IP B host: địa Địa chỉ IP nguồn,port: B,80 host: địa chỉ IP A Địa chỉ IP đích,port: A,9157 IP nguồn,port: C,5775 chỉ IP C IP đích,port: B,80 IP nguồn,port: A,9157 IP đích, port: B,80 IP nguồn,port: C,9157 IP đích,port: B,80 Ba segment, tất cả được đưa đến địa chỉ IP: B, Port đích: 80 được demultiplex đến các socket khác nhau Tầng Transport 3-13
  14. Demultiplexing hướng kết nối: ví dụ threaded server application application application P4 P3 P2 P3 transport transport transport network network link network link physical link physical server: địa physical chỉ IP B host: địa IP nguồn,port: B,80 host: địa chỉ IP A IP đích,port: A,9157 IP nguồn,port: C,5775 chỉ IP C IP đích,port: B,80 IP nguồn,port: A,9157 IP đích, port: B,80 IP nguồn,port: C,9157 IP đích,port: B,80 Tầng Transport 3-14
  15. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-15
  16. UDP: User Datagram Protocol [RFC 768]  “đơn giản,” “bare bones”  Ứng dụng UDP: Internet transport protocol . Các ứng dụng đa  Dịch vụ “best effort” (“nổ lực phương tiện trực tuyến tốt nhất”), các segment UDP (chịu mất mát(loss segments có thể bị: tolerant), (cần tốc độ) . Mất mát (rate sensitive) ) . Vận chuyển không theo thứ . DNS tự đến ứng dụng . SNMP  Connectionless (phi kết nối):  Truyền tin cậy trên . Không bắt tay giữa bên UDP: nhận và gửi UDP . Thêm độ tin cậy tại . Mỗi segment UDP được xử tầng application lý độc lập . Phục hồi lỗi tại các ứng dụng cụ thể! Tầng Transport 3-16
  17. UDP: segment header Độ dài được tính 32 bits bằng byte của Số port nguồn Số port đích segment UDP, bao gồm cả header length checksum Tại sao có UDP?  Không thiết lập kết nối (cái Dữ liệu mà có thể gây ra độ trễ) ứng dụng  Đơn giản: không trạng thái (payload) kết nối tại nơi gửi và nhận  Kích thước header nhỏ  Không điều khiển tắc nghẽn: UDP có thể gửi dữ liệu nhanh Định dạng segment UDP như mong muốn Tầng Transport 3-17
  18. UDP checksum Mục tiêu: dò tìm “các lỗi” (các bit cờ được bật) trong các segment đã được truyền bên gửi: bên nhận:  Xét nội dung của  Tính toán checksum của segment, bao gồm các segment đã nhận trường của header, là ỗ ố  Kiểm tra giá trị trên có bằng chu i các s nguyên ớ ị ườ 16-bit v i giá tr trong tr ng checksum hay không:  checksum: bổ sung (tổng bù 1) của các nội . NO – có lỗi xãy ra dung segment . YES – không có lỗi. Nhưng  Bên gửi đặt giá trị có thể còn lỗi khác nữa checksum vào trường không? Xem phần sau . checksum UDP Tầng Transport 3-18
  19. Internet checksum: ví dụ Ví dụ: cộng 2 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 bit dư 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 tổng 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 checksum 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 Lưu ý: khi cộng các số, bit nhớ ở phía cao nhất cần được thêm vào kết quả Tầng Transport 3-19
  20. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-20
  21. Các nguyên lý truyền dữ liệu tin cậy  Quan trọng trong các tầng application, transport và link . Top 10 danh sách các chủ đề mạng quan trọng  Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền dữ liệu (data transfer protocol) (rdt) Tầng Transport 3-21
  22. Các nguyên lý truyền dữ liệu tin cậy  quan trọng trong các tầng application, transport và link . Top 10 danh sách các chủ đề mạng quan trọng  Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền dữ liệu (data transfer protocol) (rdt) Tầng Transport 3-22
  23. Các nguyên lý truyền dữ liệu tin cậy  quan trọng trong các tầng application, transport và link . Top 10 danh sách các chủ đề mạng quan trọng  Các đặc điểm của kênh truyền không tin cậy sẽ xác định sự phức tạp của giao thức truyền dữ liệu data transfer protocol (rdt) Transport Layer 3-23
  24. Truyền dữ liệu tin cậy: bắt đầu rdt_send(): được gọi bởi tầng trên, deliver_data(): được gọi bởi rdt để (tầng applicaiton). Chuyển dữ liệu cần chuyển dữ liệu đến tầng cao hơn truyền đến lớp cao hơn ở bên nhận Bên Bên gửi nhận udt_send(): được gọi bởi rdt, rdt_rcv(): được gọi khi gói dữ liệu để truyền các gói trên kênh đến kênh của bên nhận không tin cậy đến nơi nhận Tầng Transport 3-24
  25. Truyền dữ liệu tin cậy: bắt đầu Chúng ta sẽ:  Từng bước phát triển truyền dữ liệu tin cậy (rdt) bên phía người gửi và nhận  Chỉ xem xét chuyển dữ liệu theo 1 hướng . Nhưng điều khiển thông tin sẽ theo cả 2 hướng!  Sử dụng finite state machines (FSM) để xác định bên gửi và nhận Sự kiện gây ra trạng thái truyền Các hành động được thực hiện trên chuyển trạng thái Trạng thái: khi ở “trạng trạng thái” này thì trạng trạng thái thái kế tiếp được xác Sự kiện thái 2 1 định duy nhất bởi sự Các hành động kiện kế tiếp Tầng Transport 3-25
  26. rdt1.0: truyền tin cậy trên 1 kênh tin cậy  Kênh cơ bản tin cậy hoàn toàn (underlying channel perfectly reliable) . không có bit lỗi . không mất mát gói  Các FSMs riêng biệt cho bên gửi và nhận: . Bên gửi gửi dữ liệu vào kênh cơ bản (underlying channel) . Bên nhận đọc dữ liệu từ kênh cơ bản (underlying channel) chờ gọi rdt_send(data) chờ gọi rdt_rcv(packet) từ tầng từ tầng extract (packet,data) trên packet = make_pkt(data) dưới deliver_data(data) udt_send(packet) bên gửi bên nhận Tầng Transport 3-26
  27. rdt2.0: kênh với các lỗi  Kênh cơ bản có thể đảo các bit trong packet . checksum để kiểm tra các lỗi  Câu hỏi: làm sao khôi phục các lỗi: . acknowledgements (ACKs): receiver explicitly tells sender that pkt received OK . negative acknowledgements (NAKs): receiver explicitly tells sender that pkt had errors . senderLàm retransmits thế nào pktđể oncon receipt người of phụcNAK hồi  new mechanisms“lỗi” trong in rdt2.0 cuộc(beyond trò chuyện? rdt1.0): . error detection . receiver feedback: control msgs (ACK,NAK) rcvr->sender Tầng Transport 3-27
  28. rdt2.0: kênh với các lỗi  Kênh cơ bản có thể đảo các bit trong packet . checksum để kiểm tra các lỗi  Câu hỏi: làm sao khôi phục các lỗi: . acknowledgements (ACKs): bên nhận thông báo rõ ràng cho bên gửi rằng packet được nhận thành công (OK) . negative acknowledgements (NAKs): bên nhận thông báo rõ ràng cho bên gửi rằng packet đã bị lỗi . Bên gửi truyền lại gói nào được xác nhận là NAK  Các cơ chế mới trong rdt2.0 (sau rdt1.0): . Phát hiện lỗi . Phản hồi: các thông điệp điều khiển (ACK,NAK) từ bên nhận đến bên gửi Tầng Transport 3-28
  29. rdt2.0: đặc điểm kỹ thuật FSM rdt_send(data) sndpkt = make_pkt(data, checksum) Bên nhận udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Chờ gọi Chờ ACK rdt_rcv(rcvpkt) && từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt) trên NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Chờ gọi L từ tầng Bên gửi dưới rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Tầng Transport 3-29
  30. rdt2.0: hoạt động khi không lỗi rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Chờ gọi Chờ ACK rdt_rcv(rcvpkt) && từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt) trên NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Chờ gọi L từ tầng dưới rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Tầng Transport 3-30
  31. rdt2.0: hoạt động khi có lỗi rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Chờ gọi Chờ ACK rdt_rcv(rcvpkt) && từ tầng hoặc udt_send(sndpkt) corrupt(rcvpkt) trên NAK udt_send(NAK) rdt_rcv(rcvpkt) && isACK(rcvpkt) Chờ gọi L từ tầng dưới rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Tầng Transport 3-31
  32. rdt2.0 có lỗ hỏng nghiêm trọng! Điều gì xảy ra nếu Xử lý trùng lặp: ị ỏ ACK/NAK b h ng?  Bên gửi truyền lại packet  Bên gửi sẽ không biết hiện thời nếu ACK/NAK bị điều gì đã xảy ra ở bên hỏng nhận!  Bên gửi thêm số thứ tự vào  Không thể đơn phương trong mỗi packet truyền lại: có thể trùng lặp (sequence number)  Bên nhận hủy packet bị trùng lặp dừng và chờ Bên gửi gửi một packet, sau đó chờ phản hồi từ bên nhận Tầng Transport 3-32
  33. rdt2.1: bên gửi, xử lý các ACK/NAK bị hỏng rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isNAK(rcvpkt) ) ACK or call 0 from udt_send(sndpkt) above NAK 0 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) L L Wait for Wait for ACK or call 1 from rdt_rcv(rcvpkt) && NAK 1 above ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_send(data) udt_send(sndpkt) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Tầng Transport 3-33
  34. rdt2.1: bên nhận, xử lý các ACK/NAK bị hỏng 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) Tầng Transport 3-34
  35. rdt2.1: thảo luận Bên gửi: Bên nhận:  Số thứ tự (seq #)  Phải kiểm tra có hay được thêm vào packet không gói vừa nhận  2 số thứ tự (0,1) là trị trùng đủ. Tại sao? . Trạng thái chỉ rõ có hay không 0 hoặc 1  Phải kiểm tra có hay là số thứ tự của gói không ACK/NAK vừa được mong chờ ậ ị ỏ nh n b h ng  Chú ý: bên nhận có  Số trạng thái tăng lên thể không biết 2 lần ACK/NAK vừa rồi . Trạng thái phải “nhớ” có được bên gửi xem packet “mong đợi” nhận tốt hay không có số thứ tự là 0 hay 1 Tầng Transport 3-35
  36. rdt2.2: một giao thức không cần NAK  Chức năng giống như rdt2.1, chỉ dùng các ACK  Thay cho NAK, bên nhận gởi ACK cho gói cuối cùng được nhận thành công . Bên nhận phải rõ ràng chèn số thứ tự của gói vừa được ACK  ACK bị trùng tại bên gửi dẫn tới kết quả giống như hành động của NAK: truyền lại gói vừa rồi Tầng Transport 3-36
  37. rdt2.2: các fragment bên nhận và gửi rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || Wait for Wait for isACK(rcvpkt,1) ) call 0 from ACK above 0 udt_send(sndpkt) sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && && isACK(rcvpkt,0) (corrupt(rcvpkt) || L has_seq1(rcvpkt)) Wait for receiver FSM 0 from udt_send(sndpkt) below fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) Tầng Transport 3-37
  38. rdt3.0: các kênh với lỗi và mất mát Giả định mới: kênh ưu Cách tiếp cận: bên gửi chờ tiên cũng có thể làm ACK trong khoảng thời mất gói (dữ liệu, các gian “hợp lý” ACK)  Truyền lại nếu không có ACK . checksum, số thứ tự, được nhận trong khoảng ờ các ACK, việc truyền th i gian này  Nếu gói (hoặc ACK) chỉ trễ lại sẽ hổ trợ nhưng (không mất): không đủ . Việc truyền lại sẽ gây trùng, nhưng số thứ tự đã xử lý trường hợp này . Bên nhận phải xác định số thứ tự của gói vừa gửi ACK  Yêu cầu bộ định thì đếm lùi Tầng Transport 3-38
  39. rdt3.0 bên gửi rdt_send(data) rdt_rcv(rcvpkt) && sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) || udt_send(sndpkt) isACK(rcvpkt,1) ) rdt_rcv(rcvpkt) start_timer L L Wait Wait for timeout call 0from for udt_send(sndpkt) above ACK0 start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt,1) && notcorrupt(rcvpkt) stop_timer && isACK(rcvpkt,0) stop_timer Wait Wait for timeout for call 1 from udt_send(sndpkt) ACK1 above start_timer rdt_rcv(rcvpkt) rdt_send(data) L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum) isACK(rcvpkt,0) ) udt_send(sndpkt) start_timer L Tầng Transport 3-39
  40. Hành động của rdt3.0 bên gửi bên nhận bên gửi bên nhận Gửi pkt0 pkt0 Gửi pkt0 pkt0 Nhận pkt0 Nhận pkt0 ack0 Gửi ack0 ack0 Gửi ack0 Nhận ack0 Nhận ack0 Gửi pkt1 pkt1 Gửi pkt1 pkt1 Nhận pkt1 X ack1 Nhận ack1 loss Nhận ack1 Nhận pkt0 pkt0 Gửi pkt0 timeout ack0 Nhận ack0 Gửi lại pkt1 pkt1 Nhận pkt1 ack1 Gửi ack1 Nhận ack1 Gửi pkt0 pkt0 (a) Không mất mát Nhận pkt0 ack0 Gửi ack0 (b) Mất gói Tầng Transport 3-40
  41. Hành động của rdt3.0 bên gửi bên nhận bên gửi bên nhận Gửi pkt0 pkt0 Gửi pkt0 Nhận pkt0 pkt0 Gửi ack0 Nhận pkt0 ack0 Gửi ack0 Nhận ack0 ack0 Gửi pkt1 pkt1 Nhận ack0 Nhận pkt1 Gửi pkt1 pkt1 Nhận pkt1 Gửi ack1 ack1 Gửi ack1 ack1 X loss timeout resend pkt1 pkt1 timeout Nhận pkt1 Gửi lại pkt1 pkt1 rcv ack1 pkt0 (phát hiện trùng) Nhận pkt1 send pkt0 Gửi ack1 (phát hiện trùng gói) ack1 ack1 Gửi ack1 rcv ack1 Nhận pkt0 Nhận ack1 ack0 Gửi ack0 send pkt0 pkt0 Gửi pkt0 pkt0 Nhận pkt0 Nhận pkt0 ack0 (phát hiệ trùng) ack0 Gửi ack0 Gửi ack0 (c) Mất ACK (d) premature timeout/ delayed ACK Tầng Transport 3-41
  42. Hiệu suất của rdt3.0  rdt3.0 làm việc được, nhưng đánh giá hiệu suất hơi rắc rối  Ví dụ: đường link 1 Gbps, trễ lan truyền giữa 2 đầu cuối là 15 ms, gói 8000 bit: L 8000 bits D = = = 8 microsecs truyền R 109 bits/sec . U sender: utilization – fraction of time sender busy sending L / R .008 U = = = 0.00027 sender RTT + L / R 30.008 . Nếu RTT=30 msec, gói 1KB mỗi 30 msec: thông lượng 33kB/sec trên đường link1 Gbps  Giao thức network hạn chế việc sử dụng các tài nguyên vật lý! Tầng Transport 3-42
  43. rdt3.0: hoạt động dừng-và-chờ sender receiver bit đầu tiên của gói được truyền, t = 0 bit cuối cùng gói được truyền, t = L / R Bit đầu tiên của gói đến RTT Bit cuối cùng của gói đến, gửi ACK ACK đến, gửi gói kế tiếp, t = RTT + L / R L / R .008 U = = = 0.00027 sender RTT + L / R 30.008 Tầng Transport 3-43
  44. Các giao thức Pipelined pipelining: bên gửi cho phép gửi nhiều gói đồng thời, không cần chờ báo nhận được . Nhóm các số thứ tự phải được tăng dần . Phải có bộ nhớ đệm tại nơi gửi và/hoặc nhận  hai dạng phổ biến của các giao thức pipelined : go-Back-N, lặp có lựa chọn Tầng Transport 3-44
  45. Pipelining: độ khả dụng tăng bên gửi bên nhận bit đầu tiên của gói được truyền, t = 0 bit cuối cùng của gói được truyền, t = L / R bit đầu tiên của packet đến RTT bit cuối cùng của packet đến, gửi ACK bit cuối cùng của packet thứ 2 đến, gửi ACK bit cuối cùng của packet thứ 3 đến, gửi ACK ACK arrives, send next packet, t = RTT + L / R 3-packet pipelining tăng độ khả dụng lên gấp 3 lần! 3L / R .0024 U = = = 0.00081 sender RTT + L / R 30.008 Tầng Transport 3-45
  46. Pipelined protocols: tổng quan Go-back-N: Lặp có lựa chọn (Selective  Bên gửi có thể có đến N Repeat): packet không cần ACK trong  Bên gửi có thể có đến N đường ống ( pipeline) packet không cần ACK  Bên nhận chỉ gởi cumulative trong đường ống ack (pipeline) . Sẽ không thông báo nhận  Bên nhận gửi rcvr ack packet thành công nếu có riêng biệt (individual một gián đoạn ack) cho mỗi packet  bên gửi có bộ định thì cho  Bên nhận duy trì bộ định packet sớm nhất mà không thì cho mỗi packet cần ACK (oldest unacked không được ACK packet) . Khi bộ định thì của . Khi bộ định thì hết, truyền packet nào hết hạn, thì lại tất cả các packet mà chỉ truyền lại packet không được ACK không được ACK đó Tầng Transport 3-46
  47. Go-Back-N: bên gửi  Số thứ tự k-bit trong header của packet  “cửa sổ”(“window”) lên đến N packet liên tiếp không cần ACK được cho phép  ACK(n): thông báo nhận tất cả các packet lên đến n, bao gồm n số thứ tự - “ACK tích lũy”(“cumulative ACK”) . Có thể nhận ACK trùng (xem bên nhận)  Định thì cho packet sớm nhất đang trong tiến trình xử lý (oldest in-flight pkt)  timeout(n): truyền lại packet n và tất cả các packet có số thứ tự cao hơn trong cửa sổ (window) Tầng Transport 3-47
  48. GBN: sender extended FSM rdt_send(data) if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } L else refuse_data(data) base=1 nextseqnum=1 timeout Wait start_timer udt_send(sndpkt[base]) rdt_rcv(rcvpkt) udt_send(sndpkt[base+1]) && corrupt(rcvpkt) udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer Tầng Transport 3-48
  49. GBN: receiver extended FSM default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) L && hasseqnum(rcvpkt,expectedseqnum) expectedseqnum=1 Wait extract(rcvpkt,data) sndpkt = deliver_data(data) make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ ACK-duy nhất: luôn luôn gửi ACK cho gói đã nhận chính xác, với số thứ tự xếp hạng cao nhất (highest in-order seq #) . Có thể sinh ra các ACK trùng nhau . Chỉ cần nhớ expectedseqnum  Packet không theo thứ tự(out-of-order pkt): . hủy discard (không đệm): không bộ nhớ đệm bên nhận! . Gửi lại với số thứ tự xếp hạng cao nhất Tầng Transport 3-49
  50. Hoạt động GBN sender window (N=4) bên gửi bên nhận 0 1 2 3 4 5 6 7 8 send pkt0 0 1 2 3 4 5 6 7 8 send pkt1 receive pkt0, send ack0 0 1 2 3 4 5 6 7 8 send pkt2 receive pkt1, send ack1 0 1 2 3 4 5 6 7 8 send pkt3 Xloss (wait) receive pkt3, discard, 0 1 2 3 4 5 6 7 8 rcv ack0, send pkt4 (re)send ack1 0 1 2 3 4 5 6 7 8 rcv ack1, send pkt5 receive pkt4, discard, (re)send ack1 ignore duplicate ACK receive pkt5, discard, (re)send ack1 pkt 2 timeout 0 1 2 3 4 5 6 7 8 send pkt2 0 1 2 3 4 5 6 7 8 send pkt3 0 1 2 3 4 5 6 7 8 send pkt4 rcv pkt2, deliver, send ack2 0 1 2 3 4 5 6 7 8 send pkt5 rcv pkt3, deliver, send ack3 rcv pkt4, deliver, send ack4 rcv pkt5, deliver, send ack5 Tầng Transport 3-50
  51. Lặp có lựa chọn (Selective repeat)  Bên nhận thông báo đã nhận đúng tất cả từng gói một . Đệm các gói, khi cần thiết, cho sự vận chuyển trong thứ tự ngẫu nhiên đến tầng cao hơn  Bên gửi chỉ gửi lại các packet nào mà ACK không được nhận . Bên gửi định thời cho mỗi packet không có gửi ACK  Cửa sổ bên gửi (sender window) . N số thứ tự liên tục . Hạn chế số thứ tự các gói không gửi ACK Tầng Transport 3-51
  52. Lặp có lựa chọn: cửa sổ bên gửi và nhận Tầng Transport 3-52
  53. Lặp có lựa chọn Bên gửi Bên nhận Dữ liệu từ tầng trên: Packet n trong [rcvbase,  Nếu số thứ tự kế tiếp sẵn sàng rcvbase+N-1] trong cửa sổ, gởi packet  Gửi ACK(n) timeout(n):  Không thứ tự: đệm  Gửi lại packet n, khởi độnglại bộ  Thứ tự: truyền (cũng truyền định thì các gói đã đệm, có thứ tự), ACK(n) trong dịch chuyển cửa sổ đến gói [sendbase,sendbase+N]: chưa nhận kế tiếp  Đánh dấu packet n là đã được Packet n trong [rcvbase- nhận N,rcvbase-1]  Nếu gói không ACK có n nhỏ  ACK(n) nhất, thì dịch chuyển cửa sổ Ngược lại: base đến số thứ tự không ACK  Bỏ qua kế tiếp Tầng Transport 3-53
  54. Hành động của lặp lại có lựa chọn sender window (N=4) Bên gửi Bên nhận 0 1 2 3 4 5 6 7 8 gửi pkt0 0 1 2 3 4 5 6 7 8 gửi pkt1 nhận pkt0, gửi ack0 0 1 2 3 4 5 6 7 8 gửi pkt2 nhận pkt1, gửi ack1 0 1 2 3 4 5 6 7 8 gửi pkt3 Xloss (đợi) nhận pkt3, buffer, 0 1 2 3 4 5 6 7 8 nhận ack0, gửi pkt4 gửi ack3 0 1 2 3 4 5 6 7 8 nhận ack1, gửi pkt5 nhận pkt4, buffer, gửi ack4 Ghi nhận ack3 đã đến nhận pkt5, buffer, gửi ack5 pkt 2 timeout 0 1 2 3 4 5 6 7 8 gửi pkt2 0 1 2 3 4 5 6 7 8 Ghi nhận ack4 đã đến nhận pkt2; chuyển pkt2, 0 1 2 3 4 5 6 7 8 Ghi nhận ack4 đã đến 0 1 2 3 4 5 6 7 8 pkt3, pkt4, pkt5; gửi ack2 Q: việc gì xảy ra khi ack2 đến? Tầng Transport 3-54
  55. Lặp có lựa chọn: sender window receiver window tình huống (sau khi nhận) (sau khi nhận) 0 1 2 3 0 1 2 pkt0 khó giải quyết 0 1 2 3 0 1 2 pkt1 0 1 2 3 0 1 2 0 1 2 3 0 1 2 pkt2 0 1 2 3 0 1 2 Ví dụ: 0 1 2 3 0 1 2 0 1 2 3 0 1 2 pkt3  Số thứ tự: 0, 1, 2, 3 X 0 1 2 3 0 1 2  Kích thước cửa sổ=3 pkt0 Sẽ chấp nhận packet với (a) no problem số thứ tự 0  Bên nhận không thấy sự khác nhau trong 2 Bên nhận không thể thấy phía bên gửi. tình huống! Hành vi bên nhận như nhau trong cả 2 trường hợp!  Dữ liệu trùng lặp Có điều gì đó (rất) sai lầm! được chấp nhận như 0 1 2 3 0 1 2 pkt0 dữ liệu mới (b) 0 1 2 3 0 1 2 pkt1 0 1 2 3 0 1 2 0 1 2 3 0 1 2 pkt2 0 1 2 3 0 1 2 X 0 1 2 3 0 1 2 Q: quan hệ giữa dãy số X timeout thứ tự và kích thước Truyền lại pkt0 X cửa sổ để tránh vấn 0 1 2 3 0 1 2 pkt0 Sẽ chấp nhận packet đề (b)? với số thứ tự 0 (b) oops! Tầng Transport 3-55
  56. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-56
  57. TCP: tổng quan RFCs: 793,1122,1323, 2018, 2581  point-to-point:  Dữ liệu full duplex: . Một bên gửi, một bên . Luồng dữ liệu đi 2 chiều nhận trong cùng 1 kết nối  Tin cậy, dòng byte . MSS: kích thước tối đa theo thứ tự (in-order của segment (maximum byte steam): segment size) . Không “ranh giới thông  Hướng kết nối: điệp” (“message . Bắt tay (trao đổi các boundaries”) thông điệp điều khiển) ở ạ ạ  kh i t o tr ng thái bên pipelined: gửi và nhận trước khi . Điều khiển luồng và tắc trao đổi dữ liệu nghẽn của TCP thiết lập kích thước cửa sổ  Luồng được điều khiển: (window size) . Bên gửi sẽ không áp đảo bên nhận Tầng Transport 3-57
  58. Cấu trúc segment TCP segment 32 bits URG: dữ liệu khẩn cấp port nguồn port đích Đếm bằng (thường không dùng) bytes dữ liệu Số thứ tự ACK: ACK # (không bằng hợp lệ Số ACK segment!) head Không UAP PSH: push data now len dùng RS F receive window Số byte (thường không dùng) checksum Urg data pointer bên nhận RST, SYN, FIN: Tùy chọn (độ dài thay đổi) sẵn sàng thiết lập kết nối chấp nhận (setup, teardown commands) Dữ liệu ứng dụng Internet (độ dài thay đổi) checksum (giống như UDP) Tầng Transport 3-58
  59. Số thứ tự TCP và ACK Segment đi ra từ bên gửi Các số thứ tự: port nguồn port đích số thứ tự .Dòng byte “đánh số” số ACK byte đầu tiên trong dữ rwnd checksum urg pointer liệu của segment kích thước cửa sổ Các ACK: N . số thứ tự của byte kế tiếp được mong đợi từ sender sequence number space phía bên kia . sent sent, not- usable not ACK tích lũy ACKed yet ACKed but not usable Hỏi: làm thế nào để bên (“in-flight”) yet sent nhận xử lý các segment Segment vào, đến bên gửi không theo thứ tự port nguồn port đích số thứ tự .Trả lời: TCP không đề số ACK cập, tùy thuộc người A rwnd thực hiện checksum urg pointer Tầng Transport 3-59
  60. Số thứ tự TCP và ACK Host A Host B User Nhập ‘C’ Seq=42, ACK=79, data = ‘C’ host báo nhận thành công ‘C’, phản hồi ngược lại ‘C’ Seq=79, ACK=43, data = ‘C’ host báo nhận thành công “C” được phản hồi Seq=43, ACK=80 Tình huống telnet đơn giản Tầng Transport 3-60
  61. TCP round trip time và timeout Hỏi: làm cách nào để Q: làm cách nào để ước thiết lập giá trị lượng RTT? TCP timeout?  SampleRTT: thời gian được đo từ khi truyền  Dài hơn RTT segment đến khi báo nhận . Nhưng RTT thay đổi ACK  Quá ngắn: timeout . Lờ đi việc truyền lại sớm, không cần thiết  SampleRTT sẽ thay đổi, muốn RTT được ước lượng truyền lại “mượt hơn”  Quá dài: phản ứng . Đo lường trung bình của chập đối với việc mất một số giá trị vừa xảy segment ra, không chỉ SampleRTT hiện tại Tầng Transport 3-61
  62. TCP round trip time và timeout EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT  Đường trung bình dịch chuyển hàm mũ (exponential weighted moving average)  ảnh hưởng của mẫu đã xảy ra sẽ làm giảm tốc độ theo cấp số nhân RTT: gaia.cs.umass.edu to fantasia.eurecom.fr  typical value: = 0.125 350 RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 300 250 (milliseconds) RTT (milliseconds) 200 RTT sampleRTT 150 EstimatedRTT 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) Tầng Transport 3-62 timeSampleRTT (seconds)Estimated RTT
  63. TCP round trip time và timeout  Khoảng thời gian timeout (timeout interval): EstimatedRTT cộng với “biên an toàn” . Sự thay đổi lớn trong EstimatedRTT -> an toàn biên lớn hơn  Ước lượng độ lệch SampleRTT từ EstimatedRTT: DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT| (typically,  = 0.25) TimeoutInterval = EstimatedRTT + 4*DevRTT estimated RTT “biên an toàn” Tầng Transport 3-63
  64. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-64
  65. TCP truyền dữ liệu tin cậy  TCP tạo dịch vụ rdt trên dịch vụ không tin cậy của IP . Các segment pipelined . Các ack tích lũy Lúc đầu khảo sát TCP . Bộ định thì truyền lại đơn giản ở bên gửi: đơn (single . Lờ đi các ack bị trùng retransmission timer) . Lờ đi điều khiển luồng  Việc truyền lại được và điều khiển tắc kích hoạt bởi: nghẽn . Sự kiện timeout . Các ack bị trùng Tầng Transport 3-65
  66. TCP các sự kiện bên gửi: Dữ liệu được nhận từ ứng timeout: dụng:  Gửi lại segment nào gây  Tạo segment với số thứ ra timeout tự  Khởi động lại bộ định thì  Số thứ tự là số byte- ack được nhận: stream của byte dữ liệu đầu tiên trong  Nếu ack thông báo đã các segment segment không được ACK trước đó  Khởi động bộ định thì ế ư ạ . Cập nhật những gì được biết n u ch a ch y là đã được nhận thành công . Xem bộ định thì như là . ở ộ ạ ộ ị ố ớ ớ Kh i đ ng l i b đ nh thì đ i v i segment s m nếu có các segment vẫn nhất không được ACK chưa được thông báo nhận . Khoảng thời gian hết thành công hạn: TimeOutInterval Tầng Transport 3-66
  67. TCP bên gửi (đơn giản) Dữ liệu được nhận từ tầng application trên create segment, seq. #: NextSeqNum pass segment to IP (i.e., “send”) NextSeqNum = NextSeqNum + length(data) if (bộ định thì hiện thời không chạy) L khởi động bộ định thì NextSeqNum = InitialSeqNum wait SendBase = InitialSeqNum for event timeout Truyền lại segment nào chưa được báo đã nhận thành công với số thứ tự nhỏ nhất. ACK received, with ACK field value y Khởi động bộ định thì if (y > SendBase) { SendBase = y /* SendBase–1: last cumulatively ACKed byte */ if (there are currently not-yet-acked segments) start timer else stop timer } Tầng Transport 3-67
  68. TCP: tình huống truyền lại Host A Host B Host A Host B SendBase=92 Seq=92, 8 bytes of data Seq=92, 8 bytes of data Seq=100, 20 bytes of data eout ACK=100 tim X timeout ACK=100 ACK=120 Seq=92, 8 bytes of data Seq=92, 8 SendBase=100 bytes of data SendBase=120 ACK=100 ACK=120 SendBase=120 Tình huống mất ACK Timeout sớm Tầng Transport 3-68
  69. TCP: tình huống truyền lại Host A Host B Seq=92, 8 bytes of data Seq=100, 20 bytes of data t ACK=100 X timeou ACK=120 Seq=120, 15 bytes of data ACK tích lũy Tầng Transport 3-69
  70. Sự phát sinh TCP ACK [RFC 1122, RFC 2581] Sự kiện tại bên nhận Hành động bên nhận TCP segment đến theo thứ tự với số ACK bị trễ. Đợi đến 500ms cho segment thứ tự được mong đợi. Tất cả kế tiếp. Nếu không có segment kế tiếp, gửi dữ liệu đến đã được ACK ACK segment đến theo thứ tự với số Lập tức gởi lại một ACK tích lũy, thông báo thứ tự mong muốn. 1 segment nhận thành công cho cả segment theo thứ khác có ACK đang treo tự Segment đến không theo thứ tự Lập tức gởi lại ACK trùng, chỉ ra số thứ tự với số thứ tự lớn hơn số được của byte được mong đợi kế tiếp mong đợi. Có khoảng trống segment đến lắp đầy từng phần Lập tức gửi ACK, với điều kiện là segment hoặc toàn bộ khoảng trống đó bắt đầu ngay điểm có khoảng trống Tầng Transport 3-70
  71. TCP truyền lại nhanh  Chu kỳ time-out thường tương đối dài: TCP truyền lại nhanh . Độ trễ dài trước khi Nếu bên gửi nhận 3 ACK gởi lại packet bị mất của cùng 1 dữ liệu (“3 ACK trùng”), thì gửi lại  Phát hiện các segment chưa được ACK segment bị mất thông với số thứ tự nhỏ nhất qua các ACKs trùng. . Có khả năng segment . Bên gửi thường gửi không được ACK đã nhiều segment song bị mất, vì thế không song đợi đến thời gian . Nếu segment bị mất, timeout thì sẽ có khả năng có nhiều ACK trùng. Tầng Transport 3-71
  72. TCP truyền lại nhanh Host A Host B Seq=92, 8 bytes of data Seq=100, 20 bytes of data X ACK=100 ACK=100 timeout ACK=100 ACK=100 Seq=100, 20 bytes of data Truyền lại nhanh sau khi bên gửi nhận 3 lần ACK bị trùng Tầng Transport 3-72
  73. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-73
  74. TCP điều khiển luồng application application có thể loại bỏ dữ liệu process từ các bộ nhớ đệm socket TCP application . TCP socket OS receiver buffers chậm hơn TCP bên nhận đang cung cấp (bên gửi đang gửi) TCP code IP Điều khiển luồng code bên nhận kiểm soát bên gửi, để bên gửi sẽ không làm tràn bộ nhớ đệm của bên nhận bởi từ bên gửi truyền quá nhiều và quá nhanh Chồng giao thức bên nhận Tầng Transport 3-74
  75. TCP điều khiển luồng  Bên nhận “quảng cáo” không gian bộ nhớ đệm còn trống bằng cách thêm giá trị rwnd to application process trong TCP header của các segment từ bên nhận đến RcvBuffer buffered data bên gửi . Kích thước của RcvBuffer rwnd được thiết lập thông qua các free buffer space tùy chọn của socket (thông thường mặc định là 4096 byte) . Nhiều hệ điều hành tự động TCP segment payloads điều chỉnh RcvBuffer  Bên gửi giới hạn số lượng dữ Bộ đêm phía bên nhận liệu không cần ACK tới giá trị rwnd của bên nhận  Bảo đảm bộ đệm bên nhận sẽ không bị tràn Tầng Transport 3-75
  76. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-76
  77. Quản lý kết nối (Connection Management) Trước khi trao đổi dữ liệu, bên gửi và nhận “bắt tay nhau” :  Đồng ý thiết lập kết nối (mỗi bên biết bên kia sẵn sàng để thiết lập kết nối)  Đồng ý các thông số kết nối application application connection state: ESTAB connection state: ESTAB connection variables: connection Variables: seq # client-to-server seq # client-to-server server-to-client server-to-client rcvBuffer size rcvBuffer size at server,client at server,client network network Socket clientSocket = Socket connectionSocket = newSocket("hostname","port welcomeSocket.accept(); number"); Tầng Transport 3-77
  78. Đồng ý thiết lập kết nối Bắt tay 2-way: Hỏi: bắt tay 2-way sẽ luôn luôn hoạt động trong mạng hay không? Let’s talk ESTAB  Độ chậm trễ biến thiên OK ESTAB  Các thông điệp được truyền lại (như req_conn(x)) vì mất thông điệp  Sắp xếp lại thông điệp choose x  ể ấ req_conn(x) Không th “th y” phía bên ESTAB kia acc_conn(x) ESTAB Tầng Transport 3-78
  79. Đồng ý thiết lập kết nối Các tình huống thất bại khi bắt tay 2-way: choose x choose x req_conn(x) req_conn(x) ESTAB ESTAB retransmit acc_conn(x) retransmit acc_conn(x) req_conn(x) req_conn(x) ESTAB ESTAB data(x+1) req_conn(x) accept retransmit data(x+1) data(x+1) connection connection client x completes server client x completes server terminates forgets x forgets x terminates req_conn(x) ESTAB ESTAB data(x+1) accept Kết nối mở một nữa! data(x+1) (không có client!) Tầng Transport 3-79
  80. TCP bắt tay 3-way Trạng thái client Trạng thái server LISTEN LISTEN Chọn số thứ tự ban đầu, x Gửi TCP SYN msg SYNSENT SYNbit=1, Seq=x Chọn số thứ tự ban đầu, y gửi TCP SYNACK msg, acking SYN SYN RCVD SYNbit=1, Seq=y ACKbit=1; ACKnum=x+1 SYNACK(x) vừa được nhận ESTABcho hay server vẫn còn sống; send ACK for SYNACK; this segment may contain ACKbit=1, ACKnum=y+1 client-to-server data ACK(y) vừa được nhận cho hay client vẫn sống ESTAB Tầng Transport 3-80
  81. TCP bắt tay 3-way: FSM closed Socket connectionSocket = welcomeSocket.accept(); L Socket clientSocket = SYN(x) newSocket("hostname","port number"); SYNACK(seq=y,ACKnum=x+1) Tạo socket mới để giao tiếp SYN(seq=x) ngược lại với client listen SYN SYN rcvd sent SYNACK(seq=y,ACKnum=x+1) ESTAB ACK(ACKnum=y+1) ACK(ACKnum=y+1) L Tầng Transport 3-81
  82. TCP: đóng kết nối  Mỗi bên client và server sẽ đóng kết nối bên phía của nó . Gởi TCP segment với FIN bit = 1  Phản hồi bằng ACK cho FIN vừa được nhận . Khi nhận FIN, ACK có thể được kết hợp với FIN của nó  Các trao đổi FIN đồng thời có thể được vận dụng Tầng Transport 3-82
  83. TCP: đóng kết nối Trạng thái client Trạng thái server ESTAB ESTAB clientSocket.close() FIN_WAIT_1 Có thể không FINbit=1, seq=x còn gửi nhưng vẫn còn nhận CLOSE_WAIT dữ liệu ACKbit=1; ACKnum=x+1 Vẫn có thể FIN_WAIT_2 Chờ server gửi dữ liệu đóng LAST_ACK FINbit=1, seq=y TIMED_WAIT Có thể không còn gửi dữ liệu ACKbit=1; ACKnum=y+1 timed wait for 2*max CLOSED segment lifetime CLOSED Tầng Transport 3-83
  84. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-84
  85. Các nguyên lý điều khiển tắc nghẽn (congestion control) Tắc nghẽn:  “nguồn gửi quá nhiều dữ liệu với tốc độ quá nhanh đến mạng để được xử lý”  Khác với điều khiển luồng (flow control)!  Các biểu hiện: . Mất gói (tràn bộ đệm tại các router) . Độ trễ lớn (xếp hàng trong các bộ đệm của router)  1 trong 10 vấn đề khó khăn! Tầng Transport 3-85
  86. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 1 dữ liệu gốc: l in thông lượng: lout  2 gửi, 2 nhận  ộ ệ Host A 1 router, các b đ m Bộ đệm của đường không giới hạn link đầu ra được chia sẽ không giới hạn  Khả năng của đường link đầu ra: R  Không truyền lại Host B R/2 out l delay lin R/2 lin R/2  Thông lượng lớn nhất  Độ trễ lớn khi tốc độ đến, của mỗi kết nối: R/2 lin, vượt tới capacity Tầng Transport 3-86
  87. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2  1 router, các bộ đệm có giới hạn  bên gửi truyền lại các packet bị time-out . application-layer input = application-layer output: lin = lout ‘ . transport-layer input bao gồm việc truyền lại: lin lin lin : data gốc lout l'in: data gốc, cộng với dữ liệu được truyền lại Host A Bộ đệm đường link Host B đầu ra được chia sẽ giới hạn Tầng Transport 3-87
  88. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2 R/2 Lý tưởng hóa: kiến thức hoàn hảo out  Bên gửi chỉ gửi khi bộ l nhớ đệm của router sẵn sàng lin R/2 lin : data gốc copy lout l'in: data gốc, cộng với dữ liệu được truyền lại A free buffer space! Bộ nhớ đệm đường Host B link đầu ra được chia sẽ giới hạn Tầng Transport 3-88
  89. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2 Lý tưởng hóa: các packet bị mất được biết đến có thể bị mất hoặc bị loại bỏ tại router bởi vì bộ nhớ đệm bị đầy  Bên gửi chỉ gởi lại packet được biết đến (known packet) đã bị mất lin : data gốc copy lout l'in: data gốc, cộng với dữ liệu được truyền lại A Không còn bộ nhớ đệm! Host B Tầng Transport 3-89
  90. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2 Lý tưởng hóa: các packet bị R/2 mất được biết đến có thể bị mất hoặc bị loại bỏ tại router Khi gửi tại R/2, một số packet được bởi vì bộ nhớ đệm bị đầy out l truyền lại, nhưng  Bên gửi chỉ gởi lại packet tiệm cận goodput vẫn được biết đến (known là R/2 (tại sao?) R/2 packet) đã bị mất lin lin : data gốc lout l'in: data gốc, cộng với dữ liệu được truyền lại A Không còn bộ nhớ đệm! Host B Tầng Transport 3-90
  91. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2 Thực tế: trùng lặp R/2  ể ị ấ ị ỏ Các packet có th b m t , b b Khi gửi tại R/2, một tại router bởi vì bộ nhớ đệm đầy số packet được out  ờ ử ế l truyền lại, bao gồm Th i gian time out bên g i h t packet bị trùng mà sớm, gởi 2 bản giống nhau, cả 2 đã được gửi đi! đều được gửi đi R/2 lin lin timeoutcopy lout l'in A Không còn bộ nhớ đệm! Host B Tầng Transport 3-91
  92. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 2 Thực tế: trùng lặp R/2  Các packet có thể bị mất , bị bỏ ạ ở ộ ớ ệ ầ Khi gửi tại R/2, một t i router b i vì b nh đ m đ y số packet được out  Thời gian time out bên gửi hết l truyền lại, bao gồm ớ ở ả ố ả packet bị trùng mà s m, g i 2 b n gi ng nhau, c 2 đã được gửi đi! đều được gởi đi R/2 lin “chi phí” của tắc nghẽn:  Nhiều việc (truyền lại) cho “goodput”  Truyền lại không cần thiết: đường link mang nhiều bản sao của packet . Giảm goodput Tầng Transport 3-92
  93. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 3 ’  4 người gởi Hỏi: cái gì xảy ra khi lin và lin tăng?  Các đường qua nhều hop ’ A: khi lin màu đỏ tăng, tất cả packet  timeout/truyền lại màu xanh đến tại hàng đợi phía trên bị loại bỏ, thông lượng màu xanh -> 0 Host A l lin : data gốc out Host B l'in: data gốc, cộng với dữ liệu được truyền lại finite shared output link buffers Host D Host C Tầng Transport 3-93
  94. Nguyên nhân/Chi phí của tắc nghẽn: tình huống 3 C/2 out l ’ lin C/2 “Chi phí” khác của tắc nghẽn  Khi packet bị loại bỏ, bất kỳ “khả năng truyền upstream được sử dụng cho packet đó đều bị lãng phí!” Tầng Transport 3-94
  95. Các phương pháp tiếp cận đối với điều khiển tắc nghẽn 2 phương pháp tiếp cận: Điều khiển tắc Điều khiển tắc nghẽn nghẽn end-end : có sự hỗ trợ của  Không phản hồi rõ mạng (network- ràng từ mạng assisted) :  Tắc nghẽn được suy  Các router cung cấp ra từ việc quan sát phản hồi đến các hệ hệ thống đầu cuối có thống đầu cuối mất mát hoặc bị trễ . Bit đơn chỉ ra tắc nghẽn (SNA, DECbit,  Tiếp cận được thực TCP/IP ECN, ATM) hiện bởi TCP . Tốc độ sẽ gửi của người gửi được xác định rõ ràng Tầng Transport 3-95
  96. Case study: điều khiển tắc nghẽn ATM ABR ABR: available bit Các cell RM (resource rate: management):  “dịch vụ mềm dẻo”  Được gởi bởi bên gửi, được  Nếu đường đi của bên xen kẽ với các cell dữ liệu gửi “chưa hết:  Các bit trong RM cell . Bên gửi sẽ dùng được thiết lập bởi các by băng thông sẵn switche (“network- sàng assisted”)  Nếu đường đi của bên . NI bit: không tăng tốc gửi bị tắc nghẽn: độ (tắc nghẽn nhẹ) . Bên gửi sẽ điều tiết . CI bit: tắc nghẽn rõ rệt với tốc độ tối thiểu  Các cell RM được trả về được bảo đảm bên gửi từ bên nhận với nguyên vẹn các bit Tầng Transport 3-96
  97. Case study: điều khiển tắc nghẽn ATM ABR RM cell data cell  Trường 2 byte ER (tốc độ tường minh) trong cell RM . Switch bị tắc nghẽn có thể có giá trị ER thấp hơn trong cell . Do đó, tốc độ gửi của bên gửi được hổ trợ tối đa trên đường đi  Bit EFCI bit trong cell dữ liệu: được thiết lặp đến 1 trong switch bị tắc nghẽn . Nếu cell dữ liệu đứng trước cell RM có thiết lặp EFCI, bên gửi sẽ cài bit CI trong cell RM trả về Tầng Transport 3-97
  98. Chương 3 Nội dung 3.1 các dịch vụ tầng 3.5 vận chuyển hướng kết Transport nối: TCP 3.2 multiplexing và . Cấu trúc segment demultiplexing . Truyền dữ liệu tin cậy 3.3 vận chuyển phi kết . Điều khiển luồng (flow nối: UDP control) . Quản lý kết nối 3.4 các nguyên lý truyền dữ liệu tin 3.6 các nguyên lý về điều cậy khiển tắc nghẽn 3.7 điều khiển tắc nghẽn TCP Tầng Transport 3-98
  99. TCP điều khiển tắc nghẽn: additive increase, multiplicative decrease  Hướng tiếp cận: bên gửi tăng tốc độ truyền (kích thước cửa sổ), thăm dò băng thông có thể sử dụng, cho đến khi mất mát gói xảy ra . additive increase: tăng cwnd bởi 1 MSS mỗi RTT cho đến khi mất gói xảy ra . multiplicative decrease: giảm ½ cwnd sau khi mất gói xảy ra additively increase window size . Cho đến khi mất gói xảy ra (thì giảm 1/2 kích thước cửa sổ) AIMD saw tooth behavior: thăm dò băng thông sender TCP cwnd: congestion window congestion window size time Tầng Transport 3-99
  100. TCP điều khiển tắc nghẽn: chi tiết sender sequence number space TCP tốc độ gửi: cwnd  Ước lượng: gửi các byte cwnd, đợi ACK trong khoảng thời last byte last byte ACKed sent, not- sent gian RTT, sau đó gởi yet ACKed (“in- thêm các byte flight”) cwnd  rate ~ bytes/sec Bên gửi giới hạn truyền tải: RTT LastByteSent- < cwnd LastByteAcked  cwnd thay đổi, chức năng nhận biết tắc nghẽn trên mạng Tầng Transport 3-100
  101. TCP Slow Start Host A Host B  Khi kết nối bắt đầu, tăng tốc độ theo cấp số nhân cho đến sự kiện mất gói đầu tiên xảy ra: RTT . initially cwnd = 1 MSS . Gấp đôi cwnd mỗi RTT . Được thực hiện bằng cách tăng cwnd cho mỗi ACK nhận được  Tóm lại: tốc độ ban đầu chậm, nhưng nó sẽ tăng lên theo cấp số nhân time Tầng Transport 3-101
  102. TCP: phát hiện, phản ứng khi mất gói  Mất gói được chỉ ra bởi timeout: . cwnd được thiết lặp 1 MSS; . Sau đó kích thước cửa sổ sẽ tăng theo cấp số nhân (như trong slow start) đến ngưỡng, sau đó sẽ tăng tuyến tính  Mất gói được xác định bởi 3 ACK trùng nhau: TCP RENO . Các ACK trùng lặp chỉ ra khả năng truyền của mạng . cwnd bị cắt một nữa sau đó tăng theo tuyến tính  TCP Tahoe luôn luôn thiết lặp cwnd bằng 1(timeout hoặc 3 ack trùng nhau) Tầng Transport 3-102
  103. TCP: chuyển từ slow start qua CA Hỏi: khi nào tăng cấp số nhân nên chuyển qua tuyến tính? Trả lời: khi cwnd được 1/2 giá trị của nó trước thời gian timeout. Thực hiện:  ssthresh thay đổi  Khi mất gói, ssthresh được thiết lặp về chỉ 1/2 của cwnd trước khi mất gói Tầng Transport 3-103
  104. Tóm tắt: TCP điều khiển tắc nghẽn New New new ACK ACK! ACK trùng ACK! cwnd = cwnd + MSS. (MSS/cwnd) dupACKcount++ new ACK dupACKcount = 0 cwnd = cwnd+MSS Truyền segment(s) mới, khi được phép dupACKcount = 0 L Truyền segment(s) mới, khi được phép cwnd = 1 MSS ssthresh = 64 KB cwnd > ssthresh dupACKcount = 0 slow L congestion start timeout avoidance ssthresh = cwnd/2 cwnd = 1 MSS duplicate ACK timeout dupACKcount = 0 dupACKcount++ Truyền lại segmentt thiếu ssthresh = cwnd/2 cwnd = 1 MSS dupACKcount = 0 Truyền lại segmentt thiếu timeout New ACK! ssthresh = cwnd/2 cwnd = 1 New ACK dupACKcount = 0 Truyền lại segmentt thiếu cwnd = ssthresh dupACKcount == 3 dupACKcount == 3 dupACKcount = 0 ssthresh= cwnd/2 ssthresh= cwnd/2 cwnd = ssthresh + 3 cwnd = ssthresh + 3 Truyền lại segmentt thiếu Truyền lại segmentt thiếu fast recovery duplicate ACK cwnd = cwnd + MSS Truyền segment(s) mới, khi được phép Tầng Transport 3-104
  105. TCP thông lượng (throughtput)  Thông lượng trung bình của TCP như là chức năng của kích thước cửa sổ và RTT? . Bỏ qua slow start, giả sử dữ liệu luôn luôn được gởi  W: kích thước cửa sổ (được đo bằng byte) khi mất gói xảy ra . Kích thước cửa sổ trung bình (# in-flight bytes) là ¾ W . Thông lượng trung bình là 3/4W mỗi RTT 3 W avg TCP thruput = bytes/sec 4 RTT W W/2 Tầng Transport 3-105
  106. TCP tương lai: TCP qua “ống lớn và dài”  Ví dụ: segment 1500 byte, 100ms RTT, muốn thông lượng 10 Gbps  Kích thước cửa sổ yêu cầu W = 83,333 segment trên đường truyền  Thông lượng trong các trường hợp mất gói, L [Mathis 1997]: . TCP throughput = 1.22 MSS RTT L ➜ để đạt thông lượng 10 Gbps, cần thì lệ mất gói là L = 2·10-10 – một tỷ lệ mất gói rất nhỏ!  Phiên bản mới của TCP cho tốc độ cao Tầng Transport 3-106
  107. TCP Công bằng Mục tiêu công bằng: nếu có K session TCP chia sẽ cùng đường link bị bóp cổ chai của băng thông R, thì mỗi phiên nên có tốc độ trung bình là R/K Kết nối TCP 1 Router cổ chai Khả năng R Kết nối TCP 2 Tầng Transport 3-107
  108. Tại sao TCP là công bằng? 2 session cạnh tranh nhau:  additive increase cho độ dốc tăng 1, khi thông lượng tăng  multiplicative decrease giảm thông lượng tương úng R Chia sẽ băng thông bằng nhau Mất gói: giảm một nữa kích thước cửa sổ Tránh tắc nghẽn: additive increase Mất gói: giảm một nữa kích thước cửa sổ Tránh tắc nghẽn: additive increase Connection 1 throughput R Tầng Transport 3-108
  109. Công bằng (tt) Công bằng và UDP Công bằng, các kết nối TCP  Nhiều ứng dụng song song thường không dùng  ứng dụng có thể mở TCP nhiều kết nối song song . Không muốn tốc độ giữa 2 host bị điều tiết do điều khiển tắc nghẽn  Trình duyệt web làm điều này  Thay bằng dùng UDP:  Ví dụ: đường link với tốc . Truyền audio/video độ R hỗ trợ 9 kết nối: với tốc độ ổn định, . ứng dụng mới yêu cầu 1 TCP, có chịu được mất gói tốc độ R/10 . ứng dụng mới yêu cầu 11 TCPs, có tốc độ R/2 Tầng Transport 3-109
  110. Chương 3: Tóm tắt  Các nguyên lý của các dịch vụ tầng transport layer : . multiplexing, demultiplexing Kế tiếp: . Truyền dữ liệu tin cậy  Tìm hiểu xong . Điều khiển luồng (flow các vấn đề mạng control) “biên” (các tầng . Điều khiển tắc nghẽn application, (congestion control) transport)  Khởi tạo và thực hiện trên  Chuẩn bị vào Internet phần mạng “lõi” . UDP . TCP Tầng Transport 3-110