Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IEEE 802.11 CSMA/CA MAC Behavior Simulator

目錄結構

MINI802.11SIM/
├── .vscode/
│   ├── settings.json
│   ├── tasks.json
├── include/            # 所有標頭檔(宣告 struct 與函數原型)
│   ├── station.h       # STA 結構與相關函數宣告
│   ├── event.h         # 事件佇列結構與操作函數宣告
│   └── logger.h        # 模擬統計與 log 函數宣告
├── src/                # 程式主體原始碼
│   ├── main.c          # 主模擬程式(tick-by-tick 控制流程)
│   ├── station.c       # 各 STA 的狀態機與傳輸邏輯實作
│   ├── event.c         # 事件佇列的增刪與排序實作
│   └── logger.c        # 統計記錄與模擬輸出格式化
└── README.md

實作背景:MiniWiFiSim 是什麼?

本實作為一個簡化的 Wi-Fi MAC 協定模擬器,主要模擬 IEEE 802.11 Distributed Coordination Function (DCF) 中的 CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance) 機制。DCF 是目前 Wi-Fi 網路中最常見的傳輸控制機制。

在此模擬中,我們建構一個離散事件系統,模擬多個 STA(Station)在共享通道上進行封包傳輸、等待 DIFS、執行 Backoff、偵測碰撞、處理 ACK 等操作。雖然細節已簡化,但整體邏輯仍忠實反映 Wi-Fi 的核心媒體存取行為。


模擬簡介

本模擬為一個以 C 語言撰寫之 IEEE 802.11 DCF (Distributed Coordination Function) 協定的 MAC 層簡化模擬器,支援:

  • CSMA/CA 傳輸流程(含 DIFS, Backoff, SIFS, ACK 等)
  • 多 STA 環境模擬與競爭機制
  • 隨機新資料產生事件
  • 模擬時間以 tick 為單位,逐 tick 處理傳送與事件行為

本模擬器可協助觀察各種環境參數對於 throughput、collision 等效能指標的影響。


Figure: State transition flowchart of a simulated STA in my CSMA/CA implementation

State Transition Diagram


模擬設定(固定參數)

  • Frame Tx Time : 3 ticks
  • ACK Tx Time : 1 tick
  • SIFS : 1 tick
  • DIFS : 3 ticks
  • Contention Window Min : 7
  • Contention Window Max : 31
  • MAX_RETRY : 5
  • Total Tick Time : 100
  • 每組參數模擬執行次數:3 次(取平均)

模擬結果摘要(平均值)

Case #STA NewFrame% Throughput Collisions Busy(%) Idle(%) Success/STA Tx/STA SuccessRate
Case A 3 50% 8.66 2.33 45.33% 54.67% 2.89 3.67 80.03%
Case B 3 90% 7.67 3.33 43.33% 56.67% 2.55 3.78 67.90%
Case C 10 50% 5.67 13.67 40.33% 59.67% 0.57 1.97 29.20%
Case D 10 90% 4.67 18.00 38.00% 62.00% 0.47 2.27 20.77%

結果分析總結

Throughput 表現

  • Case A (3 STA, 50%) throughput 最高(8.66),顯示在低負載、小規模網路下,整體傳輸效率最佳,且碰撞機率低。
  • Case B (3 STA, 90%) throughput 雖略降為 7.67,但仍維持良好水準,代表在小規模網路中,即使傳送需求高,也不會立即造成效能崩潰。
  • Case C、D (10 STA) throughput 明顯下降,尤其是 Case D(4.67),表明大規模網路下,即便有更高的 frame 產生率,也無法補償因碰撞頻率過高所導致的效能損耗。

碰撞與成功率

  • 碰撞數從 Case A(2.33) 穩定地升高至 Case D(18.00),顯示隨著 STA 數增多,channel 競爭變得劇烈。
  • 成功率(Success Rate)對應下降:
    • Case A:80.03%
    • Case D:20.77%
    • 即便 Case D 的總傳送次數最多(22.7 次),但平均每次傳送成功的比例卻最低(僅 20.77%), 顯示在高密度 + 高流量下,碰撞損失非常嚴重,多數傳送都沒有成果。

