4

十分なパケットが交換されたときに接続を破棄する機能の 1 つであるゲートウェイをプログラミングしています。クライアントとサーバーの両方に送信して接続を終了する RST パケットを適切に形成する方法を知りたいです。

これをテストするために、ftp 接続/セッションを使用します。現在、RST パケットを送信すると、クライアントが無限に SYN パケットで応答しているのに対し、サーバーは単に ACK パケットでデータストリームを続行していることがわかります。接続を破棄することを決定した後、両端間のトラフィックをブロックすることに注意してください。

SEQ 番号と ACK 番号の処理方法に問題があるのではないかと考えています。特に RST パケットを送信するときに SEQ 番号と ACK 番号をどうするかを説明するリソースを見つけることができませんでした。ここでは、SEQ を新しい乱数に設定し (rand() を使用)、ACK を 0 に設定します (ACK フラグを使用していないため)。送信元アドレスを宛先アドレスで、送信元ポートを宛先ポートで逆にすると、チェックサムが正しく計算されることがわかりました。

クライアントとサーバーの両方が終了を受け入れないようです。

4

1 に答える 1

3

どの「リソース」を使用しているかはわかりませんが、これは RFC 793 のセクション 3.4 の「リセット生成」で完全にカバーされているようです。RST のシーケンス番号はゼロで、ACK フィールドは着信 ACK フィールドに加えて設定されます。そこに何度か記載されている長さなど。

于 2013-02-12T20:13:48.870 に答える