プロセスがクラッシュすると、RSTパケット(セグメント)を他のピアに送信することで既存のTCPソケットが破棄され、他のピアの関連するソケットfdがRSTパケットを受信することを私は知っています。
RSTパケットが送信された他のケースはありますか?プロセスがソケットfdでclose()を呼び出したが、そのソケットに未読データが残っている場合など、そのソケットfdを介して他のピアにRSTパケット(セグメント)も送信しますか?
プロセスがクラッシュすると、RSTパケット(セグメント)を他のピアに送信することで既存のTCPソケットが破棄され、他のピアの関連するソケットfdがRSTパケットを受信することを私は知っています。
RSTパケットが送信された他のケースはありますか?プロセスがソケットfdでclose()を呼び出したが、そのソケットに未読データが残っている場合など、そのソケットfdを介して他のピアにRSTパケット(セグメント)も送信しますか?
TCP/IPガイドの引用
一般的に、TCPソフトウェアによって「予期しない」何かが発生すると、リセットが生成されます。リセットが生成される最も一般的な特定のケースには、次のものがあります。
セグメントを受信するデバイスが現在接続していないデバイスからのTCPセグメントの受信(新しい接続を要求するSYNを除く)。
無効または不正なシーケンス番号または確認応答番号フィールドを含むメッセージの受信。メッセージが以前の接続に属しているか、他の方法で偽物である可能性があることを示します。
接続をリッスンするプロセスがないポートでのSYNメッセージの受信。
奇妙な動作を観察した場合、 TCPリセット攻撃RST
の犠牲者になる可能性があります
最後の質問については、未読データのあるソケットをソケットバッファーに閉じると、TCPルールに違反しないため、noRST
が送信されると思います(パケットは正しく配信されました。それを詳しく説明しなかったのはプロセスだけです)。代わりに、FIN
が送信されます。