Simulador de red tutorial ns-3. Capítulo 4


capítulos 1.2
capítulo 3


4 Descripción general del concepto
4.1 Abstracciones clave
4.1.1 Nodo
4.1.2 Aplicación
4.1.3 Canal
4.1.4 Dispositivo de red
4.1.5 Asistentes de topología
4.2 Primer script ns-3
4.2.1 Código repetitivo
4.2.2 Complementos
4.2.3 espacio de nombres ns3
4.2.4 Registro
4.2.5 Función principal
4.2.6 Uso de asistentes topológicos
4.2.7 Uso de la aplicación
4.2.8 Simulador
4.2.9 Construir su script
4.3 código fuente ns-3


Capítulo 4


Resumen del concepto


, , ns‑3 — . , , , , , .


4.1


, , ns‑3.


4.1.1 Node ()


- , , . , ns‑3 — , , , . , , — (node).


ns-3 . C++ Node. NodeNode () .


Node , . , , , . ns-3.


4.1.2 Application ()


, . , , , . . . , . , , .


, . ns‑3 . , , . « » , ns‑3 ns‑3 .


ns‑3 , , . C++ Application (). Application . , Application - . Application, UdpEchoClientApplication UdpEchoServerApplication. , / ‑ .


4.1.3 Channel ()


. , , . Ethernet , Ethernet. ns‑3 , . C++ Channel ().


ChannelChannel . - . - . Ethernet- , .


CsmaChannelCsmaChannel, PointToPointChannelPointToPointChannel WifiChannelWifiChannel. CsmaChannel, , . Ethernet- .


4.1.4 Net Device ( )


, , , ( ) , . , . , .


, . Unix ( Linux), device. (device drivers), (NIC) (network device drivers) (net devices). Unix Linux , eth0.


ns‑3 , . «» , . , NetDevices.


C++ NetDevice. NetDevice Node Channel; - . NetDevice CsmaNetDevice, PointToPointNetDevice WifiNetDevice. , Ethernet Ethernet, CsmaNetDevice CsmaChannel, PointToPointNetDevice PointToPointChannel, WifiNetDeviceWifiChannel.


4.1.5


- ( ) . ns‑3 , NetDevices. Node, NetDevice Channel.


NetDevices , NetDevices , IP- .. ns‑3 , , . , NetDevice ns‑3, MAC-, Node, , NetDevice Channel. , , (Internetworks). , .


4.2 ns-3


, , ns‑3 repos . release


, ns‑3 , :
$ ./waf configure --build-profile=release --out=build/release,
$ ./waf build

:


AUTHORS       examples      scratch       utils       waf.bat*
bindings      LICENSE       src           utils.py    waf-tools
build         ns3           test.py*      utils.pyc   wscript
CHANGES.html  README        testpy-output VERSION     wutils.py
doc           RELEASE_NOTES testpy.supp   waf*        wutils.pyc

examples/tutorial. first.cc. , - . , first.cc .


4.2.1 Boilerplate
emacs. emacs ( ), .


/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

, , . ns‑3, , , . , ns‑3, doc/codingstd.txt - : https://www.nsnam.org/develop/contributing-code/coding-style/.


ns‑3 , . . emacs, , , emacs.


ns‑3 GNU General Public License. GNU ns‑3. ns‑3 GPL , .


