メイン Application Layer Protocol Implementation & Model Development ring serach、floodingの方法について | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
qulneko | 投稿日時: 2006/11/12 15:22 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
ring serach、floodingの方法について QualNet初心者の者です。
今回初めて書き込みさせて頂きます。 今現在、データパケットをfloodingさせたいのですが、さらにそれに expanding ring search 機能をつけたいと考えています。 つまり、最初は1ホップflooding、次は2ホップfloodingと徐々にfloodingの範囲を広げたいのです。 そこで今疑問なのがまず ?floodingをどのように実装したらいいか (アプリケーションでfloodingする機能がないと思いますので何かを改造しようと考えていますが) ?expanding ring search をどのように実装したらいいか この2点について迷っています 何か少しでもヒントがあれば伺いたいと思い書き込みました よろしくおねがいします。 |
riri | 投稿日時: 2006/11/13 10:20 |
新米 登録日: 2006/7/3 居住地: 投稿: 14 |
Re: ring serach、floodingの方法について こんにちは。
このフォーラムにある 「データパケットのフラッディング」 のスレッドがヒントになりそうな気がします。 (floodingで検索すると見つかります。) もうご存知でしたら申し訳ないのですが、 そうでなければ、参考になるのでは? |
pyonta | 投稿日時: 2006/11/13 20:37 |
新米 登録日: 2006/11/13 居住地: 投稿: 14 |
Re: ring serach、floodingの方法について こんにちは。
flooding については、 フォーラムのこの記事でkabochaさんが書かれているように、Route-Request メッセージを flooding しているAODVがヒントになると思います。 expanding ring search の実装方法として素朴に思いつくのはfloodingするIPパケットのTTL(=寿命)を1回目のflooding, 2回目のfloodingで 1, 2, ... と変えてやることです。 はずしていたらすみません。 |
qulneko | 投稿日時: 2006/11/15 1:30 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
Re: ring serach、floodingの方法について 書き込み遅れてすいません。
ririさん、pyontaさん早速の返答本当にありがとうございます。 フォーラムのfloodingのスレッド、AODVどちらもヒントになりそうです。こちらを参考になんとか実装してみたいと思います。 が、まだ少し不安で… すいません。。 また、質問させていただくかもしれませんがよろしくお願いします。 |
qulneko | 投稿日時: 2006/11/22 20:22 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
Re: ring serach、floodingの方法について 再度書き込みさせていただきます。
紹介して頂いたfloodingのスレッドやAODVを見て実装しようと試みたのですが なかなか上手く進みません。 現在行いたいことは ?ソースはアプリケーション層からAODVでいうRREQパケットのようなリクエストパケットを1ホップでflooding ?そのリクエストパケットを受けたノードは条件があえばそのノードはユニキャストでソースにリプライパケットを送信 ?1ホップでfloodingした際、タイマーをセットしその間リプライが帰ってこなければ、次はソースが2ホップとリクエストをfloodingし、タイマーが切れるまでリプライパケットを待つ ?リプライパケットが帰ってくればそのノードに対してさらにソースはユニキャストでデータパケットを送り、データパケットを受け取ったノードはソースにデータを送信する です。つまり、一旦周りのノードをexpanding ring serachで徐々に検索していき条件にあったノードを検索、そのノードに対してユニキャスト通信をおこないこれを繰り返すというものです。 どのアプリケーションから改良していいかわからず(floodingから始まるので)expanding ring serachも中々実装できないので困っています。 どなたかどれか少しでもご教授いただけたら幸いです。 聞いてばかりですいません。 |
masa | 投稿日時: 2006/11/24 1:06 |
新米 登録日: 2006/8/12 居住地: 投稿: 14 |
Re: ring serach、floodingの方法について 自分も初心者なので恐縮なのですが、同じようなことを行おうとしているようなので投稿させていただきます。
フラッディング操作をアプリケーション層で実装するということであれば、私はMCBRを利用することで体裁を整える事ができました。 qulneko さんはフラッディング、そしてその後のユニキャスト、またスケジューリングの利用ということを行おうとしているようですが、一気に全部やろうとすると結構きついと思います。(qulneko さんのプログラミングスキルにもよるでしょうが ^^; ) ということで、フラッディングに関するあらましをこちらに載せます。また、どのレイヤーで実装するかは好みによるのかもしれませんが、私はアプリケーション層(MCBR)とネットワーク層(ip.cpp のNetworkIpReceivePacketFromMacLayer 部分)の、両方での実装が一番簡単そうだと踏み、そこで実装しました。 ちなみにMCBRを利用すれば、クライアントノードから1ホップのノードに対してはメッセージの送信をしてくれます。しかし、2ホップノード以降についてはサーバが別のノードに対してさらにホップさせる機能を追加してあげなければなりません・・・。 MCBRを利用する場合、 ・Floodingアドレスの定義 (ip.h) → #define IP_FLOOD_ADDRESS 0xC00000FF // 192.0.0.255 ・ノードがFloodingアドレス宛のパケットを受け取るようIsMyPacketとNetworkIpIsMulticastAddressを改良 → else if( destAddress == IP_FLOOD_ADDRESS) ・・・ 確か此処までやると、MCBRを受け取ったサーバはメッセージを更にフォワードさせてくれます。ただ、これだけだとTTL(=64)が切れるまでメッセージが永遠とネットワークを回り続けます。そこで、Flooding メッセージに別途 TTL の設定をしてあげます。 ・FloodingパケットのヘッダーにつけるTTLの大きさの定義(ip.h) ・パケットにヘッダーをつける関数(AddIpHeader)の改良 とりあえず此処までやると、一定時間でFloodingメッセージは止まります。ただ、この状態だと、TTLが切れるまで各ノードは同じメッセージを何度も繰り返しフォワード(重複送信)しています。これを問題とするかどうかはqulneko さん次第なのですが、私としては許容できなかったのでキューを利用することで解決しました。ただし、この方法が良いのかどうかは分かりません。常識的に見てノードに結構負荷がかかりそうなので、、、 私のアドバイスが qulneko さんのお役に立つかどうかは分かりませんが、Flooding の実装がんばってください! もし他の方法で実装されたのであれば、参考までにどうやったのか教えていただけると私もうれしいです ^^ でわ! |
qulneko | 投稿日時: 2006/11/25 17:40 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
Re: ring serach、floodingの方法について masaさん、ご丁寧なアドバイス本当にありがとうございます
大変わかりやすい解説までして頂いて本当に嬉しい限りです。 masaさんのMCBRからflooding方法と、その後の処理、とても参考になりそうです。 実際、私はプログラミングスキルが低いのでmasaさんの言うとおりflooding実装、ユニキャスト実装、タイマスケジュールと一歩一歩根気よく実装していこうと思います。 引用:
はい!もちろん、そのつもりです^^ 他の方法があれば報告させて頂きます。 本当にありがとうございました! |
adoc | 投稿日時: 2006/12/5 0:48 |
新米 登録日: 2006/12/4 居住地: 投稿: 2 |
Re: ring serach、floodingの方法について expanidng ring search,floodingの実装のトピックがあったのでこちらに書かせて頂きます。
私もqulnekoさんと同様、expanding ring searchを実装しようと考えています。 私の場合はいくつかのノードに擬似的にコンテンツを所持させ、それを見つける操作の一つとしてexpanding ring searchを使用したいと考えています。サーチが終わればコンテンツ所持ノード(ipアドレス)へ向けコンテンツ要求→コンテンツ送信、のような動作を考えています。 そこで、このトピックの他、「データパケットのフラッディング」を拝見しkabochaさんがおっしゃられているように、 http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=thread&topic_id=252&forum=43&post_id=985#985 aodvのRREQを(expanding ring searc)しながらfloodingしているのでaodvプロトコルとkabochaさんの方法を参考に実装しようとしました。 そこで質問ですが、現在適当なアプリケーション層からaodvを参考に新たに作成した3層から始まるfloodingする関数を直接呼び出して(aodvでいうAodvInitiateRREQ)expanding ring searchをするfloodingを試みようとしていますがこの方法は可能なのでしょうか?? また、このようにアプリ層から制御(サーチ)パケットをexpanding ring searchでfloodingして、その後searchしたノードに向けてクライアント側が要求パケット→サーバー側がそれの返答 という動作を考える場合アプリ層はどれを改造するのが一番効率的でしょうか?アプリ層はあまり触れたことがないもので。。 長々書いてしまい申し訳ございませんが、どれか一部でもこうではないか?などご教授頂けたら幸いです。宜しくお願いします。 |
ipoten | 投稿日時: 2006/12/5 11:09 |
一人前 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: ring serach、floodingの方法について こんにちは
AODV関連のことはよくわからないのですが、 adoc さんの質問は「アプリケーション層と3層のインタフェース」に論点があると思うので、 その部分についてコメントしてみます。 まず 引用: アプリケーション層からaodvを参考に新たに作成した3層から始まるfloodingする関数を直接呼び出して コーディング上工夫が必要なのは、その逆の3層でのsearch結果をアプリケーション層に通知する、 あるいはアプリケーション層から3層のsearch結果を取得する部分だと思います。 (1)3層からアプリケーション層へ通知する場合 複数のアプリケーションをサポートしたい場合、どのアプリケーションが結果を要求しているのか、 アプリケーションの種類やタイミングによってはどのセッションが要求しているのかを特定して通知を分岐させなければなりません。 通知はメッセージイベントで行うのがよさそうです。 UDPからアプリケーションへのインタフェースなどが参考になりそうです。 もちろん汎用性が不要であればがちがちのコーディングでも十分でしょう。 (2)アプリケーションが3層の結果を取得する場合 search結果が得られたタイミングがわからないので、ポーリングなどする必要があるかもしれません。 つぎに 引用: アプリ層はどれを改造するのが一番効率的でしょうか? こちらはほかの方の意見を求めます。 比較的単純なコマンドのやり取りをしているようなアプリがよさそうですが。 たとえばBellmanfordなんかは、いわゆるアプリケーションではないですが アプリケーション層でルーティングを行っているので、似たような動きをします、いかがでしょう? 蛇足・・・ このフォーラムでは投稿のメール通知機能が利用できますが、 半角カナや機種依存文字を使用すると通知メールが途中で途切れてしまうようです。 より多くの人に意見を求めたい場合には気をつけたほうがよさそうですね。 |
adoc | 投稿日時: 2006/12/6 21:49 |
新米 登録日: 2006/12/4 居住地: 投稿: 2 |
Re: ring serach、floodingの方法について ipotenさん、詳しいコメント本当にありがとうございます。
アプリケーション層から3層の関数を直接呼び、flooding動作をキックさせるのが可能そうなのでよかったです。 引用:
ipotenさんの言うとおり逆の動作が難しいと考えています。 そこで現在サーチ結果を3層からアプリ層へ送る動作を考えていますが 引用:
ここのおっしゃられてる部分がまだQualNetの日が浅い為自分の未熟で「通知の分岐」の意味と動作がわからずで…すいません。 引用:
確かにBellmanfordなどのルーティングをしているアプリケーションは参考になりそうです!! 実装段階において、最終目標はhttp(aplication)のように最初サーバーに対してリクエストしようするのですが、その前に3層でサーチを行い擬似コンテンツを所持しているノードを発見すれば宛先をそのノードに変えてそのノードにリクエストを送り、擬似コンテンツを返してもらうといものです。 こう考えるとapplicationのhttpを改造するのも手かなと書いてて思ったのですが甘いような気もします… 聞いてばかりですが、ご意見いただけたら嬉しいです。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |