实验过程
ping命令测试
ping baidu.com
tracetr追踪
tracert baidu.com
WireShark开始捕获
使用icmp过滤,同时开启Resolve network names,重复上述1、2步骤,结果如下
各字段描述如下:
查看TTL超时的包
WireShark中用黑色标识
TTL超时包的结构图
Type | Code | Checksum | Unused | IP | ICMP |
---|---|---|---|---|---|
1 Byte | 1 Byte | 2 Byte | 4 Byte | 20 Byte | 8 Byte |
IP结构参见实验4
实验结果
ICMP 回显请求和回显应答数据包的 Type/Code 值分别是什么
请求包Type/Code为0x0800;应答包为0x0000
如何比较一个回显请求的标识符和序列号和对应的回声回复
一个请求包对应的应答包的Seq相同
Identifier 和 Sequence Number 如何比较连续的 echo request 数据包
连续的请求应答包在Sequence Number会增加1
echo reply中的数据和echo request中的数据是一样的还是不同的
相同
ICMP TTL超出数据报的类型/代码值
Type: 11 (Time-to-live exceeded)
说明如果接收者不提前知道期 ICMP 消息的结构,如何安全地找到并处理所有 ICMP 字段。
ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code)让机器来识别不同的连线状况,从而对应不同的ICMP消息格式。
超时数据包的ICMP头长度
如图所示,8Byte
ICMP 有效载荷包含一个 IP 报头。 此标头中的 TTL 值是多少
TTL=1。数据包每经过一个路由器TTL将会减1,当TTL为0时将丢弃这个包。所以此时TTL=1的包经过处理后TTl将变为0,路由器将会丢弃此IP包并向IP包的发送者发送 ICMP time exceeded消息。
计算机(源)如何从一个TTL超出的数据包中学习沿路径的路由器的IP地址
TTL超时包的负载部分的IP报头里面有两端的路由器IP地址。
- 从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;
- 到达路由器时,将TTL减1;
- 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
- 当源地址收到该ICMP包时,显示这一跳路由信息;
- 重复1~5,并每次设置TTL加1;
- 直至目标地址收到探测数据包,并返回ICMP回应答复(ICMP Echo Reply);
- 当源地址收到ICMP Echo Reply包时停止tracert
沿着traceroute探测的路径,每个路由器要探测多少次
Traceroute每跳默认发送3个探测包。
计算机(源)是如何发送一个请求包来寻找(通过触发TTL超时响应)路由器N沿着路径跳转到目的地的
如图,源地址172.23.151.28向目的地址39.156.66.10发送ICMP请求回显(ICMP Echo Request)数据包,每跳默认发送3个,TTL设置为1;数据包遇到路由器之后,被丢弃,返回Time tolive exceeded超时通知,解析出路由器IP地址172.19.251.13。源地址再发数据包,设置TTL=2,从而解析出第二跳路由172.16.201.66。同理,解析出后续路由ip。
实验反思
通过本次实验,我深入了解了ICMP(互联网控制信息协议)的使用方法。ICMP作为IP的一个配套协议,在处理错误和测试情况时起到了重要的作用,帮助IP执行其功能。在实验过程中,我使用了ping命令测试和tracert命令追踪,并使用WireShark进行捕获和分析。通过分析捕获的数据包,我了解了ICMP数据包的结构和各字段的含义,包括Type、Code、Checksum、Sequence Number和Data等。我还学会了如何比较回显请求的标识符和序列号以及对应的回声回复,以及如何比较连续的echo request数据包。此外,我还了解了ICMP TTL超出数据报的类型/代码值和超时数据包的ICMP头长度,以及如何安全地处理所有ICMP字段。最后,我学会了通过TTL超时数据包来学习沿路径的路由器的IP地址,并了解了traceroute探测的路径和每个路由器要探测的次数。通过本次实验,我加深了对ICMP协议的理解,提高了实验操作和数据分析的能力。