Bài giảng môn Mạng máy tính - Chương 3: Tầng giao vận
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Mạng máy tính - Chương 3: Tầng giao vận", để 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:
- bai_giang_mon_mang_may_tinh_chuong_3_tang_giao_van.pdf
Nội dung text: Bài giảng môn Mạng máy tính - Chương 3: Tầng giao vận
- Chương 3. Tầng giao vận 1 1. Tổng quan về tầng giao vận Nhắc lại kiến trúc phân tầng Hướng liên kết vs. Không liên kết UDP & TCP 2 1
- Nhắc lại về kiến trúc phân tầng Application Hỗ trợ các ứng dụng trên mạng (HTTP, Mail, ) Transport Điều khiển truyền dữ liệu giữa các tiến trình (UDP, TCP) của tầng ứng dụng Network Chọn đường và chuyển tiếp gói tin giữa (IP, ICMP ) các máy, các mạng Datalink Hỗ trợ việc truyền thông cho các thành (Ethernet, ADSL ) phần kế tiếp trên cùng 1 mạng Physical Truyền và nhận dòng bit trên đường (bits ) truyền vật lý 3 Tổng quan về tầng giao vận (1) application Cung cấp phương tiện truyền transport network giữa các ứng dụng cuối data link physical Bên gửi: Nhận dữ liệu từ ứng dụng Đặt dữ liệu vào các gói tin và chuyển cho tầng mạng Nếu dữ liệu quá lớn, nó sẽ được chia làm nhiều phần và đặt vào nhiều đoạn tin khác nhau application Bên nhận: transport network data link Nhận các đoạn tin từ tầng mạng physical Tập hợp dữ liệu và chuyển lên cho ứng dụng 4 2
- Tổng quan về tầng giao vận (2) application Được cài đặt trên các hệ transport network thống cuối data link physical network Không cài đặt trên các network data link data link physical physical routers, switches network data link physical Hai dạng dịch vụ giao vận network data link Tin cậy, hướng liên kết, e.g physical network TCP data link physical network Không tin cậy, không liên kết, data link application physical network transport e.g. UDP data link network physical data link physical Đơn vị truyền: datagram (UDP), segment (TCP) 5 Tại sao lại cần 2 loại dịch vụ? Các yêu cầu đến từ tầng ứng dụng là đa dạng Các ứng dụng cần dịch vụ với 100% độ tin cậy như mail, web Sử dụng dịch vụ của TCP Các ứng dụng cần chuyển dữ liệu nhanh, có khả năng chịu lỗi, e.g. VoIP, Video Streaming Sử dụng dịch vụ của UDP 6 3
- Ứng dụng và dịch vụ giao vận Giao thức Giao thức Ứng dụng ứng dụng giao vận e-mail SMTP TCP remote terminal access Telnet TCP Web HTTP TCP file transfer FTP TCP streaming multimedia giao thức riêng TCP or UDP (e.g. RealNetworks) Internet telephony giao thức riêng (e.g., Vonage,Dialpad) thường là UDP 7 2. Các chức năng chung Dồn kênh/phân kênh Mã kiểm soát lỗi 8 4
- Dồn kênh/phân kênh - Mux/Demux Gửi: Dồn kênh Nhận dữ liệu từ các tiến trình Nhận: Phân kênh tầng ứng dụng khác nhau (qua socket), đóng gói theo giao Sử dụng thông tin trên tiêu thức tầng giao vận và gửi trên đề gói tin để gửi dữ liệu tới liên kết mạng đúng socket application application P1 P2 application socket P3 P4 transport process transport network transport network link network link physical link physical physical 9 Mux/Demux hoạt động ntn? 32 bits source IP address Nút mạng nhận gói tin với các Network địa chỉ: destination IP address Địa chỉ IP nguồn (other header fields) Địa chỉ IP đích Số hiệu cổng nguồn Transport source port # dest port # Số hiệu cổng đích Địa chỉ IP và số hiệu cổng other header fields được sử dụng để xác định socket nhận dữ liệu Application segment of application data (payload) 10 5
- Checksum Phát hiện lỗi bit trong các đoạn tin/gói tin Gửi:(nguyên lý chung) Chia dữ liệu thành các phần có kích thước n bit Tính tổng các phần. Nếu kết quả tràn quá n bit, cộng các bit tràn vào phần kết quả Đảo bit kết quả cuối cùng được checksum Truyền checksum kèm theo dữ liệu Nhận: Tách dữ liệu và checksum Chia dữ liệu thành các phần có kích thước n bit Tính tổng các phần và checksum. Nếu kết quả tràn quá n bit, cộng các bit tràn vào phần kết quả Nếu kết quả cuối xuất hiện bit 0 dữ liệu bị lỗi 11 3.UDP (User Datagram Protocol) Tổng quan Khuôn dạng gói tin 12 6
- Đặc điểm chung Giao thức hướng không kết nối (connectionless) Truyền tin “best-effort”: chỉ gửi 1 lần, không phát lại Vì sao cần UDP? Không cần thiết lập liên kết (giảm độ trễ) Đơn giản: Không cần lưu lại trạng thái liên kết ở bên gửi và bên nhận Phần đầu đoạn tin nhỏ Không có quản lý tắc nghẽn: UDP cứ gửi dữ liệu nhanh nhất, nhiều nhất nếu có thể UDP có những chức năng cơ bản gì? Dồn kênh/phân kênh Phát hiện lỗi bit bằng checksum 13 Khuôn dạng bức tin (datagram) UDP sử dụng đơn vị 32 bits dữ liệu gọi là – source port # dest port # datagram (bức tin) length checksum Độ dài toàn bộ bức tin tính theo byte Application data (message) Khuôn dạng đơn vị dữ liệu của UDP 14 7
- mux/demux trên ứng dụng UDP Mỗi tiến trình chỉ cần sử dụng một socket duy nhất để trao đổi dữ liệu với các tiến trình khác Host B Host A Host C application application P1 application P2 P3 transport transport transport network network link network link physical link physical physical source port: 6428 source port: 6428 dest port: 9157 dest port: 5775 source port: 9157 source port: 5775 dest port: 6428 dest port: 6428 15 Các vấn đề của UDP Không có kiểm soát tắc nghẽn Làm Internet bị quá tải Không bảo đảm được độ tin cậy Các ứng dụng phải cài đặt cơ chế tự kiểm soát độ tin cậy Việc phát triển ứng dụng sẽ phức tạp hơn 16 8
- 4. TCP (Transmission Control Protocol) 17 4.1.Khái niệm về truyền thông tin cậy 18 9
- Kênh có lỗi bit, không bị mất tin Phát hiện lỗi? Checksum Làm thế nào để báo cho bên gửi? ACK (acknowledgements): gói tin được nhận thành công NAK (negative acknowledgements): gói tin bị lỗi Phản ứng của bên gửi? Truyền lại nếu là NAK 19 Hoạt động stop-and-wait Sender Receiver send pkt pkt is OK send ACK rcv ACK send next packet pkt is corrupted send NAK rcv NAK resend pkt Time Time 20 10
- Lỗi ACK/NAK Sender Receiver Cần truyền lại Xử lý việc lặp gói tin ntn? send pkt0 pkt0 is OK Thêm Seq.# send ACK rcv ACK send pkt1 pkt1 is OK send ACK rcv sth corrupted! resend pkt1 rcv pkt1 duplicate, discard it Time Time 21 Giải pháp không dùng NAK Sender Receiver send pkt0 pkt0 is OK send ACK0 rcv ACK0 send pkt1 Gói tin nhận pkt1 is OK Nhận được được lỗi rcv ACK1 ACK với Seq# send ACK1 gửi lại ACK không đổi send pkt2 trước đó gửi lại gói tin pkt2 is corrupted rcv ACK1 send ACK1 resend pkt2 Time Time 22 11
- Kênh có lỗi bit và mất gói tin Dữ liệu và ACK có thể bị mất Nếu không nhận được ACK? Truyền lại như thế nào? Timeout! Thời gian chờ là bao lâu? Ít nhất là 1 RTT (Round Trip Time) Mỗi gói tin gửi đi cần 1 timer Nếu gói tin vẫn đến đích và ACK bị mất? Dùng số hiệu gói tin 23 Minh họa sender receiver sender receiver send pkt0 pkt0 send pkt0 pkt0 rcv pkt0 rcv pkt0 ack0 send ack0 ack0 send ack0 rcv ack0 rcv ack0 send pkt1 pkt1 send pkt1 pkt1 rcv pkt1 X ack1 send ack1 loss rcv ack1 send pkt2 pkt2 rcv pkt2 timeout ack2 send ack2 resend pkt1 pkt1 rcv pkt1 ack1 send ack1 rcv ack1 send pkt2 pkt2 (a) Không có mất gói tin rcv pkt2 ack2 send ack2 (b) mất gói tin gửi đi 24 12
- Hiểu nhầm đây là ack cho Minh họa gói tin pkt1 gửi lại trước đó sender receiver sender receiver send pkt0 pkt0 send pkt0 rcv pkt0 pkt0 send ack0 rcv pkt0 ack0 send ack0 rcv ack0 ack0 send pkt1 pkt1 rcv ack0 rcv pkt1 send pkt1 pkt1 rcv pkt1 send ack1 ack1 send ack1 ack1 X loss timeout resend pkt1 pkt1 timeout rcv pkt1 resend pkt1 pkt1 rcv ack1 pkt2 (detect duplicate) rcv pkt1 send pkt2 send ack1 (detect duplicate) ack1 ack1 send ack1 rcv ack1 rcv pkt2 rcv ack1 ack2 send ack2 send pkt2 pkt2 send pkt2 pkt2 rcv pkt2 rcv pkt2 ack2 (detect duplicate) ack2 send ack2 send ack2 (c) mất ACK báo nhận Hiểu nhầm đây là (d) timeout sớm/ACK tới trễ ack báo lỗi pkt2 25 Hiệu năng của stop-and-wait sender receiver bit đầu tiên được gửi đi t = 0 bit cuối cùng được gửi đi t = L / R bit đầu tiên tới đích RTT bit cuối cùng tới đích Nhận được ACK, gửi gói tiếp theo t = RTT + L / R time time L: Kích thước gói tin / = R: Băng thông + / RTT: Round trip time 26 13
- Pipeline Gửi liên tục một lượng hữu hạn các gói tin mà không cần chờ ACK . Số thứ tự các gói tin phải tăng dần . Dữ liệu gửi đi chờ sẵn ở bộ đệm gửi . Dữ liệu tới đích chờ ở bộ đệm nhận 27 Hiệu năng của pipeline sender receiver bit đầu tiên được gửi đi 0 bit cuối cùng được gửi đi L / R RTT các gói tin tới đích Nhận được ACK, gửi gói tiếp theo RTT + L / R time time L: Kích thước gói tin R: Băng thông ∗ / = RTT: Round trip time + / n: Số gói tin gửi liên tục 28 14
- Go-back-N Cửa sổ gửi #Seq kích thước Swnd đã gửi, đã nhận ACK đang gửi đã gửi, chưa gửi chưa nhận ACK Bên gửi Bên nhận • Chỉ gửi gói tin trong cửa sổ. • Gửi ACKi cho gói tin pkti đã Chỉ dùng 1 bộ đếm (timer) cho nhận được theo thứ tự gói tin đầu tiên trong cửa sổ • Gói tin đến không theo thứ • Nếu nhận được ACKi, dịch tự: hủy gói tin và gửi lại cửa sổ sang vị trí (i+1). Đặt lại ACK của gói tin gần nhất timer còn đúng thứ tự • Nếu timeout cho gói tin pkti gửi lại tất cả gói tin trong cửa sổ 29 Go-back-N sender window (N=4) sender receiver 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 30 15
- Selective Repeat Cửa sổ gửi #Seq kích thước Swnd đã gửi, đã nhận ACK đang gửi đã gửi, chưa nhận chưa gửi ACK Cửa sổ nhận đã nhận, kích thước Rwnd đã nhận đúng #Seq chưa đúng thứ tự thứ tự chưa nhận Gửi: chỉ gửi gói tin trong cửa sổ gửi Nhận: chỉ nhận gói tin trong cửa sổ nhận Sử dụng bộ đệm để lưu tạm thời các gói tin tới chưa đúng thứ tự 31 Selective Repeat Bên gửi Bên nhận Chỉ gửi gói tin trong cửa Chỉ nhận gói tin trong cửa sổ gửi sổ nhận Dùng 1 timer cho mỗi gói Nhận pkti: tin trong cửa sổ Gửi lại ACKi Nếu timeout cho gói tin Không đúng thứ tự: đưa vào bộ đệm pkti chỉ gửi lại pkti Đúng thứ tự: chuyển cho Nhận được ACKi: tầng ứng dụng cùng với các Đánh dấu pkti đã có ACK gói tin trong bộ đệm đã trở Nếu i là giá trị nhỏ nhất thành đúng thứ tự sau khi trong các gói tin chưa nhận nhận pkti ACK, dịch cửa sổ sang vị trí gói tin tiếp theo chưa nhận ACK 32 16
- Selective Repeat Điều gì xảy ra nếu kích thước cửa số lớn hơn ½ giá trị Seq# lớn nhất? sender window (N=4) sender receiver 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, buffer, 0 1 2 3 4 5 6 7 8 rcv ack0, send pkt4 send ack3 0 1 2 3 4 5 6 7 8 rcv ack1, send pkt5 receive pkt4, buffer, send ack4 record ack3 arrived receive pkt5, buffer, send ack5 pkt 2 timeout 0 1 2 3 4 5 6 7 8 send pkt2 0 1 2 3 4 5 6 7 8 record ack4 arrived rcv pkt2; deliver pkt2, 0 1 2 3 4 5 6 7 8 record ack5 arrived 0 1 2 3 4 5 6 7 8 pkt3, pkt4, pkt5; send ack2 Điều gì xảy ra nếu ack2 tới bên gửi 33 Kích thước cửa sổ quá lớn sender receiver Giả sử Seq# = {0, 1 , 2 0 1 2 3 0 1 2 pkt0 ,3} 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 Kích thước cửa sổ: 3 0 1 2 3 0 1 2 0 1 2 3 0 1 2 pkt3 X Phía nhận không phân 0 1 2 3 0 1 2 pkt0 will accept packet biệt được 2 trường hợp (a) pkt0 là gói tin mới with seq number 0 Trong trường hợp b, gói tin pkt0 gửi lại được bên sender receiver nhận coi như gói tin mới, 0 1 2 3 0 1 2 pkt0 0 1 2 3 0 1 2 pkt1 0 1 2 3 0 1 2 đưa vào bộ đệm chờ xử 0 1 2 3 0 1 2 pkt2 0 1 2 3 0 1 2 lý X 0 1 2 3 0 1 2 X timeout retransmit pkt0 X 0 1 2 3 0 1 2 pkt0 will accept packet with seq number 0 (b) pkt0 là gói tin bị lặp 34 17
- 4.2. Hoạt động của TCP Cấu trúc đoạn tin TCP Quản lý liên kết Kiểm soát luồng Kiểm soát tắc nghẽn 35 Tổng quan về TCP Giao thức hướng liên kết Bắt tay ba bước Giao thức truyền dữ liệu theo dòng byte, tin cậy Sử dụng vùng đệm Truyền theo kiểu pipeline Tăng hiệu quả Kiểm soát luồng Bên gửi không làm quá tải bên nhận Kiểm soát tắc nghẽn Việc truyền dữ liệu không nên làm tắc nghẽn mạng 36 18
- Khuôn dạng đoạn tin - TCP segment 32 bits URG: Dữ liệu khẩn source port # dest port # - Dùng để truyền dữ liệu tin cậy sequence number ACK: ACK # - Tính theo bytes acknowledgement number head not PSH: Chuyển dữ liệu UAPRS F Receive window len used -Số lượng bytes ngay checksum Urg data pointer có thế nhận - Điều khiển luồng RST, SYN, FIN: Options (variable length) Ký hiệu cho các gói tin đặc biệt application data (variable length) 37 mux/demux trên ứng dụng TCP Sử dụng socket khác nhau để trao đổi với các tiến trình khác nhau multi-thread server application application application P4 P1 P2 P3 transport transport transport network network link network link physical link physical server: IP physical address B client: IP source IP,port: B,80 client: IP address A dest IP,port: A,9157 source IP,port: C,5775 address C dest IP,port: B,80 source IP,port: A,9157 dest IP, port: B,80 source IP,port: C,9157 dest IP,port: B,80 38 19
- Thông số của liên kết TCP Mỗi một liên kết TCP giữa hai tiến trình được xác định bởi bộ 4 thông số (4-tuple): Địa chỉ IP nguồn Tầng mạng Địa chỉ IP đích Số hiệu cổng nguồn Tầng giao vận Số hiệu cổng đích 39 TCP cung cấp dịch vụ tin cậy ntn? Kiểm soát lỗi dữ liệu: checksum Kiểm soát mất gói tin: phát lại khi có time-out Kiểm soát dữ liệu đã được nhận chưa: Seq. # Cơ chế báo nhận Ack Chu trình làm việc của TCP: Thiết lập liên kết Bắt tay ba bước Truyền/nhận dữ liệu: có thể thực hiện đồng thời(duplex) trên liên kết Đóng liên kết 40 20
- Thiết lập liên kết TCP : Giao thức bắt tay 3 bước Bước 1: A gửi SYN cho B A B chỉ ra giá trị khởi tạo seq # của A không có dữ liệu Bước 2: B nhận SYN, trả lời bằng SYN/ACK esta- B khởi tạo vùng đệm blished chỉ ra giá trị khởi tạo seq. # của B esta- blished Bước 3: A nhận SYNACK, trả lời ACK, có thể kèm theo dữ liệu Tại sao không dùng giao thức bắt tay 2 bước 41 Cơ chế báo nhận trong TCP Gói tin gửi đi ở phía gửi sequence numbers: source port # dest port # sequence number .Vị trí của byte đầu tiên acknowledgement number trên payload của gói tin rwnd (segment) trong luồng checksum urg pointer Kích thước cửa sổ dữ liệu N Chuỗi Seq# ở phía gửi đã gửi đã gửi đang chưa đã nhận chưa nhận gửi gửi ACK ACK acknowledgements: Gói tin báo nhận source port # dest port # .Vị trí của byte tiếp theo sequence number muốn nhận trong luồng acknowledgement number dữ liệu A rwnd checksum urg pointer 42 21
- Cơ chế báo nhận trong TCP Host A Host B Seq. #: Số hiệu của byte User đầu tiên của đoạn types tin trong dòng dữ ‘computer’ liệu Gửi ACK ACK: báo nhận Số hiệu byte đầu tiên mong muốn host ACKs receipt nhận từ đối tác User types ‘network’ time 43 Đóng liên kết A B A state B state ESTAB ESTAB close(socket) FIN_WAIT_1 không gửi tiếp FIN, seq=x nhưng vẫn nhận CLOSE_WAIT dữ liệu ACK, ACKnum=x+1 có thể tiếp tục FIN_WAIT_2 đợi nhận FIN gửi dữ liệu từ server LAST_ACK FIN, seq=y TIMED_WAIT ngừng gửi dữ liệu đợi trong ACK, ACKnum=y+1 2 x thời gian gửi MSS CLOSED CLOSED 44 22
- Chu trình sống của TCP (đơn giản hóa) Server application Creates a listen socket CLOSED Wait Receive ACK CLOSED Send nothing Send SYN TIME_WAIT SYN_SENT LAST_ACK LISTEN Receive FIN Receive SYN/ACK Receive SYN Send ACK Send ACK Send FIN Send SYN/ACK FIN_WAIT_2 ESTABLISHED CLOSE_WAIT SYN_RCVD Send FIN Receive ACK Send nothing Receive FIN Receive ACK FIN_WAIT_1 Send ACK ESTABLISHED Send nothing Client application Initiates close connection 45 Pipeline trong TCP Go-back-N hay Selective Repeat? Bên gửi: Nếu nhận được ACK# = i thì coi tất cả gói tin trước đó đã tới đích (ngay cả khi chưa nhận được các ACK# < i). Dịch cửa sổ sang vị trí i Nếu có timeout của gói tin Seq# = i chỉ gửi lại gói tin đó Bên nhận: Đưa vào bộ đệm các gói tin không đúng thứ tự và gửi ACK thuật toán lai 46 23
- TCP: Hoạt động của bên gửi Nhận dữ liệu từ tầng timeout: ứng dụng Gửi lại gói tin bị timeout Đóng gói dữ liệu vào gói Khởi động lại bộ đếm tin TCP với giá trị Seq# tương ứng Nhận ACK# = i Tính toán và thiết lập giá trị TimeOutInterval Nếu là ACK cho gói tin nằm bên trái cửa sổ bỏ qua cho bộ đếm thời gian Ngược lại, trượt cửa sổ sang (timer) vị trí i Gửi gói tin TCP xuống Khởi động timer cho gói tin kế tầng mạng và khởi động tiếp đang chờ ACK bộ đếm cho gói đầu tiên trong cửa sổ 47 Tính toán timeout Dựa trên giá trị RTT (> 1 RTT) Nhưng RTT thay đổi theo từng lượt gửi Timeout quá dài: hiệu năng giảm Timeout quá ngắn: không đủ thời gian để ACK báo về Ước lượng RTT EstimatedRTTi = *EstimatedRTTi-1 + (1- )*SampleRTTi-1 EstimatedRTT: RTT ước lượng SampleRTT: RTT đo được 0 < < 1: Jacobson đề nghị = 0.875 48 24
- Tính toán timeout Độ lệch: DevRTTi = (1-)*DevRTTi-1 + *|SampleRTTi-1 - EstimatedRTTi-1| Jacobson đề nghị = 0.25 Timeout: TimeOutIntervali = EstimatedRTTi + 4*DevRTTi 49 Ước lượng RTT – Ví dụ Packet# Estimated DevRTT TimeoutInt SampleR RTT(ms) (ms) erval(ms) TT(ms) 1 40 20 120 80 15 2 45 25 145 3 4 5 ? 50 25
- Phát lại như thế nào? Host A Host B Host A Host B Seq=92, 8 bytes of data Seq=92, 8 bytes of data Seq=100, 20 bytes of data ACK=100 timeout X timeout ACK=100 ACK=120 Seq=92, 8 bytes of data Seq=92, 8 bytes of data ACK=100 ACK=120 timeout timeout mất ACK timeout quá ngắn 51 Phát lại như thế nào? (tiếp) Host A Host B Seq=92, 8 bytes of data Seq=100, 20 bytes of data ACK=100 X timeout ACK=120 Seq=120, 15 bytes of data ACK tích lũy 52 26
- Hoạt động của bên nhận Sự kiện Hành động Nhận 1 gói tin với Seq# = i Đợi 500ms, nếu không có đúng thứ tự gói kế tiếp, gửi ACK = i+Kích thước dữ liệu nhận được Nhận 1 gói tin với Seq# = i đúng thứ tự, trong khi Gửi ACK tích lũy ACK# = i chưa gửi ACK gói tin đã + Kích thước dữ liệu nhận nhận thành công trước đó được Nhận 1 gói tin với Seq# = i Gửi ACK# = i + N + Kích đúng thứ tự, trong bộ đệm thước dữ liệu nhận được còn gói tin với Seq# = i+N trên gói tin N Nhận gói tin không đúng Hồi phục nhanh thứ tự 53 Hồi phục nhanh Host A Host B Thời gian timeout khá dài có thể làm giảm hiệu năng Cơ chế hồi phục nhanh: Seq=92, 8 bytes of data Seq=100, 20 bytes of data Bên nhận: Khi nhận gói tin X không đúng thứ tự, gửi liên tiếp 2 gói tin lặp lại ACK# của ACK=100 gói tin còn đúng thứ tự trước ACK=100 đó timeout ACK=100 Bên gửi: Nhận được 3 ACK# Seq=100, 20 bytes of data liên tiếp giống nhau, gửi lại ngay gói tin mà không chờ time-out 54 27
- 3.3. Kiểm soát luồng 55 Kiểm soát luồng (1) A A B B Chậm Quá tải 56 28
- Kiểm soát luồng (2) Điều khiển lượng dữ liệu được gửi đi Bảo đảm rằng hiệu quả là tốt Không làm quá tải các bên Các bên sẽ có cửa sổ kiểm soát Rwnd: Cửa sổ nhận Cwnd: Cửa sổ kiểm soát tắc nghẽn Lượng dữ liệu gửi đi phải nhỏ hơn min(Rwnd, Cwnd) 57 Kiểm soát luồng trong TCP Kích thước vùng đệm trống = Rwnd = RcvBuffer-[LastByteRcvd - LastByteRead] 58 29
- Trao đổi thông tin về Rwnd A B Bên nhận sẽ báo cho bên gửi biết Rwnd trong các đoạn tin Bên gửi đặt kích thước cửa sổ gửi theo Rwnd 59 Tính công bằng trong TCP Nếu có K kết nối TCP chia sẻ đường truyền có băng thông R thì mỗi kết nối có tốc độ truyền trung bình là R/K TCP connection 1 bottleneck router capacity R TCP connection 2 60 30
- 4.4. Điều khiển tắc nghẽn trong TCP 61 Tổng quan về tắc nghẽn Khi nào tắc nghẽn xảy ra ? Quá nhiều cặp gửi-nhận trên mạng Truyền quá nhiều làm cho mạng quá tải Hậu quả của việc nghẽn mạng Mất gói tin Thông lượng giảm, độ trễ tăng Tình trạng của mạng sẽ trở nên tồi tệ hơn. Congestion occur 62 31
- Nguyên lý kiểm soát tắc nghẽn Slow-start cwnd Tăng tốc độ theo hàm số mũ 20 Tiếp tục tăng đến một 18 Threshold=16 ngưỡng nào đó 16 14 Tránh tắc nghẽn 12 SS Tăng dẫn tốc độ theo hàm 10 tuyến tính cho đến khi phát 8 hiện tắc nghẽn 6 4 Phát hiện tắc nghẽn 2 Gói tin bị mất 63 TCP Slow Start (1) Ý tưởng cơ bản Đặt cwnd bằng 1 MSS (Maximum segment size) 1460 bytes (giá trị này có thể được thỏa thuận trong quá trình thiết lập liên kết) Tăng cwnd lên gấp đôi Khi nhận được ACK Bắt đầu chậm, nhưng tăng theo hàm mũ Tăng cho đến một ngưỡng: ssthresh Sau đó, TCP chuyển sang trạng thái tránh tắc nghẽn 64 32
- TCP Slow Start (2) Host A Host B RTT time 65 Tránh tắc nghẽn - Congestion avoidance Host A Host B ý tưởng cơ bản Tăng cwnd theo cấp số cộng sau khi RTT nó đạt tới ssthresh Khi bên gửi nhận được ACK Tăng cwnd thêm 1 MSS time 66 33
- Phản ứng của TCP (1) Giảm tốc độ gửi Phát hiện tắc nghẽn? Nếu như phải truyền lại Có thể đoán mạng đang có “tắc nghẽn” Khi nào thì phải truyền lại? Timeout! Nhận được nhiều ACK cùng ACK# 67 Phản ứng của TCP (2) Khi có timeout của bên gửi TCP đặt ngưỡng ssthresh xuống còn một nửa giá trị hiện tại của cwnd TCP đặt cwnd về 1 MSS TCP chuyển về slow start Hồi phục nhanh: Nút nhận: nhận được 1 gói tin không đúng thứ tự thì gửi liên tiếp 3 ACK giống nhau. Nút gửi: nhận được 3 ACK giống nhau TCP đặt ngưỡng ssthresh xuống còn một nửa giá trị hiện tại của cwnd TCP đặt cwnd về giá trị hiện tại của ngưỡng mới TCP chuyển trạng thái “congestion avoidance” 68 34
- Kiểm soát tắc nghẽn – minh họa cwnd 22 Timeout 20 18 Threshold=16 Threshold is set to half of cwnd (20) 16 And slow start starts 14 3 ACKs 12 SS Threshold=10 Threshold is set to half of cwnd (12) 10 AI And additive increase starts 8 SS AI 6 Threshold=6 4 AI 2 Step 69 Tổng kết Có hai dạng giao thức giao vận UDP và TCP Best effort vs. reliable transport protocol Các cơ chế bảo đảm độ tin cậy Báo nhận Truyền lại Kiểm soát luồng và kiểm soát tắc nghẽn 70 35
- Tài liệu tham khảo Keio University “Computer Networking: A Top Down Approach”, J.Kurose “Computer Network”, Berkeley University 71 36