ns2网络仿真工具 gnuplot显示结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ns2网络仿真工具 gnuplot显示结果相关的知识,希望对你有一定的参考价值。

Warning: empty x range [0:0], adjusting to [-1:1]
Warning: empty y range [1:1], adjusting to [0.99:1.01]

ns2是网络仿真模拟器,不是绘图软件,你可以把仿真出来的数据在其他软件上画出来,比如excel或者matlab等等。一般linux自带了一个叫gnuplot的软件可以绘图,你也可以看看怎么使用它。追问

这是用gnuplot画出来的,好像是比例或者什么的设置的不对,所以才出的这种警告。

参考技术A 1、
Waf: Leaving directory `/home//ns-allinone-3.26/ns-3.26/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (1.953s)
nDevices:310 sendPackets:3122 received:2754 load/dev: 0.00190395

此程序的运行时间为28.2945秒!
lijia@lijia-QiTianM420-N000 ~/ns-allinone-3.26/ns-3.26 $ gnuplot aloha-example.plt
Warning: empty x range [310:310], adjusting to [306.9:313.1]
Warning: empty y range [0.322:0.322], adjusting to [0.31878:0.32522]
Warning: empty x range [310:310], adjusting to [306.9:313.1]
Warning: empty y range [0.182977:0.182977], adjusting to [0.181147:0.184807]

2、

nDevices:20 sendPackets:172 received:170 load/dev: 0.00314682

nDevices:110 sendPackets:1065 received:1020 load/dev: 0.00194846

此程序的运行时间为1.01642秒!
lijia@lijia-QiTianM420-N000 ~/ns-allinone-3.26/ns-3.26 $ gnuplot aloha-example.plt

我也出现同样的问题,这个问题的原因是画图的时候是需要画曲线的,只有一个点是不能画出曲线的,例如上面的第一个程序,只有一个点就会报错,但是在第二个程序中我又增加了一个点就不会报错。

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

快乐虾

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

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


ICMP的全称是 Internet ControlMessage Protocol

其目的就是让我们可以检測网络的连通状况。ICMP主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连接状况。本节利用NS3学习一下此协议。


1.1    报文格式


ICMP的报文格式例如以下:

技术分享


ICMP报文是IP报文的数据。而IPv4报文的格式例如以下:

技术分享


在网上抓一个ping包来看看:

技术分享



这是一个从192.168.24.1192.168.24.129ping包。再看看192.168.24.129的回应:

技术分享


非常easy和前面的报文格式相应上。


1.2    NS3生成ICMP的请求包


接下来试试用NS3生成上面的ICMP的请求包。


依照NS3数据包的生成规则,首先须要准备ICMP请求的数据部分,即报文中的abcde...


	// 填充的数据内容
	uint8_t buffer[2048] = { 0 };
	for (int i = 0; i < m_nCurPacketLen; i++)
	{
		buffer[i] = ‘a‘ + (i % 23);
	}
	Ptr<Packet> data = ns3::Create<Packet>(buffer, m_nCurPacketLen);
接下来填充Icmp Echo的包头:
	// 生成要发送的数据包列表
	Ptr<Packet> pkt = ns3::Create<Packet>();

	// 加入icmp echo头
	Icmpv4Echo eh;
	eh.SetData(data);
	eh.SetSequenceNumber(0x0019/*m_nCurPacketSeq*/);
	eh.SetIdentifier(1);
	pkt->AddHeader(eh);
这里的seq是一个可变的整数,仅仅只是我们为了与上面的数据包一致写入了一个固定的数值。
接下来填充Icmp Header:
	// 加入icmp头
	Icmpv4Header ih;
	ih.SetCode(0);
	ih.SetType(Icmpv4Header::ECHO);
	ih.EnableChecksum();
	pkt->AddHeader(ih);
这里唯一须要注意的是EnableChecksum必须在AddHeader前调用,否则不会生成校验和。
再加上IP包头:
	// 加入IP头
	Ipv4Header iph;
	iph.SetDestination((const char*)dest_ip);
	iph.SetSource((const char*)src_ip);
	iph.SetIdentification(0x49fb);
	iph.SetTtl(64);
	iph.SetProtocol(Icmpv4L4Protocol::PROT_NUMBER);
	iph.SetPayloadSize(pkt->GetSize());
	iph.EnableChecksum();
	pkt->AddHeader(iph);
最后加上以太网包头:
	// 加入以太网头
	EthernetHeader eeh;
	eeh.SetDestination((const char*)dest_mac);
	eeh.SetSource((const char*)src_mac);
	eeh.SetLengthType(ns3::Ipv4L3Protocol::PROT_NUMBER);
	pkt->AddHeader(eeh);
	int len = pkt->CopyData(buffer, 2048);

大功告成!看看我们生成的数据包内容:

技术分享


与前面从网上抓下来的包一模一样。


 


1.3    NS3分析ICMP请求包


分析包的过程和构造包的过程刚好相反。从最外面的以太网包一直分析到数据:


/* Callback function invoked by libpcap for every incoming packet */
void CCommonIcmpSendDlg::packet_handler(void *_param, const void *_header, const void *_pkt_data)
{
	uint8_t buffer[2048], *p;
	p = (uint8_t *)_pkt_data + 12;
	if (p[0] != 8 || p[1] != 0)
		return;

	const struct pcap_pkthdr *header = (const struct pcap_pkthdr *)_header;
	Ptr<Packet> pkt = ns3::Create<Packet>((uint8_t*)_pkt_data, header->len);

	// ip 包
	EthernetHeader eh;
	Ipv4Header iph;
	pkt->RemoveHeader(eh);
	pkt->RemoveHeader(iph);
	if (iph.GetProtocol() != Icmpv4L4Protocol::PROT_NUMBER)
		return;

	Icmpv4Header ih;
	Icmpv4Echo ieh;
	SIcmpPacket* ppkt;
	pkt->RemoveHeader(ih);
	if (ih.GetType() == Icmpv4Header::ECHO_REPLY)
	{
		pkt->RemoveHeader(ieh);
		if (ieh.GetIdentifier() != dlg->m_nIcmpId)
			return;
		int seq = ieh.GetSequenceNumber();
.....
		return;
	}
}

1.4    winpcap发包的问题


在发送ICMP包时,使用了pcap_sendpacket函数进行发包,但此函数的发包延迟较大,从函数调用到从网卡上抓到这个包可以有几百个毫秒的延迟。

技术分享


暂且记下来以供后继參考。












??

以上是关于ns2网络仿真工具 gnuplot显示结果的主要内容,如果未能解决你的问题,请参考以下文章

如何用ns2对仿真和测试tcp的拥塞控制算法

[Linux] NS2模拟仿真源码

NS2仿真环境安装

ns2中gnuplot不显示图像解决方法

TCP协议的NS2仿真

UDP协议下的NS2仿真