摘 要:提出一种新方法来降低IEEE802.11协议中多跳传输的时延,并利用NS2仿真器分析比较了原来的IEEE802.11协议和改进后的协议性能,证明了后者在任何链路负荷的情况下都更加适合多跳传输。
关键词:802.11协议多跳传输时延无线网络
1 现有的缩短时延的方法
时延是衡量网络性能的一大标准。为缩短时延,国内外提出了许多方法[1]。在无线传感网络中提出了消息传递机制来缩短时延。该机制一次将大量数据完整地从一个节点传递到下一个节点,会导致这2个节点间的信道长期不能被其他节点使用,造成其他需要使用这段信道的节点的长时间等待,并不能真正起到整体缩短时延的效果[2]。因此提出了自适应方法来缩短树型应用中多跳传输时延, 但该方法的适用范围很有限。基于非同步的用于Ad Hoc网络中实时传输的机制MACA/PR和RTMAC来缩短时延用到了时隙分配(类似TDMA),这又会带来其他开销[3][4]。
本文利用无线网络的一个独特之处:一个节点发送的数据只会传给它的传输范围内的所有节点,它的数据活动范围是一个空间的球体,而有线网络的则是一条线。利用这个由物理层特性决定的特点可节省部分控制帧ACK的发送(多跳传输时),缩短传输时延,使目的节点更早收到分组。但是发送节点等待确认帧ACK的时间变长了。当然,如果节省下来的ACK帧的发送能量能够抵消掉接收所需的额外能量,在以节能为目的的无线传感网络中也可以这样做。
2 对IEEE 802.11的MAC层协议的改进
2.1 原IEEE 802.11的思想
IEEE 802.11协议(以下都简称802.11)利用CSMA/CA技术[5]避免冲突。工作过程:站A向站B发送数据前,先向B发送一个请求发送帧RTS,RTS中含有整个通信过程需要持续的时间(duration)。立即发送站地址、立即接收站地址、非立即接收站的节点收到该帧就依据该帧中duration域的值设置自己的NAV(网络分配向量,用于判断信道是否被其他节点占用),等待该通信过程结束后再去竞争信道。B收到RTS后就立即给A发送一个允许发送帧CTS。CTS中含有剩下通信过程所需时间及A站地址。其他节点收到该CTS帧后同样也要设置自己的NAV。这样的2次握手可以很大程度上保证整个通信过程不受其他节点干扰。A收到CTS后就发送数据,B收到数据后就发送ACK,于是一次通信过程结束。
2.2 改进思想
多跳情况下,如果数据从A发送给C,中间经过B来转发,当B收到A的数据后,除了要立刻回送给A一个ACK, 还要竞争信道,给C发送RTS。考虑到ACK和RTS一个在前,一个在后,时间上连续,因此希望将2个帧合为1个帧,让该帧既能起到ACK的确认作用,又能发挥RTS的请求发送功能。这样就可以克服802.11浪费控制帧的缺点,节约1个确认帧ACK。
为实现新的功能,需构造1个新的控制帧(一种新的RTS)。该控制帧就是通过在RTS中加1个地址(FA):转发节点的上一站的地址。原来的RTS与修改后的RTS的结构如图1所示。
B不发送ACK,而发送出这样一个修改后的RTS。当A收到后(C也会收到这个RTS,不过对于C而言,这个就是请求通信的RTS),发现该帧不是发给自己的,但是该帧的前一站的地址是自己的地址,即可判断该帧是发送给自己的ACK,于是结束自己和B之间的通信。通常RTS的竞争时间比较长,所以有时候A需要等待很长时间才能收到B发送的RTS,因此选择A等待RTS形式的ACK的timeout时间很关键。此外各个帧的duration域的值也变了,必须重新计算。NAV函数(虚拟载波检测函数)也需在原来代码基础上修改。
当不再需要转发的时候,也就不需要再发送RTS。所以没有必要再发送RTS与ACK的合成帧,只需要发送ACK。此时需要一个机制来区别对待,即通过上层(路由层)来做特殊处理,因为MAC层无法判断出最终的目的地址是不是本节点(IP地址对MAC层是透明的)。为了不破坏分层的思想,达到真正的模拟效果,需在路由层和链路层增加相应的判断和处理代码。
其实,该方法只不过是一种捎带思想,在发送RTS时捎带了ACK,不发送RTS时就不捎带。改进前后802.11的数据转发过程如图2所示。
2.3 NS2下802.11源代码及修改
主要修改之处是在程序Mac-802_11.h中为RTS的帧增加一个前一站的地址。
struct rts_frame {
struct frame_control rf_fc;//控制域
u_int16_t rf_duration;//RTS的持续时间
u_char rf_ra[ETHER_ADDR_LEN];
//立即接收站的地址
u_char rf_ta[ETHER_ADDR_LEN];
//立即发送站的地址
u_char rf_fa[ETHER_ADDR_LEN];
//增加的,上一站的地址
u_char rf_fcs[ETHER_FCS_LEN];
//帧检验序列
};
为了能让转发节点将上一站的地址提取出来并保存到立刻要发送的RTS帧的FA域中,在类Mac802_11中增加了一个中间变量former用于事先存储该地址。
接收站收到DATA后,会判断该分组是否是重复报文,如果是则要做处理。原来的802.11直接丢弃该报文,没有给发送站发送ACK,结果发送站就不断地重发数据,接收站不断发现是重复报文,就不断丢弃,直到发送站的重传次数达到限度,放弃重传为止。这样做极为浪费资源,所以本文的方法是立刻发送ACK。此外,发送站可能会收到迟到的ACK,此时该站正在重发数据,可能处于任何一种状态(发送RTS、等待CTS、发送DATA、等待ACK或IDLE)。但是不管它处在何种状态,它都应该立刻撤销重传,回复到初始状态。因此本文在类Mac802_11中增设了一个标志变量flag,将它用于重传机制中。
原来的NAV函数的功能为:收到一个不属于自己的分组时,依据分组的duration域设置虚拟探测仪的值, 以后再收到不属于自己的分组时就要比较,看是否新分组的duration值会使虚拟探测仪的值更大。若是,则用新分组的duration值来重设虚拟探测仪的值;否则仍用原来的,不做改变。这样的功能不好,因为情况可能变了,不需要再等那么长的时间。例如新的协议中源节点可能很早就收到了ACK,其他节点就没必要还等那么长的时间,这样就不能充分利用空闲出来的信道,并且还会使收到RTS的节点依据虚拟探测仪就误以为信道忙,而不敢发送CTS,从而导致RTS的重传。所以新的NAV函数的功能应该是:只要收到不属于自己的分组,就要依据该分组的duration域的值来更新虚拟探测仪的值。
当多跳转发到终点后无需再发送RTS时,上层(路由层)应该通过发送一个新类型的空分组通知MAC层发送ACK。但是NS仿真中任何时候链路层都不会将MAC层收到的分组首先交给路由层,而是先将分组交给哈希地址分类器。地址分类器发现该分组的最终目的不是自己,才将它转交给路由层,若是自己的就不交给路由层,而交给端口分类器。端口分类器再将该分组交给相应的进程。但是由于新协议要求路由层能发现最终目的站是自己,然后通知下层发送ACK。如果在这里分组就被地址分类器给过滤掉了,路由层就永远无法通知下层发送ACK了,所以在哈希分类器的源代码中要加入处理代码,要求无论如何,即使分组已经到了目的站,此时不需要寻找路由了,还是要交给路由层处理。
本文编写了一个具有基本接收、发送和转发功能的静态路由协议SimRoute。用该路由协议,而不用NS中编好的路由协议模块AODV、DSR、DSDV等,是因为用它容易看出新的802.11协议的效果,排除由于路由寻找而带来的干扰,并且修改上层也比较容易。
3 模拟仿真
3.1 延时理论计算
在NS的系统文件ns-default.tcl中设定了802.11的许多参数的默认值,如:
SIFS 10μs(短帧间间隔)
PreambleLength 144b(物理层的前同步码长度)
PLCPHeaderLength 48b(物理层头部长度)
PLCPDataRate 1Mbps(物理层的数据传输速率)
另外根据文件Mac802_11.h中的各个控制帧的结构可以算得各个帧的长度:
RTSLength=44B(原来的802.11中)
RTSLength=50B(新的802.11中)
CTSLength=38B
ACKLength=38B
因默认数据传输速率是1Mbps,故各帧所需传输时间是:
tRTS=44*8/1μs=352μs(原来的802.11中)
tRTS=50*8/1 μs=400μs(新的802.11中)
tCTS=38*8/1 μs=304μs
tACK=38*8/1 μs=304μs
MAC层的最大处理时延DSSS_MaxPropagationDelay为2μs;LL层处理从MAC层或路由层来的分组的默认时延是25μs;路由层是静态路由,默认处理时延为0。
新的RTS帧比原来的RTS长6个字节,故多需要6×8b÷1Mbps=48μs的传输时间。先考虑只转发一次所节约的时延。由图2知,2个协议都发送了2次RTS,但新协议少发送了一个ACK,少需时间10μs+304μs。新协议中要求即使最后分组已经到了目的站,还是要将分组交给路由层让它通知下层发送ACK,故多出LL层的处理时延50μs(路由层将分组交给LL层, LL层处理用了25μs,LL层再用25μs将分组交给MAC层)。但综合起来数据仍然提前到达目的节点的应用层,所耗时间可减少:-48-48+10+304-50=168μs。此数据与链路负荷轻时的仿真结果一致。
若需转发N次,数据传输速率为VMbps,ACK帧的长度为A字节,新的RTS增加的地址长度为L字节,发送ACK之前等待的时间为SIFSμs,链路层处理一次分组所需时间为Tμs,则一共发送了(N+1)个RTS帧,那么所节省的时间为:
t=[-8*L/V+(-8*L/V+SIFS+8*A/V-2*T)*N]μs
当V=1,L=6,SIFS=10,T=25时,t=(216N-48)μs,故N越大,即跳数越多,就越省时。
当N=5时,t=1 032μs,与后面链路负荷轻时的仿真结果一致。
3.2 TCL仿真代码编写
在TCL仿真代码中使用新编写的静态路由协议SimRoute。利用该路由协议的功能实现程序simroute.cc中的接口函数command( )的功能,依据所要仿真的拓扑结构用TCL代码填写出相应的静态路由表。在流量安排的问题上,为简单起见,先不绑定应用层,而使用UDP代理,直接在udp层发送数据。这样就可以自如地控制流量,而不受上层应用的影响,将问题集中在改进前后的802.11协议的性能比较上。
3.3 NS下的仿真数据
3.3.1 拓扑配置与流量安排
为测试不同情况下的协议效果,需要不同的拓扑配置和流量安排。
情况1:为 3个节点的拓扑结构,如图3所示。3个节点排成一条线,间距250m。这样选择是考虑到无线网络的传输范围是250m,干扰范围是550m。
节点0只发送一个数据给节点2。节点0每隔0.1s、0.01s、0.005s、0.003s、0.002s给节点2发送数据。
没有必要考虑节点0和2同时给节点1发送数据的情况,因此时没有多跳,新协议显然没有任何优越性,反而增加了开销。
情况2:是7个节点的拓扑结构,如图4所示。7个节点,排成一条线,间距250m。
节点0给节点6发送一个数据。节点0每隔0.1s、0.015s、0.012s、0.01s、0.001s给节点6发送一个数据。节点0和6同时给节点3发送一个数据。节点0和6每隔0.1s、0.015s、0.01s、0.008s给节点3发送数据。
3.3.2 数据处理结果的表格统计
以上二种情况的数据统计分别如表1和表2所示。
3.3.3 绘图及分析
图5为情况1下2个协议多跳传输的时延差。当每个时间间隔发送分组个数为100时,可以看到负荷重时改进的802.11延时性能不如原来的802.11,且随着负荷加得更重,2个协议延时性能的差距缩小。但是只要负荷不重,改后的802.11的延时性能要好一些。其原因是此时数据只转发了一次,跳数太少。同样,当每个时间间隔发送300个分组时,结果类似,只不过此时链路负荷更重,因此时延性能略差于只发送100个分组的情况。由表1数据知跳数不太多时,修改后的802.11的丢包率要高一点,但是随着负荷加重,丢包率的差距也减小。
图6和图7分别为情况2(即一点对一点)的时延差和丢包率。由图6可知不论链路负荷有多重,修改后的802.11的时延始终比原来的802.11协议小。可见,跟原来的协议比,新协议更加适合多跳传输,跳数越多,它的优越性就越显著,且由图7可知新协议的丢包率也低一些。由表2可知,虽然新协议的冲突次数要少一些,但是RTS冲突导致RTS丢弃,即产生新协议的确认帧丢失,所以会出现重复分组。但是总的说来多跳传输性能还是比原来的802.11协议性能好得多。
情况2下多点对一点时的时延差和丢包率分别如图8和图9所示。由图8可知,负荷轻时改进的802.11始终比原来的802.11时延小。负荷比较重时则改进的协议时延要长得多,但是负荷更重的时候时延就短很多。原因是修改后的802.11转发时不发送ACK,而是发送RTS。这样除非RTS冲突,否则发送数据的节点就可以将信道的控制权成功地交给下一跳的节点,于是可以连续完成一次多跳传输;而原来的802.11转发时发送ACK,这就导致信道的公平竞争,不能保证下一跳节点获得信道的控制权,也就不能保证连续完成一次多跳传输(尤其在负荷很重的时候,信道的控制权连续交给下一跳的概率将更低),这就会在多跳且负荷很重时引入多余的时延。由图9知新协议的丢包率始终比原来的低,且链路负荷越重它们丢包率的差距就越大。
4 结 论
综上所述可知:没有太多冲突的时候,即使负荷很重,在多跳的情况下改进的802.11时延也小很多。但是如果跳数太少,如只转发一次,则改进的802.11协议的优越性就不明显;若负荷很重则还比原来的协议时延长不少,并且丢包率也较高。在多个节点同时给同一个节点发送数据时,2个协议都有冲突,结果大多是丢弃RTS。在改进的802.11协议中,此时由于RTS冲突被丢失而导致不必要的数据分组重传。但此时原来的802.11协议的丢包率更高,成功传输的分组数目比改进的802.11协议少很多。在负荷很重时原来的802.11协议的时延反而更长。可见改进的802.11适用于多跳且冲突不多的情况。在一点对一点的情况下,无论链路负荷如何,改进的协议更适合多跳传输;在多点对一点的情况下,只要链路负荷不重,冲突不多,则修改后的协议在多跳传输方面更有价值。
参考文献
1 Ye W,Heidemann J,Estrin D.An Energy-efficient MAC Protocol for Wireless Sensor Networks.In:IEEE INFOCOM, 2002
2 Lu G,Krishnamachari B,Raghavendra C S.An Adaptive Energy-efficient and Low-latency MAC for Data Gathering in Wireless Sensor Networks.In:IEEE Proceedings of the 18th International Parallel and Distributed Processing Symposium,2004
3 Lin C R,Gerla M.MACA/PR:Asynchronous Multimedia Multihop Wireless Network.In:Proc of IEEE INFOCOM,1997
4 Manoj B S,Siva R M.Real-time Traffic Support for Ad Hoc Wireless Networks.In:10th IEEE International Conference,2002
5 ANSI/IEEE Std 802.11.1999