实验七:IP协议探索和IP分片分析
【实验目的】
1、掌握IP协议数据格式;
2、掌握IP首部各字段含义;
3、掌握IP分片原理和分片计算方法;
4、了解Linux下修改链路MTU的方法。
【实验步骤与结果记录】
要求:根据实验指导书中的实验内容和步骤,认真完成实验。采取截图、拍照等形式记录自己的实验步骤和结果。(可根据需要加页)
步骤1:创建虚拟网络拓扑。
1.使用script3.1.sh 脚本,创建如图所示的网络拓扑结构
在Linux中,该虚拟网络拓扑的实现如图所示。
运行脚本,创建虚拟网络拓扑。
2.执行Linux命令,ip netns list 查询已经建立的NS列表,在所有NS内执行 ifconfig -a 命令查看NS内的网络接口配置,执行Linux命令 brctl show 查看交换机桥接状态,验证网络拓扑。
步骤2:为虚拟网络拓扑中的各路由器配置静态路由。
1. 使用script3.2.sh 脚本,为各路由器配置静态路由。
步骤3:关闭网卡offload功能,将运输层封装时需要的计算还给CPU
1. 使用script3.3.sh 脚本,关闭网卡offload功能。
步骤4:修改路由器RA和RB之间链路的MTU值为1000字节。
1.执行如下Linux命令,在路由器RA上修改接口tapRA_RB的MTU值为1000字节。
ip netns exec RA ifconfig tapRA_RB mtu 1000
2.执行如下Linux命令,在路由器RB上修改接口tapRB_RA的MTU值为1000字节。
ip netns exec RB ifconfig tapRB_RA mtu 1000
步骤5:打开两个终端窗口,分别模拟主机ns56A和主机ns57C。
1.打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns56A的终端 执行以下命令。
ip netns exec ns56A bash
执行上述命令后,Linux将在网络命名空间ns56A中开启bash交互,之后输入的Linux命令均在ns56A中执行,相当于模拟了主机ns56A的终端。
2.然后输入 ifconfig -a ,确认是否成功模拟成主机ns56A。
为了避免混淆,可以改变终端窗口名字。
3. 再打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns57C的终端 执行以下命令
ip netns exec ns57C bash
模拟主机ns57C的终端。
4.然后输入ifconfig -a ,确认是否成功模拟成主机ns57C,并修改终端名。
步骤6:在路由器RB上两次启动Wireshark,在接口tapRB_56A和接口tapRB_RA上启动抓包
1.新开一个终端窗口,执行如下命令,在路由器RB上后台启动Wireshark。
ip netns exec RB wireshark &
2.在Wireshark窗口中选择接口tapRB_56A,启动抓包。
3.执行如下命令,再次在路由器RB上后台启动Wireshark。
ip netns exec RB wireshark &
4.在Wireshark窗口中选择接口tapRB_RA,启动抓包。
步骤7:在主机ns57C上打开UDP服务。在主机ns56A上利用nping程序向主机ns57C发送包含1400字节数据的UDP用户数据报
1.在主机ns57C的模拟终端中,执行如下命令,在4499端口打开UDP服务。
nc -lvu 4499
2.在主机ns56A的模拟终端中,执行如下命令,封装1400字节UDP数据,指定客户端口号40321,从主机ns56A发往主机ns57C的4499端口。
(注意,如果要使用nping指令,需要提前安装nmap。)
nping --udp -p4499 -g40321 -c1 --data-length 1400 192.168.57.254
步骤8:在两个Wireshark窗口中停止抓包,保存抓包结果文件并分析本次通信,理解IP报文段格式,分析IP首部各字段含义。分析IP数据报在路由器RB上的分片过程。
停止抓包,分别保存两个抓包结果,分析数据。
【问题与分析】
1.在你的实验结果中,你在路由器RB的tapRB_56A接口上截获了几个IP数据报?在tapRB_RA接口上截获了几个IP数据报?截图说明你的分析过程。
在路由器RB的tapRB_56A接口上截获了1个IP数据报。
在tapRB_RA接口上截获了2个IP数据报。
2.在你的实验结果中,观察在路由器RB的tapRB_56A接口上截获的IP数据报,分析其IP首部,截图并填写表7.1。
按照数据填写即可。
表7.1 IP首部中各字段的值 | |
字段名 | 值 |
版本 | 4 |
首部长度 | 20bytes |
区分服务 | 0 |
ECN | 0 |
总长度 | 1428 |
标识 | 1390 |
标志(3bit) | 0 |
片偏移 | 0 |
TTL | 64 |
协议 | 17 |
首部校验和 | 0x00007c1e |
源IP地址 | 192.168.56.126 |
目的IP地址 | 192.168.57.254 |
3.在你的实验结果中,路由器RB将本次通信中的IP数据报分成了几个IP分片?各IP分片的IP首部总长度、标识、标志和片偏移字段的值是多少?根据实验结果填写表7.2。截图说明你的分析过程。利用课堂讲解的IP分片算法,计算这几个字段的值,并验证是否与实验结果一致?
路由器RB将本次通信中的IP数据报分成了2个IP分片。
按照图中数据填写即可。
表7.2 路由器RB的分片结果 | ||||
总长度 | 标识 | 标志 | 片偏移 | |
IP分片1 | 976 | 1390 | 0x00000001 | 0 |
IP分片2 | 432 | 1390 | 0x00000000 | 122 |
IP分片3 | ||||
…… |
片偏移的值为007a 实际为122。
第一个分片总长度为996,设置的1000,应该是受到片偏移需要是8的整数倍的影响,计算时需要注意。