Japan QualNet Community Forums Japan QualNet Community Forums
Welcome Guest 
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/04/28:4/4
2024/04/27:21/24

2024/02/28より284/1375
人気モジュール
No.1: フォーラム 1
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット4

No.1:どっかの巡回ロボット4

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     データパケットのフラッディング
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nanashi
投稿日時: 2006/8/7 2:57
新米
登録日: 2006/1/8
居住地:
投稿: 16
データパケットのフラッディング
いつもお世話になっております

CBRなどのデータパケットをユニキャストやマルチキャストではなく、単純にフラッディング(ブロードキャスト)させたいと考えています。

このようなことを実現するためのフラッディングプロトコルはあらかじめ用意されているのでしょうか?

また、ないとしたら実現のためにはどのあたりをいじればよいのでしょうか??

このあたりではないか?程度のことでも構いませんのでお答えいただけたらと思います。宜しくお願いします。
maxam
投稿日時: 2006/8/7 9:56
常連
登録日: 2006/4/11
居住地:
投稿: 58
Re: データパケットのフラッディング
こんにちは

マルチキャストアプリケーションを設定して、そのMulticast Group Addressに
ブロードキャストアドレスを設定するというのはどうでしょう。

以下、試しにやってみました。
1.ノードをいくつか配置
2.そのうちのひとつのノードにSingleHostApplication(MCBR)設定
Nodes - SingleHostApplications - 右クリックでAdd
MCBRを選択
3.Multicast Group Addressに192.0.0.255を設定
nanashi
投稿日時: 2006/8/7 17:18
新米
登録日: 2006/1/8
居住地:
投稿: 16
Re: データパケットのフラッディング
>maxamさん

こんにちは、回答のほうありがとうございます
さっそく参考にして実行させていただきました。

この方法ですと送信元の1ホップ以内にいる全ノードに対してブロードキャストは行われているようなのですが、その他のノードに対してはデータパケットが転送されていきません。

現在やろうとしていることは、1ホップ以内にいる全ノードにブロードキャストしたら、今度はそれらのノードが自分の通信範囲内の全ノードに対してブロードキャストを行い、これを繰り返すことでネットワーク全体に対してフラッディングが行われるというものなのですが、こういったことをするにはどうしたら良いのでしょうか?
mast
投稿日時: 2006/8/7 23:03
一人前
登録日: 2005/4/7
居住地:
投稿: 93
Re: データパケットのフラッディング
引用:
現在やろうとしていることは、1ホップ以内にいる全ノードにブロードキャストしたら、今度はそれらのノードが自分の通信範囲内の全ノードに対してブロードキャストを行い、これを繰り返すことでネットワーク全体に対してフラッディングが行われるというものなのですが、こういったことをするにはどうしたら良いのでしょうか?


ブロードキャストパケットならなんでもかんでも全てフラッディングしてしまうようにIPを改造する、という方法ではどうですか?全ノードがそのように動いてしまいますが、以下のようなアプローチで実現できるように思います。
(コードを読んだだけで動かしてはいないので、動くかどうかは分かりませんが。。)

一般に、IPレベルでのブロードキャストパケットの再ブロードキャストというのは、禁止されているはず。
なので、その禁止事項を取っ払えばブロードキャストパケットを再ブロードキャストしてくれるはず。
QualNetでその禁止ルールを適用している箇所は、ip.cppのNetworkIpReceivePacketFromMacLayer()の以下の箇所。(コードは3.9.5のもの)
03621     // IsMyPacket() determines whether the packet should be delivered or
03622     // forwarded.  IsMyPacket() checks multicast subscriptions as well
03623     // as the host and broadcast addresses of all local interfaces.
03624 
03625     if (IsMyPacket(node, ipHeader->ip_dst))
03626     {
03627         // Deliver IP packet to node.
03628         //
03629         // (We actually deliver a copy of the message instead of the
03630         // original.  This is in case the packet is multicast, one copy
03631         // of which is delivered, and the other copy, forwarded.)
03632 
03633         // Need to go through the backplane to the processor first before
03634         // deliverying data to higher layers...
03635         NetworkIpSendOnBackplane(node,
03636                                  MESSAGE_Duplicate(node, msg),
03637                                  incomingInterface,
03638                                  CPU_INTERFACE,
03639                                  previousHopAddress);
03640 
03641         //DeliverPacket(node, MESSAGE_Duplicate(node, msg),
03642         //              incomingInterface, previousHopAddress);
03643 
03644         if (NetworkIpIsMulticastAddress(node, ipHeader->ip_dst))
03645         {
03646             // Destination address is multicast address, so pass packet
03647             // to forwarding process for potential multicast routing.
03648 
03649             ForwardPacket(node, msg, incomingInterface, ANY_IP);
03650         }
03651         else
03652         {
03653             // Wasn't a multicast packet, so free message.
03654             //
03655             // [In my tests, the copy and free method happens to be 0.5%
03656             // faster than logic which copies only if necessary. -Jeff]
03657 
03658             MESSAGE_Free(node, msg);
03659         }
03660     }
03661     else
03662     {
03663         // Forward packet.
03664         ForwardPacket(node, msg, incomingInterface, previousHopAddress);
03665     }

