es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para instalar la capa de control de tráfico en la topología anterior, puedes seguir estos pasos:

    1. Instante los nodos y enlaces utilizando las clases NodeContainer y PointToPointHelper.
    2. Configure los flujos de tráfico utilizando OnOffHelper o BulkSendHelper.
    3. Agregue la capa de control de tráfico creando un objeto NetDeviceQueueInterface para el dispositivo de red de cada nodo, luego configure las colas utilizando TrafficControlHelper y QueueDiscHelper.
    4. Para medir el tráfico enviado desde los nodos 1 y 2 al nodo 0, puedes utilizar la clase PacketSinkHelper en el nodo 0, la cual creará un receptor para recibir y medir el tráfico entrante.
    5. Para asegurarse de que solo se construya una qdisc en el nodo 0, puedes especificar a qué dispositivo de red aplicar la disciplina de cola utilizando el método SetQueueDisc() de TrafficControlHelper.

    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 utiliza OnOffHelper 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 utilizando TrafficControlHelper y QueueDiscHelper, y se utiliza PacketSinkHelper para crear un receptor en el nodo 0 y medir el tráfico. Finalmente, se utiliza el método SetQueueDisc() para aplicar la disciplina de cola al dispositivo de red conectado al enlace entre el nodo 0 y el nodo 1.

Comments are closed.