记录层做什么
记录层把上层数据切成不超过 16384 字节的记录,逐条加密并认证后交给传输层(RFC 8446 §5)。记录类型包括握手、应用数据、告警与更改密码规格,加密之后连类型本身也不再对外可见。
与传输层的关系
一条记录可能跨多个 TCP 段,多个记录也可能合进同一个段:两者没有一一对应关系。这也是为什么抓 HTTPS 只能看到包大小与节奏——除握手前半段之外,内容与结构都被加密保护了。
基本信息
| 最大记录 | 16384 字节明文,加密后略有膨胀 |
|---|---|
| 结构 | 类型、版本、长度、加密载荷与认证标签 |
| 与传输层 | 记录与 TCP 段不一一对应 |
| 规范 | RFC 8446 §5 |
典型使用场景
- 理解为什么抓包只能做流量分析
- 排查大响应被拆成多段带来的性能问题
- 学习握手段与应用数据段的分界
- 分析加密流量的分片与重传特征
观察记录层
观察记录层
openssl s_client -connect example.com:443 -msg </dev/null 2>&1 | grep -c '<<<' # 观察记录数量级
tcpdump -nn -X 'tcp port 443' -c 5 # 只能看到加密载荷
# 记录尺寸会影响分片与重传粒度:大响应通常被切成多条记录传输记录类型
| 类型 | 作用 | 备注 |
|---|---|---|
| 握手 | 协商参数与密钥 | 加密后类型也不再可见 |
| 应用数据 | 承载上层协议数据 | 单条上限 16384 字节 |
| 告警 | 关闭或错误通知 | 正常关闭需要发送关闭通知 |
| 更改密码规格 | 兼容旧版本的过渡消息 | 新版本中只保留兼容语义 |
这就是抓包只能看到包大小与节奏的原因:除握手前半段之外,其余内容与结构都在加密保护之下。
「抓包看不到内容」不等于看不到任何信息:服务器名称、包大小与请求节奏依然可被分析,加密流量分析已经是很成熟的方向。
排查大响应问题时,把记录尺寸与传输层分段放在一起看:应用层的小记录会放大传输层的段数,进而放大开销与重传代价。