Есть ли способ реализовать динамическое сокращение / прививку узлов в многоадресной сети, используя ns3. Все ресурсы, которые я мог найти, реализуют только статическую маршрутизацию для многоадресных сетей.
Ссылка на это:
http://www.nsnam.org/docs/release/3.16/doxygen/classns3_1_1_ipv4_static_routing_helper.html#ae69a07ded3139dfd4e21bb7c10eba416
В ns-3 мы устанавливаем многоадресный маршрут по умолчанию для таблицы маршрутизации узла, выполняющей SetDefaultMulticastRoute(dev,nd)
, что, как указано в документации, эквивалентно выполнению следующего:
route add 224.0.0.0 netmask 240.0.0.0 dev nd
При настройке многоадресной рассылки для сервера linux в физическом мире нам необходим маршрут для адресов многоадресной рассылки в таблице маршрутизации. В мире моделирования ns-3 мы должны сделать то же самое для каждого узла, который мы создаем, используя SetDefaultMulticastRoute(dev,nd)
,
Статические многоадресные маршруты предназначены для маршрутизации из одной локальной сети в другую. В реальном мире нам нужен маршрутизатор, который знает, как маршрутизировать многоадресную рассылку. В мире моделирования ns-3 нам нужен маршрутизатор, который знает, как маршрутизировать многоадресную рассылку. Поэтому в ns-3 нам нужно настроить статический маршрут из одной локальной сети в другую, используя AddMulticastRoute()
это установлено на узле в моделировании, который действует как маршрутизатор.
Было бы неплохо иметь помощника ns-3, который установил бы маршрут Multicast по умолчанию на NodeContainer
а также NetDeviceContainer
, Тем не менее, метод хочет один узел и связанный с ним NetDevice
, поэтому вы должны использовать цикл, чтобы установить их все в предположении 0..N
узлы в NodeContainer
напрямую связаны с 0..N
узлы в NetDeviceContainer
,
for (int i = 0; i < N; i++) {
Ptr<Node> sender = nodecontainer.Get (i);
Ptr<NetDevice> senderIf = netdevicecontainer.Get (i);
multicast.SetDefaultMulticastRoute (sender, senderIf);
}
Ссылка на это:
http://www.nsnam.org/docs/release/3.16/doxygen/csma-multicast_8cc_source.html
Вы можете увидеть, как настроен отправитель и получатель многоадресных пакетов. Он включает в себя статический маршрут между двумя локальными сетями. Получатель в этом примере не имеет настройки многоадресного маршрута по умолчанию. Встроенные комментарии утверждают, что все узлы получат многоадресный фрейм из источника — источником является узел, в котором мы выполняем SetDefaultMulticastRoute(source,sourceIf)
за.
Обратите внимание, что комментарии к этому коду указывают, что источник получает многоадресный кадр, который он отправляет.
Ссылка на это:
http: // www.nsnam.org/docs/release/3.16/doxygen/udp-echo-server_8cc_source.html
Приложение ns3, которое вы пишете, выполняет фактическое присоединение к группе многоадресной рассылки.
78 if (m_socket == 0)
79 {
80 TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
81 m_socket = Socket::CreateSocket (GetNode (), tid);
82 InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), m_port);
83 m_socket->Bind (local);
84 if (addressUtils::IsMulticast (m_local))
85 {
86 Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
87 if (udpSocket)
88 {
89 // equivalent to setsockopt (MCAST_JOIN_GROUP)
90 udpSocket->MulticastJoinGroup (0, m_local);
91 }
92 else
93 {
94 NS_FATAL_ERROR ("Error: Failed to join multicast group");
95 }
96 }
97 }
Других решений пока нет …