---
# System prepended metadata

title: '[ns-3] mac安裝指南及基本介紹'
tags: [NS-3, Network]

---

## 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
```
