2009-08-24 3 views
3

Я нахожусь в локальной локальной сети с только 8 подключенными компьютерами, используя сетевой гигабитный коммутатор netgear 24 порта, сетевая нагрузка действительно низкая, а буферы отправки/получения на всех задействованных узлах (запуск slackware 11) были установлены в 16 мб. Я также запускаю tcpdump на каждом узле для отслеживания трафика.Отсутствие фрагментов UDP при мониторинге трафика с помощью tcpdump

Передающий узел отправляет большой пакет UDP длиной 10044 байт, который чаще всего (3/4 раза) не попадает в приложение принимающей стороны, в этих случаях я замечаю (используя tcpdump), что первые х фрагменты отсутствуют и только 3 последних (все с смещениями> 0 и по порядку) пойманы tcpdump. Поэтому фрагментированный пакет UDP не может быть повторно собран и, скорее всего, выброшен.

Я нахожу недостающие фрагменты странными, так как я также пробовал простой тест нагрузки, вырывающий 10000 UDP-сообщений одного размера, получающее приложение отправляет ответ, и все тесты до сих пор дают 100% ответы.

Какие-нибудь подсказки?

+0

как и на каком хосте вы вызываете tcpdump? – p00ya

+0

В случае фрагментированного мониторинга UDP на стороне отправки. tcpdump -vv src atonce и dst athena. – Kristofer

+0

Обновление: теперь, когда проводящий проводник на приемном конце и tcpdump при отправке, на стенде отображаются только 3 последних фрагмента из предполагаемого 7. – Kristofer

ответ

1

Обновление!

После возобновления тестирования вышеупомянутого программного обеспечения я нашел повторяемый способ воссоздания ошибки.

Использование windump на машине отправителей Windows и tcpdump на принимающей машине, после того как я оставил приложение в режиме ожидания в течение некоторого времени (~ 5 минут), я попытался отправить сообщение udp, но в итоге получился единственный фрагмент, пойманный windump и tcpdump, теряются 3 оставшихся фрагмента. Отправка одного и того же сообщения еще раз работает отлично, а бункерный стенд и tcpdump захватывают все 4 фрагмента, и приложение на принимающей стороне получает сообщение. Шаблон повторяется.

Начал поиск и нашел следующую информацию, но для меня все еще не ясный ответ.

http://www.eggheadcafe.com/software/aspnet/32856705/first-udp-message-to-a-sp.aspx

Re анализа журналов теперь замечаешь запрос ARP/ответ посылается, который соответствует одна из идей, приведенных в приведенной выше ссылке.

ПРИМЕЧАНИЕ! Я фильтр WinDump на передающей стороне, используя: «Dst хозяина receivernode»

Захват из WinDump: первый не удалось сообщение ПДПА, должно быть 4 длинных фрагментов

14:52:45.342266 arp who-has receivernode tell sendernode 
14:52:45.342599 IP sendernode> receivernode : udp 

Захвата с WinDump: второе сообщением ПДПА, точно так же, содержание, все 4 фрагмента пойманы

14:52:54.132383 IP sendernode.10104 > receivernode .10113: UDP, length 6019 
14:52:54.132397 IP sendernode> receivernode : udp 
14:52:54.132406 IP sendernode> receivernode : udp 
14:52:54.132414 IP sendernode> receivernode : udp 
14:52:54.132422 IP sendernode> receivernode : udp 
14:52:56.142421 arp reply sendernode is-at 00:11:11:XX:XX:fd (oui unknown) 

Любой, у кого есть хорошее представление о том, что происходит? пожалуйста, дополните!

+0

. Еще несколько исследований дали следующее: Если нет записи в ARP-кеше и размер UDP превышает MTU, последний фрагмент отправляется в пункт назначения, остальные фрагменты молча отбрасываются. http://support.microsoft.com/kb/233401 http://www.keil.com/support/man/docs/rlarm/rlarm_tn_using_udp_arpempty.htm Обходной путь заключается в продлении тайм-аута чаши или добавлении сообщения keep keep или добавлении статической записи вместо использования динамического. Тем не менее, есть ли способ получить уведомление об этом? – Kristofer

+0

Изменение параметра ArpCacheLife на машине Windows устранило проблему. эквивалент Linux/proc/sys/net/ipv4/neigh/$ DEV/gc_stale_time – Kristofer

+0

На компьютере с Windows вы ссылаетесь на отправляющую машину или пункт назначения? –

Смежные вопросы