计算机网络-CSMA/CD协议
目录
1 前言
最初的以太网是将许多计算机都连接到一根总线上。易于实现广播通信。当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件,总线上每一个计算机都能检测到其他计算机发出的信号,这就是广播通信方式
但有时我们想一对一的通信,这种情况下就要在发送数据帧的首部中写明接收主机的地址,如图,若B向D发送数据时,可以指明接收主机D的地址,由于只有D的地址和数据中的接收地址相同,所以只有D接收到数据,其他主机检测到不是发给自己的数据则会丢弃数据,这样就在广播通信中实现了一对一的通信
2 以太网采取了两种重要的措施
为了通信的简便,以太网采取了两种重要的措施:
采用较为灵活的无连接的工作方式以太网发送的数据都使用曼彻斯特 () 编码 2.1 无连接的工作方式 2.2 使用曼彻斯特 () 编码
关于曼彻斯特 () 编码,可参考我的这篇文章 计算机网络-关于信号的调制
2.3 存在的问题
总线型以太网在同一时间内只允许一台计算机发送数据,那么该如何协调各个计算机之间的工作?下面介绍的 CSMA/CD协议 就是解决方案
3 CSMA/CD协议
CSMA/CD的工作流程图:
3.1 存在的问题
既然每一个发送站在发送之前都已经检测到信道当前为“空闲”那为何还会出现“碰撞”呢?
这是因为数据电磁波在总线上传输时是以有限的速度传播的,如某个发送站监听到总线是空闲时,总线并非真的是空闲的,如下图中A,B两个站点距离为1km,之间用同轴电缆相连,电磁波在1km电缆上的传播时延大约为5ms,因此从A发向B的信息,大约要经过5ms才能到达B,若B在A发送给自己的消息之前也发送了一个数据出去,则必然在某个时间,B发出的数据会和A发出的数据在总线上发生碰撞
我们把总线上端到端的一趟时间记为 τ,图中当τ为0时A发送数据,B检测到总线为空闲,在时间 τ-δ 时,A发送的数据还没有到达B,B因为检测到总线空闲,就开始发送数据,设在τ-δ/2 时,发生了碰撞,这时由于数据还在总线上传输,A和B都不知道数据发生了碰撞,但当 t=τ 时,A的数据发送到B了,B就检测到碰撞了于是停止发送数据,在时间 t=2τ-δ 时,B发送给A的数据到达了A,A检测到了碰撞,也停止发送了数据
3.2 重要特性 3.3 争用期
争用期的长度:
最短有效帧长:
3.4 二进制指数类型退避算法 ( type)
发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据,这个随机时间就要用到二进制指数类型退避算法:
确定基本退避时间,一般是取为争用期 2τ定义重传次数 k ,k ≤ 10,即 k = Min[重传次数, 10]从整数集合[0,1,…, (2k2^k2k -1)]中随机地取出一个数,记为 r。重传所需的时延就是 r 倍的基本退避时间当重传达 16 次仍不能成功时即丢弃该帧,并向高层报告 3.5 强化碰撞
当发送数据的站一旦发现发生了碰撞时: