网络层协议 - ICMP
Internet 控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除网络故障具有至关重要的作用。
虽然ICMP和IP协议一样都属于网络层协议,但是它不像IP或ARP协议一样直接传递给数据链路层,仍需要先封装层IP协议然后再传递给数据链路层。
ICMP报文格式
从ICMP报文格式来说,ICMP是IP的上层协议,但是ICMP实际上分担了IP的部分功能(在IP通信中如果某个包因为未知原因没有到达目的地,那么这个具体的原因由ICMP负责告知)。因此也被认为是IP同层协议。

Ping命令
通过抓包软件可以看到
每ping一次本地计算机都会向远程主机发送一次回显请求的数据包,而远程主机在接收到请求后会应答回显请求
回显请求
回显应答
通过两个数据可以看出:
- 回显请求的数据类型为:8
- 回显应答的数据类型为:0
- 序列号用于区分是否为同一个请求和应答
常见的Ping报错

TTL:Time to live (生存时间)
- 防止IP数据包在网络内无休止的传输(环路)
- 没经过一次路由TTL值就会减一
- 当TTL = 0 时,丢弃数据包

利用TTL特性,可以实现路由跟踪技术,时重要的排错方法之一
同时使用TTL可以有效防止网络出线环路导致资源消耗的情况


Tracert 命令
语法:
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
参数说明
| 参数 | 说明 |
|---|---|
| -d | 不将节点主机名解析为 IP 地址,直接进行路由跟踪。当路由器不支持 ICMP/UDP/ICMPv6 数据包时,建议使用该选项。 |
| -h maximum_hops | 指定最多经过多少个节点进行路由跟踪,默认值为 30。 |
| -j host-list | 枚举一个节点列表,并在路由跟踪过程中只走该列表中的节点 |
| -w timeout | 设置等待每个回复消息的超时时间,默认值为 4000 毫秒。 |
| -R | 跟踪路由时,使用“参考路由”而不是“严格源路由”。如果启用了该选项,则可以跨越某些无法到达但能够到达目标的路由器。 |
| -S srcaddr | 指定源地址。如果电脑上安装了多个网卡,该选项可以指定网卡发出路由跟踪请求。 |
| -4 | 强制使用 IPv4 进行路由跟踪。 |
| -6 | 强制使用 IPv6 进行路由跟踪。 |
| target_name | 要查询的目标 IP 地址或主机名。 |
使用示例:
在进行路由跟踪时,可能因为某些网络节点的安全限制而导致 tracert 命令无法收到反馈,但是不代表此节点不通。在这种情况下,可以尝试使用其他一些网络工具,例如 Ping 命令。


