2012-04-27 54 views
5

Tôi đã viết chương trình sử dụng giao thức dừng và chờ trên UDP để gửi gói qua mạng LAN và qua mạng WAN. Gần đây tôi đã thử nghiệm chương trình của mình và nhận thấy rằng tỷ lệ mất gói tin cao hơn đối với các gói lớn hơn (tiếp cận 64k byte). Trực quan điều này có ý nghĩa nhưng lý do thực sự cho việc này là gì?Kích thước gói UDP và tổn thất gói

Trả lời

7

Gói UDP lớn hơn MTU size của mạng mang chúng sẽ tự động được chia thành nhiều gói và sau đó được tái hợp bởi người nhận. Nếu bất kỳ gói nào trong số nhiều gói con đó bị loại bỏ, thì trình thu sẽ thả phần còn lại của chúng xuống. Vì vậy, ví dụ nếu bạn gửi gói UDP 63k và nó đi qua Ethernet, nó sẽ bị chia thành 47 gói nhỏ hơn "mảnh" (vì MTU của Ethernet là 1500 byte, nhưng một số trong số đó được sử dụng cho UDP tiêu đề, v.v., do đó lượng dữ liệu người dùng có sẵn trong gói UDP nhỏ hơn). Người nhận sẽ chỉ "thấy" gói UDP đó nếu tất cả 47+ của các gói dữ liệu đó làm cho nó được thông qua. Nếu chỉ một trong những gói dữ liệu bị loại bỏ, toàn bộ thao tác thất bại.

+0

Bạn không thể gửi gói 64k. Trọng tải UDP tối đa là 65507 byte. – EJP

+4

Vâng, nếu chúng ta sẽ chọn nits, một gói UDP với một tải trọng 65507 byte là 65535 byte dài (bao gồm các tiêu đề) - một byte ngắn 64KiB. Nhưng vì mục đích chính xác, tôi sẽ đổi ví dụ của mình thành 63k. –

+0

Hiệu quả của việc này là một lượng nhỏ mất gói có thể ảnh hưởng đến hiệu suất đáng kể. Trong ví dụ này, nếu bạn bị mất gói 2%, bạn sẽ mất khoảng * trung bình * 50% các gói dữ liệu của bạn làm giảm đáng kể lưu lượng. Xem: http://stackoverflow.com/a/19057666/84206 – AaronLS

0

Vâng, mạng dữ liệu không đáng tin cậy; các gói dữ liệu bị loại bỏ mọi lúc. Các bộ định tuyến quá tải, bộ đệm đầy đủ và các gói bị hỏng là một số lý do. Vì UDP không có khả năng điều khiển luồng, nên nó không thể làm chậm nếu ví dụ đầu nhận đang bị quá tải.

Khi Jeremy giải thích, tải trọng lớn hơn, càng có nhiều gói dữ liệu sẽ được chia thành, và do đó có nhiều khả năng mất một số trong số chúng.

UDP được sử dụng trong trường hợp gói bị rơi ở đây sẽ không ảnh hưởng đến bất kỳ thứ gì hoặc trường hợp bạn cần để đạt được điều đó trong thời gian hay không. (VOIP, video trực tuyến, v.v.)

-1

Phân mảnh và phân mảnh IP tất cả về nó. Gói nhiều hơn MTU sẽ bị phân mảnh và phải được phân mảnh tại máy chủ cuối cùng, cũng có cơ hội các mảnh vỡ bị phân mảnh một lần nữa trên đường dẫn và một lần nữa có thể thêm sự chậm trễ. đôi khi nếu một số phần tử N/W được cấu hình cho lớp 4 lọc thì nó chống phân mảnh (không phải là máy chủ cuối cùng) áp dụng các quy tắc và sau đó một lần nữa frgaments và chuyển tiếp. Đó là lý do ứng dụng cần hiệu suất luôn cố gắng gửi dữ liệu với kích thước < = (MTU-ETHHDR-IPHDR)

Các vấn đề liên quan