Channel 使用情形

  • Busy Tick 比例 最高為 Case A(45.33%),表示小規模網路中的傳送行為較集中、頻率穩定。
  • Case D 反而 Busy Tick 降至 38.00%,說明傳送雖多,但碰撞造成了大量「無效佔用」與時間浪費。

IEEE 802.11 標準相符性檢查

  • ✅ 正確實作 DIFS → Backoff → TX → SIFS → ACK
  • ✅ 傳送需等待媒介 idle 並倒數 DIFS
  • ✅ 失敗會重傳並調整 contention window
  • ✅ 傳送後會依據是否收到 ACK 進行流程切換
  • ✅ Slot-based 倒數與碰撞處理皆符規範

未來工作與擴充方向

功能性擴充

  • RTS/CTS 避免 hidden node 問題
  • 支援多通道與多基地台
  • 模擬 PIFS 與 PCF 模式
  • 實作 queue buffer 模型(非單一封包)

統計與視覺化

  • 整合 throughput/collision 隨時間變化圖表
  • 視覺化模擬

精準性提升

  • 模擬更細緻時間單位與干擾(noise)
  • 加入距離衰減、傳輸速率變動等物理層參數

▶️ 操作說明與執行範例

✅ 編譯與執行步驟

本實作已提供 VS Code 的建置設定,使用者只需以下步驟即可執行模擬器:

  1. 下載並開啟本實作於 VS Code
  2. 按下 Ctrl + Shift + B
    • VS Code 將自動呼叫 tasks.json 中的 gcc 編譯指令,將所有程式編譯成 wifi_sim 執行檔。
  3. 在終端機執行:
    ./wifi_sim

執行輸出範例(節錄)

[0] STA 0 enter DIFS (wait 3)
[0] STA 1 enter DIFS (wait 3)
[0] STA 2 enter DIFS (wait 3)
[3] STA 0 starts BACKOFF (retry = 0, slot = 2)
[3] STA 1 starts TRANSMIT (retry = 0, slot = 0)
[3] STA 2 starts BACKOFF (retry = 0, slot = 2)
[6] Receiver got frame from STA 1, wait SIFS (1 tick) resend ACK
[8] STA 1 received ACK successfully!
[8] STA 0 enter DIFS (wait 3)
[8] STA 2 enter DIFS (wait 3)
[9] STA 1 has a new frame to send
[9] STA 1 enter DIFS (wait 3)
[11] STA 0 resumes BACKOFF (slot = 2)
[11] STA 2 resumes BACKOFF (slot = 2)
[12] STA 1 starts BACKOFF (retry = 0, slot = 7)
[13] STA 0 starts TRANSMIT
[13] STA 2 starts TRANSMIT
STA 0 COLLISION!!!
STA 2 COLLISION!!!
[16] STA 1 enter DIFS (wait 3)
[18] STA 0 enter DIFS (wait 3)
[18] STA 2 enter DIFS (wait 3)
[19] STA 1 resumes BACKOFF (slot = 6)
[21] STA 0 starts BACKOFF (retry = 1, slot = 10)
[21] STA 2 starts BACKOFF (retry = 1, slot = 11)
[25] STA 1 starts TRANSMIT
...

模擬結束後會自動輸出總結報告:

===== Simulation Summary =====
Simulation Parameters:
- Total STA             : 3
- Total Tick Time       : 100
- New Frame Prob (%)    : 50
...

Aggregate Results:
- Total throughput     : 8
- Total collisions     : 2
- Total busy ticks     : 46 (46.00%)
- Total idle ticks     : 54 (54.00%)
- Overall success rate : 72.7%
==============================

About

Time-driven CSMA/CA simulator based on IEEE 802.11 DCF, implemented in C. Simulates wireless medium access with DIFS, backoff, SIFS, ACK, and collision handling.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages