RST(リセット) あーるえすてぃー(りせっと)
RSTリセットTCP強制切断Connection Reset
RST(リセット)について教えて
簡単に言うとこんな感じ!
TCPの「強制終了ボタン」だよ。通常の接続切断(FIN)が「ちゃんとお別れ」なのに対して、RSTは「電話を突然切る」みたいな感じ。「このポートは存在しない」「不正な接続だ」ってときに使われるんだ!
RST(リセット)とは
RST(Reset)は、TCPヘッダのフラグビットの一つで、接続を即座に強制終了させます。通常のTCP切断(4ウェイハンドシェイク)と異なり、バッファに残ったデータを破棄して接続を即時終了します。
RSTが使われる主なケース:
- 存在しないポートへの接続:サーバーがListenしていないポートに接続しようとするとRSTが返る
- タイムアウト後の再接続拒否:接続が切れた後に古いSYNが届いたとき
- ファイアウォールによる遮断:不正接続をRSTで打ち切る
- アプリケーションが強制終了:プロセスがソケットを閉じずに終了した場合
RSTを受け取ったほうは「Connection reset by peer」エラーを受け取ります。これはWebブラウザやSSH接続でよく見るエラーメッセージです。
FINとRSTの違い
| 項目 | FIN(正常切断) | RST(強制切断) |
|---|---|---|
| 手順 | 4ウェイハンドシェイク | 即時切断 |
| データ保証 | バッファのデータを送ってから切断 | バッファのデータを破棄 |
| 状態遷移 | TIME_WAIT→CLOSED | 即CLOSED |
| 用途 | 正常終了 | 異常終了・強制切断 |
歴史と背景
- 1981年:RFC 793でRSTフラグが定義。TCP設計当初から存在する
- 2000年代:Great Firewall of China(中国のネット検閲)がRSTを使った接続遮断を行っていることが判明
- 現在:ファイアウォール・IDS/IPSがRSTを使った接続制御を広く利用
RSTが発生する代表的なシナリオ
TCP RSTとポートスキャン
セキュリティの文脈で、攻撃者はポートスキャンでサービスの動作状況を調べます。RSTが返れば「ポートは閉じている」、SYN-ACKが返れば「ポートは開いている」と判断できます。ファイアウォールで「REJECT」の代わりに「DROP」(無応答)にすることで、ポートスキャンから情報を隠せます。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 793 | TCP基本仕様(RSTフラグの定義) |
| RFC 5961 | TCPのRSTパケットを悪用した攻撃への対策 |
関連用語
- TCP — RSTが定義されるプロトコル
- 3ウェイハンドシェイク — 正常接続の確立手順
- TIME_WAITとCLOSE_WAIT — RSTとは対照的な正常切断の待機状態
- ソケット — RSTで強制終了されるソケット接続