一方说流量已经发出,另一方说它哪儿也没到。这两句话听起来像矛盾,实际上通常只是两种不同的测量。包计数、防火墙日志和抓包描述的是不同层次,不加标注地比较它们,得到的是嫌疑人而不是位置。把报告围绕一条流及其观测点来搭建。

没有上下文的计数器证明不了什么

网关报告发出的字节,并不证明对端收到了某个具体请求。计数器可能包含其他流、其他时刻或另一层封装。目的地什么也没看到时计数器仍在增长,也可能完全正确,因为它测量的是另一个问题。在比较任何东西之前,先固定流、时间窗口和层次。

来自不同层次的两个数字可能诚实地不一致。这种不一致是调查的起点,而不是结论。

为每个观测点打上标签

对每次观测,记录设备、接口或钩子、方向、时钟基准,以及它显示的是内层流量还是外层传输。主机上的防火墙日志和上联链路上的抓包是不同的证据,哪怕它们相隔只有几秒。标签才能让另一位工程师复现这个视角。

让时钟问题保持可见。时钟会漂移,在一台主机上取得的时间戳未必能直接与另一台比较。如果主机无法同步,就用两端的时间戳把这次尝试夹住,使用先后顺序而不是绝对数值。记下你测到的偏移量,而不是悄悄调整时间。

比较该点真正暴露的字段

在真正暴露地址和协议字段的点上进行比较。要把有意的转换考虑进去,因为改写过的元组仍然是同一次会话。对于获准进行的 IPv4 Echo 测试,RFC 792 的定义给出了标识符和序号字段,有助于把请求与应答对上。地址和时间窗口也要保留,因为单凭序号值并不是唯一标识。

tcpdump -ni eth0 -c 20 'host 198.51.100.20 and icmp'
tcpdump -ni tun0 -c 20 'host 10.90.0.5 and tcp port 443'

外层链路加密时,把对端会话及其方向单独记录。不应指望内层 Echo 标识符在外层以同样的形态保留下来。外层与内层的计数不能在未说明表示方式的情况下相互比较。

报告缺失的区间,而不是嫌疑人

缺失的观测是有限证据,并不能证明包在那台设备上被丢弃。过滤器、抓包位置、丢失的抓包数据以及错过这次尝试的时间窗口,都会造成不完整的记录。说清楚缺了什么、缺在哪两道边界之间。缺失也需要有效期,所以要说明你观测了多久、本来应该出现什么。

对方声称已转发流量,那是背景,永远不是观测。交付流、时间戳、带标签的边界和一个具体的窄例子。报告要短到让被请求的观测点突出。这样下一次请求就会变成精确测量,而不是指责。

把所请求的测量写进一句话。然后停止写作。

相关文章