2010-07-20 36 views
10

Tôi hiểu rằng kích thước bộ đệm tối đa mặc định tôi có thể sử dụng với các chức năng này là 65507 (5535 - tiêu đề IPv4 - tiêu đề UDP). Tuy nhiên, có cách nào để thay đổi điều này không? Tôi cần để có thể gửi một bộ đệm lớn hơn ~ 66000 byte. Tôi đã thử sử dụng hàm setsockopt(), nhưng nó dường như không hoạt động.Kích thước bộ đệm tối đa UDP sendto() và recvfrom() tối đa

Cảm ơn!

+0

Bạn không thể chia bộ đệm của mình, gắn thẻ với các bit phụ để biết thứ tự? – Scharron

+0

Có vẻ như tôi sẽ phải đưa ra một kế hoạch như thế này. –

+1

5535 phải là 65535 – kumar

Trả lời

12

số

UDP chỉ cung cấp một gói tin là một phần dữ liệu của một gói tin IP, một gói tin IP có một lĩnh vực chiều dài 16 bit do đó hạn chế các dữ liệu đến 2^16 byte bao gồm các tiêu đề, hoặc 65.507 byte cho phần dữ liệu UDP (giả sử không có tùy chọn ipv4), không có cách nào để xử lý các gói lớn hơn với UDP ngoài việc tách chúng thành nhiều gói và xử lý việc tự ráp lại vv.

+0

Cảm ơn bạn đã làm rõ. –

6

Đặc tả UDP cung cấp cho bạn 16 bit trong tiêu đề UDP cho kích thước gói, điều đó có nghĩa là bạn không thể gửi nhiều hơn 65k cùng một lúc. Bạn không thể thay đổi điều này.

Bạn phải chia dữ liệu thành nhiều gói. Sử dụng TCP thay vì UDP sẽ làm cho mọi việc đơn giản hơn nhiều, vì tính đầy đủ và thứ tự nhận được được đảm bảo.

+1

+1 để đề xuất TCP thay thế. – Matt

8

Ngoài ra, có khả năng mất gói UDP "lớn" trên đường đi, vì gói IP gói có thể bị phân mảnh do giới hạn MTU. Mỗi mảnh có thể bị mất và không có cơ chế phục hồi trong UDP. Vì vậy, trong khi giới hạn lý thuyết cho tải trọng UDP là xấp xỉ. 64kB giới hạn thực tế là khoảng 1kB.

+4

Đây là một điểm quan trọng. Một gói UDP 65500 byte phân mảnh thành các đoạn có kích thước bằng ethernet sẽ biến một tỷ lệ mất mảnh cơ bản 1% thành một tỷ lệ mất gói UDP ~ 37%. Các gói UDP lớn - không làm điều đó! – caf

+0

Tôi làm việc xung quanh vấn đề này bằng cách sử dụng các giao diện chuyên dụng trên mạng con riêng cho lưu lượng UDP với các gói lớn (và các mục ARP tĩnh để ngăn chặn ARP định kỳ giảm). Nếu bạn không thể làm điều đó mặc dù, được chuẩn bị cho các gói bị bỏ. –

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