TCPデータをサーバーに送信するアプリケーションがあります。私のサーバーは、アプリケーションが送信したパケットを意図的に破棄し、クライアントにパケットを再送信させます。クライアントが再送信するのを防ぐ必要があります。再送信を防ぐためにクライアントで設定できるものはありますか?たぶんiptablesルールがありますか?それとも何か変数があるのでしょうかnet.ipv4.tcp
?
TCPは本質的にパケットを再送信する必要があることを知っていますが、実際にはサーバーからTCPパケットを破棄し、パケットを再送信しないときにサーバーがどのように機能するかを観察する機能をテストする必要があります。だからここではUDPを使用することはできません。
クライアントはTCPハンドシェイクを完了でき、その後に送信されたパケットのみが破棄され、再送信が発生します。これが私が避けるべき再送です。
私はFedoraを使用しています:
[root@test sipp.svn]# uname -r
2.6.23.1-42.fc8
[root@test sipp.svn]#
答え1
あなたの意見に基づいて(好ましくはあなたの質問の一部):
TCPは本質的にパケットを再送信する必要があることを知っていますが、実際にはサーバーからTCPパケットを破棄し、パケットを再送信しないときにサーバーがどのように機能するかを観察する機能をテストする必要があります。だからここではUDPを使用することはできません。
私の理解によれば、クライアントが送信する内容について実際に気にする必要はありません。重要なのは、再送信されたパケットがサーバーに到達しないことです。それでは、最初のパケットのようにサーバー側でこれらのパケットを破棄するのはどうでしょうか?これを削除する方法はわかりませんが、iptablesを使用すると、クライアントはSYN / FINなしでTCPパケットをブロックするのに十分です。
クライアントが気にしないようにするには、サーバーでACKを偽にする必要があります。これを行うには、scapyまたは同様のツールを使用できます。
答え2
私のコメントを削除して回答を投稿してください。。
TCP は、信頼性が高くエラーチェックが可能な伝送用に設計されています。したがって、送信されていないパケットを再送信することが重要です。確認する- 接続のもう一方の端は知っています。このメカニズムを適用したくない場合は、おそらくUDPなどの他のプロトコルを使用する必要があります。
ただし、TCPが利用できない場合は、プロキシアプリケーションを使用する必要があります。サーバー側のアプリケーションから直接TCPパケットを受信するのではなく、次のような他のアプリケーションから受信するようにしてください。代理人、これはパケットが次に送信されるかどうかを決定します。「本物」適用が遅くなっています。オリジナル:
- クライアントは TCP パケットを送信します。
- サーバー側のプロキシアプリケーションはポートAでそれをリッスンします。
- 実際のサーバーアプリケーションはポートBでリッスンします。
- プロキシアプリケーションは、AからBにパケットを送信するかどうかを決定します。
エージェントを入手してからいつも承認パケットは決して再送信されません(実際にパケットが送信されない限り)。失敗するもちろんそこに行くには)。これを念頭に置いて、適切なフィルタリング規則を適用するプロキシアプリケーションを使用/設計できます。これはリンクです私が尋ねた関連質問セキュリティスタック交換に。