计网—CSMA/CD协议
CSMA/CD协议
引出协议
最初的以太网都是采用总线型的拓扑结构,将许多计算机都连接到一台主机上。如下图:
-
总线上的每一个工作的计算机都能检测到 B 发送的数据信号。
-
由于只有计算机 D 的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
-
其他所有的计算机(A, C 和 E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。
这时候就有一个问题,总线在同一时间只能允许一台计算机发送信息,如果多台计算机同时向总线发送数据,就会产生冲突,为了解决冲突就出现了CSMA/CD(Carrier Sense Multiple Access with Collision Detection,载波监听多点接入/碰撞检测)协议。
基本思想
- 某站点想要发送数据,必须首先侦听信道;
- 如果信道空闲,立即发送数据;如果信道忙,则继续侦听信道。直到信道变为空闲,立即发送数据;
- 站点在发送过程中继续检测信道,若一直未检测到碰撞,则把该数据成功发送完毕;如果检测到冲突,立即停止发送数据,发送干扰信号,然后执行指数退避算法,等待一随机长的时间,重新侦听信道,返回第2步。
CSMA/CD技术实现
- 先听后发:载波侦听技术
- 边发边听:碰撞检测技术
- 冲突停止:发送干扰信号
- 延迟重发:截断二进制指数退避算法
先听后发
以太网使用曼彻斯特编码传送数据
编码规则:
- 每比特的周期T分为前T/2和后T/2两个部分。
- 前T/2传送该比特的反码,后T/2传送该比特的原码。
- 每个比特中间有一次电平跳变。
这样就可以通过判断总线的电平是否出现跳变来判断总线的闲忙,实现载波侦听。
边发边听
- 站点检测冲突
检测电平信号变化幅度是否超过一定的门限值。
- 编码违例法
检查从总线上接收的信号是否违反曼彻斯特编码规则。
如果检测到了碰撞,总线上传输的信号就会产生严重的失真,无法从中回复出有用的信息。每一个正在发送数据的站点,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送。
为什么在发送过程中可能产生冲突?
因为有传播时延对载波侦听的影响,导致可能出现冲突。
在上图中,第一个状态,A检测到信道空闲,开始发送数据,还没发送到B端的时候,B端此时检测到信道也是空闲的,同样会发送数据,这时候就会产生冲突????。
检测冲突时间
这里有两种极端情况:
最短冲突时间:当A和B同时发送一个数据帧,在信道的中心处发生冲突后继续向两个方向传播,在这种情况下,只需要一个单向传播延迟。
最长冲突时间:A先发送一个数据帧,当A即将到达主机B时,B发送数据帧,这时主机B会立即检测到冲突,而主机A则需要再经过一个单向传播延迟之后才会检测到冲突。
冲突窗口
-
在一个局域网中,A、B两结点是距离最远的两点,相距D,信号传播速度V,A在发送数据后最多在W时间后可以检测出所有可能的冲突:W=2D/V,W被称为冲突窗口(争用期);
-
A、B两结点是距离最远的两点,A在冲突窗口内可以检测到所有可能的冲突,那么其它点当然可以在冲突窗口内检测到。
-
局域网中的所有结点在冲突窗口W时间内可以检测到所有可能的冲突,若在冲突窗口内没有检测到冲突, 则可以确认自己竞争到了总线的使用权,不再会与其他站点发生冲突。
冲突停止
如果发送节点检测到冲突,则停止发送数据,并发出一个4字节或6字节的阻塞信号来加强冲突,增加编码违例的位数,使其他站点快速检测到。然后等待随机长的时间后再重新侦听信道。
延迟重发
采取截断式二进制指数退避算法。算法过程:
-
确定基本退避时间片B,一般取冲突窗口值2t(两倍的单向传播时延)。
-
定义参数k,即k = Min(重传次数,10) 。
-
从离散的整数集合[0,1,…,(2k - 1)]中等概率随机取出一个数,记为r。
-
重传所需的时延就是r倍的基本退避时间,即r*B。
-
当重传达16次仍不能成功时,则丢弃该帧,并向高层报告。
-
从离散的整数集合[0,1,…,(2k - 1)]中等概率随机取出一个数,记为r。
-
重传所需的时延就是r倍的基本退避时间,即r*B。
-
当重传达16次仍不能成功时,则丢弃该帧,并向高层报告。