Bài giảng Mạng máy tính - Chương 3: Tầng giao vận
3.1 Các dịch vụ tầng
giao vận
3.2 Multiplexing và
demultiplexing
3.3 Dịch vụ không
hướng kết nối: UDP
3.4 Các nguyên tắc của
truyền dữ liệu tin cậy
3.5 Dịch vụ hướng kết
nối: TCP
Cấu trúc segment
Truyền dữ liệu tin cậy
Điều khiển luồng
Quản lý kết nối
3.6 Các nguyên tắc của
điều khiển tắc nghẽn
3.7 Điều khiển tắc nghẽn
của TC
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 giao vận", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Mạng máy tính - Chương 3: Tầng giao vận
1-1 Mạng máy tính Bộ môn Kỹ thuật máy tính và Mạng Khoa Công nghệ Thông tin Đại học Sư phạm Hà Nội 1-2 Chương 3: Tầng giao vận Mục đích: Hiểu các nguyên tắc bên trong dịch vụ của tầng giao vận: Multiplexing/Demultiple xing Truyền dữ liệu tin cậy Điều khiển luồng Điều khiển tắc nghẽn Học về giao thức tầng giao vận trong Internet: UDP: không hướng kết nối TCP: hướng kết nối Điều khiển tắc nghẽn của TCP 1-3 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-4 Các giao thức và dịch vụ tầng giao vận Cung cấp truyền thông lô-gíc giữa các tiến trình ứng dụng chạy trên các host khác nhau Các giao thức giao vận chạy trên các hệ thống cuối Bên gửi: chia các bản tin ứng dụng thành các segment, chuyển tới tầng mạng Bên nhận: ghép các segment thành bản tin, chuyển lên tầng ứng dụng Nhiều hơn một giao thức giao vận cho ứng dụng Internet: TCP và UDP application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physicalnetwork data link physical 1-5 Tầng giao vận và tầng mạng Tầng mạng: truyền thông lô- gíc giữa các host Tầng giao vận: truyền thông lô-gíc giữa các tiến trình dựa trên dịch vụ của tầng mạng Tương tự hộ gia đình: 12 đứa trẻ gửi thư cho 12 đứa trẻ Các tiến trình = các đứa trẻ Các bản tin ứng dụng = các bức thư host = nhà Giao thức giao vận = Ann và Bill Giao thức tầng mạng = dịch vụ chuyển thư 1-6 Các giao thức tầng giao vận của Internet Truyền tin cậy, có thứ tự (TCP) Điều khiển tắc nghẽn Điều khiển luồng Thiết lập kết nối Truyền không có thứ tự, không tin cậy: UDP Các dịch vụ không có: Đảm bảo độ trễ Đảm bảo băng thông application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physicalnetwork data link physical 1-7 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-8 Multiplexing/demultiplexing application transport network link physical P1 application transport network link physical application transport network link physical P2P3 P4P1 host 1 host 2 host 3 = tiến trình= socket Chuyển các segment đã nhận tới đúng socket Demultiplexing tại host nhận: Thu thập dữ liệu từ các socket, đóng gói dữ liệu bởi header (sau đó sẽ dùng để demultiplexing) Multiplexing tại host gửi: 1-9 Thực hiện demultiplexing Host nhận gói dữ liệu IP Mỗi gói dữ liệu có địa chỉ IP nguồn, địa chỉ IP đích Mỗi gói dữ liệu mang một segment của tầng giao vận Mỗi segment có giá trị cổng nguồn và cổng đích (giá trị cổng cố định cho các kiểu ứng dụng cụ thể) Host sử dụng địa chỉ IP và giá trị cổng để chuyển segment tới socket thích hợp source port # dest port # 32 bits Dữ liệu ứng dụng (bản tin) Các trường header Định dạng TCP/UDP segment 1-10 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-11 UDP: User Datagram Protocol [RFC 768] Dịch vụ “best effort”, UDP segment có thể: mất chuyển không theo thứ tự đến ứng dụng Không hướng kết nối: Không có bắt tay giữa bên gửi và bên nhận Mỗi UDP segment được điều khiển độc lập Tại sao có UDP? Không thiết lập kết nối (thiết lập có thể tăng độ trễ) Đơn giản: không có trạng thái kết nối tại bên gửi, bên nhận Header của segment nhỏ Không điều khiển tắc nghẽn: UDP có thể gửi ra với tốc độ mong muốn 1-12 UDP (tiếp) Thường sử dụng cho các ứng dụng đa phương tiện truyền dòng Chấp nhận mất gói Nhạy cảm với tốc độ Ứng dụng khác sử dụng UDP DNS SNMP Truyền tin cậy qua UDP: thêm sự tin cậy tại tầng ứng dụng Khôi phục lỗi do ứng dụng cụ thể source port # dest port # 32 bits dữ liệu của ứng dụng (bản tin) Định dạng của UDP segment length checksum Length tính theo byte của UDP segment, bao gồm header 1-13 UDP checksum Bên gửi: Đối xử với nội dung các segment như chuỗi các số nguyên 16 bít checksum: cộng (tổng bù của 1) của nội dung segment Phía gửi đặt giá trị checksum trong trường checksum của UDP Bên nhận: Tính toán checksum của segment nhận được Kiểm tra xem checksum đã tính có bằng giá trị trường checksum: KHÔNG BẰNG– Phát hiện có lỗi BẰNG – không phát hiện ra lỗi. Nhưng có thể có lỗi? Mục đích: phát hiện lỗi trong segment đã truyền 1-14 Ví dụ Checksum Chú ý Khi cộng các số, giá trị bít nhớ cần thêm vào kết quả Ví dụ: cộng hai số nguyên 16 bít 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 Tổng checksum 1-15 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-16 Các nguyên tắc của truyền dữ liệu tin cậy Tầm quan trọng của tầng liên kết dữ liệu, tầng giao vận, tầng ứng dụng Đặc điểm của kênh truyền không tin cậy xác định sự phức tạp của giao thức truyền dữ liệu tin cậy (rdt) (a) Dịch vụ cung cấp (b) Cài đặt dịch vụ 1-17 Truyền dữ liệu tin cậy Bên gửi Bên nhận rdt_send(): được gọi bởi tầng trên. Dữ liệu đã chuyển được chuyển tới tầng trên của bên nhận udt_send(): gọi bởi rdt, để truyền gói tin qua kênh không tin cậy tới bên nhận rdt_rcv(): gọi khi gói tin đến phía bên nhận deliver_data(): được gọi bởi rdt để truyền dữ liệu lên tầng trên 1-18 Truyền dữ liệu tin cậy Sử dụng máy trạng thái hữu hạn (FSM) để xử lý bên nhận và bên gửi state 1 state 2 Sự kiện gây ra chuyển trạng thái Hành động khi chuyển trạng thái state: khi trong 1 trạng thái, trạng thái tiếp theo là duy nhất đối với 1 sự kiện sự kiện hành động 1-19 rdt1.0: Truyền tin cậy qua kênh tin cậy Tầng dưới là truyền tin cậy Không có lỗi bít Không mất gói tin FSM của bên gửi và bên nhận: Bên gửi chuyển dữ liệu xuống kênh phía dưới Bên nhận đọc dữ liệu từ kênh bên dưới Đợi cuộc gọi từ phía trên packet = make_pkt(data) udt_send(packet) rdt_send(data) extract (packet,data) deliver_data(data) đợi cuộc gọi từ phía dưới rdt_rcv(packet) Bên gửi Bên nhận 1-20 Rdt2.0: kênh có lỗi bít Kênh phía dưới có thể có lỗi checksum để phát hiện lỗi Cách khôi phục lỗi Báo nhận (ACK): bên nhận chỉ rõ cho bên gửi gói tin nhận thành công Báo lỗi (NAK): bên nhận chỉ rõ cho bên gửi gói tin có lỗi Bên nhận truyền lại gói tin nếu nhận NAK Cơ chế rdt2.0: Phát hiện lỗi Phản hồi cho bên nhận: bản tin điều khiển (ACK, NAK: bên nhận -> bên gửi) 1-21 rdt2.0: Máy trạng thái Đợi cuộc 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 hoặc NAK Đợi cuộc gọi từ phía dướiBên gửi Bên nhận rdt_send(data) 1-22 rdt2.0: Trường hợp không lỗi đợi cuộc gọi từ phía 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 hoặc NAK đợi cuộc gọi từ phía dưới rdt_send(data) Λ 1-23 rdt2.0: Trường hợp có lỗi đợi cuộc gọi từ phía 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 hoặc NAK đợi cuộc gọi từ phía dưới rdt_send(data) Λ 1-24 rdt2.1: Bên gửi, điều khiển ACK/NAK lỗi đợi cuộc gọi 0 từ trên sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_send(data) đợi ACK hoặc 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 cuộc gọi 1 từ trên đợi ACK hoặc NAK 1 Λ 1-25 rdt2.1: Bên nhận, điều khiển ACK/NAK lỗi đợ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) 1-26 rdt2.1 Bên gửi: seq # được thêm vào gói tin Hai seq. #’s (0,1) Phải kiểm tra nếu ACK/NAK đã nhận có lỗi Hai lần -> ổn định Bên nhận: Phải kiểm tra gói tin đã nhận có lặp không Trạng thái chỉ định pkt seq # mong đợi là 0 hay 1 1-27 rdt2.2: Giao thức NAK-free Tương tự rdt2.1, chỉ sử dụng ACK Thay vì NAK, bên nhận phải gửi ACK cho pkt cuối đã nhận OK ACK lặp tại bên nhận sẽ như xử lý như nhận NAK: truyền lại pkt hiện tại 1-28 rdt2.2: Phân mảnh tại bên gửi và bên nhận đợi cuộc 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 FSM bên gửi đợ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) FSM bên nhận L 1-29 rdt3.0: kênh có lỗi và mất gói Giả sử: kênh phía dưới có thể mất gói (dữ liệu hoặc ACK) checksum, seq. #, ACK, truyền lại là không đủ Cách tiếp cận: bên nhận đợi ACK một thời gian Truyền lại nếu không có ACK nhận tại thời điểm này Nếu gói tin (hoặc ACK) trễ (không mất): Truyền lại -> lặp, sử dụng seq# để giải quyết Bên nhận phải gán seq # của gói tin được ACK Đòi hỏi bộ đếm thời gian ngược 1-30 rdt3.0 Bên gửi 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 cuộc 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 cuộc gọi 0 từ trên đợi ACK 1 Λ rdt_rcv(rcvpkt) Λ Λ Λ 1-31 rdt3.0 (a) Không mất gói (b) Mất gói 1-32 rdt3.0 (c) Mất ACK (c) Timeout 1-33 Hiệu năng của rdt3.0 Hiệu năng của rdt3.0 bị ảnh hưởng Ví dụ: đường truyền 1 Gbps, lan truyền 15 ms, gói tin 1KB: T transmit = 8kb/pkt 10**9 b/sec = 8 microsec U sender: sự sử dụng – thời gian bên gửi bận gửi 1KB pkt trong mỗi 30 msec -> 33kB/sec thông lượng qua đường truyền 1 Gbps Giao thức mạng hạn chế sử dụng tài nguyên vật lý! U sender = .008 30.008 = 0.00027 L / R RTT + L / R = L (độ dài gói tin, bit) R (tốc độ truyền, bps) = 1-34 rdt3.0: Hoạt động stop-and-wait gói tin đầu tiên được truyền, t = 0 Bên gửi Bên nhận RTT gói tin cuối cùng truyền, t = L / R bít của gói tin đầu tiên đến bít của gói tin cuối cùng đến, gửi ACK ACK đến, gửi gói tin tiếp, t = RTT + L / R U sender = .008 30.008 = 0.00027 L / R RTT + L / R = 1-35 Các giao thức Pipeline Pipeline: Bên gửi cho phép nhiều, tới các gói tin được ack Dải giá trị sequence phải tăng Vùng đệm tại bên gửi và bên nhận Hai hình thức chung của các giao thức pipeline: go- Back-N, selective repeat 1-36 Pipelining: Tăng hiệu quả sử dụng Bít gói tin đầu tiên được truyền, t = 0 Bên gửi Bên nhận RTT Bít cuối cùng được truyền t = L / R Bít gói tin đầu tiên đến Bít gói tin cuối cùng đến, gửi ACK ACK đến, gửi gói tin tiếp theo, t = RTT + L / R Bít cuối cùng của gói tin thứ 2 đến, gửi ACK Bít cuối cùng của gói tin 3 đến, gửi ACK U sender = .024 30.008 = 0.0008 3 * L / R RTT + L / R = Tăng hiệu quả sử dụng lên 3 lần 1-37 Go-Back-N Bên gửi: k-bit seq # trong pkt header “window” N, cho phép các gói tin không ack liên tiếp ACK(n): ACK mọi gói tin tới seq # n - “ACK tích lũy” Có thể nhầm ACK lặp Thời gian cho mỗi gói tin timeout(n): truyền lại gói tin n và tất cả gói tin seq# lớn hơn n trong cửa sổ Lý do phải giới hạn N: điều khiển luồng, điều khiển tắc nghẽn 1-38 GBN: FSM mở rộng của bên gửi đợi start_timerudt_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) /* pkt chưa được ack đầu tiên */ start_timer nextseqnum++ } else refuse_data(data) base = getacknum(rcvpkt)+ ... hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-65 Quản lý kết nối của TCP Thiết lập kết nối: Nhắc lại: Bên gửi, bên nhận của TCP thiết lập kết nối trước khi trao đổi dữ liệu Khởi tạo giá trị: seq. # buffer, thông tin điều khiển luồng (ví dụ: RcvWindow) Client: khởi tạo kết nối Socket clientSocket = new Socket("hostname","port number"); Server: liên lạc bởi client Socket connectionSocket = welcomeSocket.accept(); Bắt tay 3 đường: Bước 1: Client gửi TCP SYN segment tới server Chỉ định seq # ban đầu Không có dữ liệu Bước 2: Server nhận SYN, trả lời với SYNACK segment Server cấp phát buffer Server khởi tạo seq. # Bước 3: Client nhận SYNACK, trả lời bằng ACK segment, có thể chứa dữ liệu 1-66 Quản lý kết nối của TCP Thiết lập kết nối: client Connection request (SYN=1, seq=client_isn) server C o n n e c t i o n g r a n t e d ( S Y N = 1 , s e q = s e r v e r _ i s n , a c k = c l i e n t _ i s n + 1 ack (SYN=0, seq=client_isn+1, ack=server_isn+1 1-67 Quản lý kết nối của TCP Đóng kết nối: client đóng socket: clientSocket.close(); Bước 1: client gửi TCP FIN tới server Bước 2: server nhận FIN, trả lời bằng ACK. Đóng kết nối, gửi FIN client FIN server A C K ACK F I N đóng đóng đóng t h ờ i g i a n đ ơ ị 1-68 Quản lý kết nối của TCP Bước 3: client nhận FIN, trả lời bằng ACK. Thời gian đợi: trả lời bằng ACK báo đã nhận FIN Bước 4: server, nhận ACK. Kết nối đóng. client FIN server A C K ACK F I N đang đóng đang đóng đóng t h ờ i g i a n đ ợ i đã đóng 1-69 Quản lý kết nối của TCP Chu kỳ hoạt động TCP client Chu kỳ hoạt động TCP server 1-70 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-71 Nguyên tắc điều khiển tắc nghẽn Tắc nghẽn: Quá nhiều nguồn gửi quá nhiều dữ liệu nhanh quá khả năng điều khiển của mạng Khác điều khiển luồng Đặc điểm: Mất gói tin (tràn buffer tại router) Độ trễ tăng (xếp hàng tại buffer của router) 1-72 Nguyên nhân, tác hại của tắc nghẽn: Kịch bản 1 Hai đối tượng gửi, hai đối tượng nhận Một router, vùng đệm không giới hạn Không truyền lại Độ trễ lớn khi xảy ra tắc nghẽn Tối đa thông lượng có thể đạt được unlimited shared output link buffers Host A lin : original data Host B lout 1-73 Nguyên nhân, tác hại của tắc nghẽn: Kịch bản 2 Một router, vùng đệm giới hạn Bên gửi truyền lại gói tin mất vùng đệm của đường truyền đầu ra dùng chung và có giới hạn Host A lin : dữ liệu ban đầu Host B lout l'in : dữ liệu ban đầu, dữ liệu truyền lại 1-74 Nguyên nhân, tác hại của tắc nghẽn: Kịch bản 2 Luôn luôn: (tốt) Truyền lại “hoàn hảo”: truyền lại chỉ khi mất Sự truyền lại của gói tin bị trễ (không mất) làm lớn hơn (trường hợp hoàn hảo) so với λ in λout= λ in λout>λ inλout “Tác hại” của tắc nghẽn: Xử lý nhiều hơn (truyền lại) Truyền lại không cần thiết: đường truyền mang nhiều bản sao chép của gói tin R/2 R/2λin λ o u t b. R/2 R/2λin λ o u t a. R/2 R/2λin λ o u t c. R/4 R/3 1-75 Nguyên nhân, tác hại của tắc nghẽn: Kịch bản 3 Bốn đối tượng gửi Nhiều đường timeout/truyền lại λ in Q: Điều gì xảy ra khi và tăng?λ in vùng đệm của đường truyền ra dùng chung và có giới hạn Host A λin : dữ liệu ban đầu Host B λoutλ'in : dữ liệu ban đầu, và dữ liệu truyền lại 1-76 Nguyên nhân, tác hại của tắc nghẽn: Kịch bản 3 Tác hại khác của tắc nghẽn: Khi gói tin bị loại bỏ, khả năng truyền đường lên sử dụng cho gói tin đó đã lãng phí H o s t A H o s t B λ o u t 1-77 Các cách tiếp cận để điều khiển tắc nghẽn Điều khiển tắc nghẽn cuối-cuối: Không có phản hồi chính thức từ mạng Tắc nghẽn suy ra từ hệ thống cuối theo dõi mất gói và độ trễ Cách tiếp cận sử dụng bởi TCP Điều khiển tắc nghẽn với sự giúp đỡ của mạng: Router cung cấp phản hồi tới hệ thống cuối Một bít chỉ ra tắc nghẽn (SNA, DECbit, TCP/IP, ECN, ATM) Chỉ rõ tốc độ bên gửi nên gửi Hai cách tiếp cận chính để điều khiển tắc nghẽn: 1-78 Trường hợp nghiên cứu: Điều khiển tắc nghẽn ATM ABR ABR: Available Bit Rate: “Dịch vụ co dãn” Nếu đường đi của bên gửi chưa đến giới hạn tải: Bên gửi nên sử dụng băng thông khả dụng Nếu đường đi của bên gửi bị tắc nghẽn: Bên gửi điều chỉnh tốc độ đảm bảo tối thiểu RM cell (Resource Management): Được gửi bởi bên gửi, rải rác cùng với cell dữ liệu Các bít trong RM cell do switch thiết lập (có sự tham gia của mạng) NI bit: không tăng tốc độ (tắc nghẽn nhẹ) CI bit: tắc nghẽn RM cell trả về cho bên gửi bởi bên nhận với các bít không thay đổi 1-79 Trường hợp nghiên cứu: Điều khiển tắc nghẽn ATM ABR Hai byte ER (Explicit Rate) trong RM cell Switch tắc nghẽn có thể giảm giá trị ER trong cell Vì vậy, tốc độ gửi của bên gửi tối thiểu tốc độ hỗ trợ trên đường Bít EFCI trong cell dữ liệu: đặt bằng 1 trong switch bị tắc nghẽn Nếu cell dữ liệu, trước cell RM, có EFCI thiết lập, bên gửi thiết lập bít CI trong cell RM trả về 1-80 Chương 3: Tầng giao vận 3.1 Các dịch vụ tầng giao vận 3.2 Multiplexing và demultiplexing 3.3 Dịch vụ không hướng kết nối: UDP 3.4 Các nguyên tắc của truyền dữ liệu tin cậy 3.5 Dịch vụ hướng kết nối: TCP Cấu trúc segment Truyền dữ liệu tin cậy Điều khiển luồng Quản lý kết nối 3.6 Các nguyên tắc của điều khiển tắc nghẽn 3.7 Điều khiển tắc nghẽn của TCP 1-81 Điều khiển tắc nghẽn của TCP Điều khiển end-end (không có hỗ trợ của mạng) Bên gửi giới hạn truyền: LastByteSent-LastByteAcked ≤ CongWin LastByteSent - LastByteAcked <= min{CongWin, RcvWin} Gần đúng, CongWin thay đổi động, chức năng nhận biết sự tắc nghẽn của mạng Cách bên gửi nhận biết sự tắc nghẽn? Sự kiện mất gói = timeout hoặc lặp lại 3 ack Bên gửi TCP giảm tốc độ (CongWin) sau sự kiện mất gói Ba cơ chế: AIMD slow start Không thay đổi sau sự kiện timeout rate = CongWin RTT Bytes/sec 1-82 TCP AIMD 8 Kbytes 16 Kbytes 24 Kbytes time congestion window Giảm cấp số nhân: Giảm CongWin một nửa sau sự kiện mất gói Tăng cấp số cộng: Tăng CongWin 1 MSS mỗi RTT khi không có sự kiện mất gói Kết nối TCP trong thời gian dài 1-83 TCP Slow Start Khi kết nối bắt đầu, CongWin = 1 MSS Ví dụ: MSS = 500 byte & RTT = 200 msec Tốc độ ban đầu = 20 kbps Băng thông khả dụng có thể >> MSS/RTT Mong muốn nhanh tới tốc độ đáng kể Khi kết nối bắt đầu, tăng tốc độ nhanh theo hàm mũ cho đến khi có sự kiện mất gói đầu tiên 1-84 TCP Slow Start (tiếp) Khi kết nối bắt đầu, tăng tốc độ hàm mũ tới khi có sự kiện mất gói đầu tiên: Gấp đôi CongWin mỗi RTT Thự hiện bằng cách tăng CongWin cho mọi ACK nhận được Tóm lại: tốc độ ban đầu là chậm nhưng nhanh chóng tăng theo hàm mũ Host A 1 segment R T T Host B time 2 segments 4 segments 1-85 Quá trình tinh chỉnh Sau 3 ACK lặp lại: CongWin giảm một nửa window tăng tuyến tính Nhưng sau sự kiện timeout: CongWin thay vì thiết lập 1 MSS; window tăng hàm mũ Tới ngưỡng thì giảm tuyến tính • 3 ACK lặp chỉ rằng khả năng của mạng chuyển một số segment • timeout trước 3 ACK lặp là đáng chú ý hơn Triết lý: 1-86 Quá trình tinh chỉnh (tiếp) Q: Khi nào tăng theo số mũ chuyển thành theo tuyến tính? A: Khi CongWin có giá trị bằng 1/2 giá trị của nó trước khi timeout. Thực hiện: Variable Threshold Tại sự kiện mất gói, Threshold đặt bằng ½ CongWin ngay trước sự kiện mất gói 1-87 Tổng kết: Điều khiển tắc nghẽn của TCP Khi CongWin nhỏ hơn Threshold, bên gửi trong pha slow-start, window lớn theo hàm mũ. Khi CongWin lớn hơn Threshold, bên gửi trong pha congestion-avoidance, window lớn theo hàm tuyến tính. Khi xảy ra lặp 3 ACK, Threshold đặt bằng CongWin/2 và CongWin đặt bằng Threshold. Khi timeout xảy ra, Threshold đặt bằng CongWin/2 và CongWin đặt bằng 1 MSS. 1-88 Điều khiển tắc nghẽn bên gửi của TCP Sự kiện Trạng thái Hành động bên gửi TCP Giải thích Nhận ACK cho dữ liệu không được ack trước đó Slow Start (SS) CongWin = CongWin + MSS, If (CongWin > Threshold) Đặt trạng thái thành “Congestion Avoidance” Kết quả bởi gấp đôi CongWin mỗi RTT Nhận ACK cho dữ liệu không được ack trước đó Congestion Avoidance (CA) CongWin = CongWin+MSS * (MSS/CongWin) Tăng theo cấp số cộng, tăng CongWin lên 1 MSS mỗi RTT Sự kiện mất gói phát hiện bởi 3 ACK lặp SS hoặc CA Threshold = CongWin/2, CongWin = Threshold, Đặt trạng thái thành “Congestion Avoidance” Nhanh chóng phục hồi, thực hiện tăng cấp số nhân. CongWin sẽ không giảm dưới 1 MSS. Timeout SS hoặc CA Threshold = CongWin/2, CongWin = 1 MSS, Đặt trạng thái thành “Slow Start” Vào slow start ACK lặp SS hoặc CA Tăng bộ đếm ACK lặp cho segment được ack CongWin và Threshold không thay đổi 1-89 Thông lượng của TCP Thông lượng trung bình của TCP từ chức năng của window size và RTT? Bỏ qua slow start Cho W là window size khi xảy ra mất gói. Khi window là W, thông lượng là W/RTT Ngay sau mất gói, window giảm tới W/2, thông lượng W/2RTT. Thông lượng trung bình: .75 W/RTT 1-90 Tương lai của TCP Ví dụ: 1500 byte segment, 100ms RTT, muốn 10 Gbps thông lượng Đòi hỏi window size W = 83,333 segment Thông lượng theo tốc độ mất gói: ➜ L = 2·10-10 Phiên bản mới của TCP cho tốc độ cao là cần thiết! LRTT MSS⋅22.1 1-91 Mục đích của sự công bằng: Nếu K phiên TCP dùng chung đường truyền thắt nút băng thông R, mỗi đường nên có tốc độ trung bình là R/K Kết nối TCP 1 điểm thắt nút khả năng RKếtnối TCP 2 Sự công bằng của TCP 1-92 Lý do TCP công bằng Hai phiên cạnh tranh: R R Chia sẻ băng thông bằng nhau Thông lượng của kết nối 1 T h ô n g l ư ợ n g c ủ a k ế t n ố i 2 tránh tắc nghẽn: tăng cộng mất gói: giảm window hệ số 2 1-93 Sự công bằng (tiếp) Sự công bằng và UDP Các ứng dụng đa phương tiện thường không sử dụng TCP Không muốn tốc độ giảm bởi điều khiển tắc nghẽn Ứng dụng sử dụng UDP: Đẩy dữ liệu audio/video ở tốc độ hằng số, chấp nhận mất gói Sự công bằng và các kết nối TCP song song Không ngăn chặn ứng dụng mở song song các kết nối giữa 2 host Trình duyệt Web thực hiện như trên 1-94 Mô hình độ trễ Q: Thời gian để nhận một đối tượng từWeb server sau khi gửi một yêu cầu? Bỏ qua tắc nghẽn, độ trễ ảnh hưởng bởi: Thiết lập kết nối TCP Độ trễ truyền dữ liệu Giả sử một đường truyền giữa client và server có tốc độ R S: MSS (bits) O: kích thước đối tượng (bit) Không truyền lại (không mất gói, không lỗi) Kích thước cửa sổ: Cửa sổ tắc nghẽn cố định, W segment Cửa số động, mô hình slow start 1-95 Cửa sổ tắc nghẽn cố định Trường hợp 1: WS/R > RTT + S/R: ACK cho segment đầu tiên trong cửa sổ Độ trễ = 2RTT + O/R 1-96 Cửa sổ tắc nghẽn cố định Trường hợp 2: WS/R < RTT + S/R: đợi ACK sau khi gửi lượng dữ liệu của cửa sổ Độ trễ = 2RTT + O/R + (K-1)[S/R + RTT - WS/R] 1-97 Mô hình độ trễ TCP: Slow Start (1) Giả sử cửa sổ lớn theo slow start Độ trễ cho một đối tượng là: R S R SRTTP R ORTTLatency P )12(2 −−⎥⎦ ⎤⎢⎣ ⎡ +++= Trong đó, P là lượng thời gian TCP rỗi tại server }1,{min −= KQP - Trong đó, Q là lượng thời gian server rỗi nếu đối tượng kích thước không giới hạn. - Và K là số cửa sổ trùm qua đối tượng 1-98 Mô hình độ trễ TCP: Slow Start (2) RTT initiate TCP connection request object first window = S/R second window = 2S/R third window = 4S/R fourth window = 8S/R complete transmissionobject delivered time at client time at server Ví dụ: • O/S = 15 segment • K = 4 windows • Q = 2 • P = min{K-1,Q} = 2 Thời gian rỗi của server P=2 times Các thành phần trễ: • 2 RTT để thiết lập kết nối và yêu cầu • O/R để truyền đối tượng • thời gian server rỗi vì slow start Server rỗi: P = min{K-1,Q} times 1-99 Mô hình độ trễ TCP (3) R S R SRTTPRTT R O R SRTT R SRTT R O idleTimeRTT R O P k P k P p p )12(][2 ]2[2 2delay 1 1 1 −−+++= −+++= ++= − = = ∑ ∑ 2 1 R SRTT R S k =⎥⎦ ⎤⎢⎣ ⎡ −+ + − =+ RTT R S 2 1 =− R Sk RTT initiate TCP connection request object first window = S/R second window = 2S/R third window = 4S/R fourth window = 8S/R complete transmissionobject delivered time at client time at server thời gian khi server bắt đầu gửi segment tới khi server nhận ack segment thời gian để truyền cửa sổ thứ k thời gian rỗi sau cửa sổ thứ k 1- 100 Mô hình độ trễ TCP (4) ⎥⎥ ⎤⎢⎢ ⎡ += +≥= ≥−= ≥+++= ≥+++= − − )1(log )}1(log:{min }12:{min }/222:{min }222:{min 2 2 110 110 S O S Okk S Ok SOk OSSSkK k k k L L Tính Q, giá trị rỗi cho đối tượng có kích thước không giới hạn tương tự. K = số cửa sổ bao đối tượng Cách tính K? 1- 101 Mô hình hóa HTTP Giả sử trang Web chứa: 1 trang HTML cơ sở (kích thước O bít) M ảnh (mỗi ảnh kích thước O bít) Non-persistent HTTP: M+1 kết nối TCP Response time = (M+1)O/R + (M+1)2RTT + tổng thời gian rỗi Persistent HTTP: 2 RTT để yêu cầu và nhận file HTML cơ sở 1 RTT để yêu cầu và nhận M ảnh Response time = (M+1)O/R + 3RTT + tổng thời gian rỗi Non-persistent HTTP với X kết nối song song Giả sử M/X nguyên 1 kết nối TCP cho file cơ sở M/X tập của các kết nối song song cho ảnh Response time = (M+1)O/R + (M/X + 1)2RTT + tổng thời gian rỗi 1- 102 0 2 4 6 8 10 12 14 16 18 20 28 Kbps 100 Kbps 1 Mbps 10 Mbps non-persistent persistent parallel non- persistent Thời gian trả lời HTTP (giây) RTT = 100 msec, O = 5 Kbytes M=10 và X=5 Đối với băng thông thấp, thời gian kết nối và thời gian phản hồi chi phối bởi thời gian truyền Persistent connection chỉ mang lại cải tiến thêm qua các kết nối song song 1- 103 0 10 20 30 40 50 60 70 28 Kbps 100 Kbps 1 Mbps 10 Mbps non-persistent persistent parallel non- persistent Thời gian phản hồi (giây) RTT =1 sec, O = 5 Kbyte, M=10 and X=5 Đối với RTT lớn, thời gian phản hồi chi phối bởi thiết lập kết nối TCP và độ trễ slow start. Persistent connection đem lại cải tiến quan trọng: đặc biệt trong mạng delay, bandwidth cao. 1- 104 Chương 3: Tổng kết Các nguyên tắc bên trong các dịch vụ tầng giao vận: multiplexing, demultiplexing Truyền dữ liệu tin cậy Điều khiển luồng Điều khiển tắc nghẽn Sự thực hiện trong Internet UDP TCP Tiếp theo: Dừng tìm hiểu phần bên ngoài của mạng (tầng ứng dụng, tầng giao vận) Tìm hiểu vào trong lõi của mạng
File đính kèm:
- bai_giang_mang_may_tinh_chuong_3_tang_giao_van.pdf