1.1 ping和tracert

实验概述

本实验通过 pingtracert 两个工具,验证 ICMP 协议在网络连通性检测中的核心作用。

一、Ping 实验

ping 是基于 ICMP(Internet Control Message Protocol,互联网控制报文协议) 实现的网络诊断工具。工作时,ping 向目标主机发送 ICMP Echo 请求报文,若目标主机在线且允许 ICMP,则返回 ICMP Echo 回复报文,借此判断两台主机间的 IP 层连通性。

ping命令首先会构建一个固定格式的ICMP请求数据包echo request,发给远端计算机 ;

远端计算机收到后,构造一个ICMP应答包echo reply,发送回本机;

本机收到应答包后,即可判断出目的主机是否开机,并根据发送包和应答包携带的时间信息计算出网络延迟。

Pasted image 20260527185747

1.1 TTL工作原理

TTL(Time To Live) 是 IP 报文头部字段,在现代网络里代表路由跳数—— 数据包每经过一台路由器转发,TTL 自动 -1;TTL 减到 0 时,设备直接丢弃报文,防止路由环路。

  1. 当路由器收到数据包,转发前先把 TTL -1
  2. 若递减后 TTL = 0:路由器不再转发数据包,直接丢弃,并向源主机返回一条 ICMP 超时(Time Exceeded) 回应包;
  3. 若递减后 TTL > 0:正常转发给下一跳设备。

你在 Ping 结果里看到的 TTL=xx不是你本机发出去的请求包剩余 TTL,而是目标服务器回传给你的应答包,到达本机时剩下的 TTL

步骤 1:本机发送请求包

你的 Windows 电脑构造 ICMP 请求包,Windows 系统默认出站初始 TTL = 128

数据包一路路由转发,每过一跳 TTL 减 1,最终到达目标节点。

这一段的剩余 TTL 不会展示在 Ping 结果中。

步骤 2:目标主机生成应答包(最关键环节)

目标服务器 / CDN 节点收到请求后,会新建一个全新的 IP+ICMP 应答包不会沿用原请求包的 TTL

这个新应答包的初始 TTL,由目标设备的操作系统决定,这是判断对方系统的依据:

  • Linux / 云服务器 / CDN 节点:默认初始 TTL = 64(互联网绝大多数网站、CDN 都是这个值)
  • Windows 服务器:默认初始 TTL = 128
  • 交换机、防火墙等网络设备:默认初始 TTL = 255

步骤 3:应答包回传 + TTL 递减

应答包从目标节点发回你的电脑,沿途每经过一台路由器,TTL 继续逐跳 -1

步骤 4:本机展示最终 TTL

最终你看到的 TTL,就是这个回程应答包经过多跳转发后,剩余的数值

1.2 使用域名测试

操作步骤:按下 Win + R,输入 cmd 打开命令提示符窗口。

Pasted image 20260425080629

关键知识点:

  • ping 命令不直接识别域名,首先通过 DNS 解析 将域名 www.baidu.com 转换为公网 IP 183.2.172.177
  • www.a.shifen.com 是百度的真实域名,www.baidu.com 是其 CNAME 别名,DNS 解析后会显示实际主机名。
  • 「32 字节的数据」:Windows ping 默认发送 32 字节 填充数据,用于完整性校验。

返回字段解析:

字段 含义
来自 183.2.172.177 的回复 目标主机收到 ICMP Echo 请求并成功响应,说明 IP 层连通正常
字节=32 响应报文数据部分与发送数据一致,验证传输完整性
时间=49ms 往返时间(RTT):请求发出到收到响应的时间,反映网络延迟
TTL=47 生存时间(Time To Live):每经一个路由器减 1,防止环路。本例初始 TTL=64(Linux 默认),经过 64-47=17 个路由到达本地

1.2 使用公网服务器测试

Pasted image 20260425080945

注意:远端服务器默认关闭 ICMP 响应,原因如下:

  • 防 DDoS:ICMP 洪水攻击可耗尽带宽;
  • 隐藏存活:禁 ICMP 后攻击者无法通过 ping 探测服务器在线状态。
CleanShot 2026-04-28 at 20.45.04@2x

二、Tracert 实验

tracert(Windows,Linux 下为 traceroute)利用 ICMP + TTL 递减机制,探测数据包从源主机到目标主机所经历的完整路由路径(各跃点)。

1.1 tracert 原理介绍

步骤 1:发送 TTL=1 的包,拿到第 1 跳路由器 IP

Tracert 程序首先发送 TTL 为 1 的请求数据包,该包经过第一个路由设备后 TTL 减 1 为 0,第一个路由设备就将给源主机发回 “ICMP 已超时” 的消息;源主机的 tracert 命令通过该消息中的 IP 信息就获得了第一个路由设备的 IP。

