有一个包没得到回应,看和正常的包ttl值不同,最后面那个回包ttl值也少了1,这是为什么,流量来的路径不一致?
(0)
好 — 先把现象拆开看,然后给出可能原因和排查步骤。
从你给的抓包片段能看到的关键点(按时间顺序):
报文 81:172.20.129.126 -> 220.181.111.232
,ICMP request,seq=258,ttl=125,标注“no response found!”(第一次发出)
报文 82:同一 src/dst/seq,再次 request,ttl=124(第二次重发)
报文 83/84:来自对端的 ICMP reply,ttl=51(reply for 82),接着又一个 reply ttl=50
两个直观问题:
为什么第一个 request(81)显示“no response found”而第二个(82)有 reply?
为什么 request/reply 的 TTL 在不同包上有差异(比如 reply 的 TTL 比之前少 1)?
下面是解释与可能原因:
抓包里显示的 TTL 是该包到达抓包点时剩余的 TTL(不是发送时的原始 TTL)。
每经过一个路由器(hop),TTL 就减 1。不同的路径/跳数会导致看到的剩余 TTL 不同。
操作系统对发出的 ICMP request 一般会用固定的初始 TTL(比如 Linux 常是 64,Windows 常是 128),但抓包看到的值取决于它从发端到抓包点经过了多少跳。
最常见的情况是第一次 request 超时或被丢弃/未匹配到 reply,于是主机进行了重发(报文 82)。实际可能原因包括:
第一次 request 的 reply 被延迟到超过工具的匹配窗口(所以工具标记“no response found”),但对端实际上后面才发/到达(例如网络抖动导致延迟)。
第一次 request 的 reply 被中间设备丢弃(防火墙、ACL、策略或ICMP速率限制等),第二次 request 恰好走了另一条路径或被允许通过,得到了 reply。
抓包点没有捕获到第一次 reply(例如 reply 走了不同链路/接口,没经过抓包设备)。
不同包的 TTL 不同,最常见的原因是路径不一致(asymmetric routing)或不同请求/回复走了不同路径。如果第一个 request 和第二个 request、或 reply 的返回路径在某一跳上不同,抓到的剩余 TTL 会相差 1(或更多)。
另一个常见原因是 负载均衡(ECMP、per-packet/per-flow):不同流或不同时间的包可能被路由器分流到不同的后端路径,导致跳数差异。
还可能是抓包点位置不同(例如你在中间设备上抓到 request,在另一接口抓到 reply),所以看到的“剩余 TTL”会不同。
所以你说的“流量来的路径不一致?”——很可能是的(不一致或路由/负载均衡导致跳数不同),这会解释 TTL 不同以及为什么第一次包没匹配到 reply。
traceroute / mtr 从源和目的分别跑,看两端到对方的跳数和路径是否一致(检测是否有不对称路由)。
在源/目的两端同时抓包(或在靠近双方的路由节点抓包),对比抓到的请求和回复,确认 reply 是否确实被发送以及走哪条路径到达抓包点。
检查中间设备策略:防火墙、ACL、ICMP 限速、NAT(有时 NAT 会用不同设备回复)等,确认是否有丢包/过滤发生。
检查是否有 ECMP/负载均衡:路由器是否启用了多条等价路由,且采用 per-packet 或 per-flow 分流。可以在设备上查看路由表 / ECMP 统计。
对比 IP ID / ICMP ID / seq:确保 reply 的 seq/id 与哪次 request 对应,确认是不是第一次 request 的 reply 被延迟到后面才到达(从抓包看好像 reply 对应 82)。
扩大抓包窗口 / 时间戳:避免“no response found”是因为匹配时间窗太短。
TTL 不同通常说明路由路径或 hop 数不同(很可能是不对称路由或负载均衡)。
“no response found” 很可能是第一次请求的 reply 未被抓到或被丢弃/延迟,第二次重发得到回复。
按上述排查(双端抓包 + traceroute + 检查中间策略/ECMP)可以快速定位是哪种情况。
(0)
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
时延高,但没丢包,看抓包是这样的