TCP/IP详解 卷一 ---------ICMP

我只是个搬运工,难过服务器

一、引言

做用:传递差错报文以及其余须要注意的信息spa

该协议一般被IP层或者更高层协议(TCP、UDP)使用操作系统

ICMP报文在IP数据报内部被传输,如图1所示。所以ICMP常被认为是IP层的一个组成部分代理


                                                                     图1 ICMP封装在IP数据报内部blog

ICMP报文的格式如图2所示。全部报文前4个字节相同,可是不一样的差错信息对应不一样的剩余字节信息。进程


图2 ICMP报文原理

二、ICMP报文类型

各类类型的ICMP报文如图3所示,不一样类型由报文中的类型字段和代码字段共同决定。循环


图3 ICMP报文类型硬件

对ICMP差错报文有时须要特殊处理,所以须要区分ICMP报文是查询报文仍是差错报文。特殊操做包括:在对ICMP差错报文进行响应时,永远不会再生成另外一份ICMP差错报文(若无此限制可能致使遇到一个差错以后产生另外一个差错,差错再产生差错,可会无休止的循环下去)。请求


  当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(并非IP数据报首部的前8个字节,而是IP首部以后的8个字节)。这样接收到ICMP差错报文的模块会将它和某个特定的协议(根据IP首部的协议字段判断)以及用户进程(根据包含在IP数据报前8个字节的TCP或UDP报文首部中的TCP或UDP端口号来判断)相联系。


不会产生ICMP差错报文的状况:

 1)ICMP差错报文     注:ICMP查询报文会产生ICMP差错报文

 2)目的地址是广播地址或多播地址

 3)做为链路层广播的数据报

 4)不是IP分片的第一片

 5)源地址不是单个主机的数据报。即源地址不能是源地址、环回地址、广播地址或多播地址

这些设置的主要目的:防止过去容许ICMP差错报文对广播分组影响带来的广播风暴


三、ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程当中获取本身的子网掩码。系统广播它的ICMP请求报文

ps:无盘系统是指由无盘工做站组成的局域网。无盘工做站:盘只硬盘,原理是在网内有一个系统服务器,这太系统服务器上除了有他自己运行所需的操做系统外还须要有工做站运行所需的操做系统。无盘工做站的机箱内没有硬盘,可是其余硬件都有,并且无盘工做站的网卡要带有可引导芯片。

ICMP地址掩码请求和应答报文格式以下:


图4 ICMP地址掩码请求和应答报文

      ICMP报文中标识符和序列号字段由发送端任意选择设定,这些值在应答中被返回,这样发送端就可将请求与应答进行匹配。

     RFC规定,除非系统是地址掩码的受权代理,不然他不能发送地址掩码应答

四、ICMP时间戳请求与应答

ICMP时间戳请求是容许系统向另外一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,细条的统一时间(UTC,格林尼治时间)。


ICMP时间戳请求与应答时间


图5 ICMP时间戳请求和应答报文

请求端填写发起时间戳,而后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间。实际上后两个字段设置为相同的值。


ICMP时间戳请求和应答报文:是发送给某个特定主机?



五、ICMP端口不可达差错

使用上层协议如UDP能够查看ICMP报文中所附加的信息

UDP规则之一:若是收到一份UDP数据报而目的端口与某个正在使用的进程不相符,则UDP返回一个ICMP不可达报文。而TFTP来强制产生一个 端口不可达报文。


ICMP报文在主机间交换,而不用目的端口


对于ICMP差错报文须要包含:生成该差错报文的数据报IP首部,以及跟在该IP首部后面的前8个字节