7

ネットワークパケットを半分に分割し、パケットの各半分を個別のudp接続を介してトンネリングし(各udp接続が異なるwifiリンクを経由するため)、再構築するために使用できるクライアント/サーバーアプリケーションを作成しようとしていますもう一方の端でパケットを分割します。パケットを分割するだけでなく、適切に再構成できるように、各ハーフ パケットにも ID とシーケンス番号が必要です。

基本的に私はMLPPPに似た何かをしようとしています

Python と TUN/TAP ネットワーク ドライバーを使用してこれを実行しようとしています。このプロジェクトに役立つと思われる次の Python コード サンプルとモジュールを見つけました。

Python tun/tap

Python 生パケット操作

私の質問は、Pythonを使用して必要なパケットの変更を行うことができますか?これにアプローチする方法は何ですか? 上記のモジュールを使用してこれを行うことはできますか、それともより良い解決策がありますか? 私は経験豊富なプログラマーではないので、正しい方向に導くための情報を探しています。コード サンプルや追加のリンクは大歓迎です。

4

2 に答える 2

4

私たちは本番環境でこのようなことを行っており、非常にうまく機能しています。ただし、個々のパケットは分割しません。接続ごとに分数の重みを設定し (無制限)、パケットを送信します。各回線で異なるレイテンシに対処するためのコードが用意されています。もう一方の端では、それらをバッファリングして並べ替えます。パフォーマンスはかなり良好です。サイトには 5 つ以上の ADSL 回線があり、ダウンロードで 40+ Mbps という良好な速度が得られます。

パケットを分割すると (例: 1500/2 = 750)、不要なオーバーヘッドが発生します... パケットをできるだけ大きく保ちます。

UDP パケット用に独自のプロトコル (ヘッダー形式) を開発しました。最大 200 Mbps の tun/tap でループバック テストを行ったので、カーネルからユーザー空間への相互作用は確実にうまく機能します。以前は NFQUEUE を使用していましたが、信頼性の問題がありました。

上記はすべて Python で記述されています。

于 2011-06-30T03:28:20.127 に答える
1

私には完全に可能に見えます。

あなたが発見した tun/tap モジュールは、仕事をするように見えます。ツイストは高性能であり、頭を痛めるコストがかかります。

パケットの分割に関しては、データを解釈する必要はまったくありません。それをバイナリ データのブロブとして扱い、2 つに分割してヘッダーを追加するだけです。サードパーティのモジュールは使用しません。通常の python 文字列処理です。

または、使いやすいパケットカプセル化形式が必要な場合は、ネットストリングを使用できます。

ロケットのようにはいかないと思いますが、そうすることで多くのことを学べると思います!

于 2011-05-16T14:38:19.073 に答える