尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于 ICMP 的网络连通性探测机制 : ping 与 traceroute 工作流程

基于 ICMP 的网络连通性探测机制 : ping 与 traceroute 工作流程 注本文为 “网络连通性检测技术原理” 相关合辑。图片清晰度受引文原图所限。略作重排如有内容异常请看原文。网络连通性检测技术原理从 ping 到 ICMP 协议1. 回环地址1.1 IPv4 回环地址127.0.0.1属于IPv4地址。IPv4地址总长度为 32 位以 8 位为 1 个字节共划分为 4 个字节。以127开头的IPv4地址均为回环地址该类地址属于IPv4协议中的特殊地址由协议规范直接定义。127.0.0.1是回环地址集中的一个典型地址其取值在网络协议源码中存在固定定义/* Address to loopback in software to local host. */#defineINADDR_LOOPBACK0x7f000001/* 127.0.0.1 */IPv4地址空间为2 32 2^{32}232约为 40 亿。该地址空间规模无法满足全球网络设备接入需求因此推出IPv6协议。IPv6地址长度为 128 位地址空间约为10 38 10^{38}1038可满足大规模设备的地址分配需求。IPv4地址采用点分十进制格式每 8 位为一组组间以.分隔。IPv6地址以 16 位为一组组间以:分隔连续全 0 段可简写为::且单个IPv6地址中仅允许一次该简写形式。1.2 IPv6 回环地址IPv4协议下的回环地址为127.0.0.1IPv6协议下的回环地址表示为::1。IPv4环境中使用ping 127.0.0.1命令IPv6环境中对应使用ping6 ::1命令。1.3 回环地址的协议栈行为断开物理网络连接后在终端执行ping 127.0.0.1命令输出如下$ ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq0 ttl64 time0.080 ms 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.093 ms 64 bytes from 127.0.0.1: icmp_seq2 ttl64 time0.074 ms 64 bytes from 127.0.0.1: icmp_seq3 ttl64 time0.079 ms 64 bytes from 127.0.0.1: icmp_seq4 ttl64 time0.079 ms ^C --- 127.0.0.1 ping statistics --- 5 packets transmitted, 5 packets received, 0.0% packet loss round-trip min/avg/max/stddev 0.074/0.081/0.093/0.006 ms实验结果表明物理断网状态下仍可ping通127.0.0.1。报文从应用层经传输层至网络层的处理流程与外网ping操作一致。系统在网络层根据目标IP查询路由表确定出接口网卡。目标IP为外网地址时报文通过物理网卡发送目标IP为回环地址时报文转发至本地回环接口。本地回环接口为虚拟网络接口不具备物理网卡的发送队列等硬件结构。报文被推送至input_pkt_queue链表该链表为系统内共享队列存储发往本机的网络报文。报文入队后触发软中断内核线程ksoftirqd响应中断从链表中取出报文沿数据链路层、网络层逐层上传至应用程序。该传输路径全程不经过物理网卡报文在本机协议栈内完成闭环传输因此断网状态下仍可ping通127.0.0.1。2. ICMP 协议2.1 定义与功能ICMPInternet Control Message Protocol互联网控制报文协议是IP协议的辅助协议工作于网络层。网络数据包在传输过程中会出现各类异常网络节点需通过报文反馈异常信息以调整传输策略该过程由ICMP协议承载。ICMP可实现IP数据包送达状态确认、IP数据包丢弃原因上报、网络配置优化信息传递等功能。IP通信过程中若IP数据包无法抵达目标地址具体异常原因由ICMP协议向源节点反馈。主机 A 向主机 B 发送数据包时若路由器 2 无法定位主机 B则路由器 2 向主机 A 发送ICMP目标不可达数据包反馈传输失败信息。ICMP通知报文依托IP协议传输路由器 2 返回的ICMP数据包经路由转发至主机 A主机 A 解析ICMP首部与数据域后获取异常原因。2.2 ICMP 报文格式ICMP报文封装于IP数据包内部工作于网络层为IP协议提供辅助功能。ICMP头部的类型字段可分为两类查询报文类型用于网络状态诊断差错报文类型用于传输异常原因通知2.3 查询报文类型2.3.1 回送消息类型 0 与类型 8回送消息用于主机或路由器间验证数据包的送达状态ping命令基于该类消息实现。通信节点可发送ICMP回送请求报文ICMP Echo Request Message类型8并接收对端返回的ICMP回送应答报文ICMP Echo Reply Message类型0。该类报文在标准ICMP结构基础上增设两类字段标识符用于区分不同应用程序发送的ICMP数据包可采用进程PID作为标识序号初始值为0每发送一次新的回送请求则自增1可用于判断数据包丢失情况选项数据域中ping会记录报文发送时间用于计算数据包往返时间。2.4 差错报文类型常用ICMP差错报文类型如下目标不可达消息类型为3源抑制消息类型为4重定向消息类型为5超时消息类型为112.4.1 目标不可达消息类型 3IP路由器无法将数据包转发至目标地址时向源主机返回ICMP目标不可达报文异常原因记录于ICMP头部的代码字段。常见目标不可达代码如下a. 网络不可达代码 0路由器路由表中无匹配目标IP网络号的条目时向源主机反馈网络不可达信息。无类别域间路由普及后该类异常反馈场景减少。b. 主机不可达代码 1路由表中无目标主机信息或目标主机未接入网络时向源主机反馈主机不可达信息。c. 协议不可达代码 2源主机采用指定协议访问目标主机目标主机防火墙禁止该协议通信时向源主机反馈协议不可达信息。d. 端口不可达代码 3源主机向目标主机指定端口发起通信目标主机无进程监听该端口时向源主机反馈端口不可达信息。e. 需要分片但设置不分片位代码 4源主机发送IP数据报时将IP首部的分片禁止标志位设为1。传输路径中路由器遇到超出MTU的数据包时不执行分片操作直接丢弃该数据包并向源主机反馈对应不可达信息。2.4.2 源抑制消息类型 4低速广域线路场景下路由器出现网络拥塞时可向源主机发送ICMP源抑制消息。源主机接收该消息后调整IP数据包发送间隔缓解网络拥塞。该类报文易造成网络通信资源分配不均实际场景中较少使用。2.4.3 重定向消息类型 5路由器检测到源主机采用非最优路径传输数据时向源主机返回ICMP重定向报文携带最优路由信息。源主机后续通信可依据该信息调整传输路径。2.4.4 超时消息类型 11IP数据包包含TTLTime To Live生存周期字段数据包每经过一台路由器该字段值减1。当字段值降至0时数据包被路由器丢弃。路由器丢弃数据包后向源主机发送ICMP超时消息通知数据包已被丢弃。TTL机制可避免路由环路导致数据包在网络中无限转发。3. ping 命令原理3.1 概述ping属于应用层工具与常规应用程序处于同一网络分层。ping的功能为向目标主机发送探测报文检测目标主机的网络可达性。ping工具的底层依托网络层ICMP协议实现报文传输。ICMP协议与IP协议同属网络层协议ICMP报文需封装在IP数据包中完成传输。ping操作可简化理解为向目标IP地址发送探测报文报文传输遵循网络协议栈的封装规则。3.2 ping 与 TCP 数据传输的差异常规网络数据传输多采用TCP协议其与ping命令的实现流程存在差异。ping与常规应用程序均归属于应用层。以基于TCP协议的通信软件为例数据传输需依托socket实现。TCP场景下socket的创建形式为socket(AF_INET,SOCK_STREAM,0);其中AF_INET标识采用IPv4地址与端口组合的寻址方式SOCK_STREAM标识使用传输层面向字节流的TCP协议。socket创建完成后应用程序通过sendto接口写入数据进程从用户态切换至内核态调用sock_sendmsg函数。数据依次经过传输层添加TCP头部、网络层添加IP头部、数据链路层添加MAC头部后进入网卡发送队列经由物理网卡发送。ping命令的socket创建形式为socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);SOCK_RAW为原始套接字工作于网络层适用于ICMP报文的构造与发送。ping报文进入内核态后同样调用sock_sendmsg函数在网络层添加ICMP头部与IP头部数据链路层添加MAC头部后发送。二者在内核态的报文处理流程相近。网络故障排查时优先使用ping命令原因在于ping可模拟应用程序的数据发送路径检测网络层的连通状态。3.3 ping 工作流程以同一子网内主机 A 执行ping主机 B 为例流程如下3.3.1 数据包构建与发送源主机构建ICMP回送请求数据包字段如下类型字段回送请求报文赋值为8序号字段用于区分连续发送的数据包每发送一次自增1报文数据域记录发送时间用于计算往返时间RTT。ICMP数据包与目标地址192.168.1.2提交至IP层。IP层以192.168.1.2为目的地址本机IP为源地址协议字段设为1标识ICMP协议构建IP数据包。数据链路层依据ARP映射表获取目标MAC地址添加MAC头部后按照以太网传输规则发送数据帧。3.3.2 数据包接收与应答主机 B 接收数据帧后校验目的MAC地址匹配则接收并提取IP数据包经IP层解析后交付ICMP协议。主机 B 构建ICMP回送应答数据包类型字段设为0序号与接收的请求报文一致随后将报文发送至主机 A。源主机在预设时限内未接收ICMP应答报文判定目标主机不可达接收应答报文则判定目标主机可达。源主机通过当前时间与报文发送时间的差值计算数据包传输时延。跨网段通信场景下数据包需经网关与路由器转发路由选择与MAC地址会随传输链路变化ICMP报文结构不受该过程影响。ping程序使用ICMP回送请求类型8与回送应答类型0两类报文。主机 B 操作系统协议栈识别类型为8的ICMP回送请求报文后自动组装类型为0的ICMP回送应答报文并发送至主机 A该过程由操作系统网络协议栈实现。3.4 ping 本机地址与回环地址的差异在 macOS 系统中执行ifconfig命令输出如下$ ifconfig lo0: flags8049UP,LOOPBACK,RUNNING,MULTICAST mtu 16384 inet 127.0.0.1 netmask 0xff000000 ... en0: flags8863UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST mtu 1500 inet 192.168.31.6 netmask 0xffffff00 broadcast 192.168.31.255 ...lo0为本地回环接口对应地址为127.0.0.1en0为物理网卡接口对应地址192.168.31.6为本机局域网地址。通过抓包分析可知ping本机IP地址与ping回环地址的报文均通过lo0虚拟接口传输不进入外部网络。因此两种操作的报文传输路径一致不存在功能差异。4. traceroute 原理traceroute为 UNIX 与 macOS 系统命令Windows 系统对应命令为tracert该工具依托ICMP差错报文类型实现功能。4.1 路径路由追踪traceroute通过递增TTL数值发送数据包获取传输路径上的路由器信息。命令格式示例traceroute192.168.1.100工作机制为从TTL 1开始依次递增发送UDP数据包接收ICMP超时报文。TTL设为1时数据包被第一跳路由器丢弃返回超时报文TTL设为2时数据包被第二跳路由器丢弃返回超时报文重复上述过程直至数据包抵达目标主机部分路由器不反馈ICMP报文此类场景下无法获取完整路径路由信息。traceroute发送UDP数据包时采用大于3000的非常规端口作为目标端口。目标主机接收该UDP数据包后返回ICMP端口不可达报文标识数据包已抵达目标主机。4.2 路径 MTU 确定traceroute可通过设置不分片标志位实现路径MTU探测。以太网链路MTU通常为1500字节非以太网链路MTU数值存在差异路径MTU探测可确定适配传输路径的数据包最大长度。工作机制如下源主机发送IP数据报将IP首部分片禁止标志位设为1传输路径路由器对超出MTU的数据包执行丢弃操作返回携带链路MTU信息的ICMP不可达报文源主机依据报文信息逐步减小数据包尺寸确定适配目标路径的MTU数值5. 127.0.0.1、localhost 与 0.0.0.0 的差异在服务部署场景中访问127.0.0.1:80、localhost:80、0.0.0.0:80与本机IP地址均可能连通服务但三者在协议定义上存在区别。localhost属于域名而非IP地址其默认解析结果为127.0.0.1解析规则可在/etc/hosts文件中修改。默认配置下localhost与127.0.0.1的访问行为一致。0.0.0.0为IPv4协议中的无效目标地址执行ping 0.0.0.0会返回路由不可达错误$ ping 0.0.0.0 PING 0.0.0.0 (0.0.0.0): 56 data bytes ping: sendto: No route to host ping: sendto: No route to host0.0.0.0在服务监听场景中存在应用其宏定义如下/* Address to accept any incoming messages. */#defineINADDR_ANY((unsignedlongint)0x00000000)/* 0.0.0.0 */服务监听0.0.0.0时可接收本机所有IPv4地址的连接请求。客户端发起连接时不可使用0.0.0.0作为目标地址需指定具体服务IP。6. 禁用 ICMP Echo Request 的考量6.1 禁用动机6.1.1 降低网络暴露面抵御自动化扫描攻击者在实施定向攻击前先对目标网段进行主机存活扫描。Ping扫描ICMP Sweep因实现简单、开销低是常用的初筛手段。若目标设备丢弃ICMP Echo Request自动化扫描脚本将误判该IP地址无活跃主机从而跳过后续端口扫描与漏洞探测。禁用Ping无法对抗高阶攻击者。具备一定经验的攻击者可采用TCP SYN扫描、ARP探测、协议栈指纹分析等手段绕过该限制。但在实际场景中禁用Ping可有效过滤大量脚本发起的批量自动化扫描降低被随机选中的概率。因此多数企业安全基线规范要求公网暴露设备禁用Ping。6.1.2 防御 ICMP 洪水攻击ICMP协议无连接、无状态无需像TCP那样执行三次握手。攻击者利用该特性伪造大量源IP地址向目标服务器发送ICMP Echo Request。目标服务器对每个请求均返回ICMP Echo Reply导致上行带宽与CPU资源被无意义流量耗尽形成ICMP Flood属于DDoS攻击的一种常见形态。虽然现代防火墙、流量清洗设备与云厂商DDoS防护服务已能应对此类攻击但禁用Ping仍是最直接、零成本的缓解措施——服务器不生成Echo Reply攻击者即无法通过该协议消耗目标资源。在安全意识较强的场景下减少对外暴露的协议类型遵循最小权限原则关闭非必要服务仍具有现实意义。6.2 禁用弊端6.2.1 增加故障排查复杂度Ping是网络连通性诊断的基础工具。禁用Ping后运维人员无法通过最快捷的方式确认链路状态需依次排查物理层、数据链路层、网络层配置显著延长MTTRMean Time To Repair。6.2.2 影响监控系统的存活检测大量监控平台如 Zabbix、Nagios、Prometheus Blackbox Exporter默认使用ICMP Ping作为主机存活探测手段。禁用Ping后若未同步调整探测策略将导致误告警或真实故障漏报。6.2.3 与云原生及负载均衡环境冲突主流云厂商阿里云、腾讯云、AWS、Azure的负载均衡健康检查机制部分依赖ICMP。若云服务器禁用Ping可能导致健康检查失败触发流量摘除直接影响业务可用性。容器编排平台如Kubernetes的部分CNI插件与健康检查探针也可能受到波及。6.3 场景化决策建议禁用Ping并非绝对正确或错误应结合网络位置、安全需求与运维成本综合判断场景建议理由公网暴露设备边界防火墙外侧、公网服务器禁用缩小攻击暴露面过滤自动化扫描内网基础设施内网服务器、接入/汇聚/三层交换机不禁用内网环境相对可信Ping是最高效的排障工具云服务器 / 容器实例遵循厂商建议谨慎禁用云厂商健康检查与监控可能依赖ICMP需提前评估影响高安全隔离区DMZ、生产网关键节点禁用并配合替代探测方案安全优先级高于排障便利性需通过替代手段保障可观测性安全策略不应以牺牲可维护性为代价。若在内网全面禁用Ping往往导致故障排查效率骤降最终因业务压力被迫回退。6.4 不依赖 Ping 的主机存活检测方法当ICMP被禁用时可采用以下替代方案确认主机在线状态6.4.1 TCP 端口探测向目标主机的常用服务端口如 22/SSH、80/HTTP、443/HTTPS、3389/RDP发送TCP SYN包。若收到SYN-ACK则表明主机在线且对应服务存活。工具nc -zv IP Port、nmap -PS IP、telnet IP Port。6.4.2 ARP 探测限于同一二层域在局域网内可通过ARP请求探测目标MAC地址。若收到ARP Reply则证明该IP对应的主机处于在线状态。工具arp-scan、nmap -PR IP。6.4.3 HTTP / HTTPS 健康检查针对提供Web服务的节点直接发起HTTP GET或HEAD请求根据状态码如 200 OK判断服务可用性。负载均衡器Nginx、HAProxy、云 CLB普遍采用此机制。6.4.4 SSH 协议探测对 Linux / Unix 服务器可尝试建立SSH连接。即使不进行身份认证协议握手阶段的服务端 banner 即可证明主机在线。工具ssh -v IP、nc IP 22。6.4.5 SNMP 轮询若设备开启SNMP服务可通过SNMP GET请求读取系统描述sysDescr、接口状态ifOperStatus等OID实现带内监控与存活确认。6.4.6 应用层心跳与探针在微服务与容器环境中由应用自身或Sidecar代理如 Envoy周期性上报心跳至注册中心Consul、Etcd、Nacos或通过Kubernetes Liveness / Readiness Probe进行健康判定完全不依赖网络层ICMP。6.4.7 路由追踪与路径分析使用tracerouteLinux基于UDP或ICMP或tracertWindows基于ICMP结合TCP选项tcptraceroute可逐跳分析路径连通性定位故障节点。7. 结论127.0.0.1为IPv4回环地址localhost为默认解析至该地址的域名。ping回环地址与本机地址均通过虚拟回环接口传输报文不经过物理网卡断网状态下仍可正常通信。服务监听0.0.0.0可响应本机所有IPv4地址的连接请求。ping基于ICMP回送请求类型8与回送应答类型0报文实现网络连通性检测。traceroute依托ICMP差错报文实现路径路由追踪与路径MTU探测。禁用Ping是安全与便利之间的权衡需结合网络位置、监控依赖与排障成本综合评估。参考文献[1] 竹下隆史. 图解 TCP/IP. 人民邮电出版社.[2] 刘超. 趣谈网络协议. 电子工业出版社.Reference断网了还能ping通 127.0.0.1 吗小白 yes的练级攻略 2023-12-20 10:50 浙江https://mp.weixin.qq.com/s/w1jJzU8yx109DMnLdMcpPwping 的原理_ping ip 测试的结果不同的原因-CSDN博客 小林coding 于 2020-03-25 22:43:00 发布https://blog.csdn.net/qq_34827674/article/details/105106807为什么这么多设备都禁 ping禁 ping 到底图什么小黑聊技术 2026年6月11日 12:00 广东https://mp.weixin.qq.com/s/Uf6C7s1P_w07wg22Um7lTQ
返回列表