## ns-3介紹 [ns-3](https://www.nsnam.org/) 是一個離散事件網路模擬器,主要用於研究和教育用途。它是一個開源軟體,目標是建立一個開放的網路模擬環境。 你可以在其中模擬各種網路場景,例如: * 不同的網路拓撲結構(例如:星狀、網狀、樹狀) * 不同的網路協定(例如:TCP、UDP、IP) * 不同的網路流量模式 * 無線網路環境 * 網路效能評估 ### 1. ns-3 的核心概念: * **節點 (Node):** 代表網路中的裝置,例如電腦、路由器、交換器等。每個節點可以擁有多個網路介面。 * **網路介面 (NetDevice):** 連接節點到通道的介面卡。不同的網路技術(例如乙太網路、Wi-Fi)有不同的網路介面。 * **通道 (Channel):** 節點之間通訊的媒介。通道定義了資料如何在節點之間傳輸,例如有線或無線通道。 * **協定 (Protocol):** 定義了網路通訊的規則,例如 TCP、UDP、IP 等。ns-3 提供了豐富的協定庫,也允許使用者自行定義新的協定。 * **應用程式 (Application):** 在節點上執行的程式,負責產生和接收網路流量。例如,網頁瀏覽器或檔案傳輸程式。 * **封包 (Packet):** 在網路中傳輸的資料單位。 * **事件 (Event):** ns-3 使用離散事件模擬,模擬的進行基於事件的發生和處理。每個事件都有一個時間戳記。 * **助手 (Helper):** 提供簡化設定的工具類別,例如協助建立節點、通道、協定和應用程式。 ### 2. ns-3 的架構: ns-3 採用模組化和物件導向的設計,使其具有高度的靈活性和可擴充性。其主要組件包括: * **核心 (Core):** 提供基本的模擬功能,例如事件排程、記憶體管理等。 * **網路 (Network):** 包含節點、通道、網路介面等網路拓撲的相關類別。 * **協定 (Protocols):** 實作各種網路協定,例如 TCP/IP、UDP、IPv6 等。 * **應用程式 (Applications):** 提供各種網路應用程式,例如流量產生器、客戶端/伺服器應用程式等。 * **統計 (Statistics):** 提供收集和分析模擬結果的工具。 ### 3. 使用 ns-3 的基本流程: 1. **建立模擬物件:** 使用助手類別或直接建立物件,設定模擬環境,例如建立節點、通道、協定等。 2. **配置節點和通道:** 將節點連接到通道,並配置節點的 IP 位址、路由等。 3. **安裝協定和應用程式:** 在節點上安裝所需的協定和應用程式。 4. **設定模擬時間:** 設定模擬的總時間。 5. **執行模擬:** 啟動模擬。 6. **收集和分析結果:** 使用追蹤檔案或統計工具收集模擬結果,並進行分析。 ## ns-3 mac安裝指南 ### 前置作業 1. Homebrew ```bash # 安裝 Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 設定 Homebrew 的環境變數 (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> $HOME/.zprofile ``` 2. Xcode ```bash xcode-select --install # 安裝xcode ``` 3. Python3: 從官網下載 4. 安裝必要的套件 ```bash brew install cmake ninja gnuplot ccache ``` 這個命令會安裝: - cmake:編譯工具 - ninja:構建系統 - gnuplot:繪圖工具 - ccache:編譯快取工具 ### 安裝ns-3 (需使用ns-3.42) 1. 安裝 wget 並下載 ns-3: ```bash brew install wget wget https://www.nsnam.org/releases/ns-allinone-3.42.tar.bz2 ``` 2. 解壓並安裝 ns3: ```bash tar jxvf ns-allinone-3.42.tar.bz2 # 解壓檔案 cd ns-allinone-3.42/ # 進入目錄 ./build.py --enable-examples --enable-tests # 開始編譯安裝 ``` 3. 測試安裝是否成功: ```bash cd ns-3.42/ ./ns3 run hello-simulator # 運行測試程式 ./ns3 run first # 運行第一個範例 ./ns3 run second # 運行第二個範例 ``` ### 安裝5G-LENA 5G-LENA 是一個基於 ns-3 平台開發的外接模組,主要是用來模擬 5G NR 環境。 1. 安裝 NR module ```bash cd contrib git clone https://gitlab.com/cttc-lena/nr.git cd nr git checkout -b 5g-lena-v3.3.y origin/5g-lena-v3.3.y ``` 2. 編譯專案 ```bash # 回到 ns-3 目錄 cd ../.. ./ns3 configure --enable-examples --enable-tests ./ns3 build ``` 3. 結果顯示如下 ``` Modules configured to be built: antenna aodv applications bridge buildings config-store core csma csma-layout dsdv dsr energy flow-monitor internet internet-apps lr-wpan lte mesh mobility netanim network nix-vector-routing nr olsr point-to-point point-to-point-layout propagation sixlowpan spectrum stats test topology-read traffic-control uan virtual-net-device wifi wimax Modules that cannot be built: brite click fd-net-device mpi openflow tap-bridge visualizer ``` 4. 運行 NR module 中的example腳本,確認是否正確構建 ```bash ./ns3 run cttc-nr-demo ``` 5. 目前ns-3和5G-LENA的版本對照 ``` ## ns-3 + nr installation | nr version | ns-3 version | Build system | Release date | | :------------: | :-----------:| :-----------: |--------------------| | 5g-lena-v3.3.y | ns-3.42 | cmake | October 15, 2024 | | 5g-lena-v3.2.y | ns-3.42 | cmake | September 25, 2024 | | 5g-lena-v3.1.y | ns-3.42 | cmake | July 19, 2024 | | 5g-lena-v3.0.y | ns-3.41 | cmake | February 16, 2024 | | 5g-lena-v2.6.y | ns-3.40 | cmake | November 30, 2023 | | 5g-lena-v2.5.y | ns-3.39 | cmake | July 26, 2023 | | 5g-lena-v2.4.y | ns-3.38 | cmake | April 5, 2023 | | 5g-lena-v2.3.y | ns-3.37 | cmake | November 23, 2022 | | 5g-lena-v2.2.y | ns-3.36.1 | cmake | June 03, 2022 | | 5g-lena-v2.1.y | ns-3.36 | cmake | May 06, 2022 | | 5g-lena-v2.0.y | ns-3.36 | cmake | April 21, 2022 | | 5g-lena-v1.3.y | ns-3.35 | waf | April 7, 2022 | | 5g-lena-v1.2.y | ns-3-dev | waf | June 4, 2021 | | 5g-lena-v1.1.y | ns-3-dev | waf | March 2, 2021 | | 5g-lena-v1.0.y | ns-3-dev | waf | September 16, 2020 | | 5g-lena-v0.4.y | ns-3-dev | waf | February 13 2020 | | 5g-lena-v0.3.y | ns-3-dev | waf | August 27 2019 | | 5g-lena-v0.2.y | ns-3-dev | waf | February 1 2019 | ``` ### 安裝NetAnim (視覺化工具) 1. 首先安裝 Qt: ```bash brew install qt ``` 2. 建置步驟(Linux/Mac): ```bash cd netanim-3.109 # 進入 netanim 目錄 qmake NetAnim.pro # 使用 qmake 產生 Makefile make # 編譯 ``` 3. 執行方式: ```bash ./NetAnim ``` ### 如何運行 ns-3 的單元測試: 運行測試的命令: ```bash ./test.py --no-build ``` 關於這個命令: - `--no-build` 參數表示直接運行測試,不重新編譯代碼 - 測試會並行執行,以節省時間 測試結果: ```bash 865 of 865 tests passed (865 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors ``` ### 常見問題與解決方案 1. 找不到 C++ 標準庫文件(ostream、algorithm 等): ```bash # 重新安裝 Command Line Tools sudo rm -rf /Library/Developer/CommandLineTools xcode-select --install # 清理並重新配置 ns-3 cd ns-3.42 ./ns3 clean # 使用更明確的 C++ 標準庫設定進行配置 ./ns3 configure --build-profile=debug -- -DCMAKE_CXX_FLAGS="-stdlib=libc++ -isystem /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1" ``` 2.若在編譯 netanim 時遇到了編譯錯誤: ``` fatal error: 'type_traits' file not found ``` 這個錯誤通常發生在 C++ 標準函式庫的標頭檔無法被正確定位。根據你的路徑顯示你使用的是 macOS 系統,並且是 arm64 架構,解決方案如下: ```bash # 確保你已經正確安裝了 Xcode Command Line Tools xcode-select --install # 重新安裝 Qt brew reinstall qt # 確保 CPLUS_INCLUDE_PATH 包含正確的路徑 export CPLUS_INCLUDE_PATH="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1:$CPLUS_INCLUDE_PATH" # 重新編譯 qmake NetAnim.pro # 使用 qmake 產生 Makefile make # 編譯 ``` 3. 若在編譯 netanim 時遇到了編譯錯誤,`make` 沒有找到需要編譯的目標。這可能是因為 `qmake` 沒有正確生成 Makefile。 ```bash # 首先清除之前的編譯文件 make clean rm -rf Makefile # 重新執行 qmake(使用忽略 SDK 版本警告的選項) qmake NetAnim.pro CONFIG+=sdk_no_version_check # 再次執行 make make ```