数据链路层中的广播信道通信详解
广播信道通信很核心的一点在于多方竞争信道时的冲突如何解决,下面我们在广播信道部分主要讨论这个问题
你们会问,之前不是讲过信道复用的问题嘛,但是呢,那是静态信道分配的方式,他有很大的局限性,我们从数学角度分析一下:
静态信道分配方案的缺陷
信道的相关参数是什么样子?
- 信道容量:C (bit/s)
- 平均延迟:T
- 帧的平均到达率:λ (fr/s) 帧到达时间间隔服从泊松分布
- 帧的平均长度:1/μ(bit/fr)帧长度服从泊松分布
此时符合M/M/1排队系统模型
- M(顾客到达时间间隔分布) 帧的平均到达率(输入率):λ (fr/s)
- M(服务时间分布) 信道服务率:信道容量/帧的平均长度=μC (fr/s)
- 1(并列服务台个数)
信道平均延迟时间 (顾客在服务系统中的逗留时间) :
信道N等分后每个子信道的平均延迟时间:(平均输入率和平均服务率都变成原来的1/N)
我们看出静态信道分配的缺点
- 当一些用户空闲时,浪费资源
- 当用户数多时,延时大( N times )
适用于
- 适于用户数量少且用户数目固定情况
- 适于通信量大且流量稳定情况
- 不适用于突发性业务情况
因此我们考虑
多路接入协议——动态信道分配方案
针对这个方案,我们首先作出以下假设:
- 流量独立
- N 个独立的站组成
- 每个站都有一个程序产生要传输的帧
- 在长度为t时间内产生的帧数为 λt (λ是新帧的到达率)——泊松分布
- 一旦一帧产生,站阻塞,直到该帧被成功发送出去。
- 单信道
- 所有通信使用一个信道
- 所有站点通过该信道发送或接收帧
- 冲突可观察
- 如果两帧同时传输,则产生重叠,称为冲突
- 所有的站可以检测到冲突
- 受损帧必须重传
- 除了冲突,没有其他差错
- 时间连续或分槽
- 连续:任何时间都可以开始传输帧
- 分槽:时间被分成离散的时槽,帧只能在时槽开始时开始传输
- 载波侦听或不侦听 发送数据前检测信道是否忙
要实现动态的方案我们要做:
多路接入协议( Multiple Access Protocol ),下面我们来介绍实际使用的一些协议
ALOHA
纯ALOHA协议
- 当用户有数据要发送的时候就让它们传输;
- 会发生冲突;
- 发送方监听信道,发现毁坏的帧,等待随机时间后重发。
我们再从数学角度分析一下:
服从泊松分布
- 一个帧时内用户产生新帧:均值N个
- 一个帧时内信道中等待的帧(包括重传):均值G个
分析
- 0< N < 1,轻载N接近0,重载N接近1;N>1则几乎每个新帧都冲突
- G ≥ N,轻载G=N(无冲突),重载G>N(冲突/重传)
(一个帧时内信道中产生k个帧)
只要本帧时和前一帧时内没有发送帧,则发送成功,这段时间称为冲突的危险期
概率为:
此时的吞吐量:
Slotted(时槽) ALOHA
- 将时间分成离散的间隔。
- 用户必须在时槽的开始才能发送数据。
- 发送方监听信道,发现毁坏的帧,等待随机时间后重发。
提高:
- 冲突的危险周期被减少了一半
- 效率:信道利用率最高可达37%.
比较:
评价:
无序竞争,冲突频繁
改进的基本思想----无序变有序,减少冲突
CSMA
Carrier Sense Multiple Access Protocols
每个站发送之前都监听信道是否存在载波,并采取相应的动作
1-Persistent CSMA
- 发送数据时,首先监听信道
- 如果信道闲,发送数据(闲时发送概率为1,坚持)
- 如果信道忙,继续监听,直到信道空闲
- 若产生冲突,比如
- 信号传输的延迟造成的冲突
- 多个站点在侦听到信道空闲时,同时发送,将产生冲突
- 等待一随机时间,然后重新开始发送过程。
减少了信道空闲时间,信道利用率高于ALOHA
Nonpersistent CSMA
- 若站点有数据发送,先监听信道;
- 若站点发现信道空闲,则发送;
- 若信道忙,等待一随机时间,然后重新开始发送过程; (忙时,不坚持)
- 若产生冲突,等待一随机时间,然后重新开始发送过程。
优点:减少了冲突的概率,提高了信道利用率
缺点:增加了信道空闲时间,数据发送延迟增大;信道效率比 1-坚持CSMA高,传输延迟比 1-坚持CSMA大
p-persistent CSMA
- 若站点有数据发送,先监听信道;
- 若站点发现信道空闲,则以概率p发送数据,以概率q =1- p 延迟至下一个时槽发送。
- 若下一个时槽仍空闲,重复此过程,直至数据发出或时槽被其他站点所占用;
- 若信道忙,等待下一时槽,重新开始发送过程; 若产生冲突,等待随机时间,然后重新开始发送过程。
CSMA with Collision Detection(CSMA/CD)
当检测到冲突时,立即停止发送 ,广泛地应用于以太网中
概念模型:
发送方过程:
接收方过程:
概括:
发前先听 空闲发送 边发边听 冲突退避
冲突检测 (collision detection) :边发送边侦听,一旦检测到冲突立即停止发送数据。
原理:
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞。
由上图可知:
检测到冲突的最长时间为
冲突解决方法:
二进制指数后退算法:站点尝试争用信道,连续遇到冲突,退避等待时间(时间片个数)的策略
第 1 次冲突,等待时间为0或1;
第 2 次冲突,等待时间随机选择0~3中之一;
第 3 次冲突,等待时间随机选择0~7(即23-1)中之一;
…
第 i 次冲突,等待时间随机选择0~(2i-1)中之一。
但是这种算法有缺陷,会存在恃强凌弱的情况
后来产生了新的退避算法:二进对数仲裁法
细节:
帧间隔:一个站在检测到总线开始空闲后,还要等待 9.6才能再次发送数据。 这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备
强化帧:发送者检测到冲突,发送 “jam signal”. 让所有用户都知道现在已经发生了碰撞 强化帧长为 32 bit times
无冲突协议(Collision-free Protocols )
二进制位图协议
- 竞争周期和传输周期交替出现
- 竞争周期分成时槽, 网络中每个主机占1bit.
- 如果网络中的主机有帧要发送, 其竞争时槽的相应位置1,否则为0
- 一个竞争时槽结束后,所有主机都知道哪些主机要发送数据。
- 按照竞争时槽中填1的顺序依次发送
性能分析:
以 bit slot时间度量(基本时长), 数据帧 d time units
- 低负载情况下, bit map 不断重复, 没有数据帧,所有站等待的平均时间为 N slots. 信道利用率为 d/(N+d)
- 高负载情况下,所有站都有数据要发送 信道利用率为 d/(1+d),如果包含站点数目多,则竞争时隙占用了太多的信道资源
二进制倒计数协议
无冲突 序号(地址)大的先发送
他是什么神操作呢?
- 每个站有一个二进制地址,在竞争期,每个站从最高位开始广播他的二进制地址,每次1bit 同时,将所有站的本bit进行OR运算
- 仲裁规则:在他的地址位中,一个值为0的位被改写为1,就放弃发送—有其它地址位为1的站要发送 获得发送权,就发送一帧,然后开始新的竞争期
图解如下:
信道利用率: d/(d+log2N
)
如果发送地址是帧的第一个域 ,利用率是 100%
但是他的问题也很明显:
站点饿死 时间同步 信道支持
为了防止饿死,我们采取:每次成功传输后改变站地址
令牌环局域网
- 环型拓扑----令牌的传送 ——一台计算机获得令牌才能发送数据
- 令牌沿着环在计算机之间传递,直到某个计算机有数据要发送
有限竞争协议(Limited-contention Protocols )
考虑到上面竞争协议和非竞争协议各自的优势
- 低负载情况 竞争协议具有比较短的延时,非竞争协议具有比较长的时延。
- 高负载情况 竞争协议仲裁时间花费增多,可能要多次重传输;非竞争协议仲裁时间花费较少,不需要重传。 竞争协议信道利用效率低,非竞争协议信道利用效率高。
如果所有的站点都以相同的概率p获得信道,则称该协议是对称的,经过运算,我得出结论:
基本思想:
- 将所有站点划分成组(减少竞争者的规模)
- 只有0号组成员可以竞争0号时槽,竞争胜利者发送数据
- 然后1号组成员开始竞争1号时槽,以此类推
- 当负载很低的时候,每一个时槽的站点尽量多;当负载很高的时候,每一个时槽的站点尽量少。
由这个思想我们设计出了自适应树搜索协议
无线局域网协议(Wireless LAN Protocols)
无线局域网相对于有线信道有什么特殊之处呢
隐蔽站问题:
未能检测出媒体上已存在的信号的问题
当 A 和 C 检测不到无线信号时,都以为 B 是空闲的, 因而都向 B 发送数据,结果发生碰撞
暴露站问题:
其实 B 向 A 发送数据并不影响 C 向 D 发送数据
B 向 A 发送数据,而 C 又想和 D 通信。 C 检测到媒体上有信号,于是就不敢向 D 发送数据
如何解决呢?
MACA——信道预约手段
- RTS (request to send): 发送站在发送数据前先发送一个短的通告(30字节) 帧中含:发送地址,接收地址,要发送的数据长度
- CTS (clear to send): 接收站收到准备接收,发送响应 帧中也含发送者要发送的数据长度