十分なパケットが交換されたときに接続を破棄する機能の 1 つであるゲートウェイをプログラミングしています。クライアントとサーバーの両方に送信して接続を終了する RST パケットを適切に形成する方法を知りたいです。
これをテストするために、ftp 接続/セッションを使用します。現在、RST パケットを送信すると、クライアントが無限に SYN パケットで応答しているのに対し、サーバーは単に ACK パケットでデータストリームを続行していることがわかります。接続を破棄することを決定した後、両端間のトラフィックをブロックすることに注意してください。
SEQ 番号と ACK 番号の処理方法に問題があるのではないかと考えています。特に RST パケットを送信するときに SEQ 番号と ACK 番号をどうするかを説明するリソースを見つけることができませんでした。ここでは、SEQ を新しい乱数に設定し (rand() を使用)、ACK を 0 に設定します (ACK フラグを使用していないため)。送信元アドレスを宛先アドレスで、送信元ポートを宛先ポートで逆にすると、チェックサムが正しく計算されることがわかりました。
クライアントとサーバーの両方が終了を受け入れないようです。