通俗拆解

  • 你构造一个「只能走 1 跳」的 ICMP 包(TTL=1),发给目标主机;
  • 第 1 跳路由器(比如你家的小米路由器 192.168.31.1)收到包,先把 TTL 减 1 → 变成 0;
  • 路由器一看 TTL=0:“这个包不能再转发了,丢了吧!”,同时给你发一条 「ICMP 超时包」,包里写着路由器自己的 IP 地址;
  • tracert 收到这个超时包,立刻记下:第 1 跳是 192.168.31.1
Pasted image 20260527191959

步骤 2:TTL 依次 + 1,依次拿到第 2、3、4… 跳 IP

在随后的每次发送过程将 TTL 依次递增 1,直到目标响应或 TTL 达到最大值,从而确定从源主机到目的主机中间的路由。

通俗拆解

  • 第 2 轮:发送 TTL=2 的包 → 第 1 跳 TTL 减 1 变 1,转发给第 2 跳;第 2 跳收到后 TTL 减 1 变 0,发回超时包 → 你拿到第 2 跳 IP(比如你输出里的 172.16.0.1);
  • 第 3 轮:发送 TTL=3 的包 → 走到第 3 跳超时,拿到第 3 跳 IP;
  • …… 以此类推,TTL 每 + 1,就能 “逼出” 下一跳路由器的超时包,拿到它的 IP。

步骤 3:停止探测条件

场景 1:包成功到达目标主机:

当 TTL 足够大时(比如你输出里的 TTL=8),包一路转发,TTL 还没减到 0 就到达了目标主机(117.177.133.107)。

目标主机收到 ICMP 请求包后,不会发「超时包」,而是直接回一个 「ICMP 应答包」(和 ping 的回包一样)。

tracert 收到这个应答包,立刻知道:“到终点了!不用再发了”,停止探测。

场景 2:TTL 达到最大值(比如 Windows 默认 30 跳)

如果 TTL 加到 30 还没到目标,说明要么目标不存在,要么出现了路由环路(包在几个路由器之间死循环),tracert 会强制停止,显示 “跟踪完成”。

1.2 ping 和 tracert TTL的区别

  • ping 靠应答包 TTL 算出的:回程(目标 CDN → 本机)跳数
  • tracert 主动探测的:去程(本机 → 目标 CDN)跳数

互联网骨干网、城域网普遍存在 非对称路由

数据包去的时候走一批路由器、线路、网关;回来的时候走另一批设备和线路,来回路径不一样,跳数自然不同。

ping 112.45.115.221  # 确认目标IP(豆包CDN节点)
tracert 112.45.115.221  # 探测到该IP的去程路径

1.2使用域名测试

Pasted image 20260425081807

工作原理:

  1. TTL=1 探测:发送 TTL=1 的 ICMP Echo 请求,第一跳路由器将 TTL 减为 0 后丢弃数据包,返回 ICMP 超时报文(类型 11),由此获知第一跳 IP 和延迟;
  2. TTL 递增探测:逐步增加 TTL 值,逐跳探测直至到达目标;
  3. 到达目标:目标主机返回 ICMP Echo 回复(类型 0),追踪结束。
Pasted image 20260425082135 Pasted image 20260425082200 Pasted image 20260425082226

2.1 使用公网服务器测试

IP = 117.72.201.198

Pasted image 20260425082916 Pasted image 20260425083004

最终成功追踪到目标服务器(京东云)的数据中心路径。

三、简单扩展

tracert 只是最基础的工具,VPS 运维中更常用的工具,比如traceroute(Linux)、mtrtcptrace,底层都是TTL 递增 + 触发 ICMP/TCP 超时,只是包的类型和统计方式不同:

工具 包类型 核心优势 原理和tracert的关系
tracert(Windows) ICMP Echo Request 系统自带,无需额外安装 完全一致,用 ICMP 包触发超时
traceroute(Linux) 默认 UDP 包,也支持 ICMP/TCP 模式 跨平台通用,可切换包类型 逻辑一致,只是用 UDP 包触发超时
mtr(Linux/Windows) ICMP/UDP 包 持续探测,统计每一跳的丢包率、延迟,是 VPS 排查神器 核心逻辑和tracert一致,只是增加了持续发包和统计功能
tcptrace/tcptraceroute TCP SYN 包 绕过运营商 ICMP 拦截,直接追踪 TCP 端口路径 用 TCP 包触发超时,原理还是 TTL 递增
traceroute 223.87.27.250

223.87.27.250 成都的一个IP节点路由为例。

Pasted image 20260527201906
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com
Archive PDF预览 PPTX Obsidian