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

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


person Monty Swanson    schedule 03.04.2013    source источник


Ответы (1)


Ссылка на это: http://www.nsnam.org/docs/ релиз/3.16/doxygen/classns3SetDefaultMulticastRoute(dev,nd)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, который устанавливал бы многоадресный маршрут по умолчанию на 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     }
person Russell E Glaue    schedule 20.04.2013