最初的以太网是将许多计算机都连接到一根总线上。 当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。
总线上的每一个工作的计算机都能检测到 B 发送的数据信号。由于只有计算机D的地址与数据帧首部写入的地址一致,因此只有 D 才接收这个数据帧。
其他所有的计算机(A, C 和E)都检测到不是发送给它们的数据帧,因此就丢弃这个数据帧而不能够收下来。在具有广播特性的总线上实现了一对一的通信。
为了通信的简便,以太网采取了两种重要的措施:
(1) 采用较为灵活的无连接的工作方式 。不必先建立连接就可以直接发送数据。对发送的数据帧不进行编号,也不要求对方发回确认。 这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的。
以太网提供的服务是不可靠的交付,即尽最大努力的交付。当目的站收到有差错的数据帧时就丢弃此帧,其他什么也不做。差错的纠正由高层来决定。如果高层(TCP)发现丢失了一些数据而进行重传, 但以太网并不知道这是一个重传的帧,而是当作一个新的数据帧来发送。
(2) 以太网发送的数据都使用曼彻斯特 (Manchester) 编码。
CSMA/CD协议
CSMA/CD 含义:载波监听多点接入/ 碰撞检测 (Carrier Sense Multiple Access with Collision Detection) 。
“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。“载波监听”是指每一个站在发送数据之前先要检测 一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
总线上并没有什么“载波”。因此,“载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。
碰撞检测
“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据, 表明产生了碰撞。所谓“碰撞”就是发生了冲突。因此“碰撞检测” 也称为“冲突检测”。
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源, 然后等待一段随机时间后再次发送。
为什么要进行碰撞检测?由于电磁波在总线上的传播速率是有限的,当某个 站监听到总线是空闲时,也可能总线并非真正是空闲的。
A向B发出的信息,要经过一定的时间后才能传送到B。B若在A发送的信息到达B之前发送自己的帧 (因为这时B的载波监听检测不到A所发送的信息), 则必然要在某个时间和A发送的帧发生碰撞。碰撞的结果是两个帧都变得无用。所以需要在发送期间进行碰撞检测,以检测冲突。
信号传播时延对载波监听的影响:电磁波在1km电缆的传播时延约为5μs。
CSMA/CD 重要特性
使用CSMA/CD协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
最先发送数据帧的站,在发送数据帧后至多经过时间2t(两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。 以太网的端到端往返时延2t称为争用期,或碰撞窗口。 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
截断二进制指数类型退避算法 (truncated binary exponential type)。发生碰撞的站在停止发送数据后,要推迟(退避)一个 随机时间才能再发送数据。减小重传时发生冲突的概率。
基本退避时间取为争用期 2t 。从整数集合 [0, 1, … , (2k −1)] 中随机地取出一个数,记为 r。 重传所需的时延就是 r 倍的基本退避时间。
参数k按下面的公式计算:
k = Min[重传次数, 10]
当 k <=10 时,参数 k 等于重传次数。当重传达16次仍不能成功时即丢弃该帧,并向高层报告。
10 Mbit/s 以太网取 51.2 μs 为争用期的长度。对于 10 Mbit/s 以太网,在争用期内可发送 512 bit,即64字节。也可以说争用期是512比特时间。
这意味着: 以太网在发送数据时,若前64字节没有发生冲突,则后续的数据就不会发生冲突。
如果发生冲突,就一定是在发送的前64字节之内。由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节。以太网规定了最短有效帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。
如果发送的实际数据小于64字节,则必须加入一些填充字节,使得帧长不小于64字节。
当发送数据的站一旦发现发生了碰撞时:(1) 立即停止发送数据;(2) 再继续发送若干比特的人为干扰信号 (jamming signal),以便让所有用户都知道现在已经发生了碰撞。
帧间最小间隔为9.6 μs,相当于96 bit 的发送时间。一个站在检测到总线开始空闲后,还要等待9.6 μs才能再次发送数据。 这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。
CSMA/CD协议的要点
(1) 准备发送。但在发送之前,必须先检测信道。
(2) 检测信道。若检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道 保持空闲(保证了帧间最小间隔),就发送这个帧。
(3) 检查碰撞。在发送过程中仍不停地检测信道,即网络适配器要边发送边监听。这里只有两种可能性: ①发送成功:在争用期内一直未检测到碰撞。这个帧肯定能够发送成功。发送完毕后,其他什么也不做。然后回到(1)。 ②发送失败:在争用期内检测到碰撞。这时立即停止发送数据, 并按规定发送人为干扰信号。适配器接着就执行指数退避算法, 等待r 倍 512 比特时间后,返回到步骤(2),继续检测信道。但若重传达16 次仍不能成功,则停止重传而向上层报错。