介质访问控制(MAC, Medium Access Control)子层:用来确定多路访问信道下一个使用者的协议。
帧时 T T T:传输一个标准的、固定长度的帧所需要的时间(即帧的长度除以比特率)。
吞吐率 S S S:在一个帧时T内发送成功的平均帧数。显然, 0 < S < 1 00<S<1, S = 1 S=1 S=1时分组一个接一个地发送出去,帧之间没有空隙。一般用 S S S接近于 1 1 1的程度来衡量信道的利用率。
运载负载 G G G:一个帧时 T T T内所有通信站总共发送的帧平均值(包括原发和重发的分组)。显然, G ⩾ S G\geqslant S G⩾S,只有在不发生冲突时 G G G才等于S。当重负载 ( G ≫ 1 G\gg1 G≫1) 时,冲突频繁。
P 0 P_{0} P0: P 0 P_{0} P0是一帧发送成功(即未发生冲突)的概率。就是发送成功的分组在已发送分组的总数中所占的比例。
S = G × P 0 S=G \times P_{0} S=G×P0计算 P 0 P_{0} P0的方法:若在一个帧时 T T T内,有 k k k帧要传输,则生成 k k k帧的概率 P k = G k e − G k ! P_{k}=\frac{G^ke^{-G}}{k!} Pk=k!Gke−G。
如上图,当一个帧正发送时,它不应该跟前面的帧冲突,后面的帧也不应该跟它冲突,前面的帧要求 T T T时间, 后面的帧同样要求 T T T时间,即在 t 0 t_{0} t0至 t 0 + 2 t t_{0}+2t t0+2t这段时间内都不允许生成帧。两个帧时内,帧平均数是 2 G 2G 2G, P 0 = e − 2 G P_{0}=e^{-2G} P0=e−2G。
S = G × e − 2 G S=G \times e^{-2G} S=G×e−2G当 G = 0.5 G=0.5 G=0.5时, S ′ = 0 {S}'=0 S′=0,此时吞吐率最大, S = 1 2 e ≈ 0.184 S=\frac{1}{2e}\approx0.184 S=2e1≈0.184。
在所在的同一个时隙内没有其他流量的概率是 e − G e^{-G} e−G,则可得 S = G × e − G S=G \times e^{-G} S=G×e−G当 G = 1 G=1 G=1时, S ′ = 0 {S}'=0 S′=0,此时吞吐率最大, S = 1 e ≈ 0.368 S=\frac{1}{e}\approx0.368 S=e1≈0.368。
载波检测多路访问,在发送前监听信道。
1-坚持(1-persistent):当信道忙的时候,持续监听直到空闲便开始发送;如果发生冲突,等待一个随机分布的时间再重复步骤。(延迟时间少于Nonpersistent,但更易产生冲突)
非坚持(Nonpersistent):当信道忙的时候,等待随机时间再来尝试。(减少再次碰撞冲突的可能性,但等待时间内没有数据传送,浪费时间)
P-坚持(P-Persistent):用于分(时)槽系统。 1)若发现当前时槽信道空闲,以概率p发送;以(1–p)的概率延迟一个时间单元发送;2)如介质忙,持续侦听,一旦空闲,重复①;3)如果发送已推迟一个时间单元,再重复步骤①。
带冲突检测的CSMA。
1)监听信道看是否空闲,如空闲则发送,如介质忙,持续侦听,一旦空闲立即发送;
2)传输时持续监听信道,如果监听到冲突,立即停止传输;
3)如果发生冲突,等待一个随机分布的时间再重复步骤①。
所有工作站在发送的同时也接收自己的信号,监测发送的情况,一旦收到的信号与发出的不一致,就说明发生了冲突。
发送站感知冲突后立即停止帧的发送,并且发一个简短的堵塞信号通知网上各站已经发生冲突,本站及网上所有站都等待一段随机分布的时间,然后再按CSMA/CD方式重发该帧。
问题1:发出帧的第1位多久才知道有没有冲突?
答:设帧到达另一端的传播时间为 τ \tau τ,则正好在该帧到达另一端之前的某一个时刻(不放设为 τ − ε \tau-\varepsilon τ−ε),另一端B开始发送数据,当 τ \tau τ时刻B检测到它所接收的信号比发送的信号更强时,则知道已经发生了冲突,因此放弃传输数据,并产生一个48位的突发噪声警告其他所有站。如果一个站试图传输一个很短的帧,那即使发生了冲突,在突发噪声的警告送达到发送方前( 2 τ 2\tau 2τ前),传输已经结束,发送方会得出刚才的一帧已经成功发送的错误结论。为了避免这种情况,必须限制最小帧长,所有帧必须最少需要 2 τ 2\tau 2τ时间才能完成发送。若 2 τ 2\tau 2τ没有检测到冲突则抢占成功(帧已开始传送),从而在CSMA/CD系统中竞争期,可按相距最远两站的 2 τ 2\tau 2τ建模成分槽系统,即将CSMA/CD竞争看成是一个分槽ALHOA系统,时间槽宽度为 2 τ 2\tau 2τ,则最小帧长 2 v τ 2v\tau 2vτ。
问题2:如何确定当冲突发生后的随机等待时间?
答:二进制指数退避算法:在第 i i i次冲突后,每个站从 0 0 0 ~ 2 i − 1 2^i-1 2i−1之间随机选择一个数 r r r,然后等待这么多个时间槽(即 r × 2 τ r\times2\tau r×2τ),然而, i i i达到10次后,随机数的选择区间被固定在最大值1023,以后不再增加,16次冲突后放弃,并给计算机返回一个失败报告。进一步的恢复工作由高层协议完成。
CSMA/CD缺点:冲突会降低带宽,发送一个帧的时间不确定,无法适应实时流量。
改进:
让每个竞争期包含N个槽,若第k个站希望传输帧,让它在第k个槽中插入“1”,当所有N个槽都经过后,每个站都知道了哪些站希望传输数据,这时便开始传输。
低负载(1站传送)信道利用率:d / (N + d)(d为帧的数据长度,须等待N个槽);
高负载(都有传送)信道利用率:d / (d + 1),帧平均传输等待时间(N - 1) d + N。
所有站连接成一个单环结构,一个站依次连接到下一站。令牌传递到下一站只是简单地从一个方向接收令牌在另一个方向上发送令牌。令牌绕着环循环到达任何一个目标站。为了阻止帧陷入无限循环,应设置帧必须从某个站取下,如可设置为最初发送帧的原始站,经历一个完整的环后取下。
一个站只要看到自己的地址位中的0值位置被改写成了1,则它必须放弃竞争。如下图,赢家是1010,它可以传输一帧。
1)某个竞争时槽,发生冲突,则缩小下一个时槽参与竞争的站点数目;
2)不发生冲突,那么下一个时槽应该让另一半节点来竞争;
3)当负载较重,显然不应该从树根节点开始尝试。(负载越重,越应该从树的下面节点开始搜索)
假设估计会有均匀分布的 q q q个站要发送帧,则搜索起始级数 i = l o g 2 q i=log_2q i=log2q可以保证每个时槽中,参与竞争的站的平均数为 1 1 1。
(a)隐藏终端问题:A和C向B传送数据,若A开始发送,C监听不到A的传输,C认为它可以向B传输数据,导致在B处产生冲突,因此,需要一个MAC协议来防止冲突的发生。
(b)暴露终端问题:B先向A发送,此时C监听到有一个传输正在进行,认为它不能向D发送数据,因此,需要一个MAC协议来防止延迟传输的发生。
解决方案:
(A) 首先给B发送一个RTS帧(包含了随后将要发送的数据帧的长度)。
(B) B用一个CTS帧作为应答(包含了随后将要发送的数据帧的长度,复制)。
(C) C只听到了A发出的RTS,但没有听到B发出的CTS,只要它没有干扰CTS,那么在数据帧传送过程中,它可以自由地发送任何信息。
(D) D听不到RTS帧,但是听到了CTS帧。只要听到了CTS帧,这意味着它与一个将要接收数据帧的站离得很近,所以,它就延缓发送任何信息直到那个帧如期传送完毕。
(E) 站E听到了这两条控制消息,与D一样在数据帧完成之前它必须保持安静。
CSMA/CA协议是基于MACA的改进,在802.11标准定义,能解决隐藏终端问题,但不能解决暴露终端问题。
在上例中,A想给B发送,C是A范围内的一个站(也可能在B范围内)。D在B范围内,但不在A范围内。
(A) 发送方A发送一个RTS帧给接收方B,请求B允许自己可以发送一个帧给它(RTS帧包含从发送方发送数据帧开始,到发送方接收ACK帧需要的时间NAV)
(B) 接收方B接收到RTS帧,如果判断此时信道可以传输,则向A发送一个CTS帧进行确认。
(A) 一旦收到CTS帧,A就发送数据帧,并启动一个ACK计时器。
(B) B接收完数据帧后,向A返回一个ACK帧确认。
(C)C在A的范围内,如果收到了RTS帧,则从其中带有的信息估算出数据序列将传输多长时间(包括最后的ACK),因此它停止传输任何东西,直到数据交换完成,它通过更新自己的NAV记录表明信道正忙。
(D)D无法听到RTS,但能听到CTS,所以它也更新自己的NAV。
MACA和CSMA/CA都可以解决隐藏终端问题,解决这个问题需要离接收方近的站要保持安静,可通过CTS实现,只要接收到CTS的站保持安静即可。而解决暴露终端问题的关键在于,离发送方近的站点不需保持安静,即不需要对RTS做出任何反应(MACA)。而CSMA/CA中接收到RTS帧的站点需保持安静,这就导致了暴露终端问题。
CSMA/CA中需要对RTS做出安静反应的原因:
MACA是一个不可靠的协议,它只负责发送,不负责发送出去的东西是否被正确接收。而CSMA/CA增加了ACK帧确认,是可靠的通讯协议。在NAV这段时间里面,发送方同样有可能接受数据和ACK帧。为确保发送方能无冲突接收到ACK,所有离发送方近的站点都需保持安静。因此所有站点无论是接收到RTS还是CTS都需保持安静一段时间,这也导致了CSMA/CA的效率比较低。
CSMA/CD | CSMA/CA | |
---|---|---|
基本思想 | 发送前侦听,边发送边侦听,一旦出现碰撞马上停止发送。 | 在发送数据时先广播告知其他结点,让其他结点在某段时间内不要发送数据,以免出现碰撞。 |
冲突检测 | 可检测冲突 | 不可检测冲突 |
冲突避免 | 不可避免 | 尽量避免 |
传输介质 | 总线型以太网 | 无线局域网802.11a/b/g/n等 |
检测方式 | 电缆中电压变化 | 能量检测、载波检测、混合检测 |
碰撞解决 | 二进制指数退避算法 | |
无线局域网不使用CSMA/CD的原因 | 1) 在无线局域网的适配器上,接受信号的强度往往远小于发送信号的强度,因此若要实现碰撞检测,那么硬件上的花费就会过大。 2) 在无线局域网中,并非所有站点都能听见对方,由此引发了隐蔽站和暴露站问题,而“所有站点都能听见对方”是实现CSMA/CD的基础。 |
负载较轻时,竞争方法(纯ALOHA或分槽ALOHA)更好,因其延迟较短(冲突很少发生)。
负载较大时,无冲突协议更好,信道效率得到提高(开销固定)。
《Computer Networks》(第5版)作者:Andrew S. Tanenbaum / David J. Wetherall