UDP IP Фрагментация и MTU - PullRequest
       4

UDP IP Фрагментация и MTU

14 голосов
/ 14 сентября 2010

Я пытаюсь понять, какое поведение я вижу в контексте отправки пакетов UDP.

У меня есть две маленькие программы на Java: одна передает UDP-пакеты, а другая получает их. Я запускаю их локально в сети между двумя компьютерами, подключенными через один коммутатор.

Значение MTU (сообщаемое / sbin / ifconfig) равно 1500 для обоих сетевых адаптеров.

  • Если я отправляю пакеты размером <1500, я получаю их. Ожидаемая. </li>
  • Если я отправляю пакеты размером 1500 <размер <24258, я получаю их. Ожидаемое. Через wireshark я подтвердил, что уровень IP их фрагментирует. </li>
  • Если я отправлю пакеты с размером> 24258, они будут потеряны. Не ожидается. Когда я запускаю wireshark на принимающей стороне, я не вижу ни одного из этих пакетов.

Мне удалось увидеть подобное поведение с помощью ping -s.

ping -s 24258 hostA работает, но

ping -s 24259 hostA не удается.

Кто-нибудь понимает, что может происходить, или есть идеи о том, что я должен искать?

Оба компьютера работают под управлением CentOS 5 64-bit. Я использую 1.6 JDK, но на самом деле я не думаю, что это проблема программирования, это проблема сети или, возможно, проблема с ОС.

Ответы [ 2 ]

10 голосов
/ 15 сентября 2010

Реализации протокола IP не обязательно должны обрабатывать произвольно большие пакеты.Теоретически, максимально возможный размер IP-пакета составляет 65 535 октетов, но стандарт требует, чтобы реализации поддерживали не менее 576 октетов.

Может показаться, что реализация вашего хоста поддерживает максимальный размер, намного превышающий 576, но все жезначительно меньше, чем максимальный теоретический размер 65 535.(Я не думаю, что коммутатор должен быть проблемой, потому что он не должен выполнять какую-либо дефрагментацию - он даже не работает на уровне IP).

Стандарт IP также рекомендует, чтобы хосты не отправлялипакеты размером более 576 байт, если только они не уверены, что принимающий хост может обрабатывать пакеты большего размера.Возможно, вам следует подумать, лучше ли вашей программе отправлять пакеты меньшего размера.24,529 кажется мне очень большим.Я думаю, что может быть вероятность того, что многие хосты не будут обрабатывать такие большие пакеты.

Обратите внимание, что эти ограничения размера пакета полностью отделены от MTU (максимальный размер кадра, поддерживаемый протоколом канального уровня).

5 голосов
/ 15 сентября 2010

Я нашел следующее, что может представлять интерес:

Ответ Дана полезен, но обратите внимание, чтопосле заголовков вы действительно ограничены 65507 байтами.

...