- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NS2 mac层理解
mac-802_11.h:// frame control field:struct frame_control {u_char??? ??? fc_subtype??? ??? : 4;u_char??? ??? fc_type??? ??? ??? : 2;?? //frame type : RTS, CTS, ACK, datau_char??? ??? fc_protocol_version??? : 2;u_char??? ??? fc_order??? ??? : 1;u_char??? ??? fc_wep??? ??? ??? : 1;u_char??? ??? fc_more_data??? ??? : 1;u_char??? ??? fc_pwr_mgt??? ??? : 1;u_char??? ??? fc_retry??? ??? : 1;u_char??? ??? fc_more_frag??? ??? : 1;u_char??? ??? fc_from_ds??? ??? : 1;u_char??? ??? fc_to_ds??? ??? : 1;};// frame field:struct hdr_mac802_11 {struct frame_control??? dh_fc;//duration of reserved transmission time (RTS/CTS)u_int16_t??? ??? dh_duration;//address 1: MAC address of wireless host or AP to receive this frameu_char??????????? dh_ra[ETHER_ADDR_LEN];//MAC address of wireless host or AP transmitting this frameu_char??????????? dh_ta[ETHER_ADDR_LEN];//MAC address of router interface to which AP is attachedu_char??????????? dh_3a[ETHER_ADDR_LEN];//used only in ad hoc modeu_char??? ??? ??? dh_4a[ETHER_ADDR_LEN];u_int16_t??? ??? dh_scontrol;u_char??? ??? ??? dh_body[1]; // size of 1 for ANSI compatibility};发送包:recv()--send()--sendDATA() and sendRTS()--start defer timer--deferHandler()--check_pktRTS()--transmit()--recv()--recieve timer started--recv_timer()--recvCTS()--tx_resume()--start defer timer--rx_resume()--deferHandler()--check_pktTx()--transmit()--recv()--recieve timer started--recv_timer()--recvACK()--tx_resume()--callback_--rx_resume()
recv()(down)--要发送的数据包先被recv()处理,recv()先检查包头方向字段,如果是down,意味着包来自上层,数据包将转由send()处理。不管接收包来自上层或下层,recv()总被调用。
send()-- 首先检查能量模式,如果在睡眠模式则丢弃包,并随包设callback_ 给handler(?),这是包传送完毕后会调用handler的原因。
下一步,send()调用sendDATA()and sendRTS建立数据包包头,RTS包存储在pktTx_ and pktRTS_并随数据包发送。数据包的MAC头赋唯一序列值。
MAC用 is_idle()检查backoff timer,如果backoff timer不减少,则检查信道(medium)是否空闲,如果空闲则启动defer.
DIFS+a randomly chosen amount of time in the interval [0,cw_), cw_当前竞争窗口。
如果节点正在等待其defer time,则继续等待。
如果介质忙,节点启动其backoff timer.
此时,send
文档评论(0)