Ghép kênh connectionless và DemultiplexingNhớ lại từ phần 2.7.1 Python chương trình đang chạy trong một máy chủ có thể tạo ra mộtUDP ổ cắm với đườngclientSocket = ổ cắm (socket.AF_INET, ổ cắm. SOCK_DGRAM)Khi một ổ cắm UDP được tạo ra theo cách này, các phương tiện giao thông lớp tự độnggán một số hiệu cổng vào ổ cắm. Đặc biệt, tầng giao vận chỉ định một cổngsố lượng trong khoảng 1024 đến 65535 hiện đang không được sử dụng bởi bất kỳ khác UDPcổng trong các máy chủ. Ngoài ra, chúng tôi có thể thêm một dòng vào chương trình Python của chúng tôi sau khi chúng tôitạo ổ cắm để kết hợp một số cổng cụ thể (nói, 19157) này cổng UDPbằng phương pháp bind() socket:clientSocket.bind (('', 19157))Nếu các nhà phát triển ứng dụng viết mã thực hiện phía máy chủ của một"giao thức nổi tiếng", sau đó các nhà phát triển sẽ phải gán tương ứng• GHÉP KÊNH 3.2 VÀ DEMULTIPLEXING 193Nguồn port #32 bitDest. Port #Các trường tiêu đềỨng dụngdữ liệu(tin nhắn)Hình 3.3 nguồn và đích đến số hiệu cổng trường ở tầng giao vậnphân khúcsố hiệu cổng nổi tiếng. Thông thường, phía khách hàng của các ứng dụng cho phép tầng giao vận, và tự động (minh bạch) gán số hiệu cổng, trong khi cácphía máy chủ của ứng dụng gán một số hiệu cổng cụ thể.Với số cổng giao cho UDP ổ cắm, chúng tôi có thể bây giờ chính xác mô tảUDP ghép kênh/demultiplexing. Giả sử một quá trình trong máy chủ A, với cổng UDP19157, muốn gửi một đoạn dữ liệu ứng dụng cho một quá trình với cổng UDP 46428trong máy chủ B. Tầng giao vận trong máy chủ A tạo ra một phân đoạn tầng giao vận màbao gồm các dữ liệu ứng dụng, số hiệu cổng nguồn (19157), điểm đến cảngsố lượng (46428), và hai giá trị khác (trong đó sẽ được thảo luận sau này, nhưng là không quan trọng cho các cuộc thảo luận hiện nay). Tầng giao vận sau đó vượt qua đoạn kết quả đến các lớp mạng. Tầng mạng gói gọn các phân đoạn trong một IPdatagram và làm cho một nỗ lực tốt nhất cố gắng để cung cấp các phân đoạn cho các máy chủ nhận.Nếu đoạn đến lúc nhận được chủ nhà B, tầng giao vận tại nhậnkiểm tra điểm đến cổng số trong phân khúc (46428) và cung cấp cácphân đoạn để ổ cắm của nó được xác định bởi cổng 46428. Lưu ý rằng có thể chạy máy chủ Bnhiều xử lý, mỗi riêng của mình ổ cắm UDP và liên quan đến số cổng. NhưPhân đoạn UDP đến từ mạng, máy chủ lưu trữ B chỉ đạo (demultiplexes) mỗi phân đoạnvào ổ cắm thích hợp bằng cách kiểm tra số hiệu cổng đến các phân đoạn.Nó là quan trọng cần lưu ý rằng một ổ cắm UDP đầy đủ được xác định bởi hai tuple bao gồm một điểm đến địa chỉ IP và một số cảng đích. Như một hệ quả, nếu haiUDP phân đoạn có nguồn gốc khác nhau các địa chỉ IP và/hoặc số cổng nguồn, nhưng cóđịa chỉ IP cùng điểm đến và điểm đến cổng số, sau đó hai đoạnsẽ được hướng dẫn đến đích quá trình thông qua các ổ cắm đích tương tự.Bạn có thể tự hỏi bây giờ, những gì là mục đích của số hiệu cổng nguồn? NhưHiển thị trong hình 3.4, trong phân khúc A đến B là nguồn cổng số phục vụ như là một phần củamột địa chỉ"trả lại" — khi B muốn gửi một phân đoạn quay lại một, các điểm đến cổng.trong B-để-A phân khúc sẽ mất giá trị của nó từ giá trị cổng nguồn của A-to-Bphân đoạn. (Hoàn toàn trở về địa chỉ của một địa chỉ IP và các nguồn cảng số.) Ví dụ, nhớ lại các chương trình server UDP nghiên cứu trong phần 2.7. ỞUDPServer.py, các máy chủ sử dụng phương pháp recvfrom() để trích xuất các số cổng clientside (mã nguồn) từ các phân đoạn mà nó nhận được từ khách hàng; nó sau đó gửi chomột phân đoạn mới cho khách hàng, với số hiệu cổng được trích nguồn phục vụ như là cácđiểm số hiệu cổng trong phân khúc mới này.
đang được dịch, vui lòng đợi..
