1つだけ過去を変えられるとしたら?

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

A 回答 (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を作ることになりますが・・・、まともに使えるものを作るつもりでしたら、かなり面倒が多いですよね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/22 15:24

Linux で UDP 通信をするなら、「socket.h」を使えばよいでしょう。



いくつか参考になりそうなサイトを挙げておきます。

Manpage of SOCKET
http://www.linux.or.jp/JM/html/LDP_man-pages/man …

Geekなぺーじ [インターネット技術メモ]
http://www.geekpage.jp/

Winsock Programmer's FAQ
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/index.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/22 14:42

・ルータを作っているのですか、それともオーバーレイネットワークを作っているのですか?



・ネットワーク的にどのような構成になっていますか?

・「Bを中継する」際のIPヘッダはどのようになっているのですか?
    • good
    • 0
この回答へのお礼

素早い返信ありがとうございます。
>・ルータを作っているのですか、それともオーバーレイネットワークを作っているのですか?
中継する端末表記しましたが、実際はルータのことです。PCでルータを作成し、その中でパケットを合成するようなプログラムが欲しいです。

>・ネットワーク的にどのような構成になっていますか?
A→(無線接続)→ルータ(Bのこと)→(有線接続)→C
という風に接続されています。

>・「Bを中継する」際のIPヘッダはどのようになっているのですか?
Bはルータなので、AのIPヘッダには、Cのアドレスとポート番号の情報のみです。

最初からルータを使用するをいったほうがよかったですね(^-^;)
よろしくお願いします。

お礼日時:2009/06/22 14:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!