IP承载-ICMP协议
ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制报文协议,
IP 头部中,协议号为 1【见 https://www.cnblogs.com/zhangzhiwei122/p/15882430.html】是,承载 ICMP协议,
虽然在IP层之上,但是归属于:网络层协议。
用于在 主机、路由器之间传递控制消息。
控制消息是指 网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议是一种面向无连接的协议。
ICMP报文格式
类型:描述特定类型的ICMP报文。
代码:和类型字段的补充说明,同类型下,具体细节的区分。
ICMP报文类型
http://blog.chinaunix.net/uid-21639821-id-2387653.html
TYPE | CODE | Description | Query | Error |
---|---|---|---|---|
0 | 0 | Echo Reply——回显应答(Ping应答) | x | |
3 | 0 | Network Unreachable——网络不可达 | x | |
3 | 1 | Host Unreachable——主机不可达 | x | |
3 | 2 | Protocol Unreachable——协议不可达 | x | |
3 | 3 | Port Unreachable——端口不可达 | x | |
3 | 4 | Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 | x | |
3 | 5 | Source routing failed——源站选路失败 | x | |
3 | 6 | Destination network unknown——目的网络未知 | x | |
3 | 7 | Destination host unknown——目的主机未知 | x | |
3 | 8 | Source host isolated (obsolete)——源主机被隔离(作废不用) | x | |
3 | 9 | Destination network administratively prohibited——目的网络被强制禁止 | x | |
3 | 10 | Destination host administratively prohibited——目的主机被强制禁止 | x | |
3 | 11 | Network unreachable for TOS——由于服务类型TOS,网络不可达 | x | |
3 | 12 | Host unreachable for TOS——由于服务类型TOS,主机不可达 | x | |
3 | 13 | Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 | x | |
3 | 14 | Host precedence violation——主机越权 | x | |
3 | 15 | Precedence cutoff in effect——优先中止生效 | x | |
4 | 0 | Source quench——源端被关闭(基本流控制) | ||
5 | 0 | Redirect for network——对网络重定向 | ||
5 | 1 | Redirect for host——对主机重定向 | ||
5 | 2 | Redirect for TOS and network——对服务类型和网络重定向 | ||
5 | 3 | Redirect for TOS and host——对服务类型和主机重定向 | ||
8 | 0 | Echo request——回显请求(Ping请求) | x | |
9 | 0 | Router advertisement——路由器通告 | ||
10 | 0 | Route solicitation——路由器请求 | ||
11 | 0 | TTL equals 0 during transit——传输期间生存时间为0 | x | |
11 | 1 | TTL equals 0 during reassembly——在数据报组装期间生存时间为0 | x | |
12 | 0 | IP header bad (catchall error)——坏的IP首部(包括各种差错) | x | |
12 | 1 | Required options missing——缺少必需的选项 | x | |
13 | 0 | Timestamp request (obsolete)——时间戳请求(作废不用) | x | |
14 | Timestamp reply (obsolete)——时间戳应答(作废不用) | x | ||
15 | 0 | Information request (obsolete)——信息请求(作废不用) | x | |
16 | 0 | Information reply (obsolete)——信息应答(作废不用) | x | |
17 | 0 | Address mask request——地址掩码请求 | x | |
18 | 0 | Address 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