0

有没有办法使用 ns3.js 在多播网络中实现节点的动态修剪/移植。我能找到的资源都只为多播网络实现静态路由。

4

1 回答 1

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)

静态组播路由用于从一个 LAN 路由到另一个 LAN。在现实世界中,我们需要一个知道如何路由多播的路由器。在 ns-3 模拟世界中,我们需要一个知道如何路由多播的路由器。因此,在 ns-3 中,我们需要设置从一个 LAN 到另一个 LAN 的静态路由,该路由AddMulticastRoute()安装在模拟中充当路由器的节点上。

如果有一个 ns-3 助手可以在 aNodeContainerNetDeviceContainer. 但是,该方法需要一个 Node 及其关联的NetDevice,因此您必须使用循环来设置它们,假设0..N中的节点与 中的节点NodeContainer直接相关。0..NNetDeviceContainer

    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

您可以看到多播数据包的发送方和接收方是如何设置的。它确实包括两个 LAN 之间的静态路由。此示例中的接收器没有默认的多播路由设置。内联注释声明所有节点都将从源接收多播帧 - 源是我们执行的节点SetDefaultMulticastRoute(source,sourceIf)

请注意,此代码的注释表明源接收它发送的多播帧。

参考这个:http://www.nsnam.org/docs/release/3.16/doxygen/udp-echo-server_8cc_source.html

您编写的 ns3 应用程序会实际加入 Multicast 组。

    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     }
于 2013-04-20T22:05:14.710 回答