ns-3中两个常用的网络分析工具——TcpDump和Wireshark
1.TcpDump
TcpDump(dump the traffic on a network)是Linux中强大的网络数据采集分析工具只要,根据使用者的定义对网络上的数据分组进行截获的分组分析工具。TcpDump可以将网络中传送的数据分组的”头“完全截获下来提供分析。它支持针对网络层,协议,主机,网络或端口的过滤,并提供and,or,not等逻辑语句来帮助去掉无用的信息。
ns-3使用TcpDump读取输出pcap文件,基本上TcpDump的总输出格式为:
系统时间来源主机.端口>目标主机.端口数据分组参数
TcpDump采用命令行方式,它的详细命令格式为:
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ] [ -C file_size ]
[ -E spi@ipaddr algo:secret,... ]
[ -F file ] [ -G rotate_seconds ] [ -i interface ]
[ --immediate-mode ] [ -j tstamp_type ] [ -m module ]
[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
[ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ expression ]
其选项参数的意义可参考https://www.tcpdump.org/manpages/tcpdump.1.html.
下面用实例演示介绍TcpDump的使用。
打开之前学过的first.cc脚本,在其中加入以下代码:
pointToPoint.EnablePcapAll ("first");
运行程序后,该代码快将生成pcap文件,供TcpDump使用。下图中的first-0-0.pcap是节点0的记录,first-1-0.pcap是节点1的记录。
运行程序后使用TcpDump命令读取该文件,结果如下图所示:
在2s时,节点0(10.1.1.1)的应用程序端口为49153,用UDO协议向节点1(10.1.1.2)的端口发送长度为战之真byte的数据。时间2.003686时目的节点(节点1)收到该数据,同时回复大小相同的数据分组,对方节点(节点0)在2.007372时收到。
在ns-3脚本初识——CSMA有线网络:second脚本和ns-3脚本初识——WIFI无线网络:third脚本中也都有TcpDump的使用。
2.Wireshark
与TcpDump相比,Wireshark界面比较友好,功能也很强大。Wireshark是一个图形用户界面的网络分组封装分析软件,可以获取网络分组封装,并尽可能地显示最为详细的网络分组封装资料。
1)安装
$ sudo apt-get install wireshark
2)使用
sudo wireshark
打开后界面如下:
打开上面提到的first-0-0.pcap文件,读取数据后如下图所示。WireShark详细记录了通信过程,数据分组格式以及二进制流。工作区的上部分是数据分组的简单信息,中间是详细信息,包括各个协议的头格式,下部分是二进制显示。
通过WireShark读取ns-3运行时的pcap记录文件,能够离线分析ns-3的通信过程,对数据分组进行统计分析,得到自己需要的数据。从中也能看到ns-3的网络通信和真实网络是很相近的瞒报可协议层次和数据分组的格式。