Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

IP/TCP стэк на Миландр 1986ВЕ91Т

Чт июн 29, 2017 09:25:53

Доброго времени суток!
Пытаюсь реализовать простейшее клиент-серверное приложение работающее через IP/TCP, на базе контроллера 1986ВЕ91Т.

Контроллер подключен к ПК, на ПК запускается программа, которая стучится по адресу и пытается установить канал по TCP с моим устройством, отправляет пакет с флагом SYN - см. рис. 1 (раскадровка с WireShark). Моё устройство отвечает пакетом с флагами SYN,ACK - см. рис. 2. (на данном скрине приведен пример с не правильным подсчетом контрольной суммы, но поверьте на слово, в исправленном варианте всё ровно то же самое)

Рисунок 1.
Изображение

Рисунок 2.
Изображение


Суть: Проблема в том, что после отправки пакета (SYN,ACK) не происходит ровным счётом НИЧЕГО. WireShark при этом говорит о том, что пакет принят и пакет составлен корректно. И программа (в данном случае играющая роль клиента) в ответ на "мой" пакет так же никак не реагирует (см.рис.3).

Рисунок 3.
Изображение


Для примера на рисунке 4 приведена раскадровка пакетов передаваемых между 2мя ПК, где на одном ПК прога играет роль клиента, а на другом роль сервера. Как можно заметить, после установки связи начинается благополучная передачи n-го числа байтов данных и успешное завершение сеанса связи.

Рисунок 4.
Изображение


Пытался отправить реплику пакета работающего варианта (т.е. создал точную копию пакета (SYN,ACK) который был
отправлен в ситуации с подключением двух компов и после которого всё сработало) - результат нулевой.

Вопрос: В чем может быть проблема? Почему ПК и программа никак не реагирует на, казалось бы, правильно составленный и принятый пакет?

ЗЫ: Код приводить не вижу смысла, ибо гораздо нагляднее на раскадровке пакетов (но по просьбе трудящихся могу и выложить)

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Чт авг 05, 2021 13:57:35

Возникла такая же проблема. Может кто сталкивался?

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Пт авг 06, 2021 20:50:45

Доброго времени суток!
Пытаюсь реализовать простейшее клиент-серверное приложение работающее через IP/TCP, на базе контроллера 1986ВЕ91Т.

Контроллер подключен к ПК, на ПК запускается программа, которая стучится по адресу и пытается установить канал по TCP с моим устройством, отправляет пакет с флагом SYN - см. рис. 1 (раскадровка с WireShark). Моё устройство отвечает пакетом с флагами SYN,ACK - см. рис. 2. (на данном скрине приведен пример с не правильным подсчетом контрольной суммы, но поверьте на слово, в исправленном варианте всё ровно то же самое)

Попробуйте старший октет MAC адреса сервера сделать нулевым. В старшем байте адреса есть служебные биты, которые отдельно обрабатываются системой и могут вызвать неожиданные эффекты.

UPD: Упс. Не посмотрел на дату :(

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Сб авг 07, 2021 00:10:08

Да, я знаю об этом. Не помогает. Такое чувство, будто клиент не понимает что ему отвечает сервер и шлёт повторный запрос. Буду пробовать запустить клиента на МК и в отладчиком посмотрю что ему не нравится.

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Сб авг 07, 2021 08:13:19

Да, я знаю об этом. Не помогает. Такое чувство, будто клиент не понимает что ему отвечает сервер и шлёт повторный запрос. Буду пробовать запустить клиента на МК и в отладчиком посмотрю что ему не нравится.

Сервер на МК (WEB-ка), после SYN/ACK - все пучком. Физика - Mega8/ENC28J60 ...
Вложения
Shark_for_radiokot.jpg
(112.19 KiB) Скачиваний: 139

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Вс авг 08, 2021 20:50:08

lizard66, поделись пожалуйста рабочим проектом клиента, исходниками

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Вт авг 10, 2021 10:56:33

Про мой случай, забыл совсем описать суть.

КОРОТКО:
Не проверил настройки Wireshark. Нужно включить функцию проверки контрольной суммы TCP/IP. У меня эта сумма считалась не корректно, а Wireshark не сигнализировал об этом.


Конкретно в моем случае сыграла злую шутку настройкаWireshark. При работе с этой прогой оказалось, что у меня была отключена функция проверки контрольной суммы TCP/IP. Все пакеты которые шли, программа по определению считала корректными. В итоге спустя какое то время и пару сотен тысяч погибших нервных клеток я увидел, что у меня снята эта галочка, я ее обратно установил и произошло чудо - абсолютно все пакеты отправленные мной были с ошибкой. Я в своей программе не правильно считал контрольную сумму и поэтому конечное устройство просто игнорировало мои пакеты. Всё пофиксив - всё заработало.
Уверенность в том, что мои пакеты были правильно составлены опиралась сугубо на отсутствие ошибок в Wireshark, что в ситуации, когда Wireshark был не правильно настроен в итоге и сыграло злую шутку.

Re: IP/TCP стэк на Миландр 1986ВЕ91Т

Вт авг 10, 2021 12:38:24

Спасибо.

Так и есть. Вся беда о невнимательности. Конкретно у меня была проблема, не учел тип пакета при расчете контрольной суммы.

Долго искал как включить проверку на КС в wireshark
Edit->Preferences->Protocols, далее выбираем TCP и ставим галочку Validate the TCP checksum if possible
Ответить