局域网按照网络拓扑进行分类可以分为一下三种:
星型网
环形网
-
总线网
这个时候我们要理解一下我们的主角什么是总线型局域网.
总线型局域网就是数据的传输依靠一条物理的信道,然后有许多的电脑连接在这一条总线上面.我们可以把总线想象成为一条供电线,并联在上面的各种用电器就是PC.
这意味着什么呢,意味着我们在这个局域网中的通信其实采用的是广播信道.也就是我们此发送的一个数据,那么这个局域网中的所有用户都可以接收到,只不过电脑根据目的MAC地址(存储在我们电脑网卡中的一种物理地址)来判断是否为自己所需要的帧,是就接受,如果不是则丢弃.
我们要知道现在的局域网一般共享信道的方法采用的是动态媒体介入控制中的**随机接入.**
随机接入指的是用户可以随机地发送信息.但是这个时候如果两个用户同时发送信息,那么就会发生碰撞,碰撞一旦发生接收双方就无法正确接收到信息.但是在局域网中的协议有专门的算法用于解决此类的问题.
为了通信的简便,局域网在采用随机接入的同时还采用了无连接的工作方式,即发送数据前,我们不需要建立连接.
由于一些历史原因,局域网的数据链路层由分为**LLC逻辑链路控制**和**MAC媒体接入控制** ,不过后来只剩下了**MAC媒体接入控制**还在起作用
讲完上面那些以后,我们终于能开始讲我们的主题**CSMA/CD协议**.它主要是为了解决局域网随机接入所产生的碰撞问题.CSMA/CD的要点如下:
- 多点接入
就是说明这是总线型的网络
- 载波监听
不管是在发送信息前,还是在发送信息中,每个站都必须检测信道.发送前是为了取得发送权,如果此时信道中正好有人在传输则等待一段时间后才重新发送.发送中是为了避免发生碰撞还继续传输,从而浪费信道的资源
-
碰撞检测
这个时候你可能会有疑问?"载波监听"中的发送前检测不是已经避免了发生碰撞这个问题了吗?为什么还要进行发送中监听呢?关键在于只有接受方接受到了发送方发送的数据,接受方才知道信道是有人使用的.为了方便你理解我们可以这样理解
我们将整个总线型局域网抽象成只有两方A和B,然后A和B之间的信道抽象成铁路,数据抽象成火车.这个时候A想要向B发出一列火车(即发送数据),A检测到铁路上目前没有行驶的火车(没有站点在发送数据),所以A向B发出了一列火车.正巧呢,在A发出火车后,B也想向A发出一列火车,而此刻A发出的火车还没有到达B,于是B认为此刻铁路上没有火车在行驶,所以最后它也发出了一列火车.最后就造成了两列火车在铁路上bong!然后A发出的火车先抵达B,这个时候B才知道信道有人使用.然后在经过一段时间,最后B发出的火车到达A,A也在此时才检测到碰撞.
这个问题是采用无连接的工作模式无法避免的.但是为了解决双方一直发送一直发生碰撞,从而无法正常传输这个问题呢,我们引入两个概念
- 传播时延
即一列火车从A到B或者从B到A所花费的时间.这里采用的时间单位一般为比特时间(即信道传输一比特所需花费的时间)
- 争用期(又称为碰撞窗口)
即火车来回所需要的时间.这里也是采用比特时间.一般来说在10M/S的以太网中的争用期为51.2us.一般来说是由协议来规定这个时间的
- 帧间最小间隔
这个是以太网规定的,以太网规定为9.6us,连续发送两个帧,它们之间应该间隔的时间.
首先我们要明确一点,**当发送方经过争用期后还没检测到碰撞的话,那么在这一次的发送期间就不可能发送碰撞了.**
在CSMA/CD协议中呢,采用了**截断二进制之树退避算法**才解决我们上面提出的问题.算法实现如下:
- 在重新发送数据的时候,从整数集合[0,1,...,(2^k-1)]中随机取出一个数,记为r.然后将重新传输的时间向后推后r倍的争用期.关于k在重传次数小于10之前等于重传次数,大于等于10后k等于10
- 如果重传达到16还不能成功传出数据,那么这个时候就丢弃该帧,并上一层网络层汇报.
最后我们引用书中的原话将CSDA/CD的工作总结一下
- 准备发送:适配器(网卡)从网络层获得一个分组,加上以太网的首部和尾部,组成以太帧,放入适配器的缓存中.但在发送之前,必须先检测信道
- 检测信道:若检测到信道忙,则应不停地检测,一直等待信道转为空闲.若检测到信道空闲,并在96比特时间内信道保持空闲(保证了帧间的最小间隔),就发送这个帧.
- 在发送过程中仍不停地检测信道,即网络适配器要边发送边监听.这里只有两种可能:
- 一是发送成功:在争用期内一直未检测到碰撞.
- 二是发送失败:这个时候就采用截断二进制指数算法来进行重传
上面中我们介绍了总线型的以太网,这次我们简单地来讲星型的以太网,因为它与总线型的以太网很相似.星型以太网指的是,许多个站(即电脑等)通过在一个集线器上,然后通过集线器来进行站间的分组交换.
这里介绍下一下一些集线器特点:
我觉得这个地方书里写的特别准确,所以我直接引用**"使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议(更具体些说是,是各站中的适配器执行CSMA/CD协议)"**在这种方式下,同一时刻至多只允许一个站发送数据.
集线器有许多的接口,毕竟你要满足许多站(电脑)同时连接在集线器上进行数据转发.
集线器工作在物理层,它的每个接口只是简单地转发比特,不进行碰撞检测