实验描述:
在本实验中,我们将探讨 ICMP 协议的几个方面:
- Ping 程序生成的 ICMP 消息;
- Traceroute 程序生成的 ICMP 消息;
- ICMP 消息的格式和内容。
实验过程:
1. ICMP 协议和 Ping 程序
让我们通过捕获 Ping 程序生成的数据包开始我们的 ICMP实验。 您可能还记得 Ping程序是一个简单的工具,允许任何人(例如:网络管理员)验证主机是否存在。 源主机中的 Ping 程序将数据包发送到目标 IP地址; 如果目标是在线的,则目标主机中的 Ping 程序将会发送响应 Ping 数据包证明他在线,这两个 Ping 数据包都 是 ICMP数据包。 因此您可能猜出我们这个实验都是关于 ICMP 的实验了。
-
打开 windows的命令提示符
-
启动 Wireshark数据包嗅探器,并开始 Wireshark数据包捕获
-
Ping程序在 c:\windows\system32目录中,所以您在命令提示符中输入“ping –n 10 hostname” 或 “c:\windows\system32\ping –n 10 hostname”都是正确的 (注意命令是引号里的内容)。其中 hostname是另一个大陆的主机名,我这里
ping
的是gaia.cs.umass.edu
。
- 当 Ping程序终止时,停止在 Wireshark中捕获数据包
我这里还是使用官方提供的数据包:
icmp-ethereal-trace-1
回答问题:
- 您的主机的 IP地址是多少? 目标主机的 IP地址是多少?
答:我的主机(官方的包)的IP地址:
192.168.1.101
目的主机的IP地址:143.89.14.34
- 为什么 ICMP数据包没有源端口号和目的端口号?
答:因为ICMP是网络层的协议,它不需要传输层TCP或者UDP的承载,直接使用IP数据报承载,因此不需要源端口号和目的端口号,只要源地址和目的地址即可。
- 查看任意的请求 ICMP数据包, ICMP类型和代码是什么? 该 ICMP数据包还有哪些其他字段? 校验和,序列号和标识符字段有多少字节?
答:ICMP类型:8(代表ICMP请求)
代码:0
还有Checksum、Checksum Status、Indetifier(BE),Indentifier (LE)、Sequence number(BE),Sequence number(LE)
校验和(Checksum):2个字节
序列号(Sequence):2个字节
标识符(Identifier):2个字节
- 查看任意的响应 ICMP数据包, ICMP类型和代码是什么? 该 ICMP数据包 还有哪些其他字段? 校验和,序列号和标识符字段有多少字节?
答:ICMP类型:0(0代表ICMP响应)
代码:0
还有Checksum、Checksum Status、Indetifier(BE),Indentifier (LE)、Sequence number(BE),Sequence number(LE)
校验和(Checksum):2个字节
序列号(Sequence):2个字节
标识符(Identifier):2个字节
2. ICMP 协议和 Traceroute 命令
现在让我们通过捕获 Traceroute 程序生成的数据包继续我们的 ICMP实验。 您可能 还记得 Traceroute 程序可用于确定数据包从源到目的地的路径 (路由跟踪)。 Traceroute命令可 以在课本中的 1.4节和 5.6节中找到。
每个系统有不同路由跟踪实现办法,在 Unix / Linux中,路由跟踪 traceroute 使用发送不可到达(无使用的)端口的 UDP包来实现,在 Windows中,路由跟踪 tracert 仅使用 ICMP数据包来实现,但是对于他们来说,都是发送 TTL 增加的数据包,例如 TTL=1,TTL=2,回想下,每经过一个路由器,TTL就会减一,当 TTL=1 的包达到路由器,该路由器会将该包丢弃,并且发送 ICMP 错误给请求的机器,在本次实验,我们使用 window自带的 tracert。有一个跨平台 Windows Traceroute程 序的是 pingplotter(www.pingplotter.com)(收费但可以试用)。 我们将在 Wireshark IP实验室中使用 pingplotter,因为它提供了我们在那里需要的其他功能。
-
打开 windows的命令提示符
-
启动 Wireshark数据包嗅探器,并开始 Wireshark数据包捕获
-
tracert程序在 c:\windows\system32目录中,所以您在命令提示符中输入 “tracert hostname” 或 “c:\windows\system32\ tracert hostname”都是正确的(注 意命令是引号里的内容)。其中 hostname是另一个大陆的主机名,我这里路由跟踪的是
gaia.cs.umass.edu
,这里有29个跃点跟踪。
-
当 Traceroute程序终止时,停止在 Wireshark中捕获数据包
我这里还是使用官方提供的数据包:
icmp-ethereal-trace-2
回答问题:
5. 您的主机的 IP地址是多少? 目标目标主机的 IP地址是多少?
答:我的主机(官方的包)的IP地址:192.168.1.101 目的主机IP地址:138.96.146.2
- 【待理解】如果 ICMP发送了 UDP数据包(如在 Unix / Linux中),那么探测数据包的 IP协议号仍然是 01吗? 如果没有,它会是什么?
答:
我这里的包,没有显示UDP协议(如果是ICMP协议确实是01),可能是要在Linux上来
- 【待理解】检查屏幕截图中的ICMP 响应数据包(traceroute)。 这与本实验的前半部分中的 ICMP ping查询数据包不同吗? 如果不同,请解释为什么?
答:
请求数据包对比:
响应数据包对应:
- 【待理解】检查屏幕截图中的 ICMP错误数据包。 它具有比 ICMP响应数据包更多的 字段。 这个数据包含哪些内容?
答:
对比traceroute的请求和响应的数据包:
- 检查源主机收到的最后三个 ICMP数据包。 这些数据包与 ICMP错误数据 包有何不同? 他们为什么不同?
答:源主机收到的最后三个ICMP数据包是目的主机发送给我的ICMP回应数据包,因为路由查询是使用逐渐递增TTL的查询数据包,最后的ICMP查询数据包的TTL已经大于到达目的主机中间路由跃点数,因此不会被目标主机丢弃来发送ICMP超时的数据包,所以只会收到ICMP响应数据包。
- 在 tracert跟踪测量中,是否有一个连接的延迟比其他连接长得多? 请参阅屏幕截图,是否有连接的延迟明显长于其他连接? 根据路由器名称,您能猜出这个连接末端的两个路由器的位置吗?
答:根据下图可以很明显的看到,在第8个请求到第11个请求一下子时间多了很多,然后使用**Best trace(可视化的路由跟踪工具)**可以看到目的IP地址为
223.120.12.17
的所在地已经到了美国,所以时间比较的久,起始位置在上海,终点位置是美国的圣何塞。
3. 【待完成】额外问题
对于一个编程任务,您可能创建了一个 UDP 客户端 ping 程序。 与标准 ping 程序
不同,此 ping 程序发送 UDP 探测包而不是 ICMP 探测包。 使用客户端程序将具有
异常目标端口号的 UDP 数据包发送到某个活动主机。 同时,使用 Wireshark 捕获
目标主机的任何响应。 提供响应的 Wireshark 屏幕截图以及响应分析。
参考资料:
https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES