解析 example.com 的 X.509 证书链:叶子 90 天、两个中间 CA 10 与 15 年、根 24 年,三次签名验证都通过,根在本机 192 张的信任库里;叶子的 SAN 是 example.com 与 *.example.com;badssl.com 的过期 / 主机名 / 自签名 / 未知根报错码 10 / 62 / 18 / 19,被吊销的证书却握手成功;同一 IP 上 SNI 决定给哪张证书。
抓包确认 SNI 在 ClientHello 偏移 130 处是明文,其余 9 个包都找不到;Cloudflare 对 SNI 与 Host 不一致的请求一律 403;ALPN 服务器按自己的偏好选 h2,不匹配时握手成功但不选协议;example.com / cloudflare.com 的 HTTPS 记录没有 ech 参数。
实测 TLS 会话恢复:TLS 1.3 恢复握手耗时与完整握手几乎相同(169 对 175 ms)但服务器→客户端字节从 6563 降到 2800(不再发证书),ClientHello 多 267 字节的 pre_shared_key;TLS 1.2 恢复省一个往返(322 → 155 ms);同一 ticket 重复用 4 次都成功;example.com 的 Max Early Data 为 0,0-RTT 没有测成。
本机用临时生成的小 PKI 实测双向 TLS:有效证书握手 1.7 ms 成功,不带证书 / 不被信任的 CA / 已过期都在 TLS 1.3 里先 “握手成功” 再在第一次读时收到警报;CERT_OPTIONAL 允许不出示但不允许出示无效的;TLS 1.2 里客户端证书明文可见,TLS 1.3 里加密;双向比单向每次握手多约 0.15 ms(21%)。
抓包量 TLS 记录层:TLS 1.3 每条记录固定多 22 字节(5 头 + 1 类型 + 16 标签),TLS 1.2 GCM 多 29 字节;记录长度明文可见;100000 字节被切成 6 条 16401 字节的满记录和 1 条 1713 字节的尾巴,多 154 字节;40 次小写入开销 22.0%,一次大写入 0.5%。
解析 SSH 握手:github.com 与 gitlab.com 的 KEXINIT 第一个密钥交换都是后量子混合 mlkem768x25519-sha256,本机 paramiko 服务器则是更保守的 8 种;商定 aes128-ctr + hmac-sha2-256;认证在加密之后;主机密钥指纹变了必须拒绝(TOFU);100 ms 往返下握手 + 认证要约 7.1 个往返(709 ms)。
在 paramiko 上实现并实测 SSH 端口转发:-L 经 direct-tcpip 通道把数据送到目标并回来,线路上 432 字节里没有明文和目标端口;-R 用 tcpip-forward 把连接送回客户端;20 个并发转发连接全部正确;隧道比直连 12 ms 对 1 ms,2% 丢包下约慢 1.5 倍。
实测 SMTP:本机 aiosmtpd 上逐行看 EHLO 多行答复、信封(MAIL FROM / RCPT TO)与信件头不同(Bcc 原理、发件人可伪造)、点转义;550 / 450 / 500 / 503 / 552 各是什么;STARTTLS 升级前明文升级后密文;Gmail、QQ、163 的 25 端口都宣告 STARTTLS。
实测 FTP:控制连接是明文命令 + 三位数字答复;PASV 的 (127,0,0,1,37,8) 就是端口 9480;主动模式由服务器反向连客户端;抓包能读到 USER / PASS 明文;100 ms 往返下登录约 6.1 个往返,每个小文件约 4.1 个往返。
手工拼 48 字节 NTP 请求,解析真实服务器(ntp.aliyun.com 等)的 stratum、四个时间戳,用 offset / delay 公式算出本机偏移 4.73 ms;本机自写服务器验证公式误差只有 0.09 ms;返程多 80 ms 的不对称使 offset 偏差 −41.98 ms(约为不对称量的一半)。
手工收发 SOCKS5 的每个字节:问候 05 01 00,CONNECT 请求 05 01 00 01 + 地址 + 端口,握手共 2 个往返 25 字节;socks5 与 socks5h 的区别是代理收到 ATYP=1 的 IP 还是 ATYP=3 的域名;用户名密码认证与错误码 5 / 4 / 7 / 8;UDP ASSOCIATE 加 10 字节 UDP 头转发真实 DNS 查询(88 ms)。
自己实现 TFTP:5 种报文、服务器从新端口(TID)回答、不足 512 字节的 DATA 是结束标志;停等让 100 KB 在 50 ms 往返下需要 9.94 秒(10 KB/s),协商 blksize=1428 后降到 3.66 秒;丢一个包就多等一个 0.6 秒的超时。