解析 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 秒的超时。
实测 Syslog:PRI = 设施 × 8 + 级别(36 = auth × 8 + warning);RFC 5424 把时间戳 / 主机名 / 结构化数据放进格式;UDP 在 10% / 30% 丢包下收到 456 / 358 条(TCP 全收到);突发 20000 条时接收端丢 79.7%;日志可被轻易伪造。
手工收发 MQTT 3.1.1 字节:CONNECT 25 字节、CONNACK 4 字节、PUBLISH 固定开销 4 字节加每次都带的主题名;剩余长度的变长编码;QoS 1 的重发会让代理收到同一个包标识两次;QoS 2 要 4 个包;保活 2 秒在 3.11 秒后触发遗嘱;保留消息让晚到的订阅者立刻拿到最新状态。