跳到主要内容

4. Heartbeat Request 和 Response Messages

Heartbeat protocol messages 由其 type, 任意 payload 和 padding 组成.

struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;

HeartbeatMessage 的总长度 MUST NOT 超过 2^14, 或者在按 [RFC6066] 定义协商时不超过 max_fragment_length.

type: message type, 即 heartbeat_request 或 heartbeat_response.

payload_length: payload 的长度.

payload: payload 由任意内容组成.

padding: padding 是 receiver MUST 忽略的随机内容. 对于 TLS, HeartbeatMessage 的长度是 TLSPlaintext.length; 对于 DTLS, 是 DTLSPlaintext.length. 此外, type field 的长度为 1 byte, payload_length 的长度为 2. 因此, 对 TLS 而言 padding_length 为 TLSPlaintext.length - payload_length - 3, 对 DTLS 而言为 DTLSPlaintext.length - payload_length - 3. padding_length MUST 至少为 16.

HeartbeatMessage 的 sender MUST 使用至少 16 bytes 的 random padding. 收到的 HeartbeatMessage message 的 padding MUST 被忽略.

如果收到的 HeartbeatMessage 的 payload_length 过大, 收到的 HeartbeatMessage MUST 被静默丢弃.

当收到 HeartbeatRequest message, 且按本文档其他位置所述发送 HeartbeatResponse 未被禁止时, receiver MUST 发送相应 HeartbeatResponse message, 其中携带收到的 HeartbeatRequest payload 的精确副本.

如果收到的 HeartbeatResponse message 不包含预期 payload, 该 message MUST 被静默丢弃. 如果它包含预期 payload, retransmission timer MUST 被停止.