NS3实例分析second.cc_Building a Bus Network Topology
来源:互联网 发布:mysql front 5.3 注册 编辑:程序博客网 时间:2024/06/05 03:49
转自:http://blog.sina.com.cn/s/blog_7ec2ab360102wxgi.html
NS3中提供了CSMA的网络设备和信道。
NS3 CSMA设备模仿了一个简单的以太网网络。一个真正的以太网用带有指数退避算法的CSMA/CD(带冲突检测的载波监听多路访问技术)来共享传输媒介。NS3 CSMA设备和信道模型只是其子集。
正如之前构建点对点拓扑中的PointToPointHelper,这里我们将看到类似的CSMA Helper。这些Helper的操作都类似。
在examples/tutorial目录下的second.cc脚本,是之前的first.cc的升级版,我们在原来的点到点仿真中添加了CSMA进去。
下面,我们来看一下代码。
一.second.cc代码
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
#include "ns3/ipv4-global-routing-helper.h"
// Default Network Topology
//n0、n1是点到点,右边是n1、n2、n3、n4是总线形局域网
//
// n0 -------------- n1
//
//
//
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("SecondScriptExample");
int
main (int argc, char *argv[])
{
}
二.CSMA的两种trace方法
(一)trace全网数据
CSMA网络是一个多点到点网络。这意味着在一个共享媒介上有多个终端。每个终端都有一个网络设备与之连接。对于这样的网络,有两种收集追踪信息的方法。一个是为每个网络设备创建trace文件,并且只存储由该网络设备发出或接收的数据包。另一个方法是选择其中一个设备并且设置为promiscuous模式。这个单一的设备将嗅探网络中的全部数据包,并且将它们存储在一个单一的pcap文件中。本例使用方法2。
编译运行脚本后:
在ns-3.25目录下,会出现3个.pcap文件:
secon-0-0.pcap:p2p网络
链路类型:PPP代表Point-to-Point
secon-1-0.pcap:p2p网络
secon-2-0.pcap:CSMA网络
ARP:地址解析协议,Address Resolution Protocol。是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
链路类型:EN10MB代表以太网
//
// n0 -------------- n1 n2 n3 n4
// point-to-point
//
//
分析:n1想要发送数据包给IP地址为10.1.2.4的节点,但是它不知道该节点的MAC地址。于是,n1在CSMA网络广播询问IP地址为10.1.2.4的设备。对应的节点就回应n1说自己的MAC地址是00:00:00:00:00:06。n2并没有直接涉及此次信息交换,但是却嗅探整个网络并且记录它所看见的所有数据流。
服务器收到echo请求并将数据包发回发送端。服务器知道这个地址是另一个网络的,通过IP地址10.1.2.1到达。
这是因为我们初始化了全局路由,全局路由将这些信息告知我们。但是echo服务器节点并不知道n1的MAC地址,所以它必须像n1那样ARP地址。
服务器将echo发到转发节点。
nCsma可以通过CommandLine来改变,例如:
当nCsma=5,服务器节点变为nCsma的最后一个节点,地址为10.1.2.6.
(二)trace单设备数据
之前的CSMA网络trace方法是让一个设备嗅探整个网络的数据包存于一个pcap文件中。当你不关心其他数据流,只想得到某个网络设备自身接收与发送的数据流时,可以利用下面的代码替换原来的EnablePcap代码:
pointToPoint.EnablePcap("second",p2pNodes.Get(0)->GetId(),0);
csma.EnablePcap("second",csmaNodes.Get(nCsma)->GetId(),0,false);
csma.EnablePcap("second",csmaNodes.Get(nCsma-1)->GetId(),0,false);
NS3 helpers提供将节点数和设备数作为参数的方法。由上述代码可知,我们要创造名为second的pcap文件,其中我们感兴趣的网络设备为0号。
为了得到节点标号,我们共有2种方法:1.节点在创建过程中按顺序从0开始以单调增长的方式被标号。2.根据节点创建顺序,手动计算节点标号。
在NS3中,Node对象有GetID()的方法可以返回节点ID,即节点标号。
false:代表节点的trace处于non-promiscuous模式。
最后一个CSMA节点是第nCsma+1个节点。
为了确保.pcap文件不会混淆,清除所有的pcap文件:
$ rm *.pcap
$ rm *.tr
编译运行代码,并查看second-100-0.pcap文件:
可知,node100在echo交换中就是一个旁观者。它接收到的唯一的数据包是全CSMA网络广播的ARP请求。
-------------------------------完-----------------------------------
- NS3实例分析second.cc_Building a Bus Network Topology
- NS3实例分析third.cc_Building a Wireless Network Topology
- NS3 - Building a Bus Network Topology
- NS3实例分析(3)-- second.cc
- NS3实例分析(2)-- first.cc
- NS3实例分析(4)-- third.cc
- Network Topology and Hadoop
- B. Network Topology
- ipRec topology of network
- NS3实例分析(1)-- hello-simulator.cc
- distribution auction vs network topology
- NS3学习第一阶段---运行NS3实例
- Nessus Network Auditing, Second Edition
- The Network Simulator ns-2: Topology Generation
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- CAN (Controller Area Network) BUS
- SSM杰信商务平台项目day07
- C++子类型关系
- Best Time to Buy and Sell Stock II
- C++抽象编程——递归策略(3)——生成排列数(2)
- 【IMWeb训练营作业】组件化开发
- NS3实例分析second.cc_Building a Bus Network Topology
- CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
- Linux用户必看:29个必须掌握的常用
- struct 与 union 在C与C++中的区别
- base64进行加密和解码
- TypeError: concat() got an unexpected keyword argument 'axis'
- 笔记本内存条怎么选?DDR3?DDR3L?
- leetcode两道题
- 临接表存图