因特网控制报文协议ICMP

ICMP是TCP/IP协议族一个IP层子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP位于TCP/IP协议族中IP层。

ICMP的主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。同时ICMP的这种通知消息会使用IP进行发送,收到ICMP包的主机会分解ICMP的首部和数据与以后得知具体发生的原因。

ICMP报文在IP数据报内部被传输,就像TCP与UDP报文段那样。

特点:

 (1)ICMP本身是网络层的一个协议,但是它的报文不是直接传送给数据链路层,而是要封装成IP数据报,然后在传送给数据链路层。

 (2)从协议体系上看,ICMP的差错和控制信息传输只是要解决IP协议可能出现的不可靠问题,它不具有普遍意义上的传输机制,它也不是传输层赖以存在的基础,它不能独立于IP协议而单独存在,因此把它归于IP协议的一个部分,而归于IP协议体系。

 (3)ICMP协议的设计初衷是用于IP协议在执行过程中的出错报告,严格的说是路由器向源主机报告传输差错的原因。

 (4)ICMP不能纠正差错,只能报告差错

ICMP数据报格式

                                        |<---------------------------------------------   数据域------------------------------------------->|

IP报头(20B)                        type字(1B) code字段(1B) checksum字段(2B) ICMP数据及整个IP数据段                                            

(1)ICMP信息 必须全部 封装在IP数据报的 数据域 中,长度必须限制在576B以内。

(2)根据IP数据报报头的规定,报头的协议字段值为1,所以接收端的路由器及主机根据报头的协议字段值为1,来判断改该IP数据报携带ICMP信息,为ICMP数据报。

 

ICMP报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。

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


ICMP报文分类:一类是通知出错原因的错误消息(差错报文),另一类是用于诊断的查询消息(查询报文)。


差错报文分5类:  

1、目的站不可到达

2、源站抑制

3、超时

4、参数问题

5、改变路由

查询报文分四类:      

1、回送请求与回答

2、 时间戳请求与回答

3、地址掩码请求与回答

4、 路由器询问和通告

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

1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。

2) 目的地址是广播地址或多播地址的IP数据报。

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

4) 不是IP分片的第一片。

5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

常用ICMP消息类型

不同类型由报文中的类型字段和代码字段来共同决定。

类型3:ICMP目标不可达消息

 IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息。并在这个消息中显示不可达的具体原因。而在实际通信过程中常遇到错误代码为1,表示主机不可达,它是指路由表中没有改主机信息或者该主机没有联网的意思。

ICMP不可达消息.png

类型5:ICMP重定向消息

如果路由器发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向消息给这个主机,在这个消息中包含了最合适的路由消息和源数据。这主要发生在路由器持有更好的路由器信息的情况下,路由器会通知这样的ICMP消息给发送端主机一个更适合的发送路由。

ICMP重定向消息.png

类型11:ICMP超时消息

IP包中有有一个字段叫做TTL,它的值就是每经过一次路由器就会被减1,直到0时该IP包会被丢弃,此时IP路由器将会发送一个ICMP超时的消息给发送端主机,并通过该包已被丢弃。

设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状态时,避免IP包无休止地在网络上被转发。

 

类型0、8:ICMP回送消息

用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。可以向对端主机发送回送请求的消息(类型8),也可以接受对端主机发回来的回送应答消息(类型0)。网络上最常用的ping命令,就是利用这个消息实现的。


猜你喜欢

转载自blog.csdn.net/qq_22238021/article/details/80484313