У меня несколько компьютеров в локальной сети Gigabit Ethernet, все они связаны между собой одним простым неуправляемым коммутатором L2. Нет доступа в Интернет. Я хочу построить систему реального времени, в которой один компьютер должен отправлять сообщения размером ~ 1 МБ другому с таким свойством, что сообщение либо доставлено, либо полностью потеряно (в последнем случае мне не нужно повторно передавать его, так как это будет устаревшее).

Больше похоже на «прямую трансляцию с камеры видео + аудио + некоторые дополнительные данные с датчиков». Я хочу использовать протокол Ethernet, так как мне не нужна сложная интернет-маршрутизация, а MAC-адресов будет достаточно.

Но Wiki говорит, что максимальная полезная нагрузка составляет всего 46-1500 октетов. Могу ли я преодолеть это ограничение с помощью специально написанного программного обеспечения (например, с помощью API netmap ), или это поведение, определяемое аппаратным обеспечением, которое нельзя изменить?

2 ответа2

1

Ethernet 1G (и выше) обеспечивает поддержку кадров Jumbo с длиной кадров до 9000 байт. Я видел некоторые старые карты Intel PCI (древние устройства), которые поддерживали до 16 тыс. Кадров, но я считаю, что они нестандартные.

Вам нужно будет разделить ваши сообщения на более мелкие куски. Максимальная длина кадра зависит от HW (и никакой SW не будет работать вокруг этого), но я не думаю, что есть что-нибудь, поддерживающее 1M кадров.

1

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

Стандартные кадры Ethernet могут иметь до 1500 байт полезной нагрузки.
Стандартные дейтаграммы IP могут быть длиной до 64 КБ. (Но поскольку в Интернете очень много Ethernet-подобных сетевых соединений, большую часть времени IP-дейтаграммы в любом случае остаются в пределах 1500 байт Ethernet, поскольку фрагментация и повторная сборка больших IP-дейтаграмм менее эффективна, чем просто хранение дейтаграмм в данных. MTU канального уровня.)

Если ваше приложение обрабатывает сообщения большего размера, вы должны самостоятельно выполнить фрагментацию / повторную сборку / проверку сообщений на своем собственном уровне. Вот как это было разработано и как все с этим справляются, и вы будете плыть вверх по течению, пытаясь взломать ваше оборудование, чтобы разрешить сообщения объемом 1 МБ. Вместо этого вы просто должны понимать, что то, что вы хотите, - это не то, что предоставляют вам эти нижние уровни, но они предоставляют вам строительные блоки, необходимые для построения вашего собственного решения на вашем уровне. Сетевые протоколы и технологии специально разрабатываются по уровням, причем самые нижние уровни обеспечивают минимальный уровень, необходимый для этого уровня, так что верхние уровни не обременены нижними уровнями, выполняющими намного больше, чем нужно верхним уровням. На это есть оригинальный документ Солтцера, Рида и Кларка под названием «Сквозные аргументы в проектировании системы». Любой, кто входит в сеть с таким уровнем детализации, должен прочитать его.

Я уверен, что существует множество библиотек создания сообщений, чтобы упростить передачу сообщений произвольной длины через TCP или UDP, где библиотека создания сообщений заботится о фрагментации, повторной сборке и проверке ваших сообщений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .