TCPの接続拒否理由を通知する「TCP RST Diagnostic Paylaod」という提案仕様がIETFに提出されています。
TCPでは様々な理由により接続拒否を示すRSTパケットが送信されます。NATやファイアウォール、リッスンされてないポートへの接続時などです。
しかしRSTパケットの受信者は、RSTパケットが返された理由を知る手段はありませんでした。それを可能にするのが「TCP RST Diagnostic Paylaod」です。
TCP RST Diagnostic Paylaod
「TCP RST Diagnostic Paylaod」ではRSTパケットに接続拒否理由の格納方法を指定します
もともと、RSTパケットにデータを含めることができます。TCPの仕様の改訂版である「rfc793bis」でもSHOULDで指定されています。
TCP implementations SHOULD allow a received RST segment to include data (SHLD-2)
そこに次のような情報をCBOR形式で情報を格納します。例えば次のとおりです (例はCDDLで記述します)
[ 12345, { "reason-code": 2, "reason-description": "brief human-readable description" } ]
- 12345: この仕様のデータが含まれていることを示すマジックナンバー (後で正式に決定)
- reason-code: 接続拒否理由を示す番号
- reason-description: 人間が読める理由を示す文字列
reason-code
reason-codeとして次のものが定義されています
- 1: クローズ後にデータを受信した
- 2: リッスン状態なのにACKを受信した
- 3: 不正なメッセージ
- 4: 許可されていない
- 5: リソースの超過
- 6: ネットワークの障害 (中継装置などで利用)
- 7: ピアによってリセットを受信した (中継装置などで利用)
- 8: ピアへの到達性がない (中継装置などで利用)
- 9: コネクションタイムアウト (中継装置などで利用)
Diagnostic Payloadの扱い
このデータはアプリケーションに渡すことが許可されています。デバックに使用することができます。