4. Maximum Fragment Length Negotiation (最大分片长度协商)
没有本 extension 时, TLS 明文 fragment 最大长度固定为 2^14 octet. 受内存或带宽限制的 client 可能希望协商更小的 maximum fragment length.
Client MAY 在 extended client hello 中包含 max_fragment_length extension. extension_data MUST 包含:
enum{
2^9(1), 2^10(2), 2^11(3), 2^12(4), (255)
} MaxFragmentLength;
允许值为 2^9, 2^10, 2^11 和 2^12. Server MAY 接受 client 请求的值, 并在 extended server hello 中返回相同的 max_fragment_length value. 如果 server 收到不允许的值, 或 client 收到与请求不一致的响应, 对应端 MUST 使用 illegal_parameter alert 中止 handshake.
协商成功后, client 和 server MUST 立即开始分片, 确保发送的 fragment 不超过协商长度. 该长度适用于整个 session, 包括 session resumption.
协商长度限制 record layer 不经分片即可处理的输入, 即 TLSPlaintext.length 的最大值. Record layer 输出可能更大, 因为会增加 header, padding 和 MAC. DTLS 使用该 extension 时还需考虑分片导致的 DoS 风险.