Как вы можете уменьшить размер передачи пакета, отправляемого через многоадресную рассылку? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть несколько вопросов (все связанные), поэтому я сначала объясню контекст, а затем задам.Мой основной вопрос - это заголовок, но помимо этого я думаю, что мне просто нужно уточнить и подтвердить правильность моего понимания.

У нас есть несколько разработчиков, которые обмениваются данными между серверами через многоадресную рассылку.Они отправляют текстовый файл ~ 8k, который передается в виде одного большого пакета, а другие серверы прослушивают адрес многоадресной рассылки, чтобы получить файл в качестве обновления.Естественно, это разбивается на фрагменты, и, учитывая его многоадресную рассылку, если фрагмент потерян, то весь пакет теряется (что часто происходит).

Когда файл размером 25 МБ (например, powerpoint)) отправляется по электронной почте - как это сломано?Я всегда понимал, что прикладной уровень (например, FTP) будет вычислять размер файла, разбивать его на отдельные пакеты и отправлять их (отслеживая отправку пакетов) ... теперь, если он отправил его и где-то вдольпуть был меньшего MTU, маршрутизатор (на уровне 3 / IP) будет фрагментировать это.Как только фрагменты поступят, они будут повторно собраны на уровне 3, а затем далее на уровне 7, все пакеты будут повторно собраны (например, FTP-сервером).Правильно ли я понимаю?

Если мое понимание верно, я знаю, что с TCP существует PMTU (Path MTU), который может проверять весь путь (RFC 1191) на предмет наименьшего размера MTU и использовать его перед передачей,Учитывая, что многоадресная передача использует UDP для транспортного уровня, я не был уверен, был ли способ для отправляющего хоста проверить это.Проблема не только в том, что он является UDP, но и в том, что местом назначения будет адрес многоадресной рассылки ... поэтому, даже если бы он мог проверить путь, он знал бы только половину пути между отправителем и адресом многоадресной рассылки,не половина пути между многоадресным адресом и слушателем.Или есть способ проверить это и все же уменьшить размер передаваемого пакета?

В конечном счете, я считаю, что им нужно уменьшить размер отправляемых пакетов, и я предполагаю, что это будет сделано на более высоком уровне(что-то в программном обеспечении), так что в отличие от пакета 8k, приложение будет отслеживать 6 пакетов ... хотя даже с этим «решением» я не уверен, выполнимо ли это с многоадресной рассылкой.Это так?

1 Ответ

0 голосов
/ 16 октября 2018

PMTU работает на уровне IP, а не на уровне TCP.Однако, поскольку вы используете многоадресную передачу, вам не повезло, так как PMTU не работает с многоадресной передачей IPv4.

Лучше всего придерживаться стандартного размера кадра 1500 байт Ethernet (который включает в себя IP иЗаголовки TCP / UDP) и разбить данные на прикладном уровне.

С TCP это, как правило, проще, потому что это потоковый протокол, что означает, что прикладному уровню не нужно беспокоиться о пакетах.Например, отправитель может сначала отправить 8 байтов с указанием размера файла N, а затем отправить N байтов данных.Затем получатель читает 8 байтов, чтобы получить размер N, затем читает N байтов из сокета.Уровень TCP разбивает данные на пакеты и управляет передачей и повторной передачей этих пакетов.

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

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

...