1. Tclスクリプトファイルcircle.tclコードコメント #シミュレーションに必要なプロパティをいくつか設定します。set val(chan) Channel/WirelessChannel set val(prop) 伝播/TwoRayGround val(netif) Phy/WirelessPhy を設定する val(mac) を設定する Mac/802_11 #プロトコルをDSRに設定した後、キューをCMUPriQueueに設定します val(ifq) CMUPriQueue を設定する val(ll) LLを設定する set val(ant) アンテナ/オムニアンテナ val(ifqlen) を 50 に設定する #ノード数を 0 にプリセットし、ユーザー入力を待ちます。この項目にはユーザー入力が必要です。入力しないとシミュレーションは実行されません。 val(nn)を0に設定する val(rp) DSR を設定する #シーンサイズのデフォルト値は1000*1000です val(x)を1000に設定する 値を1000に設定する #円のデフォルトの半径は400です val(r)を400に設定する #この手順は画面に印刷するために使用されます。ターミナルに ns circle.tcl と入力し、パラメータ format proc usage {} { を追加します。 グローバル argv0 "\nusage: $argv0 \[-nn ノード\] \[-rr\] \[-xx\] \[-yy\]\n" を配置します 「注意: \[-nn ノード\] は必須で、その他はオプションです。\n」 } #この手順は、ユーザー入力に応じていくつかのプリセットパラメータの値を変更するために使用されます。 proc getval {argc argv} { グローバル値 ラップ ヴァリスト nn rxyz #argcはパラメータの数、argvはパラメータ全体からなる文字列です。{set i 0} {$i < $argc} {incr i} { #変数argはargvのi番目の部分で、スペースで区切られています。set arg [lindex $argv $i] # 文字 "-" のない文字列をスキップします。これは通常、ユーザーが入力した数字です。# 文字列範囲 $arg mn は、文字列 $arg の m 番目の文字から n 番目の文字を取得することを意味します if {[文字列範囲 $arg 0 0] != "-"} 続行 名前を設定する [文字列範囲 $arg 1 終了] #プリセット変数を変更する(ノード数、半径、シーンサイズ) val($name) [lindex $argv [expr $i+1]] を設定します。 } } #getval プロシージャを呼び出す getval $argc $argv #ユーザーはパラメータを入力せず、nscircle.Tclと入力しただけなので、ノード数は0とみなされます { $val(nn) == 0 } の場合 { #印刷の使用法 出口 } #シミュレーションインスタンスセット ns を作成する [新しいシミュレータ] #記録ファイルを設定する set tracefd [open circle.tr w] $ns トレース-すべて $tracefd namtracefd を設定する [open circle.nam w] $ns namtrace-all-wireless $namtracefd $val(x) $val(y) #トレースファイルを閉じて、アニメーションをデモンストレーションするためにnamプログラムを呼び出します。procfinish{}{ グローバル ns tracefd namtracefd $ ns フラッシュトレース $tracefdを閉じる $namtracefdを閉じる 実行namcircle.nam & 終了 0 } set topo [新しい地形] $topo ロードフラットグリッド $val(x) $val(y) 神を作成する $val(nn) #ノード構成。バージョン上の理由により、addressTypeはdefに設定されています $ns ノード構成 -addressType def\ -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac)\ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoインスタンス $topo \ -エージェントトレースオン\ -ルータトレースオン\ -mactrace オフ \ -移動トレースOFF # ノードを初期化する for {set i 0} {$i < $val(nn)} {incr i} { #ノードセット node_($i) [$ns node] を作成します $node_($i) ランダムモーション 0 #三角関数を使用してノードの位置を計算して設定します $node_($i) set X_ [expr $val(r) * cos($i * 2 * 3.14159 / $val(nn))] $node_($i) は Y_ [式 $val(r) * sin($i * 2 * 3.14159 / $val(nn))] を設定します $node_($i) を Z_ 0 に設定 # nam のモバイル ノードの表示サイズを設定します。そうしないと、ノードは nam に表示されません。$ns initial_node_pos $node_($i) [expr $val(x) / 10] } #node_(0) にUDPエージェントを作成する set tcp [new Agent/UDP] $ns アタッチエージェント $node_(0) $tcp # 直径に沿ってノード(0)の反対側のノードにデータ受信機を作成し、nullを設定します[新しいエージェント/Null] $ns アタッチエージェント $node_([expr $val(nn)/2]) $null #パケットサイズが500B、間隔が0.05秒の新しいCBRトラフィックジェネレータを作成します cbrの設定 [新しいアプリケーション/トラフィック/CBR] $cbr パケットサイズを 5000 に設定 $cbr 間隔設定_ 0.05 #UDPとNullを接続する $cbr アタッチエージェント $tcp $ns は $tcp $null に接続します # 0.1 秒でデータを送信し、3.0 秒でデータの送信を停止し、5.0 秒で終了プロセスを呼び出します $ns at 0.1 "$cbr start" $ns 3.0 "$cbr 停止" $ns 5.0「終了」 $ns 実行 2. gawk スクリプトコード分析.awk コメント 始める { #初期変数を設定 num_D = 0; #失われたパケットの数 num_s = 0; #送信パケットの数 num_r = 0; #受信パケットの数 rate_drop = 0; #パケット損失率 sum_delay = 0; #合計遅延時間 average_delay = 0; #平均遅延時間} { #トレースファイルレコードを読み取ります。イベント = $1; #最初の列はパケット操作です (s は送信パケット、r は受信パケット) time = $2; #2 列目は操作時間です node = $3; #3 列目はノード番号です trace_type = $4; #4 列目は操作レイヤーです flag = $5; #5 列目はフラグです uid = $6; #6 列目はノード識別子です pkt_type = $7; #7 列目はパケット タイプです pkt_size = $8; #8 列目はパケット サイズです #操作 if (event == "s" && trace_type == "AGT" && pkt_type == "cbr") { send_time[uid] = time; #パケットの送信時間を記録する配列を作成します num_s++; #送信されたパケットの合計数を記録します } if (イベント == "r" && トレースタイプ == "AGT" && パケットタイプ == "cbr") { delay[uid] = time - send_time[uid]; #遅延時間を記録する配列を作成する num_r++; #受信したパケットの合計数を記録する } if (イベント == "D" && pkt_type == "cbr") delay[uid] = -1; #-1はパケットが失われ、遅延時間内にパケットが記録されないことを意味します} 終わり { #パケット損失数とパケット損失率を計算します num_D = num_s-num_r; #パケット損失の合計数 rate_drop = num_D / num_s * 100.0; #パケット損失率を計算します #遅延を計算します ( i = 0; i < num_s; i++) {if (遅延[i] >= 0) 合計遅延 += 遅延[i]; }#合計遅延時間 average_delay = sum_delay / num_r; #平均遅延時間 #結果を表示 printf("ドロップされたパケットの数: %d \n",num_D); printf("送信されたパケット数: %d \n",num_s); printf("ドロップ率: %.3f%% \n",rate_drop); printf("平均遅延時間: %.9f \n",average_delay); } 3. 実験結果 (1) ネットワークノードの数は 12 に設定されています。実行結果は次のようになり、nam ファイルと trace ファイルの 2 つの記録ファイルが生成されます。 この時点で、トレース ファイルのサイズは 91.8kb、nam ファイルのサイズは 76.0kb です。 次に、gawk ツールを使用して、生成されたトレース ファイルを分析します。 gawk ツールがインストールされていない場合は、sudo apt-get install gawk コマンドを実行してインストールします。 (2)ノード数を再度8に変更します。実行結果は以下のようになります。ただし、フォルダにcircle.namファイルとcircle.trファイルは追加されません。 2 つのファイルのプロパティを確認すると、サイズが変更されており、新しく作成されたネットワーク シミュレーション環境の記録ファイルが上書きされたことがわかりました。 Gawk は生成されたトレース ファイルを分析するためにも使用できます。ネットワーク ノードの数が増えると、パケット損失率と平均遅延が増加することがわかりました。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル
目次単一条件単一データフィルタリング単一条件複数データフィルタリング複数の条件付きデータフィルタリン...
要件:ページ コンテンツが短く、ブラウザーの高さをサポートできない場合でも、フッターをウィンドウの下...
目次序文1. ラベルスタイルを定義する2. GeoJSONデータのシミュレーション3. Vercto...
方法1: テーブル属性を使用する: header-cell-class-name テーブルインターフ...
js では、ログインまたは登録を確認する前に、ユーザーが特定の契約書を読むように設定します (使用...
この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...
以前、プロジェクトを行う際に ECharts を使用しました。今日はそれをメモとして整理し、より多く...
序文この記事は主にubantu 16.4 Hadoop完全分散構築に関する関連コンテンツを紹介し、皆...
精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...
参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...
環境に関する声明ホストOS: Cetnos7.9 最小インストールdocker バージョン: 20....
目次解決された主な問題1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になり...
この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...
目次1. 構造指示モジュールforRoot()を書く3. スタイルの定義ドラッグ時の順序を調整するに...
<br />1年前、インターネット上にはinline-blockプロパティに関する記事は...