电竞比分网-中国电竞赛事及体育赛事平台

分享

NS2中的802.11協(xié)議代碼發(fā)包收包流程

 幸福的樂土 2013-01-20

發(fā)包數(shù)據(jù)包流程:


  1. 上層對象(如:數(shù)據(jù)隊列)調(diào)用recv();
  2. recv()調(diào)用send();
  3. send()通過調(diào)用sendDATA(p)封裝數(shù)據(jù)包并將p賦給pktTx_;由于在發(fā)送數(shù)據(jù)包之前需要發(fā)送RTS報文,所以send()還要 通過調(diào)用sendRTS()為數(shù)據(jù)包p生成一個RTS報文,并將生成的RTS報文賦給pktRTS_。在回退定時器到期且信道空閑情況下,為防止和其它節(jié) 點(diǎn)產(chǎn)生沖突,還要設(shè)置一個延遲定時器,延遲時常為DIFS+(0 ~ 擁塞窗口大小間的隨機(jī)值)*每一時隙的長度。如果信道不空閑,需要啟動新的回退定時器;
  4. 延遲定時器到期后會調(diào)用deferHandler(),該函數(shù)調(diào)用check_pktRTS(),在此函數(shù)里設(shè)置發(fā)送RTS報文的超時時間等于發(fā) 送RTS報文的傳輸時延+單程傳播時延+接收端從接收到發(fā)送狀態(tài)的切換時延+發(fā)送CTS報文的傳輸時延+單程傳播時延。check_pktRTS()調(diào)用 transmit(pktRTS_,timeout),根據(jù)此超時值設(shè)置并啟動發(fā)送超時定時器。transmit()函數(shù)還會將報文拷貝傳給物理層的信道 上,并啟動時長為報文傳輸時間的接口超時定時器。
  5. 發(fā)送超時定時器到期后會調(diào)用sendHandler(),進(jìn)而調(diào)用send_timer(),在該函數(shù)里有可能通過RetransmitRTS()重傳RTS報文。
  6. 如果節(jié)點(diǎn)在發(fā)送超時定時器到期前接收到了CTS報文,表明剛剛發(fā)送的RTS報文被正確接收了,recvCTS()會刪除pktRTS_,停止發(fā)送超時計時器,并調(diào)用tx_resume(),該函數(shù)會發(fā)送保存在pktTx_中的數(shù)據(jù)報文。
注:根據(jù)802.11協(xié)議,發(fā)送真正的數(shù)據(jù)包之前需要通過RTS,CTS,ACK進(jìn)行雙方及信道狀態(tài)確認(rèn)

收包流程:


  1. 下層對象(如:網(wǎng)絡(luò)接口:WirelessPhy)調(diào)用recv()。
  2. recv()將進(jìn)來的包賦給pktRx_,設(shè)置并啟動接收超時定時器,時常為報文的傳輸時間(報文處理時間)txtime(p)。
  3. 接收超時定時器到期后,會調(diào)用recvHandler(),進(jìn)而調(diào)用recv_timer()。
  4. recv_timer()檢查保存在pktRx_中接收到的包類型及子類型,并調(diào)用對應(yīng)的函數(shù)。如控制報文:recvRTS(),recvCTS(),recvACK(),數(shù)據(jù)報文:recvData(),在NS2中沒有對其它類型的包進(jìn)行處理。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多