Очень странное поведение ...пакетов фрагментированных UDP не полученных приложение
У меня есть 3 машины:
----------- ------------ ----------- | A (x86) |-----| B (x86) |-----| C (arm) | | sender | | receiver | | sender | ----------- ------------ -----------
- А и В Linux (Ubuntu 12.04) машина, ядро 3,2;
- C является машиной android (ICS), ядро 3.0.8;
- Все подключаются через кабели RJ45;
- Соединения в порядке, сеть настроена правильно;
Издание является: когда машина C (ARM-андроида) посылает UDP-пакет, размер которого полезная нагрузка составляет более 1472 байт (максимальная нагрузка до того пакета фрагментируется), сервер приложений на машине B никогда не сможет получить его , ... относительно этого:
- Исходные/целевые IP-адреса верны: я могу получить все отправляемые дейтаграммы, если я установил размер полезной нагрузки меньше или равен 1472;
- На машине B (приемник), если я сбрасываю сетевой трафик с Wireshark, я могу видеть каждый фрагмент, а затем повторно собранное сообщение => с точки зрения Wireshark, это все хорошо!
- Сравнивая каждый заголовок фрагмента, а также повторно собранное сообщение с тем, что я могу сбросить, когда одно сообщение отправлено с машины A (которое всегда принимается OK), все кажется идеальным (только отличия - это IP-адреса и контрольная сумма, поскольку Контрольная сумма заголовка UDP учитывает поля IP-адреса учетных записей).
- Нет проблемы с MTU, пакеты фрагментированы, как ожидалось.
- Нет маршрутизатора/коммутатора между машинами
- ifconfig не показывает ни падение пакетов, ни переполнение, ни любую другую классическую ошибку!
- ... это настолько странно !!
Я провел некоторое время в Интернете, но не нашел ни одной темы, как эта. Каждый раз, когда у людей возникают проблемы с UDP, либо их обнаружение MTU было неправильным, либо они неправильно реагировали на процедуру тестирования, либо не могли сбрасывать сообщения на принимающем хосте, ... здесь это не так!
Наверняка, я знаю, что проблема на конце отправителя (машина C), но, возможно, может быть проще включить некоторые журналы (на уровне ядра?) На конце приемника, чтобы понять, почему датаграмма UDP исчезает !? Любой совет? Существуют ли определенные файлы, которые я мог бы проверить/proc/sys/net, или параметры ядра, которые я должен включить?
Большое спасибо.
Несмотря на то, что вы можете быть уверены, пожалуйста, напишите весь адрес: значения подсети порта – markmnl
Я, наконец, нашел проблему. – maqui
Я, наконец, нашел проблему. Добавляя следы в ядре Linux машины B, я смог понять, что датаграмма упала из-за плохой контрольной суммы полезной нагрузки (после ее повторной сборки). По прошествии некоторого времени, я вычислил NIC вычислительной C вычислительной UDP контрольной суммы всех пакетов, независимо от того, были ли они фрагментами или нет. Это привело к тому, что байты 7 и 8 всех фрагментов были перезаписаны этой контрольной суммой. Теперь я исправил проблему в настройке карты NIC, и все в порядке. Спасибо большое! – maqui