上一篇测量了Caddy新的默认后量子TLS握手,发现ClientHello从318字节增长到约1490字节,已经超过单个TCP段在常规路径上能承载的量。有读者提出了两点很实在的技术质疑:一位推演了为什么这应当强制产生两段拆分的精确字节计算,另一位问我是否真的在有丢包的真实连接上抓到过这个拆分,还是只从消息长度推断出来的。问得好。我没有。
于是我租了一台小型云主机,用真实客户端经真正的互联网连过去,一条有真实MTU受限跳数的外部路径,这正是Docker给不了我的。这次用的是DigitalOcean,主要因为那是我当时已经开着的账号,最小的droplet大约每小时0.006美元,任何其他厂商最便宜的虚拟机在这里也能做同样的事,重点不在那台具体主机。从这台真实外部服务器上做的第一次抓包,ClientHello依然显示为一个包。不是因为服务器做错了什么,而是因为一个我还没考虑到的Linux默认行为。
![]()
为什么用真实外部主机而不是另一个容器
早先的测试把Caddy和客户端作为两个容器跑在同一台机器的同一个Docker网桥上。这种配置对这类测量有一个已知的失效模式:通用分段卸载(GSO)允许发送侧把一个超大缓冲区交给虚拟接口,把真正的分段推迟到tcpdump永远看不到的地方,因为两端从未跨过一条真正受MTU约束的链路。在这种环境里抓包,即使真实受限路径会拆分,抓到的也可能只是一个包。解决办法不是把测试做大,而是引入一个真实的物理跳:我的笔记本,经家庭网络,连到一台不与客户端共享内核的服务器。
第一次真实路径抓包:GRO先动手了
在云主机上用Docker以--network host模式跑Caddy,让它绑定droplet的真实网卡,连接前就开始用tcpdump抓eth0,然后从我自己的机器发起连接,指定后量子混合组X25519MLKEM768。
抓到的结果是一个包,1490字节,而这条链路协商出的MSS是1460。在标准以太网路径上这不该出现,但它和Docker测试里那个假象一模一样,只是原因不同。
实际发生的是GRO,不是Docker
查一下网卡特性:tcp-segmentation-offload、generic-segmentation-offload、generic-receive-offload全部为on。
通用接收卸载(GRO)会把一串连续的入站TCP段重新拼成一个缓冲区,再交给内核网络栈,而标准抓包默认位于这个点之上。也就是说,我笔记本的真实网卡确实往线路上发出了两个以太帧,某个路由器确实把两个包送到了法兰克福,而droplet自己的内核在tcpdump看到之前就把它们悄悄缝回了一个。一条真实的跨互联网路径、一台真实的外部服务器,还不足以看到真实的分段数量。必须把重组关掉。
第二次抓包:两个真实分段
关掉卸载后,同样的客户端、同样的命令,结果变了:
- 第一个段:seq 1:1449,长度1448
- 第二个段:seq 1449:1491,长度42
1448加42正好是1490,总量没变,但这次是真的以两个包到达。两者间隔极短,tcpdump的微秒级时间戳显示它们几乎同时,但它们是两个独立分段,有各自独立的序列号区间。
作为对照,经典X25519的ClientHello用同样方式抓,无论卸载开还是关,始终是单个312字节的包。
拆分至此被真正确认:不是从长度字段推断出来的,也不是两个容器共享内核造成的假象,而是真实的两个包经真实互联网到达。前提是,你得知道要绕过自己网卡默认的重组行为去看。
这回答了和没回答什么
它确认了讨论中的前提:后量子ClientHello在真实路径上确实以两个TCP段穿越,而经典握手不会——这正是额外往返论证所依赖的事实。
它没有重复丢包实验本身。在这台在线云主机连接上没有注入丢包,那意味着测试中途故意弄断自己到同一台机器的SSH会话,没有正当理由。丢包导致的停顿——第二个段丢失、没有快速重传、退化为超时——是此前在本地链路上用tc netem单独测过的同一套机制,现在配上了一个证明:两段式前提是真实的,不是本地网络的产物。
自己动手复现
任何厂商最便宜的虚拟机都能做这件事,唯一要求是一台拥有独立内核的真实外部主机。下面用的是DigitalOcean的doctl,因为那是我用的,换成你自己厂商提供的任何CLI或控制台即可。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.