なので、ここに、「ブロードキャストパケットはフォワードする」というルールを無理やり追加する。
03621     // IsMyPacket() determines whether the packet should be delivered or
03622     // forwarded.  IsMyPacket() checks multicast subscriptions as well
03623     // as the host and broadcast addresses of all local interfaces.
03624 
03625     if (IsMyPacket(node, ipHeader->ip_dst))
03626     {
03627         // Deliver IP packet to node.
03628         //
03629         // (We actually deliver a copy of the message instead of the
03630         // original.  This is in case the packet is multicast, one copy
03631         // of which is delivered, and the other copy, forwarded.)
03632 
03633         // Need to go through the backplane to the processor first before
03634         // deliverying data to higher layers...
03635         NetworkIpSendOnBackplane(node,
03636                                  MESSAGE_Duplicate(node, msg),
03637                                  incomingInterface,
03638                                  CPU_INTERFACE,
03639                                  previousHopAddress);
03640 
03641         //DeliverPacket(node, MESSAGE_Duplicate(node, msg),
03642         //              incomingInterface, previousHopAddress);
03643 
03644         if (NetworkIpIsMulticastAddress(node, ipHeader->ip_dst))
03645         {
03646             // Destination address is multicast address, so pass packet
03647             // to forwarding process for potential multicast routing.
03648 
03649             ForwardPacket(node, msg, incomingInterface, ANY_IP);
03650         }
              else if (destAddress == ANY_DEST)
              {
                  // Destination address is broadcast address, BUT pass packet
                  // to forwarding process.
      
                  ForwardPacket(node, msg, incomingInterface, ANY_IP);
              }
03651         else
03652         {
03653             // Wasn't a multicast packet, so free message.
03654             //
03655             // [In my tests, the copy and free method happens to be 0.5%
03656             // faster than logic which copies only if necessary. -Jeff]
03657 
03658             MESSAGE_Free(node, msg);
03659         }
03660     }
03661     else
03662     {
03663         // Forward packet.
03664         ForwardPacket(node, msg, incomingInterface, previousHopAddress);
03665     }

mast
投稿日時: 2006/8/7 23:15
一人前
登録日: 2005/4/7
居住地:
投稿: 93
Re: データパケットのフラッディング
すいません。コードが間違ってました。
また、ForwardPacketの第4引数がANY_IPで良いかどうかは微妙…
BEFORE
              else if (destAddress == ANY_DEST)
              {
                  // Destination address is broadcast address, BUT pass packet
                  // to forwarding process.
      
                  ForwardPacket(node, msg, incomingInterface, ANY_IP);
              }


AFTER
              else if (ipHeader->ip_dst == ANY_DEST)
              {
                  // Destination address is broadcast address, BUT pass packet
                  // to forwarding process.
      
                  ForwardPacket(node, msg, incomingInterface, ANY_IP);
              }
nanashi
投稿日時: 2006/8/8 19:25
新米
登録日: 2006/1/8
居住地:
投稿: 16
Re: データパケットのフラッディング
>mastさん
詳細な回答のほうありがとうございます!!
さっそく試してみたところ、if (destAddress == ANY_DEST)の場合、if (ipHeader->ip_dst == ANY_DEST)の場合
ともにif文の中に入ってきませんでした

ですが、ためしに違う箇所に ForwardPacket(node, msg, incomingInterface, ANY_IP); と記述してみたところ
フラッディングっぽい動作が行われることが確認できました
これを参考に今後if文の条件や、詳細な設計などを行っていきたいと思います。このたびは丁寧な対応のほうありがとうございました!
mast
投稿日時: 2006/8/9 10:23
一人前
登録日: 2005/4/7
居住地:
投稿: 93
Re: データパケットのフラッディング
引用:

さっそく試してみたところ、if (destAddress == ANY_DEST)の場合、if (ipHeader->ip_dst == ANY_DEST)の場合
ともにif文の中に入ってきませんでした


255.255.255.255宛のパケットを投げればフラッディングされるかと思ったのですが、

ハズレ…でしたか。。
masa
投稿日時: 2006/10/9 14:05
新米
登録日: 2006/8/12
居住地:
投稿: 14
Re: データパケットのフラッディング
こんにちわ、はじめまして。
QualNetを使い始めたばかりの初心者です。私も nanashi さんと同様にフラッディングの動作をさせたいのですが、

ForwardPacket(node, msg, incomingInterface, ANY_IP);

を書き込む位置、条件文の書き方を色々と試してみたのですが上手くいきません。どのようにすれば動作できるのか、詳しく教えていただけると幸いです。
kabocha
投稿日時: 2006/10/11 10:42
常連
登録日: 2006/9/8
居住地:
投稿: 43
Re: データパケットのフラッディング
フラッディング用のアプリケーションをCBRでも改造して作って dst:=255.255.255.255 で送信してあげるのが一番簡単そうですが。
masa
投稿日時: 2006/10/12 2:25
新米
登録日: 2006/8/12
居住地:
投稿: 14
Re: データパケットのフラッディング
kabocha さん、ご返答ありがとうございます。
CBRをアプリケーション改造でANY_DEST(255.255.255.255)宛に送る事ができるようになったとしても、1ホップ先のノードに対してまでしか送ることができないのではないでしょうか。

nanashi さん同様、現在やろうとしていることは

-----------------------------------------------------------
1ホップ以内にいる全ノードにブロードキャストしたら、今度はそれらのノードが自分の通信範囲内の全ノードに対してブロードキャストを行い、これを繰り返すことでネットワーク全体に対してデータを送信するフラッディング
-----------------------------------------------------------
です。

これを解決するために作成工程として考えているのが

・ブロードキャストアドレス宛のパケットの再ブロードキャスト
・重複したブロードキャストメッセージの削除

なのですが、うまく進みません。
何かわかりましたらご助言をお願いします。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT