- TCP/UDP hoạt động khác nhau khi các gói bị mất. Bản thân UDP không tác động đến việc mất gói, vì UDP không chứa bất kỳ kỹ thuật nào để biết các gói có mất hay không. Tuy nhiên, bộ phận phát của TCP sẽ giảm tốc độ truyền khi phát hiện một gói bị mất. Không giống UDP, TCP chứa một trường trong tiêu đề TCP để đánh số thứ tự mỗi đoạn SQ (Sequence Number), khi trạm nhận hồi báo không nhận được gói, TCP nơi phát giả định rằng gói đó bị mất hoặc hỏng và truyền lại. Nơi phát cũng giảm tốc độ truyền dữ liệu vào mạng.
- Phần mềm TCP được thiết kế để xem xét sự tương tác giữa hai đầu cuối của một kết nối và sự trì hoãn thông tin liên lạc giữa hai đầu cuối. Tuy nhiên, trong thực tế TCP phải phản ứng với sự nghẽn mạch của Internet. Nghẽn mạch là trạng thái mà sự trì hoãn là rất cao gây ra bởi sự quá tải các datagram tại một hay nhiều điểm (ví dụ như các bộ định tuyến). Khi nghẽn mạch xảy ra, độ trì hoãn gia tăng và bộ định tuyến bắt đầu xếp hàng các datagram cho đến khi nó có thể truyền chúng đi. Các datagram này phải cạnh tranh để vào bộ đệm vì không gian bộ đệm có hạn. Trường hợp xấu nhất, tổng số datagram gửi đến bộ định tuyến (bị nghẽn mạch) tăng lên cho đến khi bộ định tuyến đạt đến khả năng lưu trữ tối đa của nó và xảy ra tình trạng hủy bỏ các datagram đến sau.


