Ghép kênh/phân kênh không phải là một trong những chức năng chính của tầng vận tải, nhưng nó lại là công việc rất cần thiết. Để hiểu tại sao như vậy, ta thấy rằng IP truyền dữ liệu giữa hai thiết bị đầu cuối, mỗi thiết bị có một địa chỉ IP nhất định. IP không truyền dữ liệu giữa các tiến trình ứng dụng chạy trên các máy tính. Mở rộng việc gửi - từ máy tính đến máy tính - từ tiến trình đến tiến trình là công việc ghép kênh và phân kênh.
Tại máy tính nhận, tầng vận tải nhận đoạn dữ liệu từ tầng mạng ngay phía dưới và có trách nhiệm gửi dữ liệu trong đoạn dữ liệu này tới tiến trình ứng dụng thích hợp trên máy tính. Giả sử tại một thời điểm máy tính của người sử dụng đang tải trang Web, chạy một phiên FTP và hai phiên Telnet. Như vậy có tất cả 4 tiến trình đang chạy tại tầng ứng dụng: 2 tiến trình Telnet, 1 tiến trình FTP, và 1 tiến trình HTTP. Khi tầng vận tải trong máy tính của người sử dụng nhận được dữ liệu từ tầng mạng chuyển lên, nó phải gửi dữ liệu trong đó tới 1 trong 4 tiến trình trên.
Mỗi đoạn tin của tầng vận tải có trường xác định tiến trình nhận dữ liệu.
gửi dữ liệu trong đoạn tin tới tiến trình đó. Công việc chuyển dữ liệu trong đoạn tin tới đúng tiến trình ứng dụng được gọi là phân kênh. Tại thiết bị gửi, tầng vận tải nhận dữ liệu từ nhiều tiến trình ứng dụng khác nhau, tạo đoạn tin chứa dữ liệu cùng với một số thông tin tiêu đề và cuối cùng chuyển đoạn tin xuống tầng mạng. Quá trình trên được gọi là ghép kênh.
Hình 4.1 Dịch vụ ghép kênh, phân kênh
UDP và TCP thực hiện việc ghép kênh và phân kênh nhờ hai trường đặc biệt ở đầu đoạn tin: trường định danh cổng tiến trình gửi (cổng nguồn - source port number) và trường định danh cổng tiến trình nhận (cổng đích - destination port number), hai trường này được minh họa trên hình 4.2. Chúng xác định một tiến trình ứng dụng duy nhất chạy trên máy tính. Tất nhiên UDP và TCP còn có nhiều trường khác mà chúng ta sẽ nghiên cứu sau.
32 bits
Cổng nguồn Cổng đích Các thông tin điều khiển khác
Dữ liệu của tầng ứng dụng
Hình 4.2 Trường địa chỉ tiến trình gửi, tiến trình nhận trong đoạn tin Số hiệu cổng là một con số 16 bit, nhận giá trị tớ 0 tới 65535. Các giá trị tớ 0 đến 1023 là các giá trị dùng cho các dịch vụ công cộng, tức là chỉ để cho các ứng dụng thông dụng như HTTP, FTP sử dụng. HTTP sử dụng cổng 80, FTP sử dụng cổng 20 và 21. Danh sách các cổng thông dụng có thể tham khảo
trong RFC 1700. Khi xây dựng một ứng dụng mới, phải xác định số hiệu cổng cho ứng dụng này.
Bảng 4.1: Một số ứng dụng và giao thức tại tầng vận tải
Ứng dụng Giao thức tầng ứng dụng Tầng vận tải tương ứng Thư điện tử SMTP TCP Truy cập từ xa Telnet TCP Web HTTP TCP Truyền file FTP TCP
File máy chủ NFS thường là UDP
Đa phương tiện Phụ thuộc hãng sản xuất
thường là UDP Điện thoại qua
Internet
Phụ thuộc hãng sản xuất
thường là UDP
Quản lý mạng SNMP thường là UDP
Định tuyến RIP thường là UDP
Tên miền DNS thường là UDP
Mỗi ứng dụng chạy trên thiết bị đầu cuối có số hiệu cổng nhất định. Bởi vậy vấn đề đặt ra là tại sao mỗi đoạn tin ở tầng vận tải đều có trường số hiệu cổng nguồn và đích. Một thiết bị đầu cuối có thể chạy đồng thời hai tiến trình cùng kiểu, như vậy số hiệu cổng đích chưa đủ để phân biệt các tiến trình. Giả sử máy chủ web chạy tiến trình HTTP xử lý các bản tin yêu cầu; khi máy chủ web phục vụ nhiều yêu cầu cùng một lúc thì máy chủ sẽ chạy nhiều tiến trình trên cổng 80. Để gửi dữ liệu đến tiến trình nhận, phải xác định số hiệu cổng của phía gửi (cổng nguồn).
Hình 4.3Sử dụng số hiệu cổng nguồn/đích trong trình ứng dụng khách/chủ Thông thường, máy tính nào khởi đầu trước đóng vai trò máy khách, máy tính kia đóng vai trò máy chủ. Xét ví dụ một tiến trình người sử dụng Telnet máy chủ. Đoạn tin ở tầng vận tải khi rời máy khách chuyển tới máy chủ có số
hiệu cổng nguồn là một giá trị ngẫu nhiên (không được phép là giá trị của cổng đã có một tiến trình nào đó sử dụng) và số hiệu cổng đích (cổng của tiến trình nhận) bắt buộc phải là 23. Giả sử phía máy khách chọn số hiệu cổng là X thì mỗi đoạn tin được gửi từ ứng dụng Telnet có cổng nguồn là x, cổng đích là 23. Khi đoạn tin tới máy chủ, căn cứ vào số hiệu cổng là 23, máy chủ sẽ chuyển dữ liệu trong đoạn tin đó tới tiến trình Telnet.
Đoạn tin truyền từ máy chủ tới máy khách sẽ đảo ngược số hiệu cổng. Cổng nguồn bây giờ sẽ là cổng của ứng dụng có giá trị 23, còn cổng đích sẽ là X (là số hiệu cổng nguồn trong đoạn tin gửi từ máy khách tới máy chủ). Khi đoạn tin tới, máy khách cũng sẽ căn cứ vào số hiệu cổng nguồn và đích để gửi dữ liệu trong segment tới đúng tiến trình ứng dụng, hình 4.3 minh họa quá trình trên.
Hình 4.4 Các tiến trình cùng tạo kết nối đến một dịch vụ
Xét trường hợp hai máy khách khác nhau cùng thiết lập phiên làm việc tới một máy chủ và mỗi máy khách đều chọn cổng nguồn là X, điều này hoàn toàn có thể xảy ra với những máy chủ có nhiều người truy cập. Khi đó máy chủ phải sử dụng địa chỉ IP trong gói dữ liệu IP chứa đoạn tin. Trên hình 4.4, máy C có hai phiên làm việc và máy A có một phiên làm việc HTTP tới cùng máy chủ B. cả ba máy A, B, C đều có địa chỉ IP phân biệt lần lượt là A, B, C.
Máy C sử dụng hai cổng nguồn (X,Y) khác nhau cho hai kết nối HTTP tới B. A chọn số hiệu cổng nguồn độc lập với C nên nó có thể gán cổng nguồn x cho kết nối HTTP của mình. Tuy nhiên máy chủ B vẫn có thể thực hiện phân kênh hai đoạn tin có lặp cổng giống nhau do địa chỉ IP nguồn khác nhau. Tóm lại, bên nhận sử dụng cả ba giá trị (địa chỉ IP nguồn, số hiệu cổng nguồn, số hiệu cổng đích) để xác định tiến trình ứng dụng nhận.