|
Информация из UDP пакетов не доходит до программного приложения, Gigabit Ethernet, UDP пакеты от устройства на 88E1111 в ПК |
|
|
|
Mar 18 2016, 08:42
|
Группа: Участник
Сообщений: 14
Регистрация: 11-08-07
Из: Украина, Харьков
Пользователь №: 29 710

|
Перечитав свой первый пост, решил дополнительно уточнить такой момент. Проблема возникает не постоянно, т. е. не при каждой передаче блока сообщений от устройства в ПК, а носит не периодический характер (или я ещё не выявил периодичности), т. е. устройство может без проблем передавать сообщения в течение нескольких минут, потом в течение одной минуты может быть один-два сбоя, и снова несколько минут беспроблемной передачи. Поэтому у меня и возникло предположение, озвученное в первом посте, что пока объём данных приходящий в ПК имеет некоторую кратность объёму буфера в сетевой карте, то все работает хорошо, а как только не добираем необходимого объёма данных, то возникают проблемы. Также на эту мысль наводит описание регистров чипа RTL8111B_8168B п. 2.8 (см. приложение, п. 2.8).
RTL8111B_8168B_Registers_DataSheet_1.0.pdf ( 633.74 килобайт )
Кол-во скачиваний: 2412Попутно возникли вопросы. 1. Можно ли узнать, как стандартный драйвер настроил чип? 2. Можно ли средствами стандартного драйвера перенастроить регистры чипа в сетевой карте на своё усмотрение? ------------------------------------------ Цитата(kolobok0 @ Mar 18 2016, 04:03)  необходимо проконтролировать корректность данных между писюком и плисиной. Сами сетевые пакеты, насколько я понимаю, не содержат ошибок, т. к. нет никаких ошибок ни в статистике сниффера, ни в отчете netstat. Аналогично нет ошибок и в самих сообщениях, поскольку, когда сообщение всё-таки доходит до ПО, то анализ сообщения показывает, что с его содержимым всё в порядке.
|
|
|
|
|
Mar 18 2016, 09:44
|
Знающий
   
Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595

|
Цитата(zltigo @ Mar 18 2016, 11:53)  Снифер НЕ видит и не отображает ошибки и проблемы транспортного уровня. Попробуйте таки начать с наблюдения альтернативным снифером, как написал в первом посте. Ну, если UDP пакеты не теряются, то и с транспортным уровнем проблем быть не должно. Цитата(zltigo @ Mar 17 2016, 18:07)  ... Единственно, что на интимном уровне фреймы с данными более 508 байт могут резаться и собираться обратно. тут да, тайматуты в каком-то виде могут/будут присутствовать. А вот нарезку пакетов действительно стоит проверить. Что там насчитал осциллографом ТС - тоже вопрос. Так что, честная статистика по фреймам может очень даже пригодиться.
|
|
|
|
|
Mar 18 2016, 10:01
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (prig @ Mar 18 2016, 11:44)  Ну, если UDP пакеты не теряются, то и с транспортным уровнем проблем быть не должно. Отнюдь. Видно, что они приходят целыми но почему-то только после сетевой активности связанной с передачей других пакетов. Автор, кстати не сказал, прямое соединентие или еще и через свичи/роутеры? Как не озвучил и размер пакетов. Кстати, а UDP заголовок честый? В смысле в нем нет broadcast MAC/IP ?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 18 2016, 11:00
|
Группа: Участник
Сообщений: 14
Регистрация: 11-08-07
Из: Украина, Харьков
Пользователь №: 29 710

|
Цитата(zltigo @ Mar 18 2016, 13:01)  Автор, кстати не сказал... Виноват, забыл, исправляюсь. Устройство подключено к ПК напрямую. Сетевые настройки, следующие: - MAC-адрес устройства: 0x001122334455
- IP-адрес устройства: 192.168.100.250
- Порт устройства: 3080
- IP-адрес ПК: 192.168.100.134
- Порт ПК: 3080
В настройках сетевой карты включен режим приема Jumbo фреймов размером 4 КБ MTU (максимальный размер для данной сетевой карты). Размеры пакетов указывал в первом посте, напомню: - команды от ПК: размер фрейма не меньше 60 байт, полезные байты UDP >= 18
- сообщение от устройства «Заголовок»: размер фрейма 74 байта, полезные байты UDP = 32
- сообщение от устройства «Данные»: размер фрейма 1074 байтов, полезные байты UDP = 1032
Размер сообщения «Данные» в устройстве можно настраивать, так вот, если изменять этот размер и выдавать данные не 4-мя сообщениями, а, например, одним (размер фрейма 4146 байтов, полезные байты UDP = 4104), то ситуация изменяется и проблемный прием в ПК возникает намного реже. А если в настройках сетевой карты отключить поддержку Jumbo фреймов, и производить передачу блоками по 4-е сообщения «Данные» (размер фрейма 1074 байтов, полезные байты UDP = 1032), то проблема с приемом вообще никогда не возникает. Но отключение Jumbo фреймов не годится, т. к. в другом исполнение устройства, передаваемые сообщения с данными должны быть как можно большего размера.
Сообщение отредактировал kanat - Mar 18 2016, 11:01
|
|
|
|
|
Mar 18 2016, 12:48
|
Знающий
   
Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595

