IP承载-ICMP协议


ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制报文协议,

IP 头部中,协议号为  1【见 https://www.cnblogs.com/zhangzhiwei122/p/15882430.html】是,承载 ICMP协议

虽然在IP层之上,但是归属于:网络层协议

用于在 主机、路由器之间传递控制消息。

控制消息是指  网络通不通、主机是否可达、路由是否可用等网络本身的消息。

这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP协议是一种面向无连接的协议。


ICMP报文格式

clip_image001

类型:描述特定类型的ICMP报文。

代码:和类型字段的补充说明,同类型下,具体细节的区分。

ICMP报文类型

http://blog.chinaunix.net/uid-21639821-id-2387653.html 

TYPECODEDescriptionQueryError
00Echo Reply——回显应答(Ping应答)x 
30Network Unreachable——网络不可达 x
31Host Unreachable——主机不可达 x
32Protocol Unreachable——协议不可达 x
33Port Unreachable——端口不可达 x
34Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 x
35Source routing failed——源站选路失败 x
36Destination network unknown——目的网络未知 x
37Destination host unknown——目的主机未知 x
38Source host isolated (obsolete)——源主机被隔离(作废不用) x
39Destination network administratively prohibited——目的网络被强制禁止 x
310Destination host administratively prohibited——目的主机被强制禁止 x
311Network unreachable for TOS——由于服务类型TOS,网络不可达 x
312Host unreachable for TOS——由于服务类型TOS,主机不可达 x
313Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 x
314Host precedence violation——主机越权 x
315Precedence cutoff in effect——优先中止生效 x
40Source quench——源端被关闭(基本流控制)  
50Redirect for network——对网络重定向  
51Redirect for host——对主机重定向  
52Redirect for TOS and network——对服务类型和网络重定向  
53Redirect for TOS and host——对服务类型和主机重定向  
80Echo request——回显请求(Ping请求)x 
90Router advertisement——路由器通告  
100Route solicitation——路由器请求  
110TTL equals 0 during transit——传输期间生存时间为0 x
111TTL equals 0 during reassembly——在数据报组装期间生存时间为0 x
120IP header bad (catchall error)——坏的IP首部(包括各种差错) x
121Required options missing——缺少必需的选项 x
130Timestamp request (obsolete)——时间戳请求(作废不用)x 
14 Timestamp reply (obsolete)——时间戳应答(作废不用)x 
150Information request (obsolete)——信息请求(作废不用)x 
160Information reply (obsolete)——信息应答(作废不用)x 
170Address mask request——地址掩码请求x 
180Address mask reply——地址掩码应答

x


说明

ICMP类型报文总的来说分为2类:

(1)差错报告报文


类型值为3时:表示终点不可达
类型值为4时:表示源点抑制
类型值为5时:表示改变路由(Redirect)
类型值为11时:表示超时
类型值为12时:表示参数问题

(2)询问报文


类型值为8或者0时:表示回送(Echo)请求或应答
类型值为13或14时:表示时间戳(Timestamp)请求或应答

下面是几种不应发送ICMP差错报告的几种情况:

a:对ICMP差错报告报文,  不再发送ICMP差错报文
b:对具有多播地址的数据报,不发送ICMP差错报文
c:对第一个分片的数据报片的所有后续数据报片,不再发送ICMP差错报文
d:对于特殊地址(127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报文


常见举例


ICMP地址掩码请求与应答

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。系统广播它的ICMP请求报文(这一过程与无盘系统在引导过程中用RARP获取IP地址是类似的)。

无盘系统获取子网掩码的另一个方法是BOOTP协议。ICMP地址掩码请求和应答报文的格式如图

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


ICMP时间戳请求与应答

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计

算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)。

ICMP时间戳请求和应答报文格式如图

请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值。


ICMP端口不可达差错

上面介绍了ICMP两种查询报文—地址掩码和时间戳查询及应答。现在来分析一种ICMP差错报文,即端口不可达报文,它是ICMP目的不可到达报文中的一种,以此来看一看ICMP差错报文中所附加的信息。

我们使用采用UDP协议的TFTP服务(默认端口号69),在客户端使用TFTP客户程序connect服务端的非69端口,这样就会发生端口不可达错误。完整的差错报文如图

“UDP端口不可达”返回的ICMP报文

ICMP的一个规则是, ICMP差错报文必须包括生成该差错报文的数据报IP首部(包含任何选项),还必须至少包括跟在该IP首部后面的前8个字节(包含源端口和目的端口)。在我们的例子中,跟在IP首部后面的前8个字节包含UDP的首部。


参考链接:

https://blog.csdn.net/weixin_42615308/article/details/90482295

http://blog.chinaunix.net/uid-21639821-id-2387653.html

https://blog.csdn.net/heltstar/article/details/7512961

posted @ 2022-02-11 12:54  张志伟122  阅读(409)  评论(0编辑  收藏  举报