在一个典型的网络架构中,客户端(Client,假设IP为1.1.1.1)通过一个可能包含多跳设备的网络(network)访问服务器(Server,假设IP为2.2.2.2)。当客户端收到一个源IP(ip.src)为2.2.2.2的TCP RST报文时,是否就能断定是服务器主动发起了连接重置?
答案是:有可能,但绝非100%肯定。中间的“network”环节是一个黑盒,其中可能部署了多种网络设备,例如:
- 用户侧的上网行为管理设备
- 运营商或企业网络的防火墙
- 服务端的Web应用防火墙(WAF)等
上述任何一台设备都有可能代理、拦截甚至“冒用”服务器的IP地址来回复TCP RST报文,从而中断连接。因此,仅凭源IP地址判断RST来源是不可靠的。
TTL:追踪报文来源的关键线索
要拨开迷雾,我们需要借助IP报文头中的一个基础字段:TTL(Time To Live,生存时间)。它的核心作用是为IP数据包的“生命”设定一个上限,其价值主要体现在:
- 限制传播范围:每个数据包在发出时都有一个初始TTL值。每经过一个路由器(即一跳),TTL值就会减1。当TTL值降为0时,该数据包将被丢弃,从而防止数据包在网络中无限循环。
- 诊断网络路径:TTL值的变化为网络诊断提供了关键信息。通过对比发送时的初始TTL和接收时的剩余TTL,我们可以推断出数据包经过的跳数,进而辅助判断报文的真实来源。
不同操作系统设定的初始TTL值有其常见规律,了解这一点是分析的基础:
| 操作系统/设备类型 |
常见初始TTL值 |
| Windows |
128 或 255 |
| Unix/Linux |
64 或 255 |
| 网络设备(如路由器、防火墙) |
通常为 255,但也可能为其他值(如128) |
实战案例:AWS NLB访问异常排查
我们通过一个真实的客户案例来演示如何运用TTL进行溯源。客户反馈的现象是:
- 客户端直接访问AWS网络负载均衡器(NLB)的IP
161.2.3.4,业务访问正常。
- 客户端通过该NLB的DNS域名(如
http://ec2-161-2-3-4.cn-northwest-1.compute.amazonaws.com.cn:8080/...)访问时失败,且抓包显示收到了来自161.2.3.4的TCP RST。
以下是使用 tshark 工具分析抓包文件的关键过程,我们特别关注ip.ttl字段:
luke:packets-capture$ tshark -r abc-client-TTL.pcapng -Y “frame.number”... -T fileds -e ip.ttl...
# 下方为简化的关键报文序列,第四列为TTL值
3701 10.1.2.3 161.2.3.4 128 57300 → 8080 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM=1
3717 161.2.3.4 10.1.2.3 235 8080 → 57300 [SYN, ACK] Seq=0 Ack=1 Win=62727 Len=0 MSS=1380 SACK_PERM=1 WS=128
...
9652 161.2.3.4 10.1.2.3 235 HTTP/1.1 200 (image/x-icon) # 正常响应,TTL=235
12163 161.2.3.4 10.1.2.3 124 HTTP/1.0 302 Moved Temporarily (text/html) # 异常302重定向,TTL=124
12164 161.2.3.4 10.1.2.3 124 8080 → 57300 [RST, ACK] Seq=3606189 Ack=7375 Win=1052672 Len=0 # 紧随其后的RST,TTL=124
分析过程:
- 建立基线:客户端初始TTL为128。服务器(NLB)返回的正常报文(如SYN-ACK、HTTP 200)TTL为235。假设服务器初始TTL为255,那么从服务器到客户端经过了
255 - 235 = 20 跳网络设备。
- 发现异常:报文
12163(HTTP 302重定向)和12164(TCP RST)虽然源IP也是161.2.3.4,但它们的TTL值却是124。这与正常服务器报文的TTL(235)相差甚远。
- 得出结论:TTL值为124的报文,其初始发出点距离客户端更近。计算跳数差:
235 - 124 = 111跳,这显然不合理,更合理的解释是它们来自一个初始TTL可能为128的设备,当前剩余124,即距离客户端大约4跳的位置,而非远在20跳外的真实服务器。
- 定位源头:基于此线索,运维人员在客户端执行
tracert 161.2.3.4,果然发现第四跳是客户内部的一台上网行为管理设备。正是这台设备伪造了302重定向和随后的TCP RST报文。
- 解决方案:根本原因是该上网行为管理设备策略配置疏漏,未放行对特定域名(
amazonaws.com.cn)的访问。添加规则 match dns amazonaws.com.cn permit 后问题解决。
高效分析工具:Wireshark 中的 TTL 视图
在图形化工具Wireshark中,我们可以更方便地观察TTL。为了在报文列表栏直接显示TTL,可以进行如下设置:
- 点击菜单栏
编辑 -> 首选项。
- 在左侧选择
外观 -> 列。
- 点击
+号添加新列,标题设为“TTL”,类型选择“自定义”,字段输入“ip.ttl”。

设置完成后,效果如下,TTL值一目了然,极大提升了网络协议的分析效率:


通过这个案例可以看出,在复杂的云原生或企业网络环境中,结合TTL值进行网络报文分析,是精准定位类似连接重置(RST)、劫持、拦截等问题的有效手段。
|