ns-3 ネットワヌク シミュレヌタヌのチュヌトリアル。 第4ç« 

ns-3 ネットワヌク シミュレヌタヌのチュヌトリアル。 第4ç« 
第1,2章
第3章

4 コンセプト抂芁
4.1 䞻芁な抜象化
4.1.1 ノヌド
4.1.2 アプリケヌション
4.1.3 チャネル
4.1.4 ネットデバむス
4.1.5 トポロゞカルアシスタント
4.2 最初の ns-3 スクリプト
4.2.1 定型コヌド
4.2.2 プラグむン
4.2.3 ns3 名前空間
4.2.4 ロギング
4.2.5 メむン機胜
4.2.6 トポロゞヌ・アシスタントの䜿甚
4.2.7 アプリケヌションの䜿甚
4.2.8 シミュレヌタ
4.2.9 スクリプトの構築
4.3 ns-3 ゜ヌスコヌド

ç« 4

コンセプトの抂芁

ns-3 コヌドの孊習たたは䜜成を開始する前に最初に行う必芁があるのは、システム内のいく぀かの基本抂念ず抜象化を説明するこずです。 その倚くは圓然のこずのように思えるかもしれたせんが、しっかりずした基瀎を固めるために、時間をかけおこのセクションを読むこずをお勧めしたす。

4.1 䞻芁な抜象化

このセクションでは、Web 䞊で䞀般的に䜿甚されおいるが、ns-3 では特定の意味を持぀いく぀かの甚語を芋おいきたす。

4.1.1 ノヌド

むンタヌネットの専門甚語では、ネットワヌクに接続するコンピュヌタ デバむスをホスト、たたぱンド システムず呌ぶこずもありたす。 ns-3 はネットワヌク シミュレヌタであり、むンタヌネット シミュレヌタではないため、ホストずいう甚語はむンタヌネットずそのプロトコルに密接に関連しおいるため、意図的に䜿甚したせん。 代わりに、グラフ理論に由来する、他のシミュレヌタヌでも䜿甚される、より䞀般的な甚語であるノヌド ( ).

ns-3 では、コンピュヌティング デバむスの基瀎ずなる抜象化をノヌドず呌びたす。 この抜象化は、C++ では Node クラスによっお衚されたす。 クラス ノヌドノヌド (ノヌド) は、シミュレヌションでコンピュヌティング デバむスの衚珟を操䜜するためのメ゜ッドを提䟛したす。

理解しなければならない Node 機胜を远加するコンピュヌタヌのようなものです。 アプリケヌション、プロトコル スタック、ドラむバヌを備えた呚蟺カヌドなどを远加しお、コンピュヌタヌが有甚な䜜業を実行できるようにしたす。 ns-3でも基本モデルは同じものを䜿甚しおいたす。

4.1.2 アプリケヌション

䞀般に、コンピュヌタ ゜フトりェアは倧きく XNUMX ぀のクラスに分類されたす。 システム ゜フトりェアは、メモリ、プロセッサ サむクル、ディスク、ネットワヌクなどのさたざたなコンピュヌタ リ゜ヌスを、䜕らかのコンピュヌティング モデルに埓っお線成したす。 システム ゜フトりェアは通垞、ナヌザヌに盎接利益をもたらすタスクを実行するためにこれらのリ゜ヌスを䜿甚したせん。 通垞、ナヌザヌは特定の目暙を達成するためにアプリケヌションを実行し、システム ゜フトりェアによっお制埡されるリ゜ヌスを取埗しお䜿甚したす。

倚くの堎合、システム ゜フトりェアずアプリケヌション ゜フトりェアの間の境界線は、オペレヌティング システムのトラップで発生する特暩レベルの倉曎で匕かれたす。 ns-3 にはオペレヌティング システムずいう実際の抂念がないため、特暩レベルやシステム コヌルずいう抂念もありたせん。 ただし、私たちにはアプリのアむデアがありたす。 「珟実䞖界」の゜フトりェア アプリケヌションがコンピュヌタヌ䞊で実行されおタスクを実行するのず同じように、ns-3 アプリケヌションは ns-3 ノヌド䞊で実行され、シミュレヌトされた䞖界でシミュレヌションを制埡したす。

ns-3 では、モデリング甚のアクティビティを生成するナヌザヌ プログラムの基本的な抜象化はアプリケヌションです。 この抜象化は、C++ では Application クラスによっお衚されたす。 Application クラスは、シミュレヌションでアプリケヌションのナヌザヌレベル バヌゞョンのビュヌを操䜜するためのメ゜ッドを提䟛したす。 開発者は、新しいアプリケヌションを䜜成するために、オブゞェクト指向プログラミングの意味で Application クラスを特殊化するこずが期埅されたす。 このチュヌトリアルでは、Application クラスの特殊化を䜿甚したす。 UdpEchoクラむアントアプリケヌション О UdpEchoサヌバヌアプリケヌション。 ご想像のずおり、これらのアプリケヌションは、ネットワヌク パケットの生成ず゚コヌに䜿甚されるクラむアント/サヌバヌ アプリケヌションのセットを構成したす。

4.1.3 チャネル

珟実の䞖界では、コンピュヌタをネットワヌクに接続できたす。 倚くの堎合、これらのネットワヌクでデヌタが送信されるメディアはチャネルず呌ばれたす。 むヌサネット ケヌブルを壁のコンセントに差し蟌むず、コンピュヌタがむヌサネット リンクに接続されたす。 シミュレヌトされた ns-3 ワヌルドでは、ノヌドは通信チャネルを衚すオブゞェクトに接続されたす。 ここで、通信サブネットワヌクの基本的な抜象化はチャネルず呌ばれ、C++ では Channel クラスによっお衚されたす。

クラス チャンネルチャンネル は、サブネット オブゞェクトの盞互䜜甚を管理し、ノヌドをサブネット オブゞェクトに接続するためのメ゜ッドを提䟛したす。 開発者は、オブゞェクト指向プログラミングの意味でチャネルを特殊化するこずもできたす。 チャネルの特化により、ワむダヌのような単玔なものをモデル化できたす。 専甚チャネルは、倧型のむヌサネット スむッチや、ワむダレス ネットワヌクの堎合は障害物でいっぱいの XNUMX 次元空間などの耇雑なものをモデル化するこずもできたす。

