TLS Record Protocol 是什么?HTTPS 应用数据是如何被分片、加密和校验的?
简化版
TLS Record Protocol 是 TLS 中负责传输应用数据的记录层协议。
握手完成后,HTTP 数据不会直接明文写到 TCP,而是被拆成 TLS record,每个 record 会经过压缩,现代一般不用、加密、完整性保护,然后再交给 TCP 发送。
它让上层 HTTP 获得机密性和完整性,但 TCP 仍负责可靠、有序传输。
详细版
HTTPS 发送数据的大致链路:
HTTP message -> TLS record -> TCP segment -> IP packet
TLS Record 层会把应用数据分成多个记录。
每个记录有自己的类型、版本、长度和加密后的负载。
简化结构:
ContentType | ProtocolVersion | Length | EncryptedFragment
TLS 1.2 和 TLS 1.3 在记录保护细节上不同,但目标一致:保护传输中的 HTTP 数据不被窃听和篡改。
完整版教学
1. 先定位 Record 层在 TLS 中的位置
TLS 大体可以分成握手层和记录层。
握手层负责协商参数、认证身份、派生密钥。
记录层负责用协商好的密钥保护后续数据。
HTTP
TLS Record
TCP
IP
握手负责“谈好怎么保护”,Record 负责“真正保护每一段数据”。
2. TLS Record 的基本结构
一个 TLS record 可以简化理解为:
type | version | length | fragment
字段含义:
| 字段 | 作用 | 示例 |
|---|---|---|
| type | 表示记录类型 | handshake、application_data |
| version | 协议版本相关字段 | TLS 1.2、兼容值 |
| length | 后续片段长度 | 16384 以内常见 |
| fragment | 记录负载 | 加密后的应用数据 |
真实 TLS 1.3 为了隐藏更多信息,会把外层类型等处理得更谨慎。
但面试层面掌握记录封装思想就够用。
3. 应用数据如何被保护
握手完成后,HTTP 请求或响应会进入记录层。
记录层会做:
- 分片,把大块应用数据拆成记录。
- 加密,保护机密性。
- 完整性认证,防止篡改。
- 加序列号或隐式计数参与认证,防止重放和乱序破坏。
现代 TLS 通常使用 AEAD 算法,例如 AES-GCM。
plaintext + nonce + aad -> AEAD encrypt -> ciphertext + tag
客户端收到后反向验证和解密。
4. Record 和 TCP Segment 的区别
TLS record 和 TCP segment 不是同一个东西。
| 对比项 | TLS Record | TCP Segment |
|---|---|---|
| 所在层 | TLS 安全层 | 传输层 |
| 关注点 | 加密和完整性 | 可靠传输和拥塞控制 |
| 边界是否等同 | 不一定 | 不一定 |
| 谁处理 | TLS 库 | 操作系统 TCP 栈 |
一个 TLS record 可能被 TCP 拆成多个 segment。
多个小 record 也可能在 TCP 层合并发送。
应用不能假设 TCP 包边界等于 TLS record 边界。
5. 为什么 record 大小会影响性能
TLS record 太小,会增加头部和加密认证开销。
TLS record 太大,可能影响首字节延迟和丢包恢复体验。
例如首屏 HTML 如果被放在很大的记录里,浏览器可能要等更多数据到达后才能处理。
有些性能优化会关注 record size、拥塞窗口、首包数据量。
不过这属于细节优化,通常由 TLS 库、服务器和 CDN 配置处理。
6. TLS 1.3 中记录层的安全变化
TLS 1.3 尽量减少明文可见信息。
握手后,大多数记录都以加密的 application data 形式出现。
这能减少中间人从记录类型中推断握手细节的机会。
同时 TLS 1.3 移除了很多历史算法和压缩机制,降低攻击面。
例如 TLS 级压缩曾经带来 CRIME 这类风险,因此现代 HTTPS 基本不使用 TLS 压缩。
7. 常见误区与追问
- 误区:HTTPS 就是把整个 HTTP 报文一次性加密。 实际会分成多个 TLS record 分别保护。
- 误区:TLS record 边界就是 TCP 包边界。 二者属于不同层,边界不一定一致。
- 误区:Record 层负责丢包重传。 丢包重传是 TCP 的职责,Record 层负责加密和认证。
- 追问:为什么现代 TLS 不用压缩? TLS 压缩曾导致安全风险,应用层压缩更常见。
- 追问:AEAD tag 有什么作用? 用于验证密文和附加数据没有被篡改。
- 追问:record 太大会有什么影响? 可能增加首字节等待和丢包恢复成本。
8. 加强记忆
TLS Record 可以记成 HTTPS 的“安全信封”:HTTP 数据被分片装进信封,加密盖章后交给 TCP。
TCP 管送达,TLS 管保密和防篡改。