4. ハートビート要求および応答メッセージ
ハートビートプロトコルメッセージは、そのタイプ、任意のペイロード (payload)、およびパディング (padding) で構成されます。
struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;
HeartbeatMessage の総長は、[RFC6066] で定義されているように、2^14 または協議された max_fragment_length を超えてはなりません (MUST NOT)。
type: メッセージタイプ、heartbeat_request または heartbeat_response。
payload_length: ペイロードの長さ。
payload: ペイロードは任意の内容で構成されます。
padding: パディングはランダムな内容であり、受信者によって無視されなければなりません (MUST)。HeartbeatMessage の長さは、TLS の場合は TLSPlaintext.length、DTLS の場合は DTLSPlaintext.length です。さらに、type フィールドの長さは 1 バイトであり、payload_length の長さは 2 です。したがって、padding_length は TLS の場合は TLSPlaintext.length - payload_length - 3、DTLS の場合は DTLSPlaintext.length - payload_length - 3 です。padding_length は少なくとも 16 でなければなりません (MUST)。
HeartbeatMessage の送信者は、少なくとも 16 バイトのランダムなパディングを使用しなければなりません (MUST)。受信した HeartbeatMessage メッセージのパディングは無視されなければなりません (MUST)。
受信した HeartbeatMessage の payload_length が大きすぎる場合、受信した HeartbeatMessage は静かに破棄されなければなりません (MUST)。
HeartbeatRequest メッセージを受信し、HeartbeatResponse の送信が本文書の他の箇所で説明されているように禁止されていない場合、受信者は、受信した HeartbeatRequest のペイロードの正確なコピーを運ぶ対応する HeartbeatResponse メッセージを送信しなければなりません (MUST)。
受信した HeartbeatResponse メッセージに予期されるペイロードが含まれていない場合、メッセージは静かに破棄されなければなりません (MUST)。予期されるペイロードが含まれている場合、再送タイマーを停止しなければなりません (MUST)。