Подтвердить что ты не робот

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

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

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

Настройка MTU (сообщенная/sbin/ifconfig) равна 1500 на обоих сетевых адаптерах.

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

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

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

ping -s 24259 hostA не работает.

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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