ICMP协议

张开发
2026/4/13 1:40:44 15 分钟阅读

分享文章

ICMP协议
ICMP协议一、ICMP协议诞生背景与作用1.1 为什么需要ICMP1.2 ICMP与IP的关系1.3 ICMP的主要功能二、ICMP报文格式与类型2.1 IP 首部2.2 ICMP结构2.3 常见类型与代码2.4 错误报文的特殊格式三、ICMP错误报告详解3.1 目标不可达类型33.2 源点抑制类型4已废弃3.3 重定向类型53.4 超时类型11四、ICMP诊断功能ping与Traceroute4.1 ping的工作原理4.2 traceroute的工作原理4.3 ping与traceroute的局限性五、ICMP的安全风险与防御5.1 常见的ICMP攻击5.2 ICMP防御策略六、ICMP排错与调试命令6.1 ping语法Windows抓取正常ping包抓取指定长度ping包6.2 tracert语法tracert输出特殊符号与含义6.3 pathping概述语法pathping输出6.3 常见故障排查七、总结与延伸7.1 ICMP的核心价值7.2 ICMP的局限性7.3 延伸阅读一、ICMP协议诞生背景与作用1.1 为什么需要ICMPIP协议提供的是无连接、不可靠的数据传输服务。它只管把数据包从源头发送到目的地但存在以下问题数据包可能在网络中丢失路由器队列满、线路故障数据包可能被丢弃TTL超时、分片失败目标主机可能宕机或不可达网络出现拥塞源端需要降速IP本身不提供任何反馈机制——发送方永远不知道自己的数据包是成功到达了还是半路被扔掉了。ICMPInternet Control Message Protocol互联网控制报文协议的出现就是为了填补这个空白。它的定位是IP协议的伴生协议负责传递网络控制信息和错误报告。1.2 ICMP与IP的关系ICMP报文封装在IP数据报中传输不像ARP直接封装在以太网帧中IP协议号为1TCP是6UDP是17ICMP是IP的辅助和诊断工具两者紧密耦合1.3 ICMP的主要功能功能类别说明典型应用错误报告通知发送方数据包被丢弃的原因目标不可达、超时、参数错误网络诊断探测网络连通性和路径ping、traceroute拥塞控制通知源端降低发送速率源点抑制已废弃重定向告诉主机有更好的路由ICMP重定向二、ICMP报文格式与类型2.1 IP 首部版本4位IP版本号Version这个值设置为二进制的 “0100” 时表示 IPv4设置为 “0110” 时表示 IPv6目前使用比较多的IP协议版本号是 4首部长度 4位首部长度IHLInternet Header Length表示IP首部一共有多少个 32bits4个字节。最大可表示15个 32 bits因此 IP 的首部长度最大值为 60 字节服务类型8位服务类型TOSType of service该字段被划分成两个子字段3位优先级字段现在已经基本忽略掉了和4位TOS字段最后一位固定为0。服务类型为0时表示一般服务总长度16位IP数据报总长度Total Length包括IP首部和IP数据部分以字节为单位。我们利用IP首部长度和IP数据报总长度就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16bit所以IP数据报最长可达65535字节。尽管理论上可以传输长达65535字节的IP数据报但实际上还要考虑网络的最大承载能力等因素标识16位标识Identification字段用来标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1标志3位标志Flags字段最高位为保留位中间位是 DF Don’t Fragment表示禁止分片只有 DF 0 时才允许分片最低位是 MF More FragmentMF 1 表示后面还有分片MF 0 表示最后一个分片片偏移13位片偏移字段指较长的分组在分片后某片在原分组中的相对位置以 8 字节为偏移单位也就是说每个分片的长度一定是 8 字节的整数倍生存时间8位生存时间字段TTLTime To Live设置了数据报可以经过的最多路由器数表示数据报在网络上生存多久防止丢失的数据包在无休止的传播TTL的初始值由源主机设置一般为32、64或者128一旦经过一个路由器它的值就减 1减到 0 时数据报就丢弃并发送 ICMP 消息通知源主机协议8位协议Protocol类型指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。 0x01 表示为 ICMP 协议, 0x02 表示为 IGMP 协议, 0x06 表示为 TCP 协议, 0x11 表示为 UDP 协议首部校验和16位首部校验和Header Checksum该字段只校验数据报的首部不包含数据部分校验IP数据报头部是否被破坏、篡改和丢失等。源 IP 地址32位源IP地址Source Address即发送端的IP地址如192.168.1.123目的 IP 地址32位目的IP地址Destination Address即接收端的IP地址如192.168.1.102可选字段是数据报中的一个可变长度的可选信息选项字段以32bit为界不足时插入值为0的填充字节保证IP首部始终是32bit的整数倍没有的话长度可以为 0 。IP首部校验和的计算方法1、将16位检验和字段置为0然后将IP首部按照16位分成多个单元 2、对各个单元采用反码加法运算即高位溢出位会加到低位通常的补码运算是直接丢掉溢出的高位 3、此时仍然可能出现进位的情况将得到的和再次分成高16位和低16位进行累加 4、最后将得到的和的反码填入校验和字段。2.2 ICMP结构ICMP报文位于IP数据报的数据部分基本结构如下字段长度含义类型Type1字节标识报文的类别代码Code1字节同一类型下的细分校验和Checksum2字节覆盖整个ICMP报文报文内容可变取决于类型和代码校验和计算校验 ICMP 首部和数据部分将校验和字段设置为0每16个bit(即2个字节)组成一个数相加如果超过16个bit把超过的高位值加到这16个bit值上得到的新值再和下一个值相加如果最后还剩8个bit值不能简单的加到低位要把这8个bit当成高位值再用0填充一个16个bit值相加最后取反填充到校验和字段2.3 常见类型与代码类型代码含义方向00回显应答Echo Reply响应30目标不可达 - 网络不可达错误报告31目标不可达 - 主机不可达错误报告32目标不可达 - 协议不可达错误报告33目标不可达 - 端口不可达错误报告34目标不可达 - 需要分片但DF置1错误报告36目标不可达 - 目标网络未知错误报告37目标不可达 - 目标主机未知错误报告40源点抑制Source Quench已废弃拥塞控制50重定向 - 网络重定向路由控制51重定向 - 主机重定向路由控制80回显请求Echo Request诊断90路由器通告路由发现100路由器请求路由发现110超时 - TTL过期错误报告111超时 - 分片重组超时错误报告120参数问题 - IP首部错误错误报告最常用的两种类型8/代码0ping命令发送的回显请求类型0/代码0ping命令接收的回显应答2.4 错误报文的特殊格式大多数ICMP错误报文会在自身后面附加引发错误的IP数据报的前8字节。这8字节包含了原始数据报的IP头部和传输层头部的前8字节通常是源端口和目的端口。┌─────────────────────────────────────────┐ │ ICMP头部8字节 │ │ 类型 代码 校验和 保留字段 │ ├─────────────────────────────────────────┤ │ 引发错误的IP数据报头部20字节 │ ├─────────────────────────────────────────┤ │ 原始数据报的前8字节通常是TCP/UDP头 │ │ 包含源端口和目的端口用于定位是哪个进程 │ └─────────────────────────────────────────┘这种设计让接收方能知道是哪个应用的哪个数据包出了问题。三、ICMP错误报告详解3.1 目标不可达类型3当路由器或目标主机无法将数据包交付给最终目的地时会向源端发送类型3报文。不同代码对应不同原因代码含义典型场景0网络不可达路由器没有去往目标网络的路由1主机不可达ARP解析失败或目标主机不存在2协议不可达目标主机不支持IP头中指定的协议3端口不可达目标端口没有进程在监听UDP常见4需要分片但DF置1数据包太大且不允许分片需调整MTU示例向一个没有开放80端口的Web服务器发TCP SYN服务器会回复ICMP类型3代码3。3.2 源点抑制类型4已废弃早期的ICMP源点抑制用于拥塞控制当路由器缓存满时向源端发送此报文要求降低发送速率。废弃原因在现代网络中效果不佳可能导致更多拥塞源点抑制本身也占用带宽被TCP自身的拥塞控制如AIMD替代RFC 18121995年建议路由器不要发送源点抑制RFC 66332012年正式标记为废弃。3.3 重定向类型5重定向是一个有点特殊的功能它用于优化路由。场景主机AIP 10.0.0.2的默认网关是路由器R110.0.0.1目标网络192.168.1.0/24的下一跳实际应该是路由器R210.0.0.254当A发往192.168.1.x的数据经过R1时R1发现有一条更好的路径经过R2R1转发数据的同时向A发送ICMP重定向报文“下次发往192.168.1.0/24的包请直接发给R2”A更新路由表后续包直接走R2安全提示重定向报文可以被攻击者利用来劫持流量因此很多主机会忽略或限制ICMP重定向。3.4 超时类型11代码0TTL过期IP头部有一个TTLTime To Live生存时间字段每经过一个路由器减1。当TTL减到0时路由器丢弃该包并向源端发送ICMP超时报文。这是traceroute命令的核心原理第1个包TTL1第1跳路由器返回超时第2个包TTL2第2跳路由器返回超时依次类推直到到达目标代码1分片重组超时当发送方将一个数据报分片发送接收方在指定时间内没有收齐所有分片会丢弃已收到的分片并发送此报文。四、ICMP诊断功能ping与Traceroute4.1 ping的工作原理ping是最常用的网络诊断工具基于ICMP回显请求类型8和回显应答类型0。工作流程主机A192.168.1.100 主机B192.168.1.1 | | |------- ICMP回显请求类型8--------| | (携带发送时间戳) | | | |------- ICMP回显应答类型0--------| | (复制请求中的时间戳) | | |计算RTTRound-Trip Time往返时间发送请求前记录当前时间t1请求中携带t1放在ICMP数据部分目标收到后将t1原样复制到响应中发送方收到响应时记录t2RTT t2 - t14.2 traceroute的工作原理tracerouteWindows下叫tracert用于发现数据包经过的每一跳路由器。它利用了ICMP超时报文类型11代码0。两种常见实现方式方式一递增TTL ICMPLinux/macOS第1步发送UDP/ICMP包TTL1 → 第1跳路由器返回ICMP超时携带路由器IP 第2步发送UDP/ICMP包TTL2 → 第2跳路由器返回ICMP超时 第3步继续增加TTL直到到达目标 → 目标返回ICMP端口不可达UDP方式或回显应答ICMP方式方式二ICMP回显请求 递增TTLWindows tracertWindows的tracert直接发送ICMP回显请求TTL从1开始递增 每一跳返回ICMP超时 最终目标返回ICMP回显应答4.3 ping与traceroute的局限性ping的局限性很多网络设备会丢弃ICMP包出于安全或性能考虑ping不通不等于网络不可达只测试连通性和延迟不测试带宽或丢包率需要更专业的工具如iperf、mtrtraceroute的局限性路由器可能不返回ICMP超时配置了过滤往返路径可能不对称去程和回程走不同路由某些跳可能显示* * *超时但不代表路径不通五、ICMP的安全风险与防御5.1 常见的ICMP攻击ICMP洪水攻击ICMP Flood攻击者发送大量ICMP请求ping到目标消耗目标带宽和CPU资源分布式版本DDoS更难防御Ping of Death发送超过65535字节的畸形ICMP包老系统收到后因处理不当而崩溃或重启现代系统已修复此漏洞ICMP隧道ICMP Tunneling将其他协议如SSH、HTTP封装在ICMP报文中传输绕过防火墙规则很多防火墙允许ICMP通过可用于数据泄露或C2通信ICMP重定向攻击伪造ICMP重定向报文诱使目标修改路由表将流量引向攻击者5.2 ICMP防御策略策略说明注意事项限制ICMP速率使用防火墙限制ICMP包速率可能影响正常诊断过滤特定类型只允许必要的类型如ping、超时不要全封否则影响PMTU发现丢弃重定向忽略ICMP重定向报文推荐配置禁止ICMP隧道深度包检测DPI需要专用设备PMTU发现说明Path MTU Discovery依赖ICMP类型3代码4需要分片但DF置1。如果完全禁用ICMP会导致某些大包无法发送出现黑洞连接现象。六、ICMP排错与调试命令特性pingtracertpathping主要用途测试端到端连通性和延迟发现网络路径显示每一跳路径发现 每跳丢包/延迟统计输出信息RTT、丢包率每一跳的IP和RTT每一跳的累计/链路丢包率、延迟统计工作原理ICMP回显请求/应答递增TTL触发ICMP超时tracert 向每跳发送大量探测包执行速度快秒级中等取决于跳数慢数分钟需大量探测故障定位能力无法定位中间节点可定位故障跳但统计不充分精准定位丢包/延迟节点平台全平台Windows: tracert Linux: traceroute仅Windows一句话总结ping它通不通快不快tracert它走哪条路哪一跳慢pathping到底是哪一跳在丢包6.1 ping语法Windows选项含义示例-n 次数发送次数默认4次ping -n 10 8.8.8.8-t持续pingCtrlC停止ping -t 8.8.8.8-l 字节数据包大小ping -l 1400 8.8.8.8-i TTL设置TTL值ping -i 64 8.8.8.8-w 毫秒超时时间ping -w 2000 8.8.8.8-a解析主机名ping -a 8.8.8.8-S 源IP指定源IPping -S 192.168.1.100 8.8.8.8抓取正常ping包抓取指定长度ping包6.2 tracert语法选项含义示例-d不解析IP为域名tracert -d 8.8.8.8-h 跳数最大跳数tracert -h 20 8.8.8.8-w 毫秒等待响应时间tracert -w 2000 8.8.8.8-4强制IPv4tracert -4 google.com-6强制IPv6tracert -6 google.comtracert输出特殊符号与含义符号含义说明* * *超时该跳无响应路由器禁ping或丢包!H主机不可达目标主机不存在!N网络不可达目标网络不存在!P协议不可达协议不支持!X管理禁止ACL/防火墙拒绝!S源路由失败源路由选项无效6.3 pathping概述定义pathping是Windows特有的网络诊断工具结合了tracert和ping的功能提供路径上每一跳的详细丢包率和延迟统计。核心优势能精准定位丢包发生在哪个节点还是哪条链路。工作流程两阶段路径发现阶段类似tracert发现从源到目标的每一跳统计阶段向每一跳发送大量探测包默认100个统计丢包率和延迟语法pathping [-n] [-h 最大跳数] [-q 查询数] [-p 间隔] [-w 超时] [-4] [-6] 目标选项含义默认值示例-n不解析IP为域名解析pathping -n 8.8.8.8-h 跳数最大跳数30pathping -h 20 8.8.8.8-q 数量每跳的查询数量100pathping -q 50 8.8.8.8-p 毫秒两次查询间隔250mspathping -p 100 8.8.8.8-w 毫秒每次回复超时3000mspathping -w 2000 8.8.8.8pathping输出6.3 常见故障排查现象可能原因解决方法ping不通但其他正常目标禁ping用telnet或curl测试端口第一个ping丢包ARP解析正常现象ping延迟高网络拥塞或距离远用traceroute定位瓶颈部分跳显示* * *路由器不响应ICMP正常继续观察后续跳超时后收到目标不可达路由问题或目标不存在检查路由表和ARP七、总结与延伸7.1 ICMP的核心价值让不可靠的IP协议变得可诊断提供了网络运维最重要的两个工具ping和traceroute是路径MTU发现、路由优化等机制的基础7.2 ICMP的局限性本身不可靠ICMP报文也可能丢失可以被攻击者利用洪水、隧道常被网络管理员过度限制反而影响正常功能7.3 延伸阅读RFC 792ICMP原始标准RFC 1812对ICMP的更新

更多文章