Как отправить фрагмент HTML более 1500 байт через Ethernet в виде фрагментов? - PullRequest
0 голосов
/ 06 мая 2019

Я написал код для микроконтроллера, в котором текст HTML отправляется по локальной сети в браузер через Ethernet, код работает нормально, пока размер кадра Ethernet не превысит 1500 байт.

Есть ли способуспешной отправки HTML-текста в браузер во фрагментах через Ethernet?

ПРИМЕР: если перед отправкой текст фрагментирован!Браузер в этом случае отображает только первую часть фрагмента текста.Пока остальные фрагменты не обновляются в браузере.

Любая поддержка в этом отношении будет принята!

1 Ответ

1 голос
/ 06 мая 2019

Я предполагаю, что вы используете стек TCP и не пытались записывать заголовки TCP / IP напрямую со своим собственным кодом на устройстве. Тогда ваша проблема, скорее всего, связана с Ethernet MTU (максимальная единица передачи).

MTU - это максимальная полезная нагрузка, которая может быть передана (и получена) всеми устройствами в сети. Типичный размер MTU составляет 1500 байт, но, к сожалению, обычно в сетях, где требуется более низкий MTU (например, когда заголовки PPPoE или VLAN добавляются в какой-то момент). Обычно это просто проблема конфигурации. Большая часть оборудования Ethernet поддерживает MTU более 1500 байтов.

Что обычно происходит, так это то, что как только TCP пытается отправить слишком большой пакет, он в какой-то момент отбрасывается (отправитель, получатель, коммутатор или маршрутизатор). Анализатор пакетов, такой как Wireshark , выполнит анализ TCP и сообщит вам о предполагаемой потере пакета и попытках повторной передачи TCP.

Это TCP, который разделяет поток на пакеты, поэтому стек TCP должен знать, что такое MTU. В Linux стек TCP получает эту настройку от сетевого интерфейса. Вы можете увидеть текущее значение с помощью ip link или ifconfig. Он должен быть настроен на обеих сторонах TCP-соединения, но ваша проблема должна уйти, просто установив меньший MTU в стеке TCP встроенного устройства.

В дополнение к этому фрагментация IP может произойти, когда маршрутизатор хочет переслать кадр из сети с высоким MTU в сеть с более низким MTU (или если он добавил другой заголовок Ethernet, и рамка сейчас слишком большая). Если вы не используете очень плохо реализованный стек IP, который не поддерживает фрагментацию, это не должно быть проблемой. (Но это приводит к потере пропускной способности.) В зависимости от флагов маршрутизатор может затем отправить сообщение ICMP, чтобы уведомить отправителя о проблеме. Но если между ними есть межсетевой экран, который отбрасывает ICMP-пакеты, это не сработает и приведет к попыткам повторной передачи без снижения MTU.

...