メイン Scenario Setup & Configuration GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | 投稿するにはまず登録を |
題名 | 投稿者 | 日時 |
---|---|---|
GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | gogotea | 2012/1/23 0:03 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | scallion | 2012/1/24 20:44 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | hed | 2012/1/24 23:28 |
» Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | gogotea | 2012/1/25 21:40 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | scallion | 2012/1/25 23:04 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | gogotea | 2012/1/27 22:40 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 | scallion | 2012/1/31 15:27 |
フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
gogotea | 投稿日時: 2012/1/25 21:40 |
新米 登録日: 2011/12/31 居住地: 投稿: 8 |
Re: GUIでパケット分散_QueueSize変更によりTotalPacketsDropped、TotalPacketsReceived、Peak Queue Sizeの統計結果の矛盾 scallionさん、hedさん回答ありがとうございました。
お二方から「StatiRoutingができていないのではないか」という指摘を受けましたが、結論から書くと 「Static Routingはできています。」 CBR通信の開始時間とともにGUIのアニメーション上で、Static Routeを通ったマルチホップ通信が確認できています。 「CBRでA→B→C→Dと設定したとありますが、A→Dしか設定できないです。 A→B→C→Dはstatic routeでの設定となります。」 →Static routingでCBR通信をA→B→C→Dでやっているという意味です。 「転送経路はプログラムを変えなくてもデバッガで追いかけられますよ。 大変であればシナリオを小さくすれば問題の切り分けがしやすくなると思います。」 →以前3kake3のシナリオでパケットのフォワーディングをデバッグで追いかけようとしたことがありますが、 結論から書くと、ある程度の検討はつけましたが、どのファイルのどのソース部分(関数)でいつデータパケットのフォワーディングを行っているか正確に追い切ることができませんでした。 この点が分かると自分の研究に大変役立つので捕捉していただけると幸いです。 まず、フォワーディングではなく、どうなって初めて統計値のTotalPacketsDroppedが表示されるのかということが気になり、 この統計値を出力してるソース部分を探しました。 以下該当部分:if_queue.cpp sprintf(buf, "Total Packets Dropped = %u", (Int32)numPacketsDropped); numPacketsDroppedがどう変動していくかをプログラムで追い、最終的にパケット落ちを判断する式を発見しました。 以下該当部分:if_queue.cpp if (MESSAGE_ReturnPacketSize(msg) > (queueSizeInBytes - bytesUsed)) このif文の条件によりパケット落ちが発生するかどうかの判定をしています。 if文直後のプログラムの先頭にブレークポイントをつけF5(デバッグ)を押したところ、 コマンドプロンプト上でCurrentSimTimeが表示され、この時のCurrentSimTimeの値がCBR通信開始の時間であったこと 【Nodes】→OutputqueueSize=2001に変更しましたが(55番でパケット落ちをさせようとした) このパケット落ち判定式を通過した時のqueueSizeInBytesの値が2001であったことからこれがパケット落ち判定式であることは間違いないといえます。 しかし、私はこの2001という値が55番ノード(3kake3シナリオの場合は5番ノード)のOutputqueueSizeであることを自分で設定したので知っていますが、プログラミング上で、どうやって55番ノードでinterferceであるのかを指しているのかが分かりませんでした。 デバッグ途中にローカルで全ての変数を見ましたが、55番ノードに関連した変数はないようにみえました。 (160.0.0.55を一度2進数に変換してから10進数に戻すと=2835349559になります。ですがこの値はありませんでした。) F5を一度押したことにより、今パケット落ちが発生し、これからデータパケットのフォワーディングが続くはずだと思った私は このパケット落ち判定式を一度通ってから次にもう一度通るまでの間でパケットのフォワーディングを行っている関数があると考えました。 Forwarding関連の関数はたくさんあるわけですが、この方法で以下の2つの関数でパケットのフォワーディングを行っているのではないかと見当をつけました。 RouteThePacketUsingLookupTable() ↓ NetworkGetInterfaceAndNextHopFromForwardingTable() 3kake3のシナリオでは以下のような流れでStatic Routingを行っています。 2->5->8 4->5->8 デバッグを続け NetworkGetInterfaceAndNextHopFromForwardingTable()の中で destinationAddress=2835349512 nextHopAddress=0x001242f4 interferceIndex=0x001242ec など関連深い変数が変動するわけですが、この数値が何を表しているのかが分かりませんでした。 destinationAddressに関しては「2835349512」この数値を2進数に直し8bitずつに分けてから10進数に変換したところ 169.0.0.8とデータパケットの宛先端末を表す数値に変換できたわけですが、 nextHopAddressとinterferceIndexが表している数値が何なのかわからず追いきることができません。 またこの関数内にはディスティネーションの変数が2つあったりします。 単独であるもの(destinationAddress)、fowardTable構造体→row構造体の中にあるdestaddress フォワーディングに関して自分が取り組んだことをまとめてみました。 結局デバッグで追い切ることができまえんでした。 ________________________________ 分からない点・知りたい点のみピックアップします。 ・メイントピックで挙げた、PeakQueueSizeを超えていないのにパケット落ちが発生している矛盾と 4000パケット送っていた時よりも1000(残りの3000は別ルートで分散)パケット送ったときのほうがパケット落ちしてしまった矛盾の原因 ・以下の2つの変数が表す数値からどうやってIPアドレスを入手できるのか nextHopAddress=0x001242f4(10進数に変換すると1196788) interferceIndex=0x001242ec(10進数に変換すると1196780) ・パケットのフォワーディングをしている様子をデバッグで追いたいがその際に見る関数は RouteThePacketUsingLookupTable() NetworkGetInterfaceAndNextHopFromForwardingTable() この関数であっているのかどうか ・if_queue.cpp if (MESSAGE_ReturnPacketSize(msg) > (queueSizeInBytes - bytesUsed)) この式でqueueSizeInBytes=2001が55番ノード(私がQutputQueuesizeを変更したところ、3kake3シナリオでは5番)だとわかりますが、 プログラム上ではどうやって55番ノードであることを識別しているのか。 55番のIPアドレスを表すような変数はローカルにはなかった気がします。 (160.0.0.55を一度2進数に変換してから10進数に戻すと=2835349559になります) |
フラット表示 | 前のトピック | 次のトピック |