2. Heartbeat Hello Extension
Heartbeat 支持通过 Hello Extensions 指示. peer 不仅可以指示其实现支持 Heartbeats, 还可以选择是否愿意接收 HeartbeatRequest messages 并以 HeartbeatResponse messages 响应, 或者只愿意发送 HeartbeatRequest messages. 前者通过使用 peer_allowed_to_send 作为 HeartbeatMode 指示; 后者通过使用 peer_not_allowed_to_send 作为 Heartbeat mode 指示. 此决定可以在每次 renegotiation 时更改. HeartbeatRequest messages MUST NOT 发送给指示 peer_not_allowed_to_send 的 peer. 如果已指示 peer_not_allowed_to_send 的 endpoint 收到 HeartbeatRequest message, 该 endpoint SHOULD 静默丢弃该 message, 并 MAY 发送 unexpected_message Alert message.
Heartbeat Hello Extension 的格式定义为:
enum {
peer_allowed_to_send(1),
peer_not_allowed_to_send(2),
(255)
} HeartbeatMode;
struct {
HeartbeatMode mode;
} HeartbeatExtension;
收到未知 mode 时, MUST 发送使用 illegal_parameter 作为 AlertDescription 的 error Alert message 作为响应.