本帖最后由 forgot 于 2023-3-24 10:54 编辑
在OSI 7层参考模型中,第三层网络层是功能非常复杂的一层,网络层处在传输层和数据链路层之间,在数据链路层提供的两个相邻端点之间的数据帧的传送功能,并且管理网络中的数据通信。而在TCP/IP网络协议层中,ICMP协议是互联网控制报文协议( Internet Control Message Protocol)的简称,是非常常用的一种协议,该协议主要用于在主机、路由器之间传递控制消息,这些信息对于用户数据的传递也起着重要的作用,比如要对主机间网路连接状况进行判断的时候。 ICMP报文封装在IP包内,在去掉IP包的IP首部之后,就是ICMP首部与ICMP数据部分构成ICMP报文,ICMP首部包含类型占8位,代码占8,位校验和占16位,这是ICMP包最关键的部分,随后就是首部数据,ICMP数据部分代表了协议的选项数据,从协议本身的类型上来分,可以分为查询报文和差错报文两大类。
查询报文包括:回显请求、回显应答; 差错报文包括:目标主机未知、端口不可到达、目的网络未知、网络重定向等等。
对于ICMP查询功能最典型的应用就是ping的应用,每当我们想知道一台IP主机与另外一台IP主机网络是否连接时,我们常常会采用主机的CMD命令行程序进行ping对方的IP,如果不通会显示请求超时或者是请求找不到主机,如果网络通了会显示来自对方IP的回复 <1ms TTL =254 等数据,代表了往返时间和转发的范围,这样就知道网络是连通的,实际上整个过程就是一次ICMP协议的实现。
当源主机进行发ping命令时,源主机会构建一个类型是8,代码是0的 ICMP 回显请求消息数据包,向目标主机发出,另外会追加标识符和序号字段,标识符里面写入的是进程号,而,序号会逐次加1,在ICMP选项数据中会写入任意数据,如abcdefg....;当目标主机收到该包后,就会回发类型是0,代码也是0的回显应答,数据部分基本一致,当源主机收到包之后就知道网络是通畅的。如果目标主机没有收到或者是网络本身就不通的时候,就会产生差错报文,提示我们网络无法到达,差错报文的分类也是由首部的类型和代码两个8位数据组合构成,根据差错报文的内容也可以一定程度上分析网络不通的原因,但是有些情况是不会发送差错报文的,如目的地址是广播地址或多播地址的IP数据报、源地址不是单个主机的数据报等,这样做的目的是为了防止ICMP差错报文带来广播风暴。
在网络攻击中,也有使用ping风暴进行ICMP攻击的方式,因为是无连接的通讯方式,就像UDP洪流攻击一样,通过大量发ping包试图导致网络超负荷,阻塞网络中合法数据的传输或者使网速变慢,所以在网络系统中就会采用防火墙的设置入站规则中禁ping的一些手段,来限制ping请求的时间或者关闭直接ping请求,以达到安全性和易用性之间的平衡取舍。
|