Làm thế nào kích thước cửa sổ TCP có thể được phép lớn hơn kích thước tối đa của gói ethernet?


8

Tôi biết rằng kích thước cửa sổ TCP có thể được thu nhỏ tới hơn 64KB, nhưng nhìn vào một datagram gói ethernet, chẳng hạn như cái này:

Mô hình lớp mạng

có vẻ như một gói lớp 2 bị giới hạn kích thước nhỏ hơn nhiều. ACKing hoạt động như thế nào ở lớp TCP nếu một yêu cầu TCP duy nhất yêu cầu một số yêu cầu mạng được lắp ráp tại một bộ thu?


2
Tôi nghĩ rằng bạn đang nhầm lẫn cửa sổ với MSS (Kích thước phân đoạn tối đa).
Ron Maupin

Tôi là @RonMaupin (thực tế tôi không biết có sự khác biệt)
Zach Smith

Câu trả lời:


24

Các kích thước cửa sổ TCP nói chung là không phụ thuộc vào kích thước phân khúc lớn nhất mà phụ thuộc vào các đơn vị truyền tải tối đa do đó phụ thuộc vào kích thước khung hình tối đa .

Hãy bắt đầu thấp.

Các kích thước khung hình tối đa là khung lớn nhất mạng (segment) có thể vận chuyển. Đối với Ethernet, đây là 1518 byte theo định nghĩa.

Khung đóng gói một gói IP, vì vậy gói lớn nhất - đơn vị truyền tối đa MTU - là kích thước khung tối đa trừ đi chi phí khung. Đối với Ethernet, đó là 1518 - 18 = 1500 byte.

Gói IP đóng gói một phân đoạn TCP, do đó, kích thước phân đoạn tối đa MSS là MTU trừ đi chi phí IP trừ chi phí TCP (MSS không bao gồm tiêu đề TCP). Đối với Ethernet và TCP qua IPv4 mà không có tùy chọn, đây là 1500 - 20 (tổng phí IPv4) - 20 (chi phí TCP)) = 1460 byte.

Bây giờ, TCP là một giao thức truyền tải tự thể hiện như một ổ cắm luồng cho ứng dụng. Điều đó có nghĩa là một ứng dụng chỉ có thể truyền bất kỳ lượng dữ liệu có kích thước tùy ý qua ổ cắm đó. Do đó, TCP chia luồng dữ liệu thành các phân đoạn đã nói (0 đến MSS byte dài {1}), truyền từng phân đoạn qua IP và đặt chúng trở lại cùng nhau tại đích.

Các phân đoạn TCP được xác nhận bởi đích đến để đảm bảo phân phối. Hãy tưởng tượng nút nguồn sẽ chỉ gửi một phân đoạn duy nhất, chờ xác nhận và sau đó gửi phân đoạn tiếp theo. Bất kể băng thông thực tế, thông lượng của kết nối TCP này sẽ bị giới hạn bởi thời gian khứ hồi (RTT, thời gian cần thiết để một gói đi từ nguồn tới đích và quay lại).

Vì vậy, nếu bạn có kết nối 1 Gbit / s giữa hai nút có RTT là 10 ms, bạn có thể gửi 1460 byte mỗi 10 ms hoặc 146 kB / s một cách hiệu quả. Điều đó không thỏa mãn lắm.

Do đó, TCP sử dụng cửa sổ gửi - nhiều phân đoạn có thể "đang bay" cùng một lúc, được gửi đi và chờ xác nhận. Nó cũng được gọi là cửa sổ trượt khi nó tiến lên mỗi khi phân đoạn ở đầu cửa sổ được xác nhận, kích hoạt việc gửi phân đoạn tiếp theo mà cửa sổ tiến tới. Bằng cách này, kích thước phân khúc không thành vấn đề. Với một cửa sổ truyền thống 64 KiB, chúng ta có thể có số tiền đó trong chuyến bay và theo đó, vận chuyển 64 KiB trong mỗi 10 ms = 6,5 MB / s. Tốt hơn, nhưng vẫn không thực sự thỏa mãn cho kết nối gigabit.

TCP hiện đại sử dụng tùy chọn tỷ lệ cửa sổ có thể tăng cửa sổ gửi theo cấp số nhân lên tới 2 GiB, cung cấp cho một số tăng trưởng trong tương lai.

Nhưng tại sao không phải tất cả dữ liệu chỉ được gửi cùng một lúc và tại sao chúng ta cần cửa sổ gửi này? Nếu bạn gửi mọi thứ nhanh như bạn - cục bộ - có thể và có (rất có thể) một liên kết chậm hơn ở đâu đó trên đường đến đích, một lượng dữ liệu đáng kể sẽ cần phải được xếp hàng. Không có bộ chuyển mạch hoặc bộ định tuyến nào có thể đệm nhiều hơn một vài MB (nếu có), do đó, lưu lượng vượt quá sẽ cần phải được loại bỏ. Không thừa nhận, nó sẽ cần phải bực bội, vượt quá một lần nữa. Điều này sẽ rất kém hiệu quả và nó sẽ làm tắc nghẽn mạng nghiêm trọng. TCP xử lý vấn đề này bằng điều khiển tắc nghẽn, điều chỉnh kích thước cửa sổ theo băng thông hiệu quả và thời gian khứ hồi hiện tại trong một thuật toán phức tạp.

{1} phân đoạn rỗng có thể được sử dụng để ngăn chặn timeouts kết nối bằng cách sử dụng keepalive tùy chọn. Thx Ded repeatator


1
Chà, các gói tcp có thể không có tải trọng nào cả, nếu chúng chỉ dành cho tcp-keepalive.
Ded repeatator

2
@Ded repeatator Hoàn toàn - TCP phức tạp hơn nhiều so với mô tả ở đây.
Zac67

3
Thật là một lời giải thích tuyệt vời. Một trường hợp liên quan là RTT rất lớn ngay cả khi tốc độ dữ liệu tương đối chậm, chẳng hạn như được yêu cầu cho internet liên hành tinh. Ông Cerf nói tốt về nó. Cửa sổ gửi liên hành tinh trước đây là yếu tố cốt lõi của truyện ngắn "Con trai nhà vật lý" của ông Asimov (cũng mạnh về định kiến ​​giới 1962.)
jonathanjo

Câu trả lời chính xác. Tôi muốn bạn tiếp tục giải thích những điều tcp trong bối cảnh với cách tiếp cận thực tế. hoặc bạn có liên kết nơi bạn đã giải thích chúng
Kẻ hủy diệt

@Terminator Đã có câu trả lời rất tốt cho các câu hỏi TCP ở đây, chỉ cần kiểm tra danh mục hoặc tìm kiếm từ khóa.
Zac67
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.