Tôi hiện đang tìm hiểu về TCP, đặc biệt là khía cạnh cửa sổ nhận. Tôi đã đọc từ nhiều nguồn về nó, và có một số điều tôi muốn chắc chắn rằng mình hiểu.
Từ những gì tôi đã học được, các người nhận quảng cáo một "cửa sổ nhận", đó là - và đây là nơi tôi bị nhầm lẫn - số byte mà người gửi được phép gửi mà không được xác nhận, hay nói cách khác, dữ liệu trong chuyến bay.
Bây giờ, nếu tôi thử nghĩ về nó, mục tiêu chính của chúng ta trong điều khiển luồng là đảm bảo rằng người gửi sẽ không gửi nhiều hơn mức mà người nhận có thể xử lý, tức là chúng ta muốn ngăn chặn tình huống trong đó người gửi gửi dữ liệu mà người nhận sẽ phải loại bỏ vì nó sẽ không có nơi cất giữ!
Theo logic này, tôi tin rằng cửa sổ nhận phải tương ứng với kích thước của bộ đệm nhận (không biết có giống hoàn toàn không, nhưng dù sao thì kích thước cửa sổ phải là dẫn xuất của bộ đệm nhận) và
lý do mà chúng tôi đang giới hạn dữ liệu trong chuyến bay được gửi bởi người gửi là - nếu người gửi sẽ gửi nhiều hơn kích thước cửa sổ (một lần nữa là dẫn xuất của bộ đệm nhận) và người nhận chưa xác nhận một số dữ liệu (cập nhật kích thước cửa sổ), thì đó có thể là tình huống mà đầu nhận không theo kịp - tức là, đầu nhận sẽ nhận dữ liệu nhanh hơn tốc độ mà ứng dụng tiêu thụ có thể xử lý dữ liệu, dẫn đến các phân đoạn bị loại bỏ (hy vọng điều đó rõ ràng).
Nhưng, đọc bài này, @DavidShwartz đang nói rằng mục đích của dữ liệu trong chuyến bay KHÔNG phải để tránh làm đầy bộ đệm, mà là để xử lý sự chậm trễ được giới thiệu bởi kênh liên lạc. Mà tôi không hiểu lắm.
Vấn đề là mọi nguồn nói về chủ đề này đều không giải thích được mối liên hệ giữa mục đích chung của kiểm soát luồng và điều với dữ liệu trong chuyến bay.
Ai đó có thể giải thích điều này chi tiết hơn?