Instalar la capa de control de tráfico en la topología en ns3.
Quiero instalar la capa de control de tráfico en mi topología a continuación. Intenté crear la topología con 3 nodos, incluyendo el nodo 0, el nodo 1 y el nodo 2. Creé 2 enlaces p2p, uno entre el nodo 0 y el nodo 1, y otro entre el nodo 0 y el nodo 2. Quiero medir el tráfico desde el nodo 1 y el nodo 2 enviado al nodo 0. Construí como el archivo “traffic-control.cc” en el tutorial de ns3, sin embargo, veo que el nodo 0 tiene dos qdiscs construidos con el nodo 1 y el nodo 2. Quiero tener un qdisc en el nodo 0 para medir el tráfico desde otros nodos hacia el nodo 0. ¿Cómo puedo hacerlo?
davy.ai
Para instalar la capa de control de tráfico en la topología anterior, puedes seguir estos pasos:
NodeContainer
yPointToPointHelper
.OnOffHelper
oBulkSendHelper
.NetDeviceQueueInterface
para el dispositivo de red de cada nodo, luego configure las colas utilizandoTrafficControlHelper
yQueueDiscHelper
.PacketSinkHelper
en el nodo 0, la cual creará un receptor para recibir y medir el tráfico entrante.SetQueueDisc()
deTrafficControlHelper
.Aquí tienes un fragmento de código de muestra que muestra cómo hacer esto:
“`c++
// Crear nodos y enlaces
NodeContainer nodes;
nodes.Create(3);
PointToPointHelper p2p1, p2p2;
p2p1.SetDeviceAttribute(“DataRate”, StringValue(“5Mbps”));
p2p1.SetChannelAttribute(“Delay”, StringValue(“2ms”));
p2p2.SetDeviceAttribute(“DataRate”, StringValue(“2Mbps”));
p2p2.SetChannelAttribute(“Delay”, StringValue(“1ms”));
NetDeviceContainer devices1 = p2p1.Install(nodes.Get(0), nodes.Get(1));
NetDeviceContainer devices2 = p2p2.Install(nodes.Get(0), nodes.Get(2));
// Configurar flujos de tráfico
OnOffHelper onoff(“ns3::TcpSocketFactory”, Address());
onoff.SetAttribute(“OnTime”, StringValue(“ns3::ConstantRandomVariable[Constant=1]”));
onoff.SetAttribute(“OffTime”, StringValue(“ns3::ConstantRandomVariable[Constant=0]”));
onoff.SetAttribute(“DataRate”, StringValue(“1Mbps”));
onoff.SetAttribute(“PacketSize”, UintegerValue(1000));
ApplicationContainer source1 = onoff.Install(nodes.Get(1));
source1.Start(Seconds(1.0));
source1.Stop(Seconds(10.0));
ApplicationContainer source2 = onoff.Install(nodes.Get(2));
source2.Start(Seconds(2.0));
source2.Stop(Seconds(15.0));
// Agregar capa de control de tráfico(); ();
TrafficControlHelper tch;
QueueDiscHelper qdh;
qdh.SetProperty(“maxSize”, QueueSizeValue(QueueSize(“3p”)));
NetDeviceQueueInterface ndqi1 = devices1.Get(1)->GetObject
tch.Install(ndqi1, qdh);
NetDeviceQueueInterface ndqi2 = devices2.Get(1)->GetObject
tch.Install(ndqi2, qdh);
// Configurar receptor de paquetes en el nodo 0 para medir el tráfico
uint16_t port = 8080;
Address sinkAddress(InetSocketAddress(Ipv4Address::GetAny(), port));
PacketSinkHelper sinkHelper(“ns3::TcpSocketFactory”, sinkAddress);
ApplicationContainer sinkApp = sinkHelper.Install(nodes.Get(0));
sinkApp.Start(Seconds(0.0));
sinkApp.Stop(Seconds(20.0));
// Aplicar disciplina de cola al dispositivo de red del nodo 0
tch.SetQueueDisc(devices1.Get(0), “root”, “1:0”);
“`
En este ejemplo, se utiliza
PointToPointHelper
para crear dos enlaces entre el nodo 0 y los nodos 1 y 2. Se utilizaOnOffHelper
para configurar flujos de tráfico desde los nodos 1 y 2 hacia el nodo 0. Se agrega la capa de control de tráfico utilizandoTrafficControlHelper
yQueueDiscHelper
, y se utilizaPacketSinkHelper
para crear un receptor en el nodo 0 y medir el tráfico. Finalmente, se utiliza el métodoSetQueueDisc()
para aplicar la disciplina de cola al dispositivo de red conectado al enlace entre el nodo 0 y el nodo 1.