news 2026/8/25 8:01:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 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协议下的回环地址表示为::1IPv4环境中使用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_seq=0 ttl=64 time=0.080 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.093 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.074 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.079 ms 64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.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

实验结果表明,物理断网状态下仍可ping127.0.0.1

报文从应用层经传输层至网络层的处理流程,与外网ping操作一致。系统在网络层根据目标IP查询路由表,确定出接口网卡。目标IP为外网地址时,报文通过物理网卡发送;目标IP为回环地址时,报文转发至本地回环接口。

本地回环接口为虚拟网络接口,不具备物理网卡的发送队列等硬件结构。报文被推送至input_pkt_queue链表,该链表为系统内共享队列,存储发往本机的网络报文。报文入队后触发软中断,内核线程ksoftirqd响应中断,从链表中取出报文,沿数据链路层、网络层逐层上传至应用程序。

该传输路径全程不经过物理网卡,报文在本机协议栈内完成闭环传输,因此断网状态下仍可ping127.0.0.1

2. ICMP 协议

2.1 定义与功能

ICMP(Internet 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
  • 超时消息,类型为11
2.4.1 目标不可达消息(类型 3)

IP路由器无法将数据包转发至目标地址时,向源主机返回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 超时消息(类型 11)

IP数据包包含TTL(Time 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 操作系统协议栈识别类型为8ICMP回送请求报文后,自动组装类型为0ICMP回送应答报文并发送至主机 A,该过程由操作系统网络协议栈实现。

3.4 ping 本机地址与回环地址的差异

在 macOS 系统中执行ifconfig命令,输出如下:

$ ifconfig lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 ... en0: flags=8863<UP,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探测可确定适配传输路径的数据包最大长度。

工作机制如下:

  1. 源主机发送IP数据报,将IP首部分片禁止标志位设为1
  2. 传输路径路由器对超出MTU的数据包执行丢弃操作,返回携带链路MTU信息的ICMP不可达报文
  3. 源主机依据报文信息逐步减小数据包尺寸,确定适配目标路径的MTU数值

5. 127.0.0.1、localhost 与 0.0.0.0 的差异

在服务部署场景中,访问127.0.0.1:80localhost:800.0.0.0:80与本机IP地址均可能连通服务,但三者在协议定义上存在区别。

localhost属于域名,而非IP地址,其默认解析结果为127.0.0.1,解析规则可在/etc/hosts文件中修改。默认配置下,localhost127.0.0.1的访问行为一致。

0.0.0.0IPv4协议中的无效目标地址,执行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 host

0.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后,运维人员无法通过最快捷的方式确认链路状态,需依次排查物理层、数据链路层、网络层配置,显著延长MTTR(Mean Time To Repair)。

6.2.2 影响监控系统的存活检测

大量监控平台(如 Zabbix、Nagios、Prometheus Blackbox Exporter)默认使用ICMP Ping作为主机存活探测手段。禁用Ping后,若未同步调整探测策略,将导致误告警或真实故障漏报。

6.2.3 与云原生及负载均衡环境冲突

主流云厂商(阿里云、腾讯云、AWSAzure)的负载均衡健康检查机制部分依赖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-scannmap -PR <IP>

6.4.3 HTTP / HTTPS 健康检查

针对提供Web服务的节点,直接发起HTTP GETHEAD请求,根据状态码(如 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 路由追踪与路径分析

使用traceroute(Linux,基于UDPICMP)或tracert(Windows,基于ICMP)结合TCP选项(tcptraceroute),可逐跳分析路径连通性,定位故障节点。

7. 结论

  1. 127.0.0.1IPv4回环地址,localhost为默认解析至该地址的域名。
  2. ping回环地址与本机地址均通过虚拟回环接口传输报文,不经过物理网卡,断网状态下仍可正常通信。
  3. 服务监听0.0.0.0可响应本机所有IPv4地址的连接请求。
  4. ping基于ICMP回送请求(类型8)与回送应答(类型0)报文实现网络连通性检测。
  5. traceroute依托ICMP差错报文实现路径路由追踪与路径MTU探测。
  6. 禁用Ping是安全与便利之间的权衡,需结合网络位置、监控依赖与排障成本综合评估。

参考文献

[1] 竹下隆史. 图解 TCP/IP. 人民邮电出版社.
[2] 刘超. 趣谈网络协议. 电子工业出版社.


Reference

  • 断网了,还能ping通 127.0.0.1 吗?小白 yes的练级攻略 2023-12-20 10:50 浙江
    https://mp.weixin.qq.com/s/w1jJzU8yx109DMnLdMcpPw

  • ping 的原理_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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 8:00:05

《妃梦千年》第01章-梦回大唐

第1章 梦回大唐 林清婉睁开眼&#xff0c;第一眼看见的不是医院天花板&#xff0c;是绣着缠枝莲的床帐。 “娘娘醒了&#xff1f;” 一张陌生的脸凑过来&#xff0c;梳着双鬟。林清婉还没来得及说话&#xff0c;那人已经转身往外跑&#xff1a;“小翠姑娘&#xff01;娘娘醒了&…

作者头像 李华
网站建设 2026/8/25 7:57:18

什么是超链接?底层原理是什么?

你知道我们平时看书的时候&#xff0c;如果想要了解更多的内容&#xff0c;通常需要翻到其他的页面或者查找其他的书籍&#xff0c;对吧&#xff1f;但是在互联网上&#xff0c;我们有一种特殊的方式可以让我们轻松地跳转到其他网页或者网站&#xff0c;那就是“超链接”。超链…

作者头像 李华
网站建设 2026/8/25 7:54:28

机器视觉(九):图像配准

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

作者头像 李华
网站建设 2026/8/25 7:51:56

主流NewSQL数据库深度解析:从架构原理到选型实践指南

1. 项目概述&#xff1a;为什么我们需要NewSQL&#xff1f;如果你在过去十年里深度参与过任何有一定规模的互联网或企业级应用开发&#xff0c;大概率对数据库的“甜蜜烦恼”深有体会。早期&#xff0c;一个MySQL或PostgreSQL单实例就能扛起所有业务&#xff0c;但随着用户量、…

作者头像 李华
网站建设 2026/8/25 7:50:47

机械臂速成小指南(十一):坐标系的标准命名

&#x1f468;‍&#x1f3eb;&#x1f970;&#x1f973;需要机械臂相关资源的同学可以在我的CSDN主页中寻找哦&#x1f916;&#x1f63d;&#x1f984; 指南目录&#x1f4d6;&#xff1a; &#x1f389;&#x1f389;机械臂速成小指南&#xff08;零点五&#xff09;&…

作者头像 李华