Wireshark — что случилось?

Wireshark — что случилось?

Эта проблема с Wireshark сводит меня с ума уже несколько часов. Что здесь происходит?

192.168.2.100 — это сервер Apache, обслуживающий статический файл.

192.168.2.196 — встроенный клиент, загружающий файл.

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

Правильно ли это и почему клиент может так поступать?

Изображение Wireshark — нажмите здесь

решение1

Симптомы явно указывают на наличие узкого места в обработке приема на стороне клиента.

Трассировка показывает, что буфер приема в сетевом стеке клиента (очевидно, LwIP) заполняется. В частности, размер окна в подтверждениях от клиента уменьшается по мере получения серии пакетов от сервера, пока буфер приема полностью не заполнится и клиент не отправит серверу сообщение «ZeroWindow» с просьбой прекратить отправку данных.

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

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

Вы упомянули, что клиентский хост — это встроенное устройство, а также прокомментировали, что ваше приложение, похоже, заблокировано на lwip_read(). Ожидание предполагает, что другой ресурс ввода-вывода или ЦП или узкое место в планировании может помешать вашему потоку чтения получить достаточно времени ЦП для передачи файла. Однако задержанные ACK предполагают, что может быть более масштабная проблема. Не зная больше о встроенном устройстве, сложно устранять неполадки дальше.

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

Надеюсь, эта информация поможет вам решить проблему.

Связанный контент