动态分配之 CSMA/CD/CA
CSMA/CD 检测到碰撞,立即叫停发送过程 上传数据到帧的时候就开始检测了
在CSMA的基础上发展而来,也就是 需要监听信道,但是它是在发送数据上信道的时候,仍然会监听信道,如果监听到冲突,就会停止发送数据上信道。
CSMA/CD(carrier sense multiple access with collision detection)
CD 碰撞检测 collision detection
这个CSMA/CD 的监听除了在发送数据之前监听信道,还会在发送数据时监听信道 进到站点的信号进行检测,检测到信号的依据仍然是信号电压的摆动幅值
MA 仍然是多点检测。说明CSMA\CD是总线型结构
CD "边监听边发送",一旦网络适配器发送的过程中检测到信号幅值的异常变化,就停止发送。 半双工网络方式(全双工网络方式好像一定会冲突???)
即使是监听了,单还是可能会发生冲突的,因为有传播时延啊
信号在路上,B此时没有检测到有信号传来,于是B就开始把信号传到信道上,结果到路上碰撞了。
两个电信号发生碰撞是会相互影响的,因此不能随便发生碰撞。影响后的信号经差错控制检测,发现信号是有问题的
一个信号发送出去,在\([0,2\tau]\) 之内就能知道是不是发生了碰撞。其中\(\tau\)是一个传播时延。也叫争用期\冲突窗口\碰撞窗口。
取0的话就是立即检测到碰撞,取\(2\tau\) 就是过这么久后检测到碰撞
也就是讲,只要经过\(2\tau\)的时间,要是还没有检测到碰撞,就一定不会发生碰撞的。
如何确定发生碰撞后的重传时机?
确定碰撞后 不能又立即重新发送数据帧,这样可能还是会发送碰撞。如下图
我们一般需要计算一个时间,在这个时间后,再次发送数据。
计算时间的方法叫做 截断二进制指数规避算法(二进制回退算法)
步骤:
- 确定基本退避时间 \(2\tau\)
- 定义参数k, k=min{重传次数,10},重传次数是整数 (截断意义所在)
- 在\([0,1,2,……2^k-1]\) 中随机挑选一个数r,重传所需要退避的时间 = r✖️\(2\tau\)
- 最大重传次数是16次,要是重传16次还不能成功,说明网络拥挤,放弃此帧,报告错误。
每次碰撞之后,重传等待时间可能越来越长
要是发了16次,就放弃这个帧。生不逢时
连续发生多次碰撞,表明目前发送机器可能比较多参与争用信道,使用此算法可以让推迟时间随着重传次数增大而增大,减小碰撞概率
CSMA\CD最小帧长
由于帧太小超级超级小,在检测到碰撞之前已经发送完了。
为了让CSMA/CD有用,需要定义最小帧长。使得检测到碰撞的时候,帧还没有发送结束 。所以要 帧的传输时延至少要2倍传播时延
帧长/数据发送速率 >= \(2\tau\)
小于最小帧长,就比较容易冲突
以太网往往对于短帧 都会进行填充
CSMA/CA
载波监听多点接入/碰撞避免 (carrier sense multiple access with collision avoidance)
CSMA/CD协议适合用于有线网,总线型以太网
CSMA/CA协议适合用于 无线局域网。为什么适合于无线局域网:
- 无线网的信道来自四面八方,不可能对所有方向都进行检测
- 隐蔽站。 A和B都要给C发送数据,但是这样可能就会有冲突,但是当B是隐蔽站的时候,A给C发送数据,B作为隐蔽站是知道的,就不会打扰到A和C的通信
CSMA/CA工作原理
发送数据之前还是先会检测信道是否是空闲的;
若信道空闲:发送端则会先发送一小段\(RTS帧 (request ~to~send)\) ,(RTS帧包括发射端的地址,接收端的地址,下一份帧将会持续发送时间等信息);若信道忙,那就等待
接收端收到\(RTS\) ,将响应一个\(CTS(clear~to~send)\)
A、C想给B发送数据,但是B只给A回了CTS,没有给C回,所以C还有其他站点都不会和B互相发送数据。
发送端收到CTS帧,开始发送数据(同时给其他站点发送预约信道帧,大概说明自己预约多长时间 ) 接收端收到数据帧后,会用CRC来检验数据帧是否正确,正确则返回一个ACK帧
发送方要是收到一个ACK帧,就会传送下一个帧;但要是收不到一个ACK帧,就会等待一段时间再重传下一个帧,等待时间计算使用二进制指数规避算法 ,要是还是没有收到ACK帧,则会继续重传。
总结:
- 预约信道。预约成功后,大概率可以避免冲突
- ACK帧。发送方收不到ACK,就会重发
- RTS/CTS帧
CSMA/CD 和CSMA/CA异同点
相同点:都是先监听,发现空闲时才能接入。
不同点:
- 传输介质不同:CSMA/CD适用于有线以太网,CSMA/CA适用于无线局域网
- 载波检测方式不同:由于传输介质不同的根本原因。CSMA/CD对信号忙闲的检测是通过电压信号;但是CSMA/CA就不能检测电压了,它是通过对能量,载波,能量载波* 检测信道空闲
- 发现冲突,CSMA/CD和CSMA/CA都会对数据进行重传,且都有上传次数