ICMP协议

ICMP经常被认为是IP层的一个组成部分,它传递差错报文以及其它需要注意的信息。ICMP报文通常交由IP层或者更高层协议(TCP/UDP)处理,一些ICMP报文把差错报文返回给用户进程。


ICMP报文格式

ICMP报文是在IP数据报内部被传输的:

91587114280_.pic.jpg

其报文格式如下图所示,所有的报文前4个字节都是一样的。

101587114739_.pic.jpg

  • 类型字段有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段进一步描述不同的条件。
  • 校验和字段覆盖整个ICMP报文,算法和IP首部检验算法相同。

ICMP报文可以是一份查询报文,也可是是一份差错报文。下面几种情况不对导致产生ICMP差错报文(防止ICMP差错报文对广播分组影响带来的广播风暴):

  • ICMP差错报文(查询报文可能会)
  • 目的地址是广播地址或多播地址的IP数据报
  • 作为链路层广播的数据报
  • 不是IP分层的第一片
  • 源地址不是单个主机的数据报。(源地址不能为零地址、回环地址、广播地址或多播地址)

ICMP报文例子

  1. ICMP重定向差错:假设一主机发送一份IP数据报给路由器R1(可能是默认路由),R1收到后并检查它的路由表,发现R2是发送该数据报的下一站,把数据报转发给R2。若发现R2和发送方属于同一接口(LAN),则R1发送一份ICMP重定向报文给发送端,告诉它把数据报发送给R2而不是R1。 主机启动时路由表中可能只有一个默认表项。通过重定向报文可以让路由信息很少的主机逐步建立完善的路由表。
  2. ICMP路由器通告、请求报文:除了指定静态路由来初始化路由表,还可以通过ICMP路由器通告和请求报文来实现。一般认为主机引导后要广播或多播一份路由器请求报文,一台或更多台路由器响应一份路由器通告报文。另外,路由器会不定期随机发送一份路由器通告报文,允许每个正在监听的主机相应的更新它们的路由表。

各类型ICMP报文

Xnip2020-04-17_17-47-21.png


参考

[1] TCP/IP详解卷1

[2] 维基百科

results matching ""

    No results matching ""