概述
ICMP(Internet Control Message Protocol) 网际控制报文协议. 是TCP/IP协议簇的一个子协议. 属于网络层
使用IP的基本支持, 用来传输控制消息.
功能: 检测网络是否正常工作, 遇到异常问题时的诊断.
ICMP报文
ICMP报文可分为两类
- ICMP差错报告报文
- ICMP询问报文
前四个字节有三个字段, 类型 代码 检验和.
后面的四个字节与ICMP类型有关, 数据部分的长度也取决于ICMP类型
- 类型
ICMP报文种类 | 类型的值 | ICMP报文的类型 | |
差错报告报文 | |||
3 | 终点不可达 | 路由器主机不能交付数据报时想源点发送该报文 | |
4 | 源点抑制 | 路由器主机因拥塞丢弃数据报,向源点发送,告知放慢发送速率 | |
5 | 改变路由(Redirect) | 路由器向主机发送改变路由报文,改变更适合的路由 | |
11 | 时间超时 | 收到生存为0的数据报时,丢弃数据 | |
12 | 参数问题 | 当路由器或目的主机收到错误参数时,发送该报文. | |
询问报文 | 8 或 0 | 会送请求或回答 | 主机可发送请求报文, 接收到的主机要发回答报文,测试状态 |
13 或 14 | 时间戳请求或回答 | 主机发送时间戳请求报文,接收到的主机回复其日期和时间 |
-
代码
代码字段是为了进一步区分某种类型中的几种不同情况. -
检验和
检验和字段用来检验整个ICMP报文.
差错报告报文:
将收到的需要进行差错报告的IP数据报的首部 和 数据字段的前八个字节(运输层的端口号)提取出来.
加上相应的ICMP差错报告的前8个字节.
在加上IP数据报的首部形成数据包发送给源点.
应用
ping命令
ping命令使用ICMP的会送请求和答应报文
一次往返2个包, 使用抓包工具刚好抓到8个ICMP包.
请求
回应
tracert
tracert可以显示数据包到达目的地所经过的路径, 设置TTL从1开始递增, 则经历过的路由器依此会返回ICMP超时报文, 从而获取所经路径的详细信息.
第一个包 设置TTL = 1
收到一个超时时间超时报文
这样的包发了三次, 收到三次回复, 对应着tracert命令获得的三次延迟
之后再发TTL = 2的数据包 以此类推.
ICMP攻击
向目标主机长时间, 连续, 大量的发送ICMP数据包, 会导致系统占用过高, 最终有可能导致瘫痪.
或是利用ICMP协议规定的一些漏洞, 对主机发起攻击.
应对 : 选择合适的防火墙, 在路由器或主机上对ICMP访问进行限制