ICMP协议(Internet Control Message Protocol)
互联网控制报文协议,所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个无法感知网络环境的协议来工作的,这个协议就是IP(包括IPV4和IPV6)
ICMP协议全称Internet控制报文协议,是一个网络层的一个重要协议,一个新搭建好的网络,往往需要先进行一个简单地测试,;来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因,因此我们需要ICMP协议来完成
用来在网络设备间传递各种差错和控制信息
俩个重要应用,在Windows系统和RGOS中进场会使用到
ICMP协议的主要功能:
确认IP包是否成功到达目标地址
通知在发送过程中IP包被丢弃的原因
ICMP的报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面,一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少8字节)和ICMP报文(属于ICMP报文的数据部分)
常见的ICMP报文可以分为俩大类,即差错报文和查询报文
差错报文:目的站不可达、数据报超时,主要用于诊断网络故障,比如传输报文被丢弃的原因等
常见ICMP查询报文:回送请求或回答、时间戳请求或回答、路由器询问和通告、信息请求或回答、地址掩码请求或回答,用的较多的是回送请求或回答、时间戳请求或回答,主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等
以前他们主要在主机启动时使用,通过使用这三种查询报文,主机能确定自身在网络环境中IP地址、地址掩码、路由器状况等信息,现在,DHCP协议已经能够完全实现这些功能,此外,在互联网中的俩台主机能够使用时间戳请求或回答报文来确定数据报在彼此之间往返需要的时间
为什么需要ICMP?
IP协议是一个不可靠协议,如果IP包在传输过程中,比如checksum对不上,拥塞,超时等,那么IP包是会直接被丢弃的,之后也不会有进一步的努力来修正
这是IP协议的一个设计准则,就是尽量让IP保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如tcp)
通过ICMP协议,当IP包发生错误的时候,上层发送IP包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送ICMP包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整
ICMP报文格式
类型:占1个字节,表示较大范围类型分类的ICMP报文
代码:占一个字节,表示较小范围类型分类的ICMP保温牛奶
校验和checksum:占2个字节,ICMP checknum的计算方法类似于IP checknum,但是不同的是IP只校验头部,ICMP校验头部+数据部分
ICMP报文类型
类型表:
类型 | 内容 | 种类 | 解释 |
---|---|---|---|
0 | 应答 | R | ping应答 |
3 | 目的不可达 | E | 很多细分,如主机/协议等 |
4 | 源端抑制 | E | 表示拥塞 |
5 | 重定向 | E | 表示最优的路由路径 |
8 | 请求 | R | ping请求 |
9 | 路由器通告 | R | 告知路由器地址 |
10 | 路由器请求 | R | 请求路由器通告 |
11 | 超时 | E | TTL = 0 |
12 | 参数问题 | E | 有问题的报文 |
R表示查询报文,E表示差错报文
类型细分表
类型 | 代码 | 内容 | 解释 |
---|---|---|---|
3 | 0 | 网络不可达 | 没有路由到目的地 |
3 | 1 | 主机不可达 | 已知但不可达的主机 |
3 | 2 | 协议不可达 | 未知的协议 |
3 | 3 | 端口不可达 | 未知的端口 |
3 | 4 | 要分片但设置了不分片位 | 路由器MYU限制需分片但无法分片 |
3 | 5 | 源路由失败 | 中间跳不可达 |
3 | 13 | 管理禁止通信 | 被过滤策略禁止的通信 |
3 | 14 | 违反主机优先级 | src/dst/port不准许的优先级 |
3 | 15 | 优先级终止生效 | 在最小Tos之下 |
5 | 1 | 主机重定向数据报 | 指示一个可选的路由器/主机 |
11 | 0 | 在传输期间时间超时 | 跳数限制/TTL超时 |
11 | 1 | 分片重组时间超时 | 重组计时器超时之前,有分片未到达 |
12 | 0 | 指针指示差错 | 字节偏移指示第一个问题字段 |
12 | 2 | 错误的长度 | 数据包有无效的Total Length字段 |
有哪些命令就体现了ICMP
ICMP 的这些包的类型,用户可以充分用来诊断网络的故障情况。
因此诞生了一些利用 ICMP 协议的网络诊断工具,其中比较知名的就是 ping 和 traceroute。这两工具分别利用两种类型的 ICMP 报文:
ping 使用查询类型报文
traceroute 使用差错类型报文
ICMP攻击以及欺骗技术
基于ICMP的攻击可以分为两大类:一是ICMP攻击导致拒绝服务(DoS);另外一个是基于重定向(redirect)的路由欺骗技术。
服务拒绝攻击是最容易实施的攻击行为,目前,基于ICMP的攻击绝大部分都可以归类为拒绝服务攻击,其又可以分成3个小类:
针对带宽的DoS攻击
针对连接的DoS攻击
基于重定向(redirect)的路由欺骗技术