Показать сообщение отдельно
Старый 13.12.2018, 16:56   #26
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 48
Сообщений: 1,785
Вес репутации: 3564/98
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: Трудно локализуемая проблема.

Цитата:
Сообщение от besogon Посмотреть сообщение
Petr
Ни в коем случае!
Каждый пакет принимается и обрабатывается.
Это проверено много раз и с разных сторон.
И шарком и внутренними средствами.
- как у Вас каждый пакет обрабатывался тогда? Вам же просто клеило 2 пакета в одну посылку и Вы затирали второй пакет, верно?

Скажите что у Вас происходило в итоге-то?
Я не понял ваших слов о 2-х пакетах.
Причем вообще и никак!
Почему 2 пакета??? Откуда они????

Разберем путь Утилита - > Etnernet контроллер.
Утилита открывает сокеты и устанавливает соединение на указанному IP и порту.
Контроллер (там мой софт) делает это самое тройное рукопожатие
и устанавливает TCP окно равным 1 (одному) пакету. Win сокеты принимают этот параметр (будучи адекватно написанными) и никогда не превышают окно в 1 пакет.
Далее Утилита делает запрос и отправляет.
Раньше ОДИН фрейм (пакет) уходил с небольшой задержкой
(созданной алгоритмом Nagle в надежде получить от утилиты еще данные)
Но теперь уже буз задержки в виде ОДНОГО пакета это уходит в сеть.
Далее по дороге МОГУТ быть устройства, раздробляющие пакеты
на части. Но в реале их НЕТ.
А потому шарком я вижу ОДИН пакет и он абсолютно правильный.
Далее фрейм (пакет) попадает через микросхему физического уровня на вход либы LwIP. И по факту события (и того, что окно = 1) вызывается
прерывание (интерфейс RAW) и я получаю данные. Обрабатываю и софтина помешает в буфер ответ. Он тоже короткий ! (уж явно меньше стандартного 1500 байт для фрейма Ethernet)
Но ввиду того, что Nagle наглухо отключен и тут этот ответ пакуется в ОДИН фрейм и уходит в сеть (без задержек).
И его я тоже вижу шарком!
И он тоже правильный.
И тут он МОЖЕТ быть по дороге раздроблен хоть на 5 частей сторонним оборудованием.
Но на ОБЕИХ сторонах софт ПРЕДПОЛАГАЕТ токую возможность и корректно обработает хоть 10 пакетов с ответом.
Но!!! У меня локальная сеть.
И этот одинокий пакет доходит до ПК.
Попадает на вход Win сокетов и в моем софте из них (сокетов)
вываливается ответ от контроллера.
Цикл обработки команды из очереди закончен.

Вопрос!
Где тут ДВА ПАКЕТА ?????
И какой из них я ВЫНУЖДЕН ???? отбрасывать ????
А зачем ?????
Petr вне форума   Ответить с цитированием