Пакеты UDP отбрасываются, когда его размер на определенном ПК составляет менее 12 байт.как мне выяснить причину? - PullRequest
4 голосов
/ 11 января 2011

Я застрял в проблеме, о которой раньше никогда не слышали.

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

Я исследовал проблему, и, наконец, я обнаружил тот факт, что ...на его ПК, если размер пакета udp меньше 12, пакет никогда не доставлялся на другой хост.

ниже приводится некоторая дополнительная информация:

  • 1 ~ 11пакеты байтов udp отбрасываются, пакеты в 12 байтов и более 12 байтов в порядке.
  • O / S: Microsoft Windows Vista Business
  • NIC: Attansic L1 Gigabit Ethernet 10/100 / 1000Base-T
  • WSASendTo возвращает TRUE.
  • loopback-пакет udp работает нормально.

как вы думаете об этой проблеме?и что вы думаете ... в чем причина этой проблемы?что я должен сделать для следующего шага по причине?

PS.я не хочу дополнения, которое делает длину всех пакетов до 12 байтов.

Ответы [ 5 ]

3 голосов
/ 11 января 2011

Просто чтобы получить один из неочевидных ответов: возможно, разгрузка контрольной суммы UDP прервана на этой карте, то есть пакеты отправлены, но отброшены получателем?

Вы можете проверить это, просмотрев полученные пакеты с помощью Wireshark.

2 голосов
/ 11 января 2011

Запустите Wireshark на своем ПК И на целевом ПК.

Показывает ли журнал пакет udp, покидающий его машину?Показывает ли он, что он поступает на конечный ПК?

Какое оборудование или коммутаторы маршрутизатора находятся между его ПК и пунктом назначения?Можете ли вы удалить их и связать их с помощью перекрестного кабеля?(или замените место назначения ноутбуком и свяжите его с ПК перекрестным кабелем?)

Вы удалили или хотя бы перечислили все антивирусные и брандмауэры на своем компьютере и все, что устанавливает Winsock LSP?

Отброшены ли ВСЕ пакеты размером 12 байт или меньше или только некоторые, можете ли вы генерировать пакеты со случайным содержимым и посмотреть, является ли это причиной чего-то в содержимом, а не просто в размере.

2 голосов
/ 11 января 2011

ЕСЛИ вы уже проверили брандмауэр, антивирус, сетевой брандмауэр, вторжение в сеть.прочитайте это

Для UDP-пакета ethernet_header (14 байт) + IPv4_header (не менее 20 байт) + UDP_header (8 байт) = 42 байт
Теперь, так как он меньше 64 байтов или 60 в linux, сетьДрайвер будет заполнять пакет нулями (64-42 = 22), чтобы сделать его 60 байтов, прежде чем отправить пакет.

это минимальная длина для пакета UDP.
теоретически вы можете отправить пакет из 0 байтов данных, но еще не пробовали.

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

REF: http://www.freesoft.org/CIE/Course/Section4/8.htm
REF: http://en.wikipedia.org/wiki/User_Datagram_Protocol

1 голос
/ 11 января 2011

Чистая гипотеза : RTP, который является очень распространенным пакетом для отправки по UDP, определяет 12-байтовый заголовок .Интересно, если какой-то уровень сетевого программного обеспечения предполагает, что что-то меньшее является искаженным RTP-пакетом, и выбрасывает его?

1 голос
/ 11 января 2011

Предполагая, что ваша проблема связана с отправкой с на его ПК: Сначала запустите анализатор пакетов на проблемном ПК, чтобы проверить, поступит ли он на NIC. Если это произойдет, возможно, проблема в драйвере NIC или NIC.

Затем проверьте, работает ли какое-либо программное обеспечение брандмауэра. Попробуйте отключить его и посмотрите, что произойдет.

Если это не сработает, уберите всех провайдеров многоуровневых услуг Winsock с netsh winsock catalog reset.

Если это не сработает, я в тупике:)

Наконец, вы, вероятно, найдете других клиентов с такой же проблемой; вы можете все равно подумать об этом обходном пути. Попробуйте отправить несколько UDP-пакетов небольшого размера при подключении, и, если они постоянно не проходят, включите обходной путь заполнения. Для хостов, через которые проходят пробные пакеты, вам не нужно их выделять.

...