|
Цитата(zltigo @ Mar 18 2016, 13:01)  Отнюдь. Видно, что они приходят целыми но почему-то только после сетевой активности связанной с передачей других пакетов. ... Ну, разве что на стыке со 2-м уровнем (если 3-й и 4-й объединить). На стандартные стеки TCP/IP грешить трудно. Разве что, исходники какие-то левые. Скорее всего, драйвер конкретного железа на компе кривоват, или само железо, или вообще не тот драйвер стоит. Т.е., скорее это проблемы 2-го уровня.
|
|
|
|
|
Mar 18 2016, 16:26
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(kanat @ Mar 18 2016, 14:00)  ...если в настройках сетевой карты отключить поддержку Jumbo фреймов, и производить передачу блоками по 4-е сообщения...должны быть как можно большего размера. а с чего Вы взяли, что вкл/откл настроек на приёме сказывается на возможность приёма больших пакетов? чисто из опыта высылал с девайса максимально возможные пакеты(65535 октетов) - по сети, если через роутер идёт, то разрезание на размер мту. Если напрямую соединять девайс с писюком, то пакеты режутся уже на приёме карточкой. Никаких доп. настроек сетевых дел не делал. Если комп скоростреьный - проблем с освобождением буферов на приёме(уровень драйвера) не должно быть в принципе(хоть по 100 байт заправляй в ожидание). Со стороны мк кстати похожая екибана. (круглый)
Сообщение отредактировал kolobok0 - Mar 18 2016, 16:28
|
|
|
|
|
Mar 18 2016, 20:07
|
Группа: Участник
Сообщений: 14
Регистрация: 11-08-07
Из: Украина, Харьков
Пользователь №: 29 710

|
Цитата(prig @ Mar 18 2016, 13:44)  Так что, честная статистика по фреймам может очень даже пригодиться. А подскажите, пожалуйста, каким способом можно получить эту статистику в Windows? Цитата(kolobok0 @ Mar 18 2016, 20:26)  а с чего Вы взяли, что вкл/откл настроек на приёме сказывается на возможность приёма больших пакетов? Если я выключаю возможность приема Jumbo фреймов в настройках сетевой карты, и потом настраиваю устройство на выдачу сообщений с данными размером фрейма 4146 байтов, то на приеме в ПК, как в сниффере, так и в ПО, я вижу только первое сообщение "Заголовок" (размер фрейма 74 байта) и дальше ничего.
Сообщение отредактировал kanat - Mar 18 2016, 20:21
|
|
|
|
|
Mar 21 2016, 10:15
|
Знающий
   
Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595

|
Цитата(zltigo @ Mar 18 2016, 19:52)  Именно по этой причине и не рассматриваю их в ПЕРВУЮ очередь и говорю о физическом и транспортном уровне. Вы что подразумеваете под транспортным уровнем? Вообще-то, транспортный уровень - это 4-й уровень, т.е, собственно UDP он и есть. Прямо-таки скажем, что транспорт незамысловатый. Как я уже говорил, проблемы на уровне стека весьма сомнительны, особливо для UDP. Если пакеты UDP в конце концов доходят до адресата, то и с транспортным, и с физическим уровнем всё д.б. в порядке. Так как пакеты или фреймы где-то зависают, затык наиболее вероятен между канальным и сетевым уровнем. Скорее всего, канальный уровень просто в какой-то момент не передаёт фрейм на сетевой, а следующий фрейм его "проталкивает". Как вариант, проблема может быть как-то связана с фрагментированием пакета (чуть ли не первое, что на ум приходит). Цитата(kanat @ Mar 18 2016, 23:07)  А подскажите, пожалуйста, каким способом можно получить эту статистику в Windows? ... Ну, при необходимости я трясу статистику из программеров. В детали не погружаюсь. Достукиваться надо до счётчиков MAC. Наверное, реализуется через какой-нибудь API. М.б. и готовые утилиты под Виндами имеются. Как вариант, подключить всё через подходящий свитч, у которого имеются готовые возможности посмотреть статистику по портам.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|