知其然,知其所以然
网络协议原理 2026-10-15

X.509 证书与信任链:怎样验证一张证书

解析 example.com 的 X.509 证书链:叶子 90 天、两个中间 CA 10 与 15 年、根 24 年,三次签名验证都通过,根在本机 192 张的信任库里;叶子的 SAN 是 example.com 与 *.example.com;badssl.com 的过期 / 主机名 / 自签名 / 未知根报错码 10 / 62 / 18 / 19,被吊销的证书却握手成功;同一 IP 上 SNI 决定给哪张证书。

网络协议 TLS X.509 证书 信任链 吊销 主机名验证 SNI 真实验证 动画演示
网络协议原理 2026-10-15

SNI 与 ALPN:同一个 IP 上的多个站点与协议协商

抓包确认 SNI 在 ClientHello 偏移 130 处是明文,其余 9 个包都找不到;Cloudflare 对 SNI 与 Host 不一致的请求一律 403;ALPN 服务器按自己的偏好选 h2,不匹配时握手成功但不选协议;example.com / cloudflare.com 的 HTTPS 记录没有 ech 参数。

网络协议 TLS SNI ALPN ECH 域前置 真实验证 动画演示
网络协议原理 2026-10-15

会话恢复与 0-RTT:省掉握手的代价

实测 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 没有测成。

网络协议 TLS 会话恢复 PSK session ticket 0-RTT 真实验证 动画演示
网络协议原理 2026-10-15

双向 TLS:客户端证书认证

本机用临时生成的小 PKI 实测双向 TLS:有效证书握手 1.7 ms 成功,不带证书 / 不被信任的 CA / 已过期都在 TLS 1.3 里先 “握手成功” 再在第一次读时收到警报;CERT_OPTIONAL 允许不出示但不允许出示无效的;TLS 1.2 里客户端证书明文可见,TLS 1.3 里加密;双向比单向每次握手多约 0.15 ms(21%)。

网络协议 TLS mTLS 双向认证 客户端证书 CertificateRequest 真实验证 动画演示
网络协议原理 2026-10-15

TLS 记录层:分片、加密与填充

抓包量 TLS 记录层:TLS 1.3 每条记录固定多 22 字节(5 头 + 1 类型 + 16 标签),TLS 1.2 GCM 多 29 字节;记录长度明文可见;100000 字节被切成 6 条 16401 字节的满记录和 1 条 1713 字节的尾巴,多 154 字节;40 次小写入开销 22.0%,一次大写入 0.5%。

网络协议 TLS 记录层 AEAD 分片 开销 真实验证 动画演示
网络协议原理 2026-10-15

SSH 握手:版本交换、密钥交换与认证

解析 SSH 握手:github.com 与 gitlab.com 的 KEXINIT 第一个密钥交换都是后量子混合 mlkem768x25519-sha256,本机 paramiko 服务器则是更保守的 8 种;商定 aes128-ctr + hmac-sha2-256;认证在加密之后;主机密钥指纹变了必须拒绝(TOFU);100 ms 往返下握手 + 认证要约 7.1 个往返(709 ms)。

网络协议 SSH 密钥交换 KEXINIT 主机密钥 TOFU 认证 真实验证 动画演示
网络协议原理 2026-10-15

SSH 端口转发:本地、远程与动态转发

在 paramiko 上实现并实测 SSH 端口转发:-L 经 direct-tcpip 通道把数据送到目标并回来,线路上 432 字节里没有明文和目标端口;-R 用 tcpip-forward 把连接送回客户端;20 个并发转发连接全部正确;隧道比直连 12 ms 对 1 ms,2% 丢包下约慢 1.5 倍。

网络协议 SSH 端口转发 隧道 direct-tcpip tcpip-forward 真实验证 动画演示
网络协议原理 2026-10-15

SMTP:一封邮件在服务器之间怎么传

实测 SMTP:本机 aiosmtpd 上逐行看 EHLO 多行答复、信封(MAIL FROM / RCPT TO)与信件头不同(Bcc 原理、发件人可伪造)、点转义;550 / 450 / 500 / 503 / 552 各是什么;STARTTLS 升级前明文升级后密文;Gmail、QQ、163 的 25 端口都宣告 STARTTLS。

网络协议 SMTP 邮件 STARTTLS 信封 Bcc 状态码 真实验证 动画演示
网络协议原理 2026-10-15

FTP:控制连接与数据连接,主动与被动模式

实测 FTP:控制连接是明文命令 + 三位数字答复;PASV 的 (127,0,0,1,37,8) 就是端口 9480;主动模式由服务器反向连客户端;抓包能读到 USER / PASS 明文;100 ms 往返下登录约 6.1 个往返,每个小文件约 4.1 个往返。

网络协议 FTP 控制连接 数据连接 被动模式 主动模式 PASV 真实验证 动画演示
网络协议原理 2026-10-15

NTP:时间同步报文与偏移计算

手工拼 48 字节 NTP 请求,解析真实服务器(ntp.aliyun.com 等)的 stratum、四个时间戳,用 offset / delay 公式算出本机偏移 4.73 ms;本机自写服务器验证公式误差只有 0.09 ms;返程多 80 ms 的不对称使 offset 偏差 −41.98 ms(约为不对称量的一半)。

网络协议 NTP 时间同步 偏移 延迟 路径不对称 UDP 真实验证 动画演示
网络协议原理 2026-10-15

SOCKS5:代理握手与 UDP 转发

手工收发 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)。

网络协议 SOCKS5 代理 UDP ASSOCIATE DNS socks5h 真实验证 动画演示
网络协议原理 2026-10-15

TFTP:最简单的基于 UDP 的文件传输

自己实现 TFTP:5 种报文、服务器从新端口(TID)回答、不足 512 字节的 DATA 是结束标志;停等让 100 KB 在 50 ms 往返下需要 9.94 秒(10 KB/s),协商 blksize=1428 后降到 3.66 秒;丢一个包就多等一个 0.6 秒的超时。

网络协议 TFTP UDP 停等 TID blksize 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号