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

パスワード:


パスワード紛失

新規登録
検索
メインメニュー
アクセスカウンター
2024/05/10:3/3
2024/05/09:21/23

2024/03/11より374/1385
人気モジュール
No.1: フォーラム 99
No.2: QualNet概要 6
日曜日からの合計
人気Browser&OS
No.1:巡回ロボット90
No.2:Linux3
No.3:Unknown OS1

No.1:どっかの巡回ロボット85
No.2:Baidu巡回ロボット3
No.3:Safari3

日曜日からの合計
メイン
   Routing Protocols Implementation & Model Development
     CBRを用いたブロードキャスト転送
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
tak
投稿日時: 2008/11/4 17:34
新米
登録日: 2008/10/30
居住地:
投稿: 2
CBRを用いたブロードキャスト転送
はじめまして。
お世話になります。

現在、CBRを変更し、
ネットワーク全体にブロードキャストを行うプロトコルを作成中です。

大まかな仕様としては、
・CBR Clientが255.255.255.255でパケットを送信。
・CBR Serverは受信したパケット中のヘッダ情報を参照し、転送するかどうかを判断。
・転送を行う場合はブロードキャストで転送。
とするつもりです。

現状としては
app_cbr.cpp内のAppLayerCbrServer()に/*--relay data--*/以下を追加しました。

AppLayerCbrServer(Node *node, Message *msg)
980 #ifdef ADDON_BOEINGFCS
981            if ((serverPtr->useSeqNoCheck && data.seqNo >= serverPtr->seqNo) ||
982                 (serverPtr->useSeqNoCheck == FALSE))
983 #else
984             if (data.seqNo >= serverPtr->seqNo)
985 #endif
986             {


/*-----------relay data-------------*/
            char addrRly[MAX_STRING_LENGTH];
            Address relayadd;
            NodeAddress relayid;

            sprintf(addrRly,"%ld",node->nodeId); //自身のIDをaddrRlyに格納

            IO_AppParseDestString( //Address型に変換
                  node,
                  (char *)"CBR 1 255.255.255.255 100 512 1S 1S 25S PRECEDENCE 0",
                  addrRly,
                  &relayid,
                  &relayadd);

            //ヘッダ情報をコピー、送信元を自身、宛先はコピー(255.255.255.255)してUDPへ
            APP_UdpSendNewHeaderVirtualDataWithPriority(
                  node,
                  APP_CBR_SERVER,
                  relayadd,  //info->sourceAddr,
                  (short) data.sourcePort,
                  info->destAddr,
                  (char *) &data,
                  sizeof(data),
                  data.itemSize - sizeof(data),
                  data.tos,
                  0,
                  TRACE_CBR);

このプログラムを実行した場合、
それらしく動いてくれてはいるのですが、データを受け取ってくれない端末が存在します。
例えば
直線上に4台の端末(1,2,3,4)を設置し(隣り合う端末だけが直接通信できる)、端末1が送信を行った場合、
最初のパケット(seqNo.0)は端末3は送信を行わず、端末4まで届きません。
それ以後のパケット(seqNo.1〜)は全端末へ届くのですが、端末3の送信を端末2が受信しません。

Qualnet.traceファイルで確認するとCBR→UDP→IPv4とデータは渡され、
ENQUEUEとDEQUEUEまで実行されています。

データを受け取らない端末が存在する原因として考えられることは何でしょうか?
ルーティングプロトコルとしてBellman Fordが動いているのですが、
それを完全に無視してパケット転送を行おうとしていることが問題なのでしょうか?
そもそも、ブロードキャストパケットを利用し、アプリケーション層でルーティングの制御を行おうとしてるのが問題なのでしょうか?

どんな些細なことでもいいのでアドバイスもらえれば助かります。
よろしくお願いします。
tak
投稿日時: 2008/11/5 21:17
新米
登録日: 2008/10/30
居住地:
投稿: 2
Re: CBRを用いたブロードキャスト転送
自己解決しました。

原因は単純に
端末が1,2,3,4と等間隔に直線上にならんでいるために、
両側の端末から同時に返信が行われ衝突が発生しているためでした。

 a: 1  2  3  4
 b: 1→2  3  4
 c: 1←2→3  4
 d: 1→2←3→4

例えば上記aのように直線上に端末1,2,3,4が設置されていて
端末1が送信を行ったとします(b)。
次に端末2がそれを転送します(c)。
端末2が送ったデータは端末1と3が同時に受信し、
同時に送信を行うために端末2で衝突が発生してしまいます(d)。
それが原因で端末2へ端末3が送ったデータが届かなかったみたいです。

端末1がデータの転送を行わないように設定してやると
考えてた動きになりました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ
Copyright c KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
XOOPS Cube PROJECT