2013-08-24 2 views
0

Мое приложение использует многоадресную возможность UDP.Накладные расходы многоадресной передачи?

Короче говоря, я использую java и хочу передавать все данные с использованием одного многоадресного адреса и порта. Хотя прослушиватели многоадресной рассылки будут логически разделены на подгруппы, которые могут меняться во время выполнения и могут не обрабатывать данные, поступающие извне их группы.

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

Предупреждение Минимальный размер пакета для моего приложения составляет 30000-60000 байт !!!!!

Будет считывать каждый пакет с использованием MulticastSocket.receive (DatagramPacket) и определять, может ли его требуемый пакет вызвать слишком много служебных (даже переполнение буфера).

Будет ли он генерировать массивный трафик, ведущий к перегрузке в сети, потому что каждый пакет отправляется всем?

+1

С такими большими пакетами вы, скорее всего, превысите размеры буфера ваших сетевых устройств/адаптеров. У многих есть только несколько МБ на соединение и с другим трафиком в системе, вы, вероятно, будете часто переполнять буфер. Я предлагаю вам написать свое приложение для обработки достаточно высокой скорости отсева. –

+0

Другим вариантом было бы разбить эти пакеты на более мелкие пакеты, передать их и их собрать в приемнике! –

ответ

0

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

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

+0

Ну, я могу уменьшить размер пакета и да все это в частной WLAN, но моя главная проблема заключается в том, что он вызовет перегрузку, поскольку практически одни и те же данные будут скопированы и отправлены маршрутизатором на каждое устройство, присоединившееся к группе. Так что если в LAN есть 100 устройств, это не вызовет заторов? – Allahjane

+0

Нет, потому что каждый пакет появляется только в каждой подсети один раз, а не на всех, если в нем нет или нет многоадресных слушателей. В этом весь смысл многоадресной рассылки. – EJP

1

Каждый пакет не отправляется всем, так как многоадресная рассылка (например, PIM) будет строить многоадресное дерево, которое будет размещать приемники и отправители оптимально. Таким образом, сеть, которая будет копировать пакет по мере необходимости. Пакеты многоадресной передачи транслируются (технически более точные, затопляемые на уровне Layer2) на последнем скачке. IGMP помогает многоадресную передачу в последнем прыжке и гарантирует, что если в последнем прыжке нет приемника, то такого наводнения не будет.

«и, возможно, он не захочет обрабатывать данные, поступающие извне их группы». Приемный вызов будет возвращать следующую полученную датаграмму, и поэтому мало что можно сделать, чтобы избежать обработки пакетов, которые не предназначены для классификации подгруппы. Не может ли ваше приложение использовать разные группы?

+0

Что делать, если 100 участников в той же группе – Allahjane

+1

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

+1

IGMP помогает в каждом прыжке. Если на другой стороне нет приемника, датаграмма не распространяется. – EJP