网络协议-TCP/IP基础(5)

  • ICMP经常被认为是IP层的一个组成部分,它传递差错报文以及其他需要注意的信息。
  • ICMP报文通常被IP层或更高层的协议使用,一些ICMP报文把差错报文返回给用户进程。
  • ICMP报文是在IP数据报内部被传输的。

 

 类型字段可以有15个不同的值,以描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值来进一步描述不同的条件。

检验和字段覆盖整个ICMP报文,使用的算法与IP首部检验和算法相同,ICMP检验和是必需的。


ICMP报文类型

  •  图中最后两列表表明ICMP报文是一份查询报文还是一份差错报文,因为对ICMP差错报文有时候需要进行特殊处理,因此需要进行区分。
  • 例如,对ICMP差错报文进行响应时,永远不会产生另一份ICMP差错报文(如果没有这个限制,可能会遇到一个差错产生另一个差错的情况,而差错再产生差错,会无限循环)。
  • 当发送一份ICMP差错报文时,报文始终包含IP首部和产生ICMP差错报文的IP数据报的前8个字节,这样接收ICMP差错报文的模块就会把它与某个特定的协议和用户进程联系起来。

下面各种情况都不会产生ICMP差错报文:

  1. ICMP差错报文
  2. 目的地址是广播地址或多播地址的IP数据报
  3. 作为链路层广播的数据报
  4. 不是IP分片的第一片
  5. 源地址不是单个主机的数据报,这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

ICMP重定向

当IP数据报应该被发送到另一个路由器时,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端,只有当主机可以选择路由器发送分组的情况下,才可能看到ICMP重定向报文。

假定主机发送一份IP数据报给R1。

R1收到数据报并检查它的路由表,发现R2是发送该数据报的下一站,当它把数据报发送给R2时,R1检测到它正在发送的接口和数据报到达的接口是相同的。

R1发送一份ICMP重定向差错报文给主机,告诉主机以后把数据报发送给R2而不是R1。

 ICMP重定向报文的格式如下

 ICMP重定向报文的接收者必须查看三个IP地址:

  • 导致重定向的IP地址(即ICMP重定向报文的数据位于IP数据报的首部)
  • 发送ICMP重定向数据报的路由器的IP地址(包含重定向信息的IP数据报中的源地址)
  • 应该采用的路由器IP地址

ICMP重定向报文规则

  • 重定向报文只能由路由器生成,而不能由主机生成。
  • 重定向报文是为了主机使用的,而不是为了路由器使用。

一台主机收到ICMP重定向报文后,在修改路由表之前要做出一些检查,是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误的修改路由表。

  • 新的路由器必须直接与网络相连。
  • 重定向报文必须来自到达当前目的地所选择的路由器。
  • 重定向报文不能让主机本身作为路由器。
  • 重新选择的路由器必须是间接路由。
原文地址:https://www.cnblogs.com/Virus-Faker/p/14745713.html