RSTパケットの代わりにRST、ACKパケットが表示されるのはなぜですか?


42

Wiresharkを見ると、TCPストリームがRSTパケットではなくRST、ACKパケットで終わることがよくあります。これがなぜだか誰でも知っていますか?

私が見るものの例:

SYN SYN、ACK ...データ... RST、ACK

Wiresharkは、RST、ACKパケットの前にRSTパケットをピックアップしていません。


2
なぜRST / ACKの前にRSTセグメントがあるはずだと思いますか?たぶん、そのようなパケットトレースの例を提供できますか?
Gerben

ACKは同じパケットでRSTを便乗させましたか?
generalnetworkerror

何か答えがありましたか?もしそうなら、質問が永遠にポップアップし続けないように答えを受け入れ、答えを探してください。または、独自の回答を提供して受け入れることもできます。
ロンモーピン

私はuが\データ終了接続終了接続= RST要求を送信したACK
もと子

回答:


55

RST / ACKはRSTの確認応答ではありません。SYN/ ACKはSYNの確認応答とまったく同じではありません。TCPの確立は、実際には4方向のプロセスです。開始ホストはSYNを受信ホストに送信し、受信ホストはそのSYNに対するACKを送信します。受信ホストはSYNを開始ホストに送信し、開始ホストはACKを送り返します。これにより、ステートフルな通信が確立されます。

SYN --> 
    <-- ACK
    <-- SYN
ACK -->

これをより効率的にするために、受信ホストはSYNにACKを返し、同じパケットで独自のSYNを送信して、見慣れた3方向プロセスを作成できます。

SYN -->
    <-- SYN/ACK
ACK -->

RST / ACKの場合、デバイスはACKを使用してシーケンス内の前のパケットで送信されたデータを確認し、RSTで接続が閉じたことを送信者に通知します。デバイスは、SYN / ACKのように、2つのパケットを1つに結合するだけです。RST / ACKは通常、TCPセッションを閉じる際の通常の応答ではありませんが、必ずしも問題を示しているわけではありません。


4
RST / ACKを送信するシナリオの例は、受信ホストが宛先TCPポートでリッスンしていない場合です。
インディカK 14

はい、そうです。ポート80で、マシンAからマシンBへのDDoS攻撃をシミュレートしようとしました(教育目的;))。しかし、Bの80ポートは開いていません。そのRST ACKため、マシンB が偽の送信元アドレスに大量の応答を送信していることがわかります。
smwikipedia

RST / ACK応答はパケットの内容に依存しますか?つまり、サーバーがパケットを受信し、パケットの内容が何らかの条件に一致したため、セッションが閉じられました。
skooog

1

接続が確立されると、信頼性のあるトランスポート/セキュリティのために、すべてのパケットにACKが設定され、受信パケットのシーケンス番号と一致する必要があります。ACKなしのRSTは受け入れられません。一方がRSTを送信すると、ソケットはすぐに閉じられ、受信側も有効なRSTを受信した直後にソケットを閉じます。そうである必要はなく、認めることもできません。

TCPハンドシェイク後

A ---> B Syn = x、Ack = y、len = z、ACKフラグ

B ---> A Syn = y、Ack = x + z、len = o、ACKフラグ

A ---> B Syn = x + z、Ack = y + o、len = p、ACKフラグ

B ---> A Syn = y + o、ACK = x + z + p、len = q、RST、ACKフラグ

Bは最後のパケットを送信した後にソケットを閉じ、Aはそれを受信した後にソケットを閉じます。

(ここでTCPウィンドウを考慮しないか、確認の前に一方の端からより多くのパケットがあるかもしれません)

ACKフラグ、確認番号、確認手順は関連していますが、同じものではありません。

RFC793に準拠

RFC793

確認番号:32ビット

If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive.  Once a connection is established this is always sent.

リセット処理

SYN-SENTを除くすべての状態で、すべてのリセット(RST)セグメントは、SEQフィールドをチェックすることで検証されます。シーケンス番号がウィンドウ内にある場合、リセットは有効です。SYN-SENT状態(最初のSYNに応答して受信したRST)では、ACKフィールドがSYNを確認した場合、RSTは受け入れ可能です。

RSTの受信者は最初にそれを検証し、次に状態を変更します。受信者がLISTEN状態にあった場合、それは無視されます。受信者がSYN-RECEIVED状態で以前にLISTEN状態だった場合、受信者はLISTEN状態に戻ります。それ以外の場合、受信者は接続を中止してCLOSED状態になります。レシーバーが他の状態にあった場合、接続を中止し、ユーザーに通知してCLOSED状態になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.