![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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--*/以下を追加しました。
このプログラムを実行した場合、 それらしく動いてくれてはいるのですが、データを受け取ってくれない端末が存在します。 例えば 直線上に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が設置されていて 端末1が送信を行ったとします(b)。 次に端末2がそれを転送します(c)。 端末2が送ったデータは端末1と3が同時に受信し、 同時に送信を行うために端末2で衝突が発生してしまいます(d)。 それが原因で端末2へ端末3が送ったデータが届かなかったみたいです。 端末1がデータの転送を行わないように設定してやると 考えてた動きになりました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |