私はユーザー空間の tcp スタックに取り組んでおり (主に楽しみのため)、UNIX の tcp スタックに対してテストするのに問題があります。現在、テストの唯一の形式は単体テストを介して行われます。ただし、実際のカーネル tcp スタックに対して tcp スタックをテストしたいと考えています。次のセットアップを試しましたが、あまり成功しませんでした。
raw ソケットの使用: カーネル tcp ソケットを使用して接続を受け入れる単純な echo tcp サーバーを作成しました。TCP サーバーは、localhost のポート 8080 をリッスンします。私の TCP クライアントは、ユーザー空間の TCP スタックを使用します。ただし、クライアントがサーバーに syn を送信するたびに、カーネルは tcp rst を送信します。すべてのtcp rstパケットをドロップするようにiptableを変更した後、それは一種の機能です。ただし、3 方向の syn、syn+ack、ack ハンドシェイクが確立されていても、サーバーはクライアントが送信するパケットを受信できません。私は最終的に生のソケットをあきらめました。
tun/tap を使用: 同様に、エコー サーバーはカーネル tcp ソケットを使用し、localhost ポート 8080 をリッスンします。クライアントは、tap デバイスを開きます。タップ デバイスの IP は 10.0.0.1 で、クライアントは 10.0.0.2 の IP を想定しています。コンピューターから 10.0.0.2 に ping できます。ただし、クライアントがタップ デバイスを介して tcp サーバーに syn を送信すると、サーバーは応答しません。
注:ubuntu 12.04を使用しています。