- Các đầu cuối thường không biết chi tiết về nơi xảy ra nghẽn mạch hoặc nguyên nhân nghẽn mạch. Đối với chúng, sự nghẽn mạch đơn giản có nghĩa là độ trì hoãn gia tăng. Hầu hết các giao thức vận chuyển sử dụng bộ đếm thời gian và sự truyền lại, vì vậy chúng phản ứng lại với sự tăng độ trì hoãn bằng việc truyền lại các datagram. Việc truyền lại càng làm cho nghẽn mạch trở nên xấu đi. Nếu không được kiểm soát, sự gia tăng lưu lượng sẽ làm gia tăng độ trì hoãn, như thế càng làm lưu lượng gia tăng,… cho đến khi mạng trở nên quá tải. Tình trạng này gọi là sự sụp đổ do nghẽn mạch.
- TCP sử dụng 2 bộ đệm riêng biệt để quyết định bộ đệm tối đa của dữ liệu có thể truyền trước khi nơi phát phải dừng và chờ hồi báo. Hai tính năng đầu tiên của bộ đệm TCP sử dụng trường Window trong tiêu đề TCP, còn gọi là receiver window (kích thước trạm nhận) hay advertised window-AWND. Bên nhận chấp nhận nơi phát truyền x byte dữ liệu bằng cách thiết lập một giá trị x trong trường Window của tiêu đề TCP. Nếu trạm nhận bộ đệm càng lớn thì thời gian trì hoãn truyền càng giảm.
- Bộ đệm thứ hai là bộ đệm nghẽn xác định dựa vào cửa sổ nghẽn CWND(congestion window), định nghĩa trong RFC 2518. Khác với AWND, cửa sổ nghẽn không truyền thông giữa nơi phát và nơi nhận sử dụng trường tiêu đề TCP; mà trạm phát tính toán CWND, CWND thay đổi kích thước nhanh hơn AWND, vì nó được thiết kế để chống nghẽn mạch.
- Để tránh sự sụp đổ do nghẽn mạch, TCP phải giảm mật độ truyền khi xảy ra nghẽn mạch. Các bộ định tuyến theo dõi độ dài hàng đợi và sử dụng kỹ thuật giống như làm nguội ICMP để thông báo các máy tính ở xa rằng đã xảy ra nghẽn mạch nhưng các giao thức vận chuyển như TCP có thể giúp tránh nghẽn mạch bằng cách giảm cường độ truyền một cách tự động bất cứ khi nào xảy ra trì hoãn. Các thuật toán tránh nghẽn mạch phải được xây dựng cẩn thận vì ngay cả trong điều kiện hoạt động bình thường, mạng Internet cũng có thể gặp những biến đổi lớn trong sự trì hoãn của thời gian đi trọn một vòng (RTT).
Để tránh sự sụp đổ do nghẽn mạch, chuẩn TCP khuyến nghị sử dụng hai kỹ thuật: khởi động chậm (slow-start) và giảm theo cấp số nhân. Chúng có liên hệ với nhau và có thể cài đặt một cách dễ dàng. TCP phải nhớ kích thước cửa sổ nơi nhận (kích thước vùng đệm được thông báo trong hồi đáp ACK). Để kiểm soát việc nghẽn mạch TCP duy trì một giá trị giới hạn thứ hai, được gọi là giới hạn cửa sổ nghẽn mạch hay đơn giản là cửa sổ nghẽn mạch, được sử dụng để giới hạn dữ liệu ở mức ít hơn kích thước vùng đệm nơi nhận khi xảy ra nghẽn mạch. Có nghĩa là, tại thời điểm bất kỳ, TCP duy trì một cửa sổ có kích thước:
Kích thước được phép = min (kích thước thông báo, kích thước cửa sổ nghẽn mạch).
Kí hiệu: W = min (AWND, CWND)
- Trong trạng thái ổn định của một kết nối không nghẽn mạch, cửa sổ nghẽn mạch có cùng kích thước với cửa sổ nơi nhận. Việc giảm bớt kích thước cửa sổ nghẽn mạch CWND sẽ giảm bớt lưu lượng mà TCP sẽ thực hiện kết nối. Để ước lượng kích thước cửa sổ nghẽn mạch CWND, TCP giả định rằng hầu hết datagram bị mất là do sự nghẽn mạch gây nên và sử dụng chiến lược sau:
- Tránh nghẽn bằng cách giảm theo cấp số nhân: khi bị mất một phân đoạn dữ liệu, giảm kích thước cửa sổ nghẽn mạch đi một nửa (cho đến khi chỉ còn kích thước của một phân đoạn dữ liệu). Với các phân đoạn dữ liệu vẫn còn nằm trong cửa sổ được phép, ưu tiên bằng cách gia tăng bộ đếm thời gian truyền lại theo số mũ.
- Vì TCP giảm kích thước cửa sổ nghẽn mạch đi một nửa cho mỗi lần bị mất, nó giảm kích thước cửa sổ đi theo một hàm số mũ nếu còn tiếp tục bị mất. Nói cách khác, nếu có hiện tượng nghẽn mạch, TCP sẽ giảm lưu lượng theo hàm mũ và cả tốc độ truyền lại cũng giảm theo hàm mũ. Nếu vẫn tiếp tục bị mất thì cuối cùng TCP giới hạn dung lượng truyền xuống chỉ còn là một datagram và tiếp tục nhân đôi giá trị của bộ đếm thời gian trước khi truyền lại. Ý tưởng của việc này là nhanh chóng giảm bớt thật đáng kể lượng lưu lượng để cho phép bộ đếm thời gian có đủ thời gian để xử lý các datagram đã nằm trong hàng đợi.
- TCP có thể phục hồi lại như thế nào khi không còn nghẽn mạch? Theo cách nghĩ thông thường, TCP sẽ phục hồi việc giảm theo cấp số nhân và nhân đôi kích thước cửa sổ nghẽn mạch khi bắt đầu truyền dữ liệu. Tuy nhiên, như thế sẽ tạo ra một hệ thống không ổn định, bị giao động rất lớn giữa trạng thái nghẽn mạch và trạng thái không có lưu lượng. Thay vào đó, TCP sử dụng kỹ thuật khởi động chậm để gia tăng việc truyền dữ liệu:
- Phục hồi theo cách khởi động chậm (thêm vào từ từ): Bất cứ khi nào khởi động giao dịch (truyền dữ liệu) trên một kết nối mới hay gia tăng lượng giao dịch sau một giai đoạn bị nghẽn mạch, bắt đầu với kích thước cửa sổ nghẽn mạch bằng một phân đoạn dữ liệu và gia tăng kích thước cửa sổ nghẽn mạch thêm một phân đoạn dữ liệu mỗi lần nhận được một hồi đáp.
- Việc khởi động chậm sẽ tránh cho internet bị tràn ngập bởi lưu lượng giao dịch thêm vào đột ngột sau khi hết nghẽn mạch hay khi một kết nối mới đột nhiên khởi động.
- Thuật ngữ khởi động chậm có thể không chính xác vì dưới những điều khiện lý tưởng, việc khởi động không phải là chậm. TCP bắt đầu với kích thước cửa sổ nghẽn mạch là 1, gửi một phân đoạn dữ liệu đầu tiên và đợi. Khi nhận được lời đáp đầu tiên nó tăng kích thước cửa sổ nghẽn mạch thêm 2, gửi hai phân đoạn dữ liệu, và đợi. Khi nhận được hai lời đáp kế tiếp mỗi cái gia tăng cửa sổ nghẽn mạch thêm 1, nên TCP có thể gửi 4 phân đoạn dữ liệu. Những hồi đáp cho các phân đoạn dữ liệu này sẽ gia tăng kích thước cửa sổ nghẽn mạch thành 8. Chỉ trong vòng bốn vòng, TCP có thể gửi 16 phân đoạn dữ liệu, và đây thường là kích thước giới hạn của nơi nhận. Ngay cả đối với những cửa sổ thật lớn, chỉ cần sau log2N vòng là TCP có thể gửi đi N phân đoạn dữ liệu. Để tránh việc gia tăng kích thước cửa sổ quá nhanh và gây thêm sự nghẽn mạch, TCP gia tăng thêm một ràng buộc. Khi cửa sổ nghẽn mạch đã đạt đến một nửa kích thước ban đầu của nó trước khi xảy ra nghẽn mạch, nghĩa là đạt đến điểm SSTHRESH = ½ CWND ban đầu, TCP chuyển qua giai đoạn tránh nghẽn mạch (khi CWND≥SSTHRESH) và làm chậm lại mức độ gia tăng. Trong suốt giai đoạn tránh sự nghẽn mạch, nó chỉ gia tăng kích thước cửa sổ nghẽn mạch thêm 1 sau khi tất cả các phân đoạn dữ liệu trong cửa sổ đã được hồi đáp ACK.
- Kết hợp các kỹ thuật này lại với nhau, gia tăng chậm khi khởi động, giảm theo cấp số nhân, tránh sự nghẽn mạch, theo dõi sự biến đổi và gia tăng bộ đếm thời gian theo hàm mũ sẽ hoàn thiện hiệu suất của TCP mà không cần những tính toán phức tạp vào phần mềm giao thức.
- Tóm tắt quá trình khởi động chậm và tránh nghẽn mạch:
• Một TCP nơi phát không nhận được hồi báo mất gói; nó giảm CWND xuống giá trị thấp nhất – gọi là quá trình slamming window hay slamming window shut.
• TCP trạm phát thiết lập CWND bằng kích thước của một phân đoạn đơn.
• Thiết lập SSTHRESH = ½ CWND trước khi phân đoạn dữ liệu mất.
• Quá trình khởi động chậm làm cho CWND gia tăng nhanh cho đến khi CWND đạt đến giá trị SSTHRESH.
• Khi CWND ≥ SSTHRESH, vào quá trình tránh nghẽn.

Quảng Cáo