![]() ![]() ![]() | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kome | 投稿日時: 2010/12/13 16:02 |
半人前 ![]() ![]() 登録日: 2009/5/10 居住地: 投稿: 22 |
即時式ルータの実装について いつもお世話になります。
今回、研究でコネクション型のネットワークを構築したいと思っているのですが、 その際、パケットを一時的に溜めるルータではなく、 到着したパケットを即時に処理する交換機のようなデバイスを実装したいと考えております。 その手段として、Hubにルーティングの機能を追加したいと思っています。 Hubの構造を上記のように改変することは可能でしょうか? |
chackn | 投稿日時: 2010/12/14 20:59 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: 即時式ルータの実装について komeさん、こんにちは。
無線のカットスルーモデルを作ったことがあるという同僚に聞いて みました。基本的には、あるI/Fで受信したパケット(の受信イベント) を、受信が完了する前に別のI/Fにコピーすることになるようです。 無線、有線限らず、通常、ストア・アンド・フォワード型のルータは [受信開始]->[受信終了]->[送信開始]->[送信終了]の順にイベント 処理を行います。その代りに、[受信開始]->[送信開始]->[受信終了]-> [送信終了]とやるわけですね。 有線モデルだとおっしゃるとおり、Hubのソース、mac802_3.cppが 参考になると思います。関数Mac802_3Layer()がイベントハンドラ 関数です。イベント(メッセージ)MSG_MAC_StartTransmissionの処 理が[受信開始]のトリガになっています。 同様に、MSG_MAC_TransmissionFinishedの処理は[受信終了]のトリ ガです。この関数を改造すればいいと思います。 あと、Switchのように特定のポートにだけ送信するようなことはこ のソースでは行っていません。必要なら追加実装しないといけません。 自分がそのパケット(フレーム)の宛先ノードの時だけイベント処理を すれば良さそうな気がします。 有線ですからエラー判定とかは考えなくていいのでしょうか? であれば、単純にイベント受信→適当な遅延→イベントの複製と いう処理で良いように思います。無線の場合、受信した信号を アナログ的に増幅して再度送信するので、ノイズが蓄積していく んですよね。有線も厳密に言えば同じなんですが。 こんな説明でお役に立てましたか? |
kome | 投稿日時: 2010/12/15 18:00 |
半人前 ![]() ![]() 登録日: 2009/5/10 居住地: 投稿: 22 |
Re: 即時式ルータの実装について chacknさん、丁寧な回答ありがとうございます。
大変参考になりました。 >関数Mac802_3Layer()がイベントハンドラ >関数です。イベント(メッセージ)MSG_MAC_StartTransmissionの処 >理が[受信開始]のトリガになっています。 >同様に、MSG_MAC_TransmissionFinishedの処理は[受信終了]のトリ >ガです。この関数を改造すればいいと思います。 Mac802_3Layerを改造していこうと思います。 case MSG_MAC_TransmissionFinished:の中で[受信終了]のイベントよりも先に、 case MSG_MAC_TimerExpired:のような[送信開始]を行い、 その後、正規のcase MSG_MAC_TimerExpired:の処理はなにもせず終了 のような、処理を考えています。 >有線ですからエラー判定とかは考えなくていいのでしょうか? >であれば、単純にイベント受信→適当な遅延→イベントの複製と >いう処理で良いように思います。 いまのところ、エラー判定については考えていませんでした。 貴重なアドバイスありがとうございます。 上記の改変が終了したら、実装したいと思います。 また、この改造したHubを中継機としてネットワークに実装したいと考えているのですが、 Hub同士をLinkでつなぐことができないようです。 >あと、Switchのように特定のポートにだけ送信するようなことはこ >のソースでは行っていません。必要なら追加実装しないといけません。 >自分がそのパケット(フレーム)の宛先ノードの時だけイベント処理を >すれば良さそうな気がします。 特定ポートに送信する追加実装でこの問題は解消されるでしょうか? 再び質問して申し訳ないのですが、ご教授のほどお願いいたします。 |
chackn | 投稿日時: 2010/12/16 11:07 |
常連 ![]() ![]() 登録日: 2005/5/13 居住地: Kanagawa, Japan 投稿: 61 |
Re: 即時式ルータの実装について komeさんこんにちは。
>Hub同士をLinkでつなぐことができないようです。 そうだったかもしれません。QualNetではHubは具体的なネットワークノードというよりも、「有線サブネット」を表現するための手段として用いられていますね。逆にSwitchは具体的な実体を持ったノードです。 Switchをベースに改造する手もあると思いますが、Hubよりも複雑なんですよね。 >特定ポートに送信する追加実装でこの問題は解消されるでしょうか? >再び質問して申し訳ないのですが、ご教授のほどお願いいたします。 上に書いたとおりで、Hub同士を繋ぐことは多分、想定されていません。もしどうしてもそれが必要なら、面倒でもSwitchをベースに改造した方がいいかと思います。ちなみに、Switchは簡易モデルと詳細モデルがあるみたいですね。 ちなみに、フォーラムで最近、この簡易モデルにはバグがあると書いてあったので、詳細モデルを使ったほうがいいかもしれません。以下の記事も参考にしてください。 http://simweb.kke.co.jp/qualnet/forum/modules/newbb/viewtopic.php?viewmode=flat&topic_id=611&forum=29 詳細モデルのSwitchのソースは以下にありますのでお間違えなく。 %QUALNET_HOME%\libraries\multimedia_enterprise\src では。 |
kome | 投稿日時: 2010/12/17 18:57 |
半人前 ![]() ![]() 登録日: 2009/5/10 居住地: 投稿: 22 |
Re: 即時式ルータの実装について chacknさん、お返事ありがとうございます。
>Hub同士を繋ぐことは多分、想定されていません。もしどうしてもそれが必要なら、面倒でもSwitchをベースに改造した方がいいかと思います。ちなみに、Switchは簡易モデルと詳細モデルがあるみたいですね。 >ちなみに、フォーラムで最近、この簡易モデルにはバグがあると書いてあったので、詳細モデルを使ったほうがいいかもしれません。以下の記事も参考にしてください。 Detailed Switch Modelに前回教えていただいた「受信終了」と「送信開始」の順序を入れ替えてみようと思います。 Hubのときより、ソースの内容が複雑で難しそうですが、できる限りやってみようと思います。 このたびは、いろいろとありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |