• ベストアンサー

Linuxでパケットのデータ部分を合成するプログラムを教えてください。

LinuxでC言語を使用しているのですが、パケットのデータ部分を合成するプログラムのを教えてください。 具体的な例として、 端末A,B,Cがあり、AはBを中継して、CにUDPパケットを2個送信します。 中継端末のBは2個のUDPパケットをバッファリングした後、データ部分のみを1個のパケットにまとめてCに送信します。(ヘッダ部分はAが送信したときと同じにしたい) Cは2個分のデータが入ったUDPパケットを1個受信する。 この例の端末Bでのプログラムを書くとするとどのようにすればいいのでしょうか?? よろしくお願いしますm(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

「パケットのpayloadを合成する」という機能が必要なだけでしたら、Click Modular Router http://www.read.cs.ucla.edu/click/ を使用してみるのはいかがでしょうか。 複数の要素をかちゃかちゃと組み合わせるだけで、色々なルーティングを可能にするシステムです。 このシステムには、ARPだけ選ぶもの、送信優先度を低くするもの、ひとつのパケットを二つに増殖させて二つの場所に送るものなどといった小さな機能要素があります。こういった要素を順番に並べていくことで、「ARPの送信優先度を低くして、二箇所に送る(他は変化なし)」などの複雑なルーティングを、簡単に作ることが出来ます。 二つのペイロードの合成も多分出来たんじゃないかと思います。なかったとしても、新しいモジュールを付け加えることはそんなに難しいことではありません。(C++でClickモジュールを書くことになります) 要素一覧 : http://www.read.cs.ucla.edu/click/elements 手動で作成するとなると、いわゆるRaw Socketを作ることになりますが・・・、まともに使えるものを作るつもりでしたら、かなり面倒が多いですよね。

d_x-x_b
質問者

お礼

ありがとうございます!! そんなシステムがあるのですか!? これはなんらかのシミュレーションではなく、パソコンにインストールすれば実際のルータとして使用できるということですかね??

その他の回答 (2)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.2

Linux で UDP 通信をするなら、「socket.h」を使えばよいでしょう。 いくつか参考になりそうなサイトを挙げておきます。 Manpage of SOCKET http://www.linux.or.jp/JM/html/LDP_man-pages/man2/socket.2.html Geekなぺーじ [インターネット技術メモ] http://www.geekpage.jp/ Winsock Programmer's FAQ http://www.kt.rim.or.jp/~ksk/wskfaq-ja/index.html

d_x-x_b
質問者

お礼

返信ありがとうございます。 説明が不足していたのですが、中継点Bと言ったのですが、実際はルータのことで、Aから見ると、Bには中継しているとは気づかないで、Cに届くというイメージです。 基本的なUDP通信のプログラムは私もGeekなページを参照しています(^-^;)

回答No.1

・ルータを作っているのですか、それともオーバーレイネットワークを作っているのですか? ・ネットワーク的にどのような構成になっていますか? ・「Bを中継する」際のIPヘッダはどのようになっているのですか?

d_x-x_b
質問者

お礼

素早い返信ありがとうございます。 >・ルータを作っているのですか、それともオーバーレイネットワークを作っているのですか? 中継する端末表記しましたが、実際はルータのことです。PCでルータを作成し、その中でパケットを合成するようなプログラムが欲しいです。 >・ネットワーク的にどのような構成になっていますか? A→(無線接続)→ルータ(Bのこと)→(有線接続)→C という風に接続されています。 >・「Bを中継する」際のIPヘッダはどのようになっているのですか? Bはルータなので、AのIPヘッダには、Cのアドレスとポート番号の情報のみです。 最初からルータを使用するをいったほうがよかったですね(^-^;) よろしくお願いします。

関連するQ&A