2010-10-13 46 views
8

Một chút nền.Làm thế nào lớn là một khung gói tin IP bao gồm các tiêu đề?

Tôi đang viết một ứng dụng sử dụng UDP. Ứng dụng sẽ chạy trên mạng LAN (không phải internet). Tôi đã giả định rằng nếu MTU của tôi là 1500 thì đó là trọng tải của UDP lớn, nhưng tôi là không chắc chắn rằng tiêu đề UDP có phù hợp với điều đó không.

Tôi nghi ngờ rằng nếu tôi gửi gói UDP với trọng tải 1500 byte và máy MTU là 1500 byte thì cuối cùng nó sẽ gửi hai gói?

Tìm kiếm trên Internet để có câu trả lời rõ ràng ở đây có vẻ khó hơn, nên tôi đã thấy thông tin xung đột.

+0

Khá chắc chắn sẽ cung cấp cho bạn phân mảnh. Bạn có thể sử dụng Wireshark để xem điều này cho chắc chắn mặc dù. –

+0

Cảm ơn, vâng wireshark không hiển thị nhiều vì tôi đang phát triển cô lập. loopback MTU là 16436! – Matt

+0

Cảm ơn tất cả mọi người và cảm ơn các liên kết. Họ đã được tốt hơn so với những người tôi tìm thấy trên google. – Matt

Trả lời

9
------------------------------------------------------------------------------ 
|Ethernet | IPv4   |UDP | Data     |Ethernet checksum| 
------------------------------------------------------------------------------ 
    14 bytes 20 bytes  8 bytes x bytes    4 bytes 
      \ (w/o options)        /
      \___________________________________________/ 
           | 
          MTU 

Nếu MTU của bạn là 1500, bạn có 1500-20-8 = 1472 byte cho dữ liệu của bạn.

  • Nếu bạn vượt quá điều đó, các gói sẽ bị phân mảnh, nghĩa là. chia thành nhiều gói hơn.
  • Có thể có nhiều lớp liên quan hơn, ví dụ: 4 byte một tiêu đề vlan nếu bạn đang ở trên đầu trang của một vlan ethernet.
  • Một số bộ định tuyến giữa bạn và đích có thể thêm nhiều lớp hơn.
+1

AFAIK MTU KHÔNG bao gồm tiêu đề Ethernet và CRC32 sau (mà bạn bỏ qua), nhưng là tải trọng Ethernet hiệu quả, nơi bạn phải trừ phí giao thức IP. – Lucero

+0

Cảm ơn, đó là điều tôi nghi ngờ nhưng không chắc chắn. – Matt

+0

@Lucero Có, bạn có thể đúng, tùy thuộc vào lớp bạn xác định MTU là. MTU của một datagram IP trong trường hợp này tôi đoán. – nos

2

Có lẽ bài viết này sẽ giúp: http://sd.wareonearth.com/~phil/net/overhead/

+0

Cảm ơn, một liên kết rất hữu ích. Tỷ lệ thông lượng cho gig-e rất hữu ích. Tôi đang đạt được 760GB/s trên phần cứng không phải máy chủ vì vậy tôi nghĩ rằng đó không phải là quá xấu. Nhưng, nếu tôi đặt dữ liệu gói chính xác thì nó có thể cải thiện. – Matt

3

Có ví dụ của bạn sẽ không vừa với một khung.

Tải trọng dữ liệu ethernet là 1500 byte. IPv4 yêu cầu tối thiểu 20 byte cho tiêu đề của nó. Ngoài ra, IPv6 yêu cầu tối thiểu 40 byte. UDP yêu cầu 8 byte cho tiêu đề của nó. Điều đó để lại 1472 byte (ipv4) hoặc 1452 (ipv6) cho dữ liệu của bạn.

Thông tin thêm:

-1

Vì vậy, đây là cách nó hoạt động. Ethernet hạn chế lưu lượng dữ liệu của bạn đến 1500 byte mỗi khung mặc dù bạn có ống 100 meg chất béo. Để thực sự sử dụng tốc độ dòng, thông qua ứng dụng UDP của bạn, bạn sẽ cần phải sử dụng/di chuyển đến khung jumbo ethernet có thể hỗ trợ tối đa 9000 byte cho mỗi khung hình. Ngoài ra, nếu bạn xem netflix/youtube và các giao thức truyền trực tuyến khác, chúng sẽ kiểm tra liên kết của bạn trước khi chúng bắt đầu phát trực tuyến. Những gì cơ bản họ làm là, họ gửi một số dữ liệu cho bạn và tính toán/trung bình tốc độ liên kết trước khi họ đổ dòng. Về cơ bản, họ sử dụng UDP nhưng với kích thước gói rất lớn. Tôi đoán chắc chắn hơn 1500 byte.

+0

Đó được gọi là đường dẫn phát hiện MTU và nó không liên quan gì đến câu hỏi ban đầu của tôi. Không có điểm đăng câu trả lời của bạn cho rằng câu hỏi đã được trả lời đầy đủ hơn 1 năm trước đây. Hãy suy nghĩ cẩn thận trước khi đăng. – Matt

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