网际控制报文协议ICMP

概念

 网际控制报文协议ICMP(Internet Control Message Protocol),是一个网络层协议,用于向高层协议(TCP或UDP)传递数据包的差错信息。ICMP虽然是一个网络层协议,但是和ARP/RARP协议不同的是,它是作为IP报文的数据部分传递给数据链路层的。

ICMP协议格式

icmp类型和代码.png

icmp类型和代码续.png

 ICMP的报文格式如下:


icmp报文格式.png
  • ICMP报文的类型由类型字段和代码字段共同决定。
  • ICMP协议的类型分为两大类,查询报文和差错报文,查询报文总是成对出现。
  • 校验和字段校验的范围是整个ICMP报文。
  • 当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。
  • 下面各种情况为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴都不会导致产生ICMP差错报文:
    (1)ICMP差错报文(ICMP查询报文可能会产生ICMP差错报文)。
    (2)目的地址是广播地址多播地址的IP数据报。
    (3)目的地址是广播地址多播地址的IP数据报。
    (4)作为链路层广播的数据报。
    (5)不是IP分片的第一片。
    (6)源地址不是单个主机的数据报,即源地址不能为零地址、环回地址、广播地址或多播地址。

ping的原理

 ping相关的ICMP报文如下:

type code message
0 0 Echo Reply
8 0 Echo Request
3 0 网络不可达
3 1 主机不可达
3 2 协议不可达
3 3 端口不可达
5 0 重定向

 ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

tracert的原理

  tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。 为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。 该报文到达***个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。 然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。 这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。 Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

你可能感兴趣的:(网际控制报文协议ICMP)