一. 一些基礎必備點:
? ? ? ? ? ?無線AP,即Access Point,也就是無線接入點。簡單來說就是無線網絡中的無線交換機,它是移動終端用戶進入有線網絡的接入點。
? ? ? ? ?可以實現兩個無線設備通訊,也可以起到放大信號的作用,而產品的SSID也可以不同。
? ? ? ? AP的一個重要的功能就是中繼,所謂中繼就是在兩個無線點間把無線信號放大一次,使得遠端的客戶端可以接受到更強的無線信號。
? ? ? ? ? ? 最后一個功能是“主從模式”,在這個模式下工作的AP會被主AP或者無線路由看做是一臺無線客戶端。
? ? ? ? ? ?一般的無線AP還帶有接入點客戶端模式,也就是說AP之間可以進行無線鏈接。
? ? ? ? ?單純型AP由于缺少了路由功能,相當于無線交換機,僅僅是提供一個無線信號發射的功能。
? ? ? ? ? 它的工作原理是將網絡信號通過雙絞線傳送過來,經過無線AP的編譯,將電信號轉換成為無線電訊號發送出來,形成無線網絡的覆蓋。根據不同的功率,網絡覆蓋程度也是不同的,一般無線AP的最大覆蓋距離可達400米。
? ? ? ? ? 擴展型AP就是我們常說的無線路由器了。無線路由器,顧名思義就是帶有無線覆蓋功能的路由 ? 器,它主要應用于用戶上網和無線覆蓋。通過路由功能,可以實現家庭無線網絡中的Internet連接共享,也能實現ADSL和小區寬帶的無線共享接入 。值得一提的是,可以通過無線路由器把無線和有線連接的終端都分配到一個子網,使得子網內的各種設備可以方便的交換數據。
二. 設置RTS閾值和Fragmentation閾值
三. 設置網絡為飽和狀態
myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u)); ?// 飽和狀態???
四. 設置slot(時隙)、SIFS等參數
五. 實際在802.11a中slot、SIFS、DIFS和仿真是一致的,不需修改。
這里仍然是RTS閾值的設置;
六. 問題出現:
? ? ? ?數據包PacketSize只能小于1500bytes,否則報錯,下面是PacketSize設置為1200bytes的吞吐量:
? ? ? ?這里是設置速率為54Mbps:
? ? ?下面是節選自參考網上RTS閾值設置,起初以為是RTS閾值設置錯誤或者設置不起作用等原因造成報錯:
uint32_t rtsThreshold = 65535;
cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
wifi.SetRemoteStationManager (staManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
wifi.SetRemoteStationManager (apManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
std::string staManager = "ns3::MinstrelHtWifiManager";
std::string apManager = "ns3::MinstrelHtWifiManager";
查看classess:發現udp-client中數據包設置在12-1500bytes范圍:
在udp-client.cc中發現命令MakeUintegerChecker<uint32_t> (12, 1500)
?重點:
? ? ? ?起初數據包只要超過1500bytes,程序就會出錯,幾天下來以為是RtsCtsThreshold的設置不起作用,幾經折騰,最后在udp-client.cc頭文件中修改packetSize(1500bytes變為999999bytes),重新運行和編譯,這樣當仿真數據包長大于1500bytes時不會再報錯了。