实验八:ICMP协议探索和分析
【实验目的】
1、掌握ICMP协议数据格式;
2、掌握ICMP信息报文和差错报告报文的常见种类;
3、理解ICMP差错报文的产生条件。
【实验步骤与结果记录】
要求:根据实验指导书中的实验内容和步骤,认真完成实验。采取截图、拍照等形式记录自己的实验步骤和结果。(可根据需要加页)
步骤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:修改路由表、MTU等参数,创造ICMP差错报告报文的产生条件
1.执行如下Linux命令,在路由器RA上删除默认路由。创造ICMP网络不可达差错报告报文的产生条件。
ip netns exec RA route del default gw 192.168.99.1
2.执行如下Linux命令,在路由器RA上修改接口tapRA_RC的MTU值为1000字节;在路由器RC上修改接口tapRC_RA的MTU值为1000字节。创造ICMP需要分片差错报告报文的产生条件。
ip netns exec RA ifconfig tapRA_RC mtu 1000
ip netns exec RC ifconfig tapRC_RA mtu 1000
3.执行如下Linux命令,在路由器RC中,用iptables设置规则,拒绝(REJECT)转发并丢弃目的地址为192.168.57.190(ns57B)的IP数据报。创造ICMP管理禁止报文的产生条件。
ip netns exec RC iptables -I FORWARD -d 192.168.57.190 -j REJECT
4.执行如下Linux命令,在主机ns57A上删除到网络前缀192.168.57.128/26的路由。创造ICMP重定向差错报告报文的产生条件。
ip netns exec ns57A route del -net 192.168.57.128/26
步骤5:打开两个终端窗口,分别模拟主机ns56A和主机ns57A。
1.打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns56A的终端 执行以下命令。
ip netns exec ns56A bash
执行上述命令后,Linux将在网络命名空间ns56A中开启bash交互,之后输入的Linux命令均在ns56A中执行,相当于模拟了主机ns56A的终端。
2.然后输入 ifconfig -a ,确认是否成功模拟成主机ns56A。
为了避免混淆,可以改变终端窗口名字。
3. 再打开一个终端窗口,利用Linux命令bash将本窗口模拟成主机ns57A的终端 执行以下命令
ip netns exec ns57A bash
模拟主机ns57A的终端。
4.然后输入ifconfig -a ,确认是否成功模拟成主机ns57A,并修改终端名。
步骤6:在主机ns56A上启动Wireshark,在接口tap56A上启动抓包。在主机ns57A上启动Wireshark,在接口tap57A上启动抓包。
1.新开一个终端窗口,执行如下命令,在主机ns56A上后台启动Wireshark。
ip netns exec ns56A wireshark &
2.在Wireshark窗口中选择接口tap56A,启动抓包。
3.执行如下命令,在主机ns57A上后台启动Wireshark。
ip netns exec ns57A wireshark &
4.在Wireshark窗口中选择接口tap57A,启动抓包。
步骤7:在主机ns56A和ns57A上,使用nping工具发送UDP用户数据报到其他目的主机,利用步骤4中的配置,得到多种ICMP差错报告报文。
1.在主机ns56A的模拟终端中,执行如下命令,封装1400字节UDP数据,从主机ns56A发往目的IP地址为192.168.100.1的主机的4499端。
nping --udp -p4499 -g40321 -c1 --data-length 1400 192.168.100.1
注:主机192.168.100.1所属的网络前缀,在实验拓扑图中不存在。
2.在主机ns56A的模拟终端中,执行如下命令,封装1400字节UDP数据,从主机ns56A发往目的IP地址为192.168.57.250的主机的4499端口。
nping --udp -p4499 -g40321 -c1 --data-length 1400 192.168.57.250
注:主机192.168.57.250在实验拓扑图中不存在。
3.在主机ns56A的模拟终端中,执行如下命令,封装1400字节UDP数据,从主机ns56A发往目的IP地址为192.168.57.254(ns57C)的主机的4499端口。
nping --udp -p4499 -g40321 -c1 --data-length 1400 192.168.57.254
注:主机192.168.57.254中,UDP的4499端口未打开。
4.在主机ns56A的模拟终端中,执行如下命令,封装800字节UDP数据,从主机ns56A发往目的IP地址为192.168.57.190(ns57B)的主机的4499端口。
nping --udp -p4499 -g40321 -c1 --data-length 800 192.168.57.190
注:目的地址为192.16.57.190的IP数据报会被途径的路由器RC丢弃。包含800字节UDP数据的IP分组,经过RA向RC转发时,不会被RA分片。
5.在主机ns56A的模拟终端中,执行如下命令,封装1400字节UDP数据,并设置IP首部的不许分片位为1,从主机ns56A发往目的IP地址为192.168.57.126(ns57A)的主机的4499端口。
nping --udp -p4499 -g40321 -c1 --data-length 1400 -df 192.168.57.126
注:不许分片且超过1000字节的IP数据报,不能通过RA-RC链路。
6.在主机ns57A的模拟终端中,执行如下命令,封装1400字节UDP数据,从主机ns57A发往目的IP地址为192.168.57.190(ns57B)的主机的4499端口。
nping --udp -p4499 -g40321 -c1 --data-length 1400 192.168.57.190
注:ns57A的默认路由不是到192.168.57.190去的最佳路由。
步骤8:在两个Wireshark窗口中停止抓包,保存抓包结果并分析截获的数据。分析ICMP差错报告报文的常见种类,理解这几种ICMP差错报告报文产生的条件。
分别保存tap56A和tap57A的抓包结果,分析数据。
步骤9:在主机ns56A的接口tap56A重新启动抓包。在主机ns56A上,利用ping命令测试到主机ns57C的连通性,捕获并分析ICMP回显请求和回显应答报文。
1.在Wireshark窗口中选择接口tap56A,重新启动抓包。
2.在主机ns56A的模拟终端中,执行如下命令,发送两次ICMP回显请求,测试到主机n57C的连通性。
ping -c 2 192.168.57.254
3.在Wireshark中停止抓包,保存抓包结果文件并分析抓包结果。
保存抓包结果,分析数据。
【问题与分析】
1.分析步骤7和步骤8保存的实验结果,截图并填写表8.1。
该数据报即为7.1发送的IP数据报。
源IP,目的IP,总长度等按照数据填写即可。
该数据即为7.1收到的ICMP差错报告报文。
按照图表数据填写即可,其他几个步骤同理。
表8.1 ICMP差错报告报文分析 | ||||
步骤 | 字段 | 值 | ||
步骤7-(1) | 发送的IP数据报 | Wireshark分配的编号 | 3 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.100.1 | |||
IP总长度 | 1428 | |||
收到的ICMP差错报告报文 | Wireshark分配的编号 | 4 | ||
IP首部 | 源IP地址 | 192.168.56.246 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 3 | ||
代码 | 0 | |||
ICMP报文类型(文本描述) | Network unreachable | |||
产生该差错报告报文的原因分析 | Destination unreachable Network unreachable |
步骤7-(2) | 发送的IP数据报 | Wireshark分配的编号 | 7 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.250 | |||
IP总长度 | 1428 | |||
收到的ICMP差错报告报文 | Wireshark分配的编号 | 8 | ||
IP首部 | 源IP地址 | 192.168.56.254 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 3 | ||
代码 | 1 | |||
ICMP报文类型(文本描述) | Host unreachable | |||
产生该差错报告报文的原因分析 | Destination unreachable Host unreachable | |||
步骤7-(3) | 发送的IP数据报 | Wireshark分配的编号 | 11 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.254 | |||
IP总长度 | 1428 | |||
收到的ICMP差错报告报文 | Wireshark分配的编号 | 12 | ||
IP首部 | 源IP地址 | 192.168.57.254 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 3 | ||
代码 | 3 | |||
ICMP报文类型(文本描述) | Port unreachable | |||
产生该差错报告报文的原因分析 | Destination unreachable Port unreachable | |||
步骤7-(4) | 发送的IP数据报 | Wireshark分配的编号 | 17 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.190 | |||
IP总长度 | 828 | |||
收到的ICMP差错报告报文 | Wireshark分配的编号 | 18 | ||
IP首部 | 源IP地址 | 192.168.56.250 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 3 | ||
代码 | 3 | |||
ICMP报文类型(文本描述) | Port unreachable | |||
产生该差错报告报文的原因分析 | Destination unreachable Port unreachable | |||
步骤7-(5) | 发送的IP数据报 | Wireshark分配的编号 | 23 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.126 | |||
IP总长度 | 1428 |
收到的ICMP差错报告报文 | Wireshark分配的编号 | 24 | ||
IP首部 | 源IP地址 | 192.168.56.246 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 3 | ||
代码 | 4 | |||
ICMP报文类型(文本描述) | Fragmentation needed | |||
产生该差错报告报文的原因分析 | Destination unreachable Fragmentation needed | |||
步骤7-(6) | 发送的IP数据报 | Wireshark分配的编号 | 3 | |
IP首部 | 源IP地址 | 192.168.57.126 | ||
目的IP地址 | 192.168.57.190 | |||
IP总长度 | 1428 | |||
收到的ICMP差错报告报文 | Wireshark分配的编号 | 4 | ||
IP首部 | 源IP地址 | 192.168.57.1 | ||
目的IP地址 | 192.168.57.126 | |||
IP总长度 | 576 | |||
ICMP首部 | 类型 | 5 | ||
代码 | 1 | |||
ICMP报文类型(文本描述) | Redirect for host | |||
产生该差错报告报文的原因分析 | Redirect Redirect for host |
2.分析步骤9保存的实验结果,截图并填写表8.2。
该报文为第一个发送的ICMP报文,按照数据填写即可。
该报文为第一个收到的ICMP报文。
按照图中数据填写即可。
第二次发送与接收的报文同理。
表8.2 ICMP信息报文分析 | ||||
步骤 | 字段 | 值 | ||
步骤9-(2) 第1次 | 发送的 ICMP报文 | Wireshark分配的编号 | 1 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.254 | |||
IP总长度 | 84 | |||
TTL | 64 | |||
ICMP首部 | 类型 | 8 | ||
代码 | 0 | |||
标识符(BE) | 4492 | |||
序列号(BE) | 1 | |||
收到的 ICMP报文 | Wireshark分配的编号 | 2 | ||
IP首部 | 源IP地址 | 192.168.57.254 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 84 | |||
TTL | 61 | |||
ICMP首部 | 类型 | 0 | ||
代码 | 0 | |||
标识符(BE) | 4492 | |||
序列号(BE) | 1 | |||
步骤9-(2) 第2次 | 发送的 ICMP报文 | Wireshark分配的编号 | 3 | |
IP首部 | 源IP地址 | 192.168.56.126 | ||
目的IP地址 | 192.168.57.254 | |||
IP总长度 | 84 | |||
TTL | 64 | |||
ICMP首部 | 类型 | 8 | ||
代码 | 0 | |||
标识符(BE) | 4492 | |||
序列号(BE) | 2 | |||
收到的 ICMP报文 | Wireshark分配的编号 | 4 | ||
IP首部 | 源IP地址 | 192.168.57.254 | ||
目的IP地址 | 192.168.56.126 | |||
IP总长度 | 84 | |||
TTL | 61 | |||
ICMP首部 | 类型 | 0 | ||
代码 | 0 | |||
标识符(BE) | 4492 | |||
序列号(BE) | 2 | |||
标识符和序列号的作用 | 标识符用于将一系列相关的ICMP报文进行分组。当主机或路由器发送多个ICMP请求报文时,可以使用相同的标识符来标记它们属于同一组请求。在接收端可以根据标识符将相应的响应与对应的请求关联起来 序列号用于标识ICMP报文在一组相关报文中的顺序。当发送多个ICMP请求报文时,可以为每个报文分配一个递增的序列号。在接收端可以根据序列号确定报文的顺序,以便正确地处理和响应这些报文。 |
注:表中BE代表大端字节序。