メイン Application Layer Protocol Implementation & Model Development アプリ層からの制御パケットについて | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
qulneko | 投稿日時: 2006/12/19 19:10 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
アプリ層からの制御パケットについて いつもお世話になっております。
今現在、「アプリケーション層」から制御パケットをANY_DESTでfloodingする動作を実装しようと考えています。 制御パケット内にflagを立てそのパケットを受け取ったノードはそのflagを見て条件が合えばリプライを返し、そのリプライを受け取った送信ノードはリプライを返したノードにユニキャストでデータを送信し、そのデータを受けたノードは再度ユニキャストでデータを送信ノードに返すというものです。 そこでこの動作を実装するにあたりlookupアプリケーションが利用できると考えたので ?application.hにAppTypeとして「APP_FLOOD_CLIENT」と「APP_FLOOD_SERVER」を追加 ?application.cppのAPP_ProcessEventのcaseに上記のプロトコルを追加 #case(…){AppLayerFloodClient(Node *node,Message *msg){… #case(…){AppLayerFloodServer(Node *node,Message *msg){… このプロトコルをlookupアプリケーションの中で使用(上記の関数は共にAppLayerLookupClient(),AppLayerLookupServer(),を真似ています) そして、 AppLookupClientInit(……)のtimerMsgの所で timerMsg = MESSAGE_Alloc(node,APP_LAYER,APP_FLOOD_CLIENT,MSG_APP_FLOODTimerExpired) で MSG_APP_FLOODTimerExpiredの(timer->type)APP_TIMER_SEND_PKTで 制御パケットをflooding(制御パケットをfloodingする関数にAPP_UdpSendNewHeaderData()を使用し宛先をANY_DESTに指定),その後、隣接ノードは制御パケットを受け取り「AppLayerFloodServer()」内のcase MSG_APP_FromTransport内で条件が合えば、APP_UdpSendNewHeaderData()で宛先をソースアドレスにしユニキャストする、までを実装しています。 今後はユニキャストしてきたノードのIPアドレスを最初にlookupで繋いだデスティネーションノードと入れ替えて、リプライをしてきたノードに向かってlookupの操作を行い今回実行したい動作を行おうと考えていますがここでお伺いしたことがあります。 ?セッション一つでこの動作を行った場合、ソースノードは制御パケットをfloodingし、条件にあったノードはユニキャストでソースノードにリプライを返す。という処理はできたのですが、セッションを2個以上にすると(例、全10node,1->4,2->5)ソースノードのfloodingは行われるのですが、なぜか隣接ノードが制御パケットを受信しない事態が発生してしまいます。ANY_DESTで送っているのですが…原因がわかりません。 しかし、start timeを(例)の場合ソース1,2でずらして(1:1s,2:2s)シミュレーションをすると、ちゃんとfloodingし隣接ノードも受信、条件ノードがリプライという動作を行ってくれます。 なぜこのようなことが起こるのでしょうか? ?そもそも、既存アプリケーションの中に新たなプロトコル(今回でいうAPP_FLOOD_CLIENT、APP_FLOOD_SERVER)を加えて動作させてもいいのでしょうか? 長々書いてしまいましたが、こうではないか?とお答えいただける方がおられましたらコメントいただけたら幸いです。よろしくお願いします。 |
ipoten | 投稿日時: 2006/12/19 19:32 |
一人前 登録日: 2005/7/12 居住地: 投稿: 102 |
Re: アプリ層からの制御パケットについて こんにちは qulnekoさん
引用: (1)セッションを2個以上にすると(例、全10node,1->4,2->5)ソースノードのfloodingは行われるのですが、なぜか隣接ノードが制御パケットを受信しない事態が・・・ 下位レイヤがどのようなスタック構成になっているかわからないので一概には言えませんが、通常近くにある複数のノードが同時にブロードキャスト送信を行うと、衝突して落ちてしまうと思います。 シミュレーションではどこかのレイヤで乱数の要素が入らなければ、まったく同時に送信されますし、ブロードキャストでは再送もありません。 引用: (2)そもそも、既存アプリケーションの中に新たなプロトコル(今回でいうAPP_FLOOD_CLIENT、APP_FLOOD_SERVER)を加えて動作させてもいいのでしょうか? QualNetのスタイルを見ると、1つのアプリケーションモデルであればClientやServerに関係なく1つのAppTypeを割り当てるような気もしますが、仕組みを理解されているのであればどんな書き方でもかまわないと思いますよ。 こんな回答で、ヒントになりますか? |
qulneko | 投稿日時: 2006/12/20 21:10 |
新米 登録日: 2006/10/13 居住地: 投稿: 8 |
Re: アプリ層からの制御パケットについて ipotenさん、ご回答ありがとうございます!!
引用: 下位レイヤがどのようなスタック構成になっているかわからないので一概には言えませんが、通常近くにある複数のノードが同時にブロードキャスト送信を行うと、衝突して落ちてしまうと思います。 そういうことですか。納得です。 これからはスタートタイムを指数で発生させようと思います。 本当に大変参考になりました!! ありがとうございました!! |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |