Как реализовать многоадресное динамическое объединение / сокращение с помощью ns3

Есть ли способ реализовать динамическое сокращение / прививку узлов в многоадресной сети, используя ns3. Все ресурсы, которые я мог найти, реализуют только статическую маршрутизацию для многоадресных сетей.

0

Решение

Ссылка на это:
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     }
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]