このチュヌトリアルでは、ず呌ばれる特殊なバヌゞョンのチャネルを䜿甚したす。 CsmaChannelCsmaChannel, ポむントツヌポむントチャンネルポむントツヌポむントチャンネル О WifiチャンネルWifiチャンネル. CsmaChannelたずえば、キャリアセンス倚元接続通信環境を実装する通信サブネットのバヌゞョンをモデル化したす。 これにより、むヌサネットのような機胜が埗られたす。

4.1.4 ネットデバむス

以前は、コンピュヌタをネットワヌクに接続するには、特定のネットワヌク ケヌブルず、(PC 甚語で) 呚蟺機噚カヌドず呌ばれるハヌドりェア デバむスを賌入し、コンピュヌタに取り付ける必芁がありたした。 呚蟺カヌドが䜕らかのネットワヌク機胜を実装しおいる堎合、それらはネットワヌク むンタヌフェむス カヌドたたはネットワヌク カヌドず呌ばれたす。 珟圚、ほずんどのコンピュヌタには統合ネットワヌク むンタヌフェむス ハヌドりェアが搭茉されおおり、ナヌザヌには別個のデバむスずしお認識されたせん。

ネットワヌク カヌドは、ハヌドりェアを制埡する゜フトりェア ドラむバヌがなければ機胜したせん。 Unix (たたは Linux) では、呚蟺機噚はデバむスずしお分類されたす。 デバむスはデバむス ドラむバヌを䜿甚しお管理され、ネットワヌク デバむス (NIC) はネットワヌク デバむス ドラむバヌを䜿甚しお管理されたす (ネットワヌクデバむスドラむバヌ) を総称しおネットワヌク デバむス (ネットデバむス。 Unix および Linux では、ネットワヌク デバむスを次のような名前で参照したす。 eth0.

ns-3 では、ネットワヌク デバむスの抜象化は、゜フトりェア ドラむバヌずモデル化されるハヌドりェアの䞡方をカバヌしたす。 シミュレヌションでは、ネットワヌク デバむスがノヌドに「むンストヌル」され、チャネルを通じお他のノヌドず通信できるようになりたす。 実際のコンピュヌタず同様に、ノヌドは耇数のデバむスを介しお耇数のチャネルに接続できたす。 ネットデバむス.

デバむスのネットワヌク抜象化は、C++ ではクラスによっお衚されたす。 ネットデバむス。 クラス ネットデバむス Node オブゞェクトず Channel オブゞェクトぞの接続を管理するメ゜ッドを提䟛したす。 開発者はオブゞェクト指向プログラミングの意味で専門化するこずができたす。 このチュヌトリアルでは、NetDevice のいく぀かの特殊なバヌゞョンを䜿甚したす。 CsmaNetDevice, ポむントツヌポむントネットデバむス О Wifiネットデバむス。 むヌサネット ネットワヌク アダプタがネットワヌクで動䜜するように蚭蚈されおいるのず同じように、 むヌサネット, CsmaNetDevice で動䜜するように蚭蚈されおいたす CsmaChannel, ポむントツヌポむントネットデバむス で動䜜するように蚭蚈されおいたす ポむントツヌポむントチャネルず Wifiネットデバむス - で動䜜するように蚭蚈されおいたす Wifiチャンネル.

4.1.5 トポロゞカルアシスタント

実際のネットワヌクでは、ネットワヌク カヌドが远加された (たたは組み蟌たれた) ホスト コンピュヌタヌが存圚したす。 ns-3 では、NetDevices が接続されたノヌドが衚瀺されるず蚀えたす。 倧芏暡なシミュレヌトされたネットワヌクでは、倚くのオブゞェクト間の接続を敎理する必芁がありたす。 Node, ネットデバむス О チャネル.

NetDevices をノヌドに接続し、NetDevices をリンクに接続し、IP アドレスを割り圓おたす。 ns-3 では䞀般的なタスクですが、これをできるだけ簡単にするために、いわゆるトポロゞ ヘルパヌが提䟛されおいたす。 たずえば、NetDevice を䜜成するには、倚くの ns-3 カヌネル操䜜を実行し、MAC アドレスを远加し、ノヌドにネットワヌク デバむスをむンストヌルし、ノヌドのプロトコル スタックを構成しお、NetDevice をチャネルに接続する必芁がありたす。 耇数のデバむスをマルチポむント リンクに接続し、個々のネットワヌクをむンタヌネットワヌクス ネットワヌクに接続するには、さらに倚くの䜜業が必芁になりたす。 これらの倚くの操䜜を䜿いやすいモデルに組み合わせたトポロゞ ヘルパヌ オブゞェクトを提䟛しおいたす。

4.2 最初の ns-3 スクリプト

䞊蚘の方法でシステムをむンストヌルした堎合は、ホヌム ディレクトリの repos ずいうディレクトリに ns-3 リリヌスが存圚したす。 ディレクトリに移動 リリヌス

このようなディレクトリがない堎合は、ns-3 のリリヌス バヌゞョンをビルドするずきに出力ディレクトリを指定しなかったこずを意味したす。次のようにビルドしたす。
$ ./waf configure —build-profile=release —out=build/release,
$ ./waf ビルド

次のようなディレクトリ構造が衚瀺されるはずです。

AUTHORS       examples      scratch       utils       waf.bat*
bindings      LICENSE       src           utils.py    waf-tools
build         ns3           test.py*      utils.pyc   wscript
CHANGES.html  README        testpy-output VERSION     wutils.py
doc           RELEASE_NOTES testpy.supp   waf*        wutils.pyc

ディレクトリに移動 䟋/チュヌトリアル。 そこに次の名前のファむルがあるのが芋えるはずです。 最初の.cc。 これは、XNUMX ぀のノヌド間に単玔なポむントツヌポむント接続を䜜成し、ノヌド間で XNUMX ぀のパケットを送信するスクリプトです。 このスクリプトを XNUMX 行ず぀芋おみたしょう。これを行うには、first.cc をお気に入りの゚ディタで開きたす。

4.2.1 定型コヌド
ファむルの最初の行ぱディタヌ モヌド行です。 ゚マックス。 これは、゜ヌスコヌドで䜿甚する曞匏蚭定芏則 (コヌディングスタむル) に぀いお emacs に䌝えたす。

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */

これは垞に非垞に物議を醞す問題であるため、すぐに問題を解決するために蚘録を正す必芁がありたす。 ns-3 プロゞェクトは、ほずんどの倧芏暡プロゞェクトず同様に、提䟛されるすべおのコヌドが準拠する必芁があるコヌディング スタむルを採甚しおいたす。 コヌドをプロゞェクトに貢献したい堎合は、ファむルに蚘茉されおいるように、最終的には ns-3 コヌディング暙準に準拠する必芁がありたす。 doc/codingstd.txt たたはプロゞェクトの Web ペヌゞに衚瀺されたす。 https://www.nsnam.org/develop/contributing-code/coding-style/.

ns-3 コヌドのルック アンド フィヌルに慣れお、コヌドを操䜜するずきは垞にこの暙準を適甚するこずをお勧めしたす。 開発チヌム党䜓ず貢献者は、倚少の䞍満はあったものの、これに同意したした。 䞊蚘の emacs モヌド行により、emacs ゚ディタヌを䜿甚しおいる堎合に正しくフォヌマットするこずが簡単になりたす。

ns-3 シミュレヌタは、次の方法でラむセンスを取埗したす。 GNU䞀般公衆利甚蚱諟契玄曞。 各 ns-3 配垃ファむルには、適切な GNU 法的ヘッダヌが衚瀺されたす。 倚くの堎合、以䞋に瀺すように、GPL テキストず䜜成者の䞊に、ns-3 プロゞェクトに参加しおいる機関のいずれかの著䜜暩衚瀺が衚瀺されたす。

/* 
* This program is free software; you can redistribute it and/or modify 
* it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation; 
*
* This program is distributed in the hope that it will be useful, 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
* GNU General Public License for more details. 
* 
* You should have received a copy of the GNU General Public License 
* along with this program; if not, write to the Free Software 
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/

4.2.2 プラグむン

コヌド自䜓は、䞀連のむンクルヌゞョン ステヌトメント (include).

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"

高レベルのスクリプト ナヌザヌがシステム内に存圚する倚数のヘッダヌ ファむルに察凊できるように、甚途に応じおヘッダヌ ファむルを倧きなモゞュヌルにグルヌプ化しおいたす。 特定のモゞュヌルで䜿甚されるすべおのヘッダヌ ファむルを再垰的にロヌドする単䞀のヘッダヌ ファむルを提䟛したす。 必芁なヘッダヌを正確に怜玢しお䟝存関係の正しいリストを取埗する代わりに、ファむルのグルヌプを非垞に现かい粒床でダりンロヌドできる機胜が提䟛されたす。 これは最も効率的なアプロヌチではありたせんが、スクリプトの䜜成がはるかに簡単になるこずは確かです。

ns-3 の各むンクルヌド ファむルは、次の名前のディレクトリに配眮されたす。 ns3 (ビルド サブディレクトリ) ビルド プロセス䞭のファむル名の競合を回避したす。 ファむル ns3/コアモゞュヌル.h ディレクトリにある ns-3 モゞュヌルに察応したす。 ゜ヌス/コア むンストヌルしたリリヌスで。 このディレクトリのリストには、倚数のヘッダヌ ファむルが含たれおいたす。 組み立おを行うず、 ワフ パブリックヘッダヌファむルをサブディレクトリのns3ディレクトリに配眮したす ビルド/デバッグ

このようなディレクトリがない堎合は、ns-3 のリリヌス バヌゞョンをビルドするずきに出力ディレクトリを指定しなかったこずを意味したす。次のようにビルドしたす。
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf ビルド
たたは
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf ビルド

たたは 構築/最適化、構成に応じお。 ワフ たた、すべおのパブリック ヘッダヌ ファむルをロヌドするためのモゞュヌル むンクルヌド ファむルも自動的に生成されたす。 もちろん、あなたはこのガむドに忠実に埓っおいるので、すでに完了しおいたす。

$ ./waf -d debug --enable-examples --enable-tests configure

䟋ずテストを含むデバッグ ビルドを実行するようにプロゞェクトを構成したす。 あなたもそうでした

$ ./waf

プロゞェクトを組み立おたす。 それで、ディレクトリを芋るず、 ../../ビルド/デバッグ/ns3をクリックするず、䞊に瀺した XNUMX ぀のモゞュヌルのヘッダヌ ファむルなどが芋぀かりたす。 これらのファむルの内容を確認するず、察応するモゞュヌルで䜿甚されるすべおのパブリック ファむルが含たれおいるこずがわかりたす。

4.2.3 ns3 名前空間

スクリプトの次の行 最初の.cc は名前空間宣蚀です。

using namespace ns3;

ns-3 プロゞェクトは、ns3 ずいう C++ 名前空間に実装されおいたす。 これにより、すべおの ns-3 関連の宣蚀がグロヌバル名前空間の倖偎のスコヌプにグルヌプ化され、他のコヌドずの統合に圹立぀こずが期埅されたす。 C++ 挔算子を䜿甚するず、ns-3 名前空間が珟圚の (グロヌバル) 宣蚀領域に導入されたす。 これは、この宣蚀の埌、すべおの ns-3 コヌドで ns3::scope 暩限挔算子を䜿甚する前に ns3::scope 暩限挔算子を入力する必芁がないこずを瀺す掟手な方法です。 名前空間に詳しくない堎合は、ほがすべおの C++ 教科曞を参照し、std 名前空間ず宣蚀を䜿甚しお nsXNUMX 名前空間を比范しおください。 using namespace std; 出力挔算子の䜿甚䟋 COUT そしおストリヌム。

4.2.4 ロギング

スクリプトの次の行は次のずおりです。

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

この声明は、文曞システムに぀いお話し合う䟿利な堎所ずしお䜿甚したす。 ドキシゲン。 ns-3 プロゞェクトの Web サむトを芋るず、ナビゲヌション バヌにドキュメントのリンクが衚瀺されたす。 このリンクをクリックするず、ドキュメント ペヌゞが衚瀺されたす。 「最新リリヌス」リンクから、ns-3 の最新の安定バヌゞョンのドキュメントにアクセスできたす。 「API ドキュメント」リンクを遞択するず、ns-3 API ドキュメント ペヌゞが衚瀺されたす。

ペヌゞの巊偎には、ドキュメントの構造がグラフィカルに衚珟されおいたす。 ns-3 ナビゲヌション ツリヌのモゞュヌル ns-3 「ブック」から始めるずよいでしょう。 明らかにしたら モゞュヌルをクリックするず、ns-3 モゞュヌルのドキュメントのリストが衚瀺されたす。 䞊で説明したように、ここでのモゞュヌルの抂念は、䞊蚘のモゞュヌルに含たれるファむルに盎接関連しおいたす。 ns-3 ロギング サブシステムに぀いおは、セクションで説明したす。 ロギングモゞュヌルの䜿甚なので、このチュヌトリアルの埌半でもう䞀床説明したすが、モゞュヌルを芋るこずで䞊蚘のステヌトメントに぀いお孊ぶこずができたす。 基本そしお本を開くず デバッグツヌルそしおペヌゞを遞択したす ロギング。 クリック ロギング.

ここでドキュメントを確認する必芁がありたす ドキシゲン モゞュヌル甚 ロギング。 ペヌゞ䞊郚のマクロのリストに、NS_LOG_COMPONENT_DEFINE の゚ントリが衚瀺されたす。 リンクをクリックする前に、登録モゞュヌルの「詳现な説明」を参照しお、䞀般的にどのように機胜するかを理解しおください。 これを行うには、䞋にスクロヌルするか、グラフの䞋の「その他...」を遞択したす。

䜕が起こっおいるかの抂芁を理解したら、次に進んで、特定の NS_LOG_COMPONENT_DEFINE のドキュメントを参照しおください。 ここではドキュメントを耇補したせんが、芁玄するず、この行は ずいう登録コンポヌネントを宣蚀したす。 最初のスクリプトの䟋これにより、名前を参照しおメッセヌゞのコン゜ヌル ロギングを有効たたは無効にするこずができたす。

4.2.5 メむン機胜

スクリプトの次の行では、次のようになりたす。

int 
main (int argc, char *argv[])
{ 

これは単にプログラム (スクリプト) のメむン関数の宣蚀です。 他の C++ プログラムず同様に、main 関数を定矩する必芁がありたす。これが最初に実行されたす。 ここには特別なこずは䜕もありたせん。 ns-3 スクリプトは単なる C++ プログラムです。 次の行は、時間解像床をデフォルトの 1 ナノ秒に蚭定したす。

Time::SetResolution (Time::NS);

時間分解胜、たたは単に分解胜は、䜿甚できる最小の時間倀 (XNUMX ぀の時間間の衚珟可胜な最小の差) です。 解像床は䞀床だけ倉曎できたす。 この柔軟性を提䟛するメカニズムはメモリを消費するため、解像床が明瀺的に蚭定されるずメモリを解攟し、それ以䞊の曎新を防ぎたす。 (解像床を明瀺的に蚭定しない堎合、デフォルトで XNUMX ナノ秒になり、シミュレヌションの開始時にメモリが解攟されたす。)

次の XNUMX 行のスクリプトは、アプリケヌションに組み蟌たれおいる XNUMX ぀のログ コンポヌネントを有効にするために䜿甚されたす。 ゚コヌクラむアント О ゚コヌサヌバヌ:

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

ロギング コンポヌネントのドキュメントを読むず、各コンポヌネントで有効にできるロギング/粒床のレベルがいく぀かあるこずがわかりたす。 これら XNUMX 行のコヌドにより、゚コヌ クラむアントずサヌバヌの INFO レベルぞのデバッグ ログが有効になりたす。 このレベルでは、アプリケヌションはシミュレヌション䞭にパケットを送受信するずきにメッセヌゞを出力したす。

ここからは、トポロゞの䜜成ずシミュレヌションの実行に取り掛かりたす。 この䜜業をできるだけ簡単にするために、トポロゞ ヘルパヌ オブゞェクトを䜿甚したす。

4.2.6 トポロゞヌ・アシスタントの䜿甚

スクリプトの次の 3 行のコヌドは、シミュレヌション内のコンピュヌタヌを衚す Node ns-XNUMX オブゞェクトを実際に䜜成したす。

NodeContainer nodes;
nodes.Create (2);

続行する前に、クラスのドキュメントを探したしょう ノヌドコンテナ。 特定のクラスのドキュメントにアクセスするもう XNUMX ぀の方法は、タブを䜿甚するこずです。 クラス ペヌゞ䞊で ドキシゲン。 すでに Doxygen を開いおいる堎合は、ペヌゞの䞊郚たでスクロヌルしお [クラス] タブを遞択したす。 新しいタブのセットが衚瀺され、そのうちの 3 ぀はクラスのリストです。 このタブには、すべおの ns-XNUMX クラスのリストが衚瀺されたす。 䞋にスクロヌルしお、 ns3::NodeContainer。 クラスが芋぀かったら、それを遞択しお、そのクラスのドキュメントに移動したす。

芚えおいるずおり、重芁な抜象化の XNUMX ぀はノヌドです。 これは、プロトコル スタック、アプリケヌション、呚蟺機噚カヌドなどを远加するコンピュヌタヌを衚したす。 トポロゞヌアシスタント ノヌドコンテナ オブゞェクトを䜜成、管理、アクセスするための䟿利な方法を提䟛したす Node、シミュレヌションを実行するために䜜成したす。 䞊の最初の行は単に宣蚀しおいたす ノヌドコンテナ、これをノヌドず呌びたす。 XNUMX 行目は、ノヌド オブゞェクトの Create メ゜ッドを呌び出し、コンテナに XNUMX ぀のノヌドを䜜成するように芁求したす。 で説明されおいるように、 ドキシゲン、コンテナは ns-3 システムに XNUMX ぀のオブゞェクトを䜜成するように芁求したす。 Node これらのオブゞェクトぞのポむンタを内郚に保存したす。

スクリプトで䜜成されたノヌドはただ䜕も行いたせん。 トポロゞ構築の次のステップは、ノヌドをネットワヌクに接続するこずです。 私たちがサポヌトするネットワヌクの最も単玔な圢匏は、XNUMX ぀のノヌド間のポむントツヌポむント接続です。 これからそのような接続を䜜成しおいきたす。

ポむントツヌポむントヘルパヌ

䜿い慣れたパタヌンを䜿甚しおポむントツヌポむント接続を䜜成し、トポロゞ ヘルパヌ オブゞェクトを䜿甚しお接続に必芁な䜎レベルの䜜業を実行したす。 XNUMX ぀の重芁な抜象化を思い出しおください。 ネットデバむス О チャネル。 珟実の䞖界では、これらの甚語は呚蟺機噚カヌドずネットワヌク ケヌブルにほが察応したす。 通垞、これら XNUMX ぀は互いに密接に関連しおおり、デバむスなどの共有を期埅できる人はいたせん。 むヌサネット ワむダレスチャネル経由で。 トポロゞ ヘルパヌはこの密接な関係に埓っおいるため、このシナリオでは単䞀のオブゞェクトを䜿甚したす。 ポむントツヌポむントヘルパヌ ns-3 オブゞェクトのセットアップず接続甚 ポむントツヌポむントネットデバむス О ポむントツヌポむントチャネル。 スクリプト内の次の XNUMX 行は次のずおりです。

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

最初の行、

PointToPointHelper pointToPoint;

スタック䞊にオブゞェクトのむンスタンスを䜜成したす ポむントツヌポむントヘルパヌ。 トップレベルの芳点から芋るず、次の行は、

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

オブゞェクトに䌝える ポむントツヌポむントヘルパヌ 倀「5 Mbit/s」XNUMX 秒あたり XNUMX メガビットを「」ずしお䜿甚したす。デヌタレヌト'。

より具䜓的な芳点から芋るず、文字列「DataRate」はいわゆる属性に盞圓したす。 ポむントツヌポむントネットデバむス。 芋おみるず ドキシゲン 授業のために ns3::PointToPointNetDevice そしおメ゜ッドのドキュメントでは GetTypeId デバむスに定矩されおいる属性のリストが衚瀺されたす。 その䞭には「デヌタレヌト」 ナヌザヌに衚瀺されるほずんどの ns-3 オブゞェクトには、同様の属性リストがありたす。 次のセクションで説明するように、このメカニズムを䜿甚しお、再コンパむルせずにシミュレヌションを簡単にセットアップしたす。

に䌌おいる "デヌタレヌト"PointToPointNetDevice では、PointToPointChannel に関連付けられた "Delay" 属性が芋぀かりたす。 最埌の行

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

圌は話したす ポむントツヌポむントヘルパヌ 倀「2 ms」(XNUMX ミリ秒) を、その埌䜜成されるポむントツヌポむント リンクの䌝播遅延倀ずしお䜿甚したす。

ネットデバむスコンテナ

珟時点ではスクリプトにありたす ノヌドコンテナ、これには XNUMX ぀のノヌドが含たれたす。 我々は持っおいたす ポむントツヌポむントヘルパヌ、オブゞェクトを䜜成するために甚意されおいたす PointToPointNetDevices そしお、PointToPointChannel オブゞェクトを䜿甚しおそれらを接続したす。 NodeContainer トポロゞ ヘルパヌ オブゞェクトを䜿甚しおノヌドを䜜成したのず同じように、次のように尋ねたす。 ポむントツヌポむントヘルパヌ 圓瀟のデバむスの䜜成、構成、蚭眮に関連する䜜業を圓瀟に代わっお実行したす。 䜜成されたすべおのオブゞェクトのリストが必芁です ネットデバむス、したがっお、私たちは䜿甚したす ネットデバむスコンテナ 以前ず同じ方法で保管する ノヌドコンテナ 䜜成したノヌドを保存したす。 次の XNUMX 行のコヌドは、

NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);

デバむスずチャンネルのセットアップを完了したす。 最初の行は前述のデバむス コンテナを宣蚀し、XNUMX 行目は䞻な䜜業を行いたす。 方法 むンストヌルを開始する オブゞェクト ポむントツヌポむントヘルパヌ 受け入れる ノヌドコンテナ パラメヌタずしお。 内郚 ネットデバむスコンテナ にある各ノヌドに察しお ノヌドコンテナ が䜜成されたす (ポむントツヌポむント通信の堎合は、ちょうど XNUMX ぀必芁です) ポむントツヌポむントネットデバむス が䜜成され、デバむス コンテナヌに保存されたす。 ポむントツヌポむントチャネル が䜜成され、それに XNUMX ぀アタッチされたす PointToPointNetDevices。 オブゞェクトを䜜成した埌、 ポむントツヌポむントヘルパヌ、䜜成されたオブゞェクト内の察応する属性を初期化するために䜿甚されたす。

電話をかけた埌 pointToPoint.Install (ノヌド) XNUMX ぀のノヌドがあり、それぞれにポむントツヌポむント ネットワヌク デバむスがむンストヌルされ、それらの間に XNUMX ぀のポむントツヌポむント リンクがありたす。 どちらのデバむスも、チャネル䞊で XNUMX ミリ秒の送信遅延を䌎い、XNUMX メガビット/秒の速床でデヌタを送信するように構成されたす。

むンタヌネットスタックヘルパヌ

これでノヌドずデバむスが構成されたしたが、ノヌドにはプロトコル スタックがむンストヌルされおいたせん。 次の XNUMX 行のコヌドがこれを凊理したす。

InternetStackHelper stack;
stack.Install (nodes);

むンタヌネットスタックヘルパヌ - ポむントツヌポむント ネットワヌク デバむス甚の PointToPointHelper に䌌た、むンタヌネット スタック甚のトポロゞ ヘルパヌです。 方法 むンストヌルを開始する NodeContainer をパラメヌタずしお受け取りたす。 実行するず、各コンテナ ノヌドにむンタヌネット スタック (TCP、UDP、IP など) がむンストヌルされたす。

Ipv4アドレスヘルパヌ

次に、デバむスを IP アドレスに関連付ける必芁がありたす。 IP アドレスの割り圓おを管理するためのトポロゞ アシスタントを提䟛したす。 ナヌザヌに衚瀺される唯䞀の API は、実際のアドレス配垃を行うずきに䜿甚するベヌス IP アドレスずネットマスクの蚭定です (これはヘルパヌ内の䜎䜍レベルで行われたす)。 サンプル スクリプトの次の XNUMX 行のコヌド 最初の.cc,

Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");

アドレス ヘルパヌ オブゞェクトを宣蚀し、10.1.1.0 ビットマスクを䜿甚しお決定するために、ネットワヌク 255.255.255.0 から IP アドレスの割り圓おを開始するように指瀺したす。 デフォルトでは、割り圓おられるアドレスは 10.1.1.1 から始たり単調増加するため、このベヌスから割り圓おられる最初のアドレスは 10.1.1.2、次に 3 ずいうようになりたす。 実際には、䜎レベルでは、ns-XNUMX システムは割り圓おられたすべおの IP アドレスを蚘憶しおおり、同じアドレスが XNUMX 回生成される状況を誀っお䜜成した堎合に臎呜的な゚ラヌを生成したす (ちなみに、この゚ラヌはデバッグが困難です)。

次のコヌド行は、

Ipv4InterfaceContainer interfaces = address.Assign (devices);

実際のアドレス割り圓おを実行したす。 ns-3 では、オブゞェクトを䜿甚しお IP アドレスずデバむス間の接続を確立したす。 Ipv4むンタヌフェヌス。 埌で䜿甚するためにアシスタントによっお䜜成されたネットワヌク デバむスのリストが必芁になる堎合があるのず同じように、オブゞェクトのリストが必芁になる堎合もありたす。 Ipv4むンタヌフェヌス. Ipv4むンタヌフェヌスコンテナ はこの機胜を提䟛したす。

スタックをむンストヌルし、IP アドレスを割り圓おお、ポむントツヌポむント ネットワヌクを構築したした。 次に、トラフィックを生成するために各ノヌドにアプリケヌションが必芁です。

4.2.7 アプリケヌションの䜿甚

ns-3 システムのもう XNUMX ぀の䞻芁な抜象化は次のずおりです。 申し蟌み 応甚。 このシナリオでは、XNUMX ぀の基本クラスの特殊化を䜿甚しおいたす。 申し蟌み ns-3 ず呌ばれる UdpEchoサヌバヌアプリケヌション О UdpEchoクラむアントアプリケヌション。 前のケヌスず同様に、補助オブゞェクトを䜿甚しお基本オブゞェクトを構成および管理したす。 ここで䜿甚するのは UdpEchoServerHelper О UdpEchoクラむアントヘルプ私たちの生掻を楜にするためのオブゞェクト。

UdpEchoServerHelper

first.cc サンプル スクリプト内の次のコヌド行は、前に䜜成したノヌドの XNUMX ぀で UDP ゚コヌ サヌバヌ アプリケヌションを構成するために䜿甚されたす。

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

䞊蚘のスニペットのコヌドの最初の行は、 UdpEchoServerHelper。 い぀ものように、これはアプリケヌションそのものではなく、実際のアプリケヌションの䜜成に圹立぀オブゞェクトです。 芏則の XNUMX ぀は、必芁な属性をヘルパヌ オブゞェクトのコンストラクタヌに枡すこずです。 この堎合、サヌバヌがパケットをリッスンするポヌト番号が䞎えられない限り、ヘルパヌは有益な操䜜を行うこずができたせん。この番号はクラむアントにも認識されおいる必芁がありたす。 この堎合、ポヌト番号をヘルパヌ コンストラクタヌに枡したす。 コンストラクタヌは単に次のこずを行いたす。 属性の蚭定 枡された倀を䜿甚したす。 必芁に応じお、埌で SetAttribute を䜿甚しお Port 属性に別の倀を蚭定できたす。

他の倚くの補助オブゞェクトず同様に、オブゞェクト UdpEchoServerHelper 方法がありたす むンストヌルを開始する。 このメ゜ッドを実行するず、基本的な゚コヌ サヌバヌ アプリケヌションが効果的に䜜成され、ホストにバむンドされたす。 興味深いこずに、その方法は、 むンストヌルを開始する 受け入れる ノヌドコンテナ 他のパラメヌタず同様にパラメヌタずしお むンストヌルを開始する 私たちが芋おきた方法。

ここで動䜜する C++ の暗黙的な倉換は、メ゜ッドの結果を受け取りたす。 ノヌド.Get(1) (ノヌド オブゞェクトぞのスマヌト ポむンタヌを返したす - Ptr ) を䜿甚し、匿名オブゞェクトのコンストラクタヌで䜿甚したす。 ノヌドコンテナそれはメ゜ッドに枡されたす むンストヌルを開始する。 C++ コヌドでどのメ゜ッド シグネチャがコンパむルおよび実行されるかを刀断できない堎合は、暗黙的な倉換を調べおください。

今ではそれがわかりたす echoServer.むンストヌル アプリケヌションをむンストヌルしようずしおいたす UdpEchoサヌバヌアプリケヌション で芋぀かった ノヌドコンテナノヌド (むンデックス 1 のノヌド) を管理するために䜿甚したす。 メ゜ッド むンストヌルを開始する すべおのアプリケヌションぞのポむンタを含むコンテナを返したす (この堎合は、匿名のアプリケヌションを枡したので XNUMX ぀) ノヌドコンテナ、XNUMX ぀のノヌドを含む) はヘルパヌによっお䜜成されたす。

アプリケヌションはトラフィックの生成を開始するタむミングを指定する必芁がある "始める" たた、停止する時刻を远加で指定する必芁がある堎合もありたす "停止"。 私たちは䞡方のオプションを提䟛したす。 これらの時間は次のメ゜ッドを䜿甚しお蚭定されたす アプリケヌションコンテナ 開始 О Force Stop。 これらのメ゜ッドは、次のタむプのパラメヌタを受け入れたす。 Time。 この堎合、C++ 倉換の明瀺的なシヌケンスを䜿甚しお C++ を取埗したす。 1.0 を䜜成し、Seconds オブゞェクトを䜿甚しお秒に倉換する tns-3 Time オブゞェクトに倉換したす。 倉換ルヌルはモデル䜜成者が制埡でき、C++ には独自のルヌルがあるため、パラメヌタヌが期埅どおりに倉換されるずは限らないこずに泚意しおください。 XNUMX行

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));

これにより、゚コヌ サヌバヌ アプリケヌションはシミュレヌションの開始から XNUMX 秒埌に開始 (自動的にオン) され、シミュレヌションの XNUMX 秒埌に停止 (オフ) になりたす。 XNUMX 秒埌に実行されるシミュレヌション むベント (アプリケヌション停止むベント) を宣蚀したため、少なくずも XNUMX 秒間のネットワヌク動䜜がシミュレヌトされたす。

UdpEchoClientHelper

クラむアントアプリケヌション echo サヌバヌずほが同様の方法で構成されたす。 ベヌスオブゞェクトがありたす UdpEchoクラむアントアプリケヌション、管理されおいる
UdpEchoClientHelper.

UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));

ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));;

ただし、゚コヌ クラむアントの堎合は、XNUMX ぀の異なる属性を蚭定する必芁がありたす。 最初の XNUMX ぀の属性は䜜成時に蚭定されたす UdpEchoClientHelper。 属性を蚭定するために (ヘルパヌ内で) 䜿甚されるパラメヌタヌを枡したす。 「リモヌトアドレス」 О 「リモヌトポヌト」 必芁なパラメヌタをヘルパヌ コンストラクタヌに枡すずいう合意に埓っお。

䜿ったこずを思い出したしょう Ipv4むンタヌフェヌスコンテナ 圓瀟がデバむスに割り圓おた IP アドレスを远跡するため。 むンタヌフェむス コンテナ内のヌル むンタヌフェむスは、ノヌド コンテナ内のヌル ノヌドの IP アドレスに察応したす。 むンタヌフェむス コンテナ内の最初のむンタヌフェむスは、ノヌド コンテナ内の最初のノヌドの IP アドレスに察応したす。 したがっお、コヌドの最初の行 (䞊蚘) でヘルパヌを䜜成し、クラむアントのリモヌト アドレスがサヌバヌが配眮されおいるホストに割り圓おられる IP アドレスになるこずをヘルパヌに䌝えたす。 たた、パケットがポヌト XNUMX に送信されるように手配する必芁があるずも蚀いたす。

「MaxPackets」属性は、シミュレヌション䞭に送信できるパケットの最倧数をクラむアントに䌝えたす。 「Interval」属性はクラむアントにパケット間の埅機時間を指瀺し、「PacketSize」属性はクラむアントにパケットのペむロヌドの倧きさを指瀺したす。 この属性の組み合わせを䜿甚しお、単䞀の 1024 バむトのパケットを送信するようにクラむアントに指瀺したす。

゚コヌサヌバヌず同様に、゚コヌクラむアントの属性を蚭定したす。 開始 О Force Stop, ただし、ここではサヌバヌの電源がオンになっおから XNUMX 秒埌 (シミュレヌション開始の XNUMX 秒埌) にクラむアントを起動したす。

4.2.8 シミュレヌタ

この時点で、シミュレヌションを実行する必芁がありたす。 これはグロヌバル関数を䜿甚しお行われたす シミュレヌタヌ::実行.

Simulator::Run ();

先ほどメ゜ッドを呌び出したずき、

serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
... 
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

実際には、シミュレヌタで 1,0 秒、2,0 秒にむベントをスケゞュヌルし、10,0 秒に XNUMX ぀のむベントをスケゞュヌルしたした。 電話の埌 シミュレヌタヌ::実行を遞択するず、システムはスケゞュヌルされたむベントのリストの衚瀺ず実行を開始したす。 たず 1,0 秒以内にむベントを起動し、゚コヌ サヌバヌ アプリケヌションをトリガヌしたす (このむベントは、他の倚くのむベントをスケゞュヌルするこずができたす)。 次に、t=2,0 秒にスケゞュヌルされたむベントを起動し、゚コヌ クラむアント アプリケヌションを起動したす。 繰り返しになりたすが、このむベントではさらに倚くのむベントが予定されおいる可胜性がありたす。 開始むベントの゚コヌ クラむアント実装は、サヌバヌにパケットを送信するこずによっおシミュレヌションのデヌタ転送フェヌズを開始したす。

サヌバヌにパケットを送信する行為により、バックグラりンドで自動的にスケゞュヌルされる䞀連のむベントがトリガヌされ、スクリプトで蚭定したタむミング パラメヌタヌに埓っお゚コヌ パケットを送信する仕組みが実装されたす。

その結果、送信するパケットは XNUMX ぀だけなので (属性を思い出しおください)、 最倧パケット数 XNUMX に蚭定されおいた堎合)、この単䞀のクラむアント ping によっお開始された䞀連のむベントが終了し、シミュレヌションはスタンバむ モヌドになりたす。 これが発生するず、残りの予定されおいるむベントは次のむベントになりたす。 Force Stop サヌバヌずクラむアント甚。 これらのむベントが実行されるず、さらに凊理するむベントはなくなり、 シミュレヌタヌ::実行 制埡を返したす。 シミュレヌションが完了したした。

あずは自分で埌片付けをするだけです。 これは、グロヌバル関数を呌び出すこずによっお行われたす。 シミュレヌタヌ::デストロむ。 ヘルパヌ関数 (たたは䜎レベルの ns-3 コヌド) が呌び出されたため、䜜成されたすべおのオブゞェクトを砎棄するフックがシミュレヌタヌに挿入されるように線成されおいたす。 これらのオブゞェクトを自分で远跡する必芁はなく、電話をかけるだけで枈みたした。 シミュレヌタヌ::デストロむ そしお出お行きたす。 ns-3 システムがこの面倒な䜜業を行っおくれたす。 最初の ns-3 スクリプト first.cc の残りの行は、たさにそれを行いたす。

Simulator::Destroy ();
return 0;
}

シミュレヌタはい぀停止したすか?

ns-3 は、離散むベント (DE) シミュレヌタヌです。 このようなシミュレヌタヌでは、各むベントはその実行時間に関連付けられおおり、シミュレヌションの進行に応じおむベントが発生した順序で凊理されおシミュレヌションが続行されたす。 むベントにより、将来のむベントがスケゞュヌルされるこずがありたす (たずえば、タむマヌは次の間隔でカりントを終了するようにスケゞュヌルを倉曎できたす)。

通垞、初期むベントぱンティティによっお開始されたす。たずえば、IPv6 はネットワヌク䞊のサヌビスの怜出や近隣リク゚ストなどをスケゞュヌルしたす。 アプリケヌションは最初のパケット送信むベントなどをスケゞュヌルしたす。 むベントが凊理されるず、れロ、XNUMX ぀、たたは耇数のむベントが生成されるこずがありたす。 シミュレヌションが進行するに぀れお、むベントが発生し、終了するか新しいむベントが䜜成されたす。 むベントキュヌが空の堎合、たたは特別なむベントが怜出された堎合、シミュレヌションは自動的に停止したす。 Force Stop。 むベント Force Stop 関数によっお生成される シミュレヌタヌ::停止 停止時間。

シミュレヌションを停止するには Simulator::Stop が絶察に必芁ずなる兞型的なケヌスがありたす。それは、自立したむベントがある堎合です。 自立的 (たたは繰り返し) むベントは、垞にスケゞュヌルが倉曎されるむベントです。 結果ずしお、むベント キュヌは垞に空にならないようになりたす。 繰り返しむベントを含むプロトコルやモゞュヌルは数倚くありたす。次に䟋を瀺したす。

• FlowMonitor - 倱われたパケットを定期的にチェックしたす。

• RIPng – ルヌティング テヌブル曎新の定期的なブロヌドキャスト。

• など。

そのような堎合 シミュレヌタヌ::停止 シミュレヌションを正しく停止するために必芁です。 さらに、ns-3 が゚ミュレヌション モヌドの堎合、RealtimeSimulator を䜿甚しおシミュレヌション クロックずマシン クロックが同期されたす。 シミュレヌタヌ::停止 プロセスを停止するために必芁です。

教科曞に茉っおいるシミュレヌションプログラムの倚くは、 シミュレヌタヌ::停止 キュヌに入れられたむベントがなくなるず自動的に終了するため、明瀺的に実行したす。 ただし、これらのプログラムは Simulator::Stop 呌び出しも受け入れたす。 たずえば、最初のプログラム䟋にある次の远加ステヌトメントは、11 秒での明瀺的な停止をスケゞュヌルしたす。

+ Simulator::Stop (Seconds (11.0));
  Simulator::Run ();
  Simulator::Destroy ();
  return 0;
}

この特定のシミュレヌションは 10 秒埌に自然に終了するため、䞊蚘は実際にはこのプログラムの動䜜を倉曎したせん。 ただし、䞊蚘のステヌトメントの停止時間を 11 秒から 1 秒に倉曎するず、出力が画面に衚瀺される前にシミュレヌションが停止するこずがわかりたす (出力はシミュレヌション時間の玄 2 秒埌に発生するため)。

Simulator::Run を呌び出す前に Simulator::Stop を呌び出すこずが重芁です。 そうしないず、Simulator::Run が stop! を実行するためにメむン プログラムに制埡を戻せない可胜性がありたす。

4.2.9 スクリプトの構築

シンプルなスクリプトの䜜成が簡単になりたした。 スクリプトをスクラッチ ディレクトリに眮くだけで、実行するず自動的にビルドされたす。 ワフ。 やっおみよう。 最䞊䜍ディレクトリに戻っおコピヌしたす 䟋/チュヌトリアル/first.cc カタログぞ スクラッチ

$ cd ../.. 
$ cp examples/tutorial/first.cc scratch/myfirst.cc

次に、次を䜿甚しお最初のサンプル スクリプトを構築したす。 WAF:

$ ./waf

最初の䟋が正垞に䜜成されたこずを瀺すメッセヌゞが衚瀺されるはずです。

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
[614/708] cxx: scratch/myfirst.cc -> build/debug/scratch/myfirst_3.o
[706/708] cxx_link: build/debug/scratch/myfirst_3.o -> build/debug/scratch/myfirst
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (2.357s)

これで、サンプルを実行できるようになりたす (プログラムをスクラッチ ディレクトリにビルドする堎合は、次のディレクトリから実行する必芁があるこずに泚意しおください) スクラッチ):

$ ./waf --run scratch/myfirst

同様の出力が衚瀺されるはずです。

Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s) Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2

ここでは、ビルド システムがファむルがビルドされたこずを確認し、それを実行しおいるこずがわかりたす。 ゚コヌ クラむアントのコンポヌネント ゚ントリは、単䞀の 1024 バむト パケットを゚コヌ サヌバヌ 10.1.1.2 に送信したこずを瀺しおいるこずがわかりたす。 ゚コヌ サヌバヌ䞊のログ コンポヌネントにも、1024 から 10.1.1.1 バむトを受信したこずが衚瀺されたす。 ゚コヌ サヌバヌはパケットをサむレントに再生し、゚コヌ クラむアントのログでサヌバヌからパケットを受信したこずがわかりたす。

4.3 ns-3 ゜ヌスコヌド

ns-3 ヘルパヌの䞀郚を䜿甚したので、この機胜を実装する゜ヌス コヌドの䞀郚を芋おみたしょう。 最新のコヌドは、次のリンクにある Web サヌバヌで参照できたす。 https://gitlab.com/nsnam/ns-3-dev.git。 そこには、ns-3 開発ツリヌの Mercurial 抂芁ペヌゞが衚瀺されたす。 ペヌゞの䞊郚にはいく぀かのリンクが衚瀺されたす。

summary | shortlog | changelog | graph | tags | files

先に進み、ファむルのリンクを遞択しおください。 ほずんどのリポゞトリのトップレベルは次のようになりたす。

drwxr-xr-x                               [up]
drwxr-xr-x                               bindings python  files
drwxr-xr-x                               doc              files
drwxr-xr-x                               examples         files
drwxr-xr-x                               ns3              files
drwxr-xr-x                               scratch          files
drwxr-xr-x                               src              files
drwxr-xr-x                               utils            files
-rw-r--r-- 2009-07-01 12:47 +0200 560    .hgignore        file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1886   .hgtags          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 1276   AUTHORS          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 30961  CHANGES.html     file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 17987  LICENSE          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 3742   README           file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 16171  RELEASE_NOTES    file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 6      VERSION          file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 88110  waf              file | revisions | annotate
-rwxr-xr-x 2009-07-01 12:47 +0200 28     waf.bat          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 35395  wscript          file | revisions | annotate
-rw-r--r-- 2009-07-01 12:47 +0200 7673   wutils.py        file | revisions | annotate

サンプル スクリプトは次のディレクトリにありたす。 䟋。 䟋をクリックするず、サブディレクトリのリストが衚瀺されたす。 サブディレクトリ内のファむルの XNUMX ぀ チュヌトリアル - first.cc。 をクリックするず 最初の.cc 孊習したばかりのコヌドが衚瀺されたす。

゜ヌスコヌドは䞻に次のディレクトリにありたす。 SRC。 ディレクトリ名をクリックするか、ディレクトリ名の右偎にあるファむルのリンクをクリックするず、゜ヌス コヌドを衚瀺できたす。 src ディレクトリをクリックするず、src サブディレクトリのリストが衚瀺されたす。 次にコアのサブディレクトリをクリックするず、ファむルのリストが衚瀺されたす。 (このガむドの執筆時点で) 最初に衚瀺されるファむルは次のずおりです。 䞭止したす。h。 リンクをクリックするず 䞭止したす。hの゜ヌスファむルに送信されたす。 䞭止したす。h、異垞な状態が怜出された堎合にスクリプトを終了するための䟿利なマクロが含たれおいたす。 この章で䜿甚したヘルパヌの゜ヌス コヌドは、次のディレクトリにありたす。 src/アプリケヌション/ヘルパヌ。 ディレクトリ ツリヌを自由に探玢しお、䜕がどこにあるかを確認し、ns-3 プログラムのスタむルを理解しおください。

出所 habr.com

コメントを远加したす