Lớp Giao vận trong mô hình tham chiếu DOD (xem Internet thật là đơn giản số 5/2003) cung cấp khả năng truyền thông từ một chương trình ứng dụng này tới một chương trình ứng dụng khác. Trong mục này, chúng ta sẽ nghiên cứu về 2 giao thức ở Lớp giao vận (Transport Layer): Giao thức TCP (Transport Control Protocol) và Giao thức UDP (User Datagram Protocol). Tất cả các gói tin được trao đổi giữa các máy tính trên mạng đều nhờ vào một trong 2 giao thức đó.
1. Transport Control Protocol (TCP)
Trong 2 giao thức ở Lớp giao vận, TCP là giao thức được sử dụng nhiều nhất. Đây là giao thức hướng kết nối (connection-oriented), có 5 đặc trưng của dịch vụ chuyển phát đáng tin cậy. Đó là:
+ Định hướng stream: Khi hai chương trình ứng dụng (các tiến trình của người sử dụng) truyền những khối lượng lớn dữ liệu, chúng ta xem dữ liệu này là một chuỗi các bit, được chia thành các octet 8 bit, mà chúng ta thường gọi là byte. Dịch vụ chuyển phát stream tên máy đích chuyển đến nơi nhận một cách chính xác cùng một chuỗi các octet mà máy gửi chuyển đi.
+ Kết nối mạch ảo: Thực hiện việc truyền stream cũng tương tự như thực hiện một cuộc gọi điện thoại. Trước khi việc truyền có thể bắt đầu, cả hai chương trình ứng dụng gửi và chương trình ứng dụng nhận tương tác với hệ điều hành, thông báo về mong muốn có được việc truyền stream. Về mặt khái niệm, một chương trình ứng dụng sẽ thực hiện một "cuộc gọi" mà phải được đầu kia chấp nhận, tức thiết lập một kết nối – hay mạch ảo - để truyền và nhận dữ liệu một cách chính xác.
+ Việc truyền có vùng đệm: Các chương trình ứng dụng gửi một dòng dữ liệu qua mạch ảo bằng cách lặp lại việc chuyển các octet dữ liệu đến phần mềm giao thức. Khi truyền dữ liệu, mỗi chương trình ứng dụng sử dụng bất kỳ kích thước đơn vị truyền nào nó thấy thuận tiện, có thể chỉ bằng một octet. Tại đầu nhận, phần mềm giao thức phát chuyển tự động dữ liệu theo đúng chính xác thứ tự mà chúng được gửi đi, làm cho chúng sẵn sàng được sử dụng đối với chương trình ứng dụng nhận, ngay sau khi chúng được nhận và kiểm tra. Phần mềm giao thức được tư do phân chia dòng dữ liệu thành những gói dữ liệu độc lập với đơn vị mà chương trình ứng dụng truyền đi. Để làm cho việc truyền hiệu quả hơn và tối thiểu giao thông trên mạng, các cài đặt thường tập hợp cho đủ dữ liệu từ dòng dữ liệu để đặt vào datagram có độ lớn thích hợp trước khi truyền nó qua Internet.
+ Stream không có cấu trúc: Một điều quan trọng là dịch vụ TCP stream không xác định các dòng dữ liệu có cấu trúc. Lấy ví dụ, chương trình trả lương nhân viên, không có cách nào để dịch vụ stream đánh dấu biên giới giữa các bản ghi nhân viên, hay để xác định nơi dừng của dòng dữ liệu là dữ liệu nhân viên. Các chương trình ứng dụng sử dụng dịch vụ stream phải hiểu nội dung stream và thống nhất với nhau định dạng stream trước khi khởi động việc kết nối.
+ Kết nối hai chiều: Các kết nối được cung cấp bởi dịch vụ TCP stream cho phép truyền đồng thời từ cả hai chiều. Cách kết nối này được gọi là song công (full deplex). Từ quan điểm của một tiến trìh ứng dụng, một kết bối hai chiều bao gồm 2 dòng dữ liệu độc lập “chạy” theo hai chiều ngược nhau, và không có tương tác hay va chạm. Dịch vụ stream cho phép một tiến trình ứng dụng chấm dứt "dòng chảy" theo một chiều trong khi dữ liệu vẫn tiếp tục "chạy" theo chiều kia, làm cho kết nối trở thành một chiều (half duplex). Ưu điểm chính của kết nối hai chiều là phần mềm giao thức cơ sở có thể gửi thông tin điều khiển cho một stream ngược trở về nguồn trong những datagram đang chuyển tải dữ liệu theo chiều ngược lại. Điều này làm giảm bớt giao thông trên mạng.
Định dạng segment TCP
Đơn vị truyền giữa phần mềm TCP trên hai máy được gọi là segment. Các segment được trao đổi để thiết lập kết nối, để truyền dữ liệu, để gửi các acknowledgement (thông báo xác nhận nhận dữ liệu), để thông báo kích thước cửa sổ (để tối ưu hoá quá trình truyền và nhận dữ liệu) và để đóng kết nối.
Mỗi segment được chia thành hai phần, phần đầu và phần dữ liệu. Phần đầu, có tên là phần đầu TCP (TCP header), chuyển tải thông tin điều khiển và các định danh cần thiết khác. Hai vùng quan trọng nhất trong phần đầu TCP là SOURCE PORT và DESTINATION PORT chứa các giá trị cổng TCP để xác định các chương trình ứng dụng tại hai đầu kết nối. Mỗi khi TCP nhận gói dữ liệu (gọi là packet) từ IP, TCP gỡ bỏ phần đầu IP và đọc phần đầu TCP của segmet kết quả. Khi TCP đọc DESTINATION PORT, nó sẽ tìm trong tệp tin chứa các thông tin về dịch vụ để gửi dữ liệu đến chương trình tương ứng với số cổng đó.
Vùng SEQUENCE NUMBER xác định vị trí trong chuỗi các byte dữ liệu trong segmet của nơi gửi. Vùng ACKNOWLEDGEMENT NUMBER xác định số lượng octet mà nguồn đang đợi để nhận kế tiếp. Lưu ý rằng SEQUENCE NUMBER để chỉ đến lượng dữ liệu theo cùng chiều với segment, trong khi giá trị ACKNOWLEDGEMENT NUMBER để chỉ đến lượng dữ liệu theo chiều ngược lại với segment.
Vùng HLEN chứa một số nguyên để xác định độ dài của phần đầu segment, được tính theo bội số của 32 bit. Cần có giá trị HLEN bời vì vùng OPTIONS có độ dài thay đổi, tuỳ thuộc vào những lựa chọn nào đã được đưa vào. Như thế, kích thước của vùng đầu TCP cũng được thay đổi tuỳ vào các lựa chọn đã được lấy. Vùng RESERVED được dành riêng để sử dụng trong tương lai.
Có những segmet chỉ chuyển tải acknowledgement, có những segment khác chuyển tải dữ liệu. Cũng có những segment chuyển tải những yêu cầu để thiết lập hoặc đóng lại một kết nối. Phần mềm TCP sử dụng vùng FLAG để xác định mục đích và nội dung của segment. Phần mềm TCP cũng thông báo cho biết bao nhiêu dữ liệu nó sẵn sàng nhận mỗi khi nố gửi một segment bằng cách mô tả kích thước vùng đệm của nó trong vùng WINDOW.
Thủ tục bắt tay 3 bước (Three-way Handshake) và cửa sổ trượt (Sliding Window)
User Datagram Protocol (UDP)
Cũng như TCP, UDP cũng chuyển phát dữ liệu giữa các ứng dụng. UDP là giao thức phi kết nối (connectionless), nó không kiểm tra dữ liệu như TCP. UDP cung cấp dịch vụ chuyển phát các datagram với phụ phí thấp vì nó không chứa các thông tin điều khiển trong phần đầu UDP.
Các ứng dụng cần lựa chọn UDP hoặc TCP khi cần dịch vụ chuyển phát dữ liệu. Mặc dù UDP cung cấp dịch vụ ít tin cậy hơn (không đảm bảo sắp xếp thứ tự gói, kiểm soát lỗi hoặc luồng dữ liệu) nhưng tính đơn giản của nó cho phép các ứng dụng tương tác trực tiếp với giao thức IP.
Định dạng gói tin UDP
Như có thể thấy trên hình vẽ, phần đầu UDP không chứa bất kỳ thông tin điều khiển nào cả với kích thước chỉ vẻn vẹn 8 byte. Bởi vì không chứa thông tin điều khiển, UDP kém tin cậy hơn TCP. Các ứng dụng được viết để sử dụng UDP làm giao thức giao vận phải tự thực hiện một số thủ tục kiểm tra việc chuyển phát dữ liệu. Tuy nhiên, một số ứng dụng sử dụng UDP khác lại có thể không cần thực hiện bất cứ việc kiểm tra nào. Ví dụ, phần lớn ứng dụng thư điện tử sử dụng giao thức UDP. Chúng chỉ việc gửi dữ liệu mà không thực hiện kiểm tra để đảm bảo rằng thông điệp đã tới một cách nguyên vẹn ở máy tính đích.
Những ứng dụng sử dụng UDP
Mặc dù UDP không cung cấp dịch vụ chuyển phát tin cậy, vẫn có nhiều loại ứng dụng thích hợp với việc sử dụng nó làm giao thức giao vận. Trong bất cứ trường hợp nào mà TCP trở nên quá phức tạp, quá chậm hoặc đơn giản là không cần thiết, các nhà phát triển ứng dụng đều có thể sử dụng UDP làm giải pháp thay thế. Các ứng dụng sử dụng UDP có thể là những ứng dụng mà bản thân nó đã có phương pháp kiểm tra việc chuyển phát dữ liệu hay những ứng dụng phù hợp với mô hình truy vấn/trả lời (query/response).