TCP/UDPの仕組み

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が発生する代表的なシナリオ

RST発生シナリオ(存在しないポートへのアクセス) クライアント サーバー (ポート9999は SYN → ポート9999 RST(接続拒否) クライアント:「Connection refused」エラーを受け取る

TCP RSTとポートスキャン

セキュリティの文脈で、攻撃者はポートスキャンでサービスの動作状況を調べます。RSTが返れば「ポートは閉じている」、SYN-ACKが返れば「ポートは開いている」と判断できます。ファイアウォールで「REJECT」の代わりに「DROP」(無応答)にすることで、ポートスキャンから情報を隠せます。


関連する規格・RFC

規格・RFC番号内容
RFC 793TCP基本仕様(RSTフラグの定義)
RFC 5961TCPのRSTパケットを悪用した攻撃への対策

関連用語