TCP 接続を介して仮想 IP ネットワークを作成する必要があります。ホスティング システムは Linux で、TUN/TAP カーネル ドライバーを使用しているため、仮想ネットワークの IP パケットを簡単に受信して再注入できます。
難しいのは、受信した IP パケットを別のホストに送信することです。技術的でない理由により、UDP ではなく TCP プロトコルでのみパケットを送信できます。UDP 経由で IP パケットを送信するのは簡単ですが、TCP を使用すると難しくなります。理由は次のとおりです。
UDP プロトコルは、IP と同様に、再送信/並べ替えをサポートしていません。そのため、受信した仮想 IP パケットごとに 1 つの UDP パケットが送信された場合でも、カーネル TCP/IP プロトコル スタックは仮想 IP パケットの損失/重複/再順序付けを認識します (これらの「機能」があれば、TCP/IP が適切に機能するために必要です)。ない場合、仮想ネットワークの TCP 接続速度が低下します)。IP パケットが TCP 経由で送信される場合、何らかの方法でシミュレートされない限り、必要なすべての「機能」が失われます。
TCP 接続である種のパケットの重複/損失/並べ替えを偽装するか、カーネル TCP/IP プロトコル スタックにパッチを当てる必要があるようです。どちらのオプションも簡単ではありません。
私の問題に対する他の簡単な解決策はありますか? または、完全に間違った方向に進んだだけですか?ぜひ聞きたいです。
====更新====
受信した仮想ネットワーク IP パケットを送信するために、生の IP ソケット (TCP パケットを使用しながら、物理ネットワーク上のすべての TCP 再送信/並べ替えを簡単に取り除くことができる) を使用することを考えています。しかし、受信ホストで、関心のあるパケットのみを受信し、他のすべての IP パケットをカーネル TCP/IP スタックに返すにはどうすればよいでしょうか?