TCP

Kích thước cửa sổ TCP

Kích thước của cửa sổ là chiều dài (byte) của khối dữ liệu có thể lưu trong bộ đệm của bên nhận. Bên gửi chỉ có thể gửi tối đa lượng thông tin chứa trong cửa sổ này trước khi nhận được tin báo nhận.

Dãn kích thước cửa sổ

Để tận dụng khả năng truyền dẫn của mạng thì cửa sổ dùng trong TCP cần được tăng lên. Trường điều khiển kích thước cửa sổ của gói TCP có độ dài là 2 byte và do đó kích thước tối đa của cửa sổ là 65.535 byte.
Do trường điều khiển không thể thay đổi nên người ta sử dụng một hệ số dãn nào đó. Hệ số này được định nghĩa trong tài liệu RFC 1323 có thể sử dụng để tăng kích thước tối đa của cửa sổ từ 65.535 byte lên tới 1 gigabyte. Tăng kích thước cửa sổ lớn hơn nữa cũng cần thiết trong TCP Tuning.
Việc tăng kích thước cửa sổ chỉ được dùng trong giao thức bắt tay 3 pha. Giá trị của trường co giãn cửa sổ thể hiện số bit cần được dịch trái đối với trường kích thước cửa sổ. Hệ số dãn có thể thay đổi từ 0 (không dãn) tới 14 (dãn tối đa).

Kết thúc kết nối

Để kết thúc kết nối hai bên sử dụng quá trình bắt tay 4 bước và chiều của kết nối kết thúc độc lập với nhau. Khi một bên muốn kết thúc, nó gửi đi một gói tin FIN và bên kia gửi lại tin báo nhận ACK. Vì vậy, một quá trình kết thúc tiêu biểu sẽ có 2 cặp gói tin trao đổi.
Một kết nối có thể tồn tại ở dạng "nửa mở": một bên đã kết thúc gửi dữ liệu nên chỉ nhận thông tin, bên kia vẫn tiếp tục gửi.

Các cổng TCP

TCP sử dụng khái niệm số hiệu cổng (port number) để định danh các ứng dụng gửi và nhận dữ liệu. Mỗi đầu của một kết nối TCP có một số hiệu cổng (là số không dấu 16-bit) được gán cho ứng dụng đang nhận hoặc gửi dữ liệu. Các cổng được phân thành ba loại cơ bản: nổi tiếng, được đăng ký và động/cá nhân. Các cổng nổi tiếng đã được gán bởi tổ chức Internet Assigned Numbers Authority (IANA) và thường được sử dụng bởi các tiến trình mức hệ thống hoặc các tiến trình của root. Ví dụ: FTP (21), TELNET (23), SMTP (25) và HTTP (80). Các cổng được đăng ký thường được sử dụng bởi các ứng dụng người dùng đầu cuối (end user application) với vai trò các cổng phát tạm thời (khi dùng xong thì hủy đăng ký) khi kết nối với server, nhưng chúng cũng có thể định danh các dịch vụ có tên đã được đăng ký bởi một bên thứ ba. Các cổng động/cá nhân cũng có thể được sử dụng bởi các ứng dụng người dùng đầu cuối, nhưng không thông dụng bằng. Các cổng động/cá nhân không có ý nghĩa gì nếu không đặt trong một kết nối TCP. Có 65535 cổng được chính thức thừa nhận.

TCP trên mạng không dây

TCP cũng được sử dụng cho mạng không dây. Ở đây trường hợp mất gói tin cũng được xem là nghẽn mạng và kích thước cửa sổ do đó cũng sẽ được giảm xuống. Tuy nhiên trong nhiều trường hợp đối với các mạng không dây thì việc mất các gói tin thường xảy ra một cách ngẫu nhiên do ảnh hưởng của fading, chuyển giao giữa các cell... và chúng ta không thể xem đây là nghẽn mạng. Do đó, việc giảm kích thước cửa sổ không đúng sẽ làm cho hiệu quả sử dụng đường truyền giảm một cách đáng kể. Nhiều nghiên cứu đã tập trung để giải quyết vấn đề này. Các giải pháp được đề ra có thể phân loại thành các nhóm: giải pháp đầu cuối (liên quan tới việc thay đổi tại client/server), giải pháp tại tầng liên kết dữ liệu (chẳng hạn giao thức RLP trong chuẩn CDMA2000) và giải pháp dựa trên proxy (thay đổi trong mạng mà không cần thay đổi các thiết bị đầu cuối).

Gỡ rối trong TCP

Các phần mềm đọc gói (packet sniffer) TCP có thể sử dụng để gỡ rối/theo dõi bằng cách đọc tất cả các gói TCP được truyền trong mạng. Ví dụ: Wireshark(trên Windows và Linux), tcpdump(trên Linux)...

Các lựa chọn khác ngoài TCP

Đối với một số ứng dụng thì TCP không thích hợp. Vấn đề lớn nhất là phía nhận không thể tiếp nhận các gói tin đến sau một gói bị lỗi trước khi chính gói bị lỗi được truyền lại. Điều này khiến TCP không thích hợp cho các ứng dụng thời gian thực (real-time) chẳng hạn như đa phương tiện trực tuyến, trò chơi trực tuyến và thoại trên nền IP (VoIP) bởi vì các ứng dụng này cần các gói tin kịp thời hơn là nhận đủ các gói tin theo đúng thứ tự.
Ngoài ra sự phức tạp của TCP cũng gây ra vấn đề với các hệ thống nhúng (embedded system). Ví dụ tiêu biểu là netbooting sử dụng giao thức TFTP. Cuối cùng, độ phức tạp của TCP cũng gây khó khăn cho một số vấn đề khác như truyền thông tin giữa 2 máy tính nằm sau hệ thống chuyển đổi địa chỉ (NAT).
Thông thường, khi TCP không thích hợp thì UDP được sử dụng. UDP cung cấp một số tính năng giống TCP như đa công và kiểm tra tổng nhưng nó không đảm bảo việc truyền lại gói tin lỗi hay thứ tự các gói tin. Vì thế, người phát triển ứng dụng có thể áp dụng các phương thức khác ở các tầng trên để giải quyết vấn đề tùy theo yêu cầu cụ thể.
Giao thức điều khiển truyền vận dòng (Stream Control Transmission Protocol - SCTP) cũng là một giao thức dựa trên nền IP không khác nhiều so với TCP. SCTP được phát triển sau và có cấu trúc phức tạp hơn TCP. SCTP được thiết kế để sử dụng trong điều kiện yêu cầu độ tin cậy và gần thời gian thực. Tuy nhiên SCTP chưa được sử dụng rộng rãi.
TCP cũng bộc lộ một số vấn đề khi dùng trong môi trường truyền dẫn tốc độ cao. Thuật toán tránh nghẽn mạng làm việc tốt trong môi trường không dự tính trước nhưng đối với môi trường xác định hơn chẳng hạn như ATM (Asynchronous Transfer Mode) thì TCP không tận dụng được khả năng của hệ thống bên dưới.

Dữ liệu

Trường cuối cùng không thuộc về header. Giá trị của trường này là thông tin dành cho các tầng trên (trong mô hình 7 lớp OSI). Thông tin về giao thức của tầng trên không được chỉ rõ trong phần header mà phụ thuộc vào cổng được chọn.