- 定义:ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。
- 控制消息:是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
- 作用:从技术角度来说,ICMP就是一个“错误探测与回报机制”,主要作为:
- 网络探测:ping
- 路由跟踪:tracert
- 错误反馈:不管是什么协议产生的数据帧,只要传输发生错误,就会触发ICMP协议。
- 地位:ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP、ARP、RARP及 IGMP共同构成 TCP/IP 模型中的网络层。
2.1 报文结构
- ICMP生成的报文主要由ICMP头与数据组成:
- ICMP头由ICMP类型与代码组成。
- 数据仅起到填充作用,无实际意义。
2.2 报文类型
2.2.1 差错报告报文
- 用途:主要用来向IP数据报源主机返回一个差错报告信息,这个错误报告信息产生的原因是路由器或主机不能对当前数据报进行正常的处理,例如无法将数据报递交给有效的协议上层,数据报因为生存时间TTL为0而被删除等。
- 类型及报文功能:
- 类型3:目标不可达
- 类型4:源站抑制
- 类型5:重定向(改变路由)
- 类型11:数据报超时(由最后一个路由器向源主机发回报文)
- 类型12:数据报参数错误
2.2.2 查询报文
- 用途:用于一台主机向另一台主机查询特定的信息,通常查询报文都是成对出现的,即源主机发起一个查询报文,在目的主机收到该报文后,会按照查询报文约定的格式为源主机返回一个应答报文。
- 类型及报文功能:
- 类型8或0:回送请求或应答
- 类型10或9:路由器询问和通告
- 类型13或14:时间戳请求或应答
- 类型15或16:信息请求或应答
- 类型17或18:地址掩码请求或应答
2.3 类型及代码组合一览表
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 | 0 | 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——地址掩码应答 |
3.1 命令
ping 10.1.1.1
ping www.baidu.com
tracert 10.1.1.1
traceroute 10.1.1.1
3.2 tracert原理
以tracert www.baidu.com为例,描述命令tracert工作原理:
- 主机将 [类型为11、代码、数据] 进行ICMP封装后,生成ICMP报文,再封装IP包头,包头中TTL值为1,再封装帧头帧尾,发送数据帧;
- 数据帧到达第一个路由器后,路由器解封装后TTL减1等于0,数据帧丢弃,路由器发回应答信息(含有路由器的IP地址)。
- 主机收到信息后,再次生成TTL=2的数据帧,再次发送,这次数据帧可以达到第二个路由器,被第二个路由器丢弃后,收到应答信息(含第二个路由器的IP地址)。
- 依次类推,直到数据帧达到www.baidu.com所在IP。
4.1 攻击方法
- 死亡之Ping:可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)
- ICMP风暴:此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。
4.2 抵御方法
- 死亡之Ping:对于“Ping of Death”攻击,可以采取两种方法进行防范:第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;第二种方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。
- 设置ICMP数据包处理规则:方法也有两种,一种是在操作系统上设置包过滤,另一种是在主机上安装防火墙。