/* 
* This program is free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation; 
*
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program; if not, write to the Free Software 
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/

4.2.2


(include).


#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"

, , . , , . , , , , , . , , , .


ns‑3 ns3 ( ), . ns3/core-module.h ns‑3, src/core . . , Waf ns3 build/debug


, ns‑3 , :
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build

$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build

build/optimized, . Waf . , , ,


$ ./waf -d debug --enable-examples --enable-tests configure

, .


$ ./waf

. , ../../build/debug/ns3, , , , . , .


4.2.3 ns3


first.cc — .


using namespace ns3;

ns‑3 C++, ns3. ns‑3- , , , . C++ ns‑3 () . , , ns3 :: scope ns‑3, . , C++ ns3 std using namespace std; cout .


4.2.4


,


NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

Doxygen. - ns‑3, «» (Documentation) . , . « », ns‑3. «API Documentation», API ns‑3.


. — «» Modules ns‑3 ns‑3. Modules, ns‑3. , . ( , ) ns‑3 , , , Core, Debugging tools, Logging. Logging.


Doxygen Logging. NS_LOG_COMPONENT_DEFINE. , « » , . «More...» .


, , NS_LOG_COMPONENT_DEFINE. , , , FirstScriptExample, .


4.2.5


,


int 
main (int argc, char *argv[])
{ 

(). C++, , . . ns‑3 C++ . 1 , :


Time::SetResolution (Time::NS);

— , ( ). . , , , , , , . ( , , .)


, EchoClient EchoServer:


LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

Logging, , /, . INFO - . .


. , .


4.2.6


Node ns‑3, .


NodeContainer nodes;
nodes.Create (2);

, NodeContainer. Classes Doxygen. Doxygen, Classes. , . ns‑3. , ns3 :: NodeContainer. , , .


, . , , , . NodeContainer , Node, . NodeContainer, nodes. Create nodes . Doxygen, ns‑3 Node .


, . . , , — . .


PointToPointHelper


, , , . , NetDevice Channel. . , , , , Ethernet . PointToPointHelper ns‑3 PointToPointNetDevice PointToPointChannel. :


PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

,


PointToPointHelper pointToPoint;

PointToPointHelper. ,


pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

PointToPointHelper «5 /» ( ) «DataRate».


, «DataRate» , PointToPointNetDevice. Doxygen ns3::PointToPointNetDevice GetTypeId , . «DataRate». ns‑3 . , .


«DataRate» PointToPointNetDevice, «Delay», PointToPointChannel. ,


pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

PointToPointHelper «2 » ( ) -, .


NetDeviceContainer


NodeContainer, . PointToPointHelper, PointToPointNetDevices PointToPointChannel. , NodeContainer, PointToPointHelper , , . NetDevice, NetDeviceContainer , NodeContainer . ,


NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

. , , . Install PointToPointHelper NodeContainer . NetDeviceContainer NodeContainer ( - ) PointToPointNetDevice . PointToPointChannel , PointToPointNetDevices. , PointToPointHelper, .


pointToPoint.Install (nodes) , «-» «-» . .


InternetStackHelper


, . .


InternetStackHelper stack;
stack.Install (nodes);

InternetStackHelper — -, PointToPointHelper . Install NodeContainer . - (TCP, UDP, IP . .) .


Ipv4AddressHelper


IP-. IP-. API — IP- ( ). first.cc,


Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

, IP- 10.1.1.0, 255.255.255.0. , , , 10.1.1.1, 10.1.1.2 .. , ns‑3 IP- , (, ).


,


Ipv4InterfaceContainer interfaces = address.Assign (devices);

. ns‑3 IP- , Ipv4Interface. , , , Ipv4Interface. Ipv4InterfaceContainer .


-, IP-. .


4.2.7 Application


ns‑3 — Application (). Application ns‑3 UdpEchoServerApplication UdpEchoClientApplication. , . UdpEchoServerHelper UdpEchoClientHelper , .


UdpEchoServerHelper


first.cc, UDP , .


UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

UdpEchoServerHelper. , , , . — (). , , . . , , SetAttribute . , , SetAttribute «».


, UdpEchoServerHelper Install. , , - . , Install NodeContainter , Install , .


C++, , node.Get (1) ( — Ptr ) NodeContainer, Install. C++ , , .

, echoServer.Install UdpEchoServerApplication NodeContainer, , 1. Install , ( , NodeContainer, ) .


«start» , «stop». . ApplicationContainer Start Stop. Time. C++, C++ double 1.0 ns‑3 Time, Seconds . , , C++ , , , . ,


serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

, - ( ) () . , ( ), , .


UdpEchoClientHelper


echo , . UdpEchoClientApplication,
UdpEchoClientHelper.


UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

- . UdpEchoClientHelper. , ( ) «RemoteAddress» «RemotePort» , .


, Ipv4InterfaceContainer IP-, . IP- . IP- . , () , IP-, , . , .


«MaxPackets» , . «Interval» , , «PacketSize» , . 1024- .


-, - Start Stop, ( ).


4.2.8


. Simulator::Run.


Simulator::Run ();

,


serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
... 
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

1,0 , 2,0 10,0 . Simulator::Run, . 1,0 , - ( , , ). , t = 2,0 , -. , . - , .


, - , .


, (, MaxPackets ), - , . , Stop . , Simulator::Run . .


. Simulator::Destroy. ( ns‑3), , , . - — , Simulator::Destroy . ns‑3 . ns‑3 , first.cc, :


Simulator::Destroy ();
return 0;
}

?


ns‑3 — (DE). , . (, , ).


, , IPv6 , .. .. , , . , , . , Stop. Stop Simulator::Stop ( ).


, Simulator::Stop : . ( ) — , . , . , , :


• FlowMonitor — ;


• RIPng — ;


• ..


Simulator::Stop . , ns‑3 , RealtimeSimulator , , Simulator::Stop .


Simulator::Stop , . Simulator::Stop. , 11 :


+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

, 10 . 11 1 , , , ( 2 ).


Simulator::Stop Simulator::Run; Simulator::Run !


4.2.9


. , , scratch, , Waf. . examples/tutorial/first.cc scratch


$ cd ../.. 
$ cp examples/tutorial/first.cc scratch/myfirst.cc

, waf:


$ ./waf

, .


Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
[614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
[706/708] cxx_link: build/debug/scratch/myfirst_3.o -> build/debug/scratch/myfirst
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (2.357s)

( , scratch, scratch):


$ ./waf --run scratch/myfirst

:


Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

, , , . - , 1024- - 10.1.1.2. . -, , 1024 10.1.1.1. - , -, .


4.3 ns-3


, ns‑3, , . - : https://gitlab.com/nsnam/ns-3-dev.git. Mercurial ns‑3. ,


summary | shortlog | changelog | graph | tags | files

. :


drwxr-xr-x                               [up]
drwxr-xr-x                               bindings python  files
drwxr-xr-x                               doc              files
drwxr-xr-x                               examples         files
drwxr-xr-x                               ns3              files
drwxr-xr-x                               scratch          files
drwxr-xr-x                               src              files
drwxr-xr-x                               utils            files
-rw-r--r-- 2009-07-01 12:47 +0200 560    .hgignore        file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886   .hgtags          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276   AUTHORS          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961  CHANGES.html     file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987  LICENSE          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742   README           file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171  RELEASE_NOTES    file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6      VERSION          file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110  waf              file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28     waf.bat          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395  wscript          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673   wutils.py        file | revisions | annotate

examples. , . tutorial — first.cc. first.cc , .


src. , . src, src. core, . , ( ) — abort.h. abort.h, abort.h, , . , , src/Applications/helper. Siéntase libre de hurgar en el árbol de directorios para ver dónde descubrir el estilo de los programas ns - 3.


All Articles