NS3网络仿真(13): FdNetDevice的问题

快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

在前面的小节中,我们使用FdNetDevice进行了实时仿真,利用NS3向一台实际的机器发送ping包,但得到的结果显然有点偏离我们的预期结果,因为ping包的响应时间明显长于正常情况下的响应时间。

这个是用NS3发送ping包的结果:

使用WireShark在NS3使用的适配器上抓包,这个是在物理网卡上抓到的包:

显然对端的响应是没有问题的,莫非问题出现在winpcap的发送上?刚好学习ICMPv4时也遇到了这样的问题,一并解决它。在网上搜了一把,貌似问题出现在打开winpcap设备时指定的参数:

	if ((adhandle = pcap_open_live(m_deviceName.c_str(),	// name of the device
		65536,			// portion of the packet to capture.
		// 65536 grants that the whole packet will be captured on all the MACs.
		1,				// promiscuous mode (nonzero means promiscuous)
		1000,			// read timeout
		errbuf			// error buffer
		)) == NULL)
	{
		fprintf(stderr, "\nUnable to open the adapter. %s is not supported by WinPcap\n", m_deviceName.c_str());
		return -1;
	}

这里的read timeout值直接来源于winpcap的示例代码,查一下此参数的意义:

read_timeout,:  read timeoutin milliseconds. The read timeout is used to arrange that the read notnecessarily return immediately when a packet is seen, but that it waits forsome amount of time to allow more packets to arrive and to read multiplepackets from the OS kernel in one operation. Not all platforms support a readtimeout; on platforms that don‘t, the read timeout is ignored.

将此值改为1。再执行仿真

这个结果好多了~~~,再改为-1试试:

更好的结果,只是此时的CPU使用率更高。

??

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-25 19:05:24

NS3网络仿真(13): FdNetDevice的问题的相关文章

NS3网络仿真(8): 实时仿真

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 NS3支持实时仿真,且可以将NS3模拟生成的数据包通过主机上真实的网卡发送出去,本节尝试运行NS3中自带的fd-emu-ping示例,使用NS3模拟一台设备,再通过主机上的网口ping一台网络上的真实设备. // Allow ns-3 to ping a real host somewhere, using emulation mode // // +----------------------

NS3网络仿真(2):first.py

1    安装基本模块 11  安装Python 12  安装PTVS 13  添加对python-279的支持 2    在vs2013下编译NS3 3    编译NetAnim 4    在vs2013下使用ns 快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 学习一下ns中的第一个示例脚本,first.py,这个示例模拟一个Echo服务和客户端之间的通信. 1.1    导入所需要的库 ns3的每一个模块都有一个对应的用C++开发的dl

NS3网络仿真(7): Wifi节点

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在上一节中,我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP,再连上几个节点.这也是NS3中的示例third.cc干的事情,只是我们用Python实现. // Default Network Topology // // Wifi 10.1.3.0 // AP // * * * * // | | | | 10.1.1.0 // n5 n6 n7 n0 -----------

NS3网络仿真(6): 总线型网络

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的第一个示例first.py中,模拟了一个点对点的网络,接下来的一个示例代码模拟了一个总线型网络及CSMA协议. # // Default Network Topology # // # // 10.1.1.0 # // n0 -------------- n1 n2 n3 n4 # // point-to-point | | | | # // ================ #

NS3网络仿真(14): TCP连接与端口扫描

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 本节学习一下使用NS3构造一个TCP包,再利用构造好的TCP包进行最简单的TCP端口扫描. 1.    TCP协议数据报头 下图中给出了TCP协议数据报头的格式. 源端口.目的端口:16位长.标识出远端和本地的端口号. 顺序号:32位长.表明了发送的数据报的顺序. 确认号:32位长.希望收到的下一个数据报的序列号. TCP协议数据报头DE 头长:4位长.表明TCP头中包含多少个32位字. 接下来

NS3网络仿真(12): ICMPv4协议

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ICMP的全称是 Internet ControlMessage Protocol .其目的就是让我们能够检测网络的连通状况.ICMP主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连接状况.本节利用NS3学习一下此协议. 1.1    报文格式 ICMP的报文格式如下: 即ICMP报文是IP报文的数据,而IPv4报文的格式如下: 在网上抓一个ping包来看看: 这是一个从

NS3网络仿真(9): 构建以太网帧

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典型的ARP请求帧: 我们就用Packet来创建一个同样的帧. 首先创建一个空的数据包: Ptr<Packet>pkt = Create<Packet>(); 接下来加上ARP头: //加入arp头 ArpHeader ah; ah.SetRequest(Mac48Address(&qu

NS3网络仿真(3): NetAnim

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的示例first.py中,并没有生成NetAnim所需要的xml文件,本节我们尝试用NetAnim来展示first.py的仿真结果. 依照NetAnim的说明,在Run开始前加上一行: anim = ns.netanim.AnimationInterface('first.xml') ns.core.Simulator.Run() ns.core.Simulator.Destroy(

NS3网络仿真(1):开发环境搭建

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 1.1    安装基本模块 1.1.1  安装Python 出于对兼容性的考虑,在此选择python-2.7.9,win32版本,而不是最新的3.x版本. 安装目录为c:\python27 这个就没什么可说的了. 1.1.2  安装PTVS PTVS是ms提供的一个python插件,我用的是2.2,安装完成后可以在VS2013的扩展与更新中看到它: 1.1.3  添加对python-2.7.9的