Được rồi, tôi vừa giải quyết xong vấn đề khung hình khổng lồ giữa một vài Xserves, Netgear GSM7224 và Drobo B800i. Hóa ra Xserves (Máy chủ Mac OS X 10.6.8) và Drobo B800i chấp nhận MTU theo byte như mong đợi (1500-9000), nhưng Netgear dường như đã muốn nó bao gồm các đầu trang / chân trang ethernet khác nhau ) và cuối cùng tôi đã kết thúc với Xserves & Drobo được cấu hình với MTU là 9000 và các cổng Netgear được đặt thành MTU là 9216.
Tôi đã sử dụng các lệnh sau để kiểm tra và xác minh MTU giữa hai Xserves trên Netgear (Lưu ý: đây là các lệnh Mac OS X, các lệnh Windows & Linux khác nhau):
ping -D -s <mtu> <ip_address>
traceroute -F <ip_address> <mtu>
Việc sử dụng của trình định dạng được ghi chú trong man
trang là "Chỉ định số byte dữ liệu sẽ được gửi. Mặc định là 56, dịch thành 64 byte dữ liệu ICMP khi kết hợp với 8 byte dữ liệu tiêu đề ICMP." Trong thử nghiệm, tôi thấy rằng nó ping -D 1472 <ip_address>
tương đương với MTU 1500 do 8 byte dữ liệu tiêu đề ICMP cộng với các tiêu đề IP 20 byte (xem cái này và cái này ). Đó là tất cả có ý nghĩa.
Bây giờ, tại sao lệnh tương đương cho 9000 MTU ping -D -s 8164 <ip_address>
? Tôi đã xác minh đây là giới hạn trước khi tôi nhận được lỗi "sendto: Message quá dài", nhưng 9000 MTU vẫn hoạt động chính xác như traceroute -F <ip_address> 9000
hoạt động và traceroute -F <ip_address> 9001
không. Vậy, tại sao 8164? Tôi đã mong đợi 8972 (MTU - 28 byte, giống như với 1500 MTU).
Ngoài ra, tại sao 9216 MTU cho Netgear? Tôi đã đếm 42 byte cho các tiêu đề MAC & ethernet (bao gồm CRC), cộng với 20 cho các tiêu đề IP (nên ăn vào MTU).
Tôi thực sự bất bình về môn toán này và biết rằng tôi chỉ thiếu một cái gì đó.