「ICMP」- 概念、术语

为了更有效地转发 IP 数据报文和提高数据报文交互成功的机会,在 Network Layer 使用 ICMP 协议。ICMP 允许主机或设备报告差错情况和提供有关异常情况的报告。

差错信息:ICMP 差错检测(ping)

ICMP的一个典型应用是 Ping:Ping 是网络设备、Windows、Unix、Linux 平台上的一个命令,常用于探测到达目的节点的网络可达性,其实是一个小巧而实用的应用程序,该应用基于 ICMP 协议。

Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。

ICMP Echo消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其他信息,如报文往返时间等:
1)ICMP Echo Request / ICMP Echo Reply 分别用来查询和响应某些信息,进行差错检测。
2)当网络设备无法访问目标时,会(由网络设备)自动发送 ICMP 目的不可到报文到发送端设备。

控制消息:ICMP 重定向;Type=5, Code=0;

场景:在不同网段间通信,需要通过网关。从路由接口收到的数据包,又要从相同接口重新发出,路由就会响应 ICMP 重定向给主机。

用于路径优选。

错误报告:tracert & traceroute

ICMP 定义各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。

探知数据包从源到目的经过的路径(路由)

tracert(ICMP Echo Requst)

Tracert 基于报文头中的TTL值来逐跳跟踪报文的转发路径。Tracert是检测网络丢包和时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

1)ICMP echo Requst * 3, TTL = 1,网络设备会相应 TTL Exceeded,此时探测到第一个网络设备地址;
2)ICMP echo Requst * 3, TTL = 2,网络设备会相应 TTL Exceeded,此时探测到第二个网络设备地址;
3)……
5)到遇到 ICMP Echo Reply 时,停止发包,此时已经探测到目的主机地址。

但是,部分设备 tracert 发送 UDP 报文,比如 华为路由器;

traceroute(UDP Packet)

1)UDP with Large Port Number * 3,TTL = 1,此时探测到第一个网络设备地址;
2)UDP with Large Port Number * 3,TTL = 2,此时探测到第一个网络设备地址;
3)……
4)当遇到目的主机时,会收到端口不可达报文,此时探测到目的主机地址;