总线型网络是将许多台计算机都连接到一根总线上,计算机与总线的连接点采用无源器件,在以太网发展的早期,人们认为无源器件不会受到电源供应的影响,是最可靠的。在总线的两端各配备一个电阻,用于吸收在总线上传播的电磁波信号能量,避免总线上产生有害的电磁波反射。
广播通信是总线型网络主要的通信方式,当总线上的某一台计算机发送数据时,总线上的其他计算机都能够接收到这个数据信号。一对多的广播通信虽然能够保障接收方一定能够接收到信息,但这种方式往往会产生大量的冗余数据,造成网络资源的浪费,因此,希望能够在总线上实现一对一的数据通信。为了实现这一目的,可以给总线网中的每台计算机的网络适配器分配一个独立的地址(这个地址就是现在经常用到的物理地址,也叫MAC地址),在发送数据帧时,在帧的首部写入接收站的这个地址。当总线中有数据帧在传输时,总线上连接上的计算机会对帧的首部进行检测,若首部中写入的地址与当前计算机网络适配器的地址相同,则接收这个数据;否则,就将其丢弃。通过这一方法,可以在广播通信信道上实现一对一的数据通信。
1.CSMA/CD协议要点
对于多站点接入的数据发送,以太网采用最为简单的随机接入模式,当某一台计算机在发送数据时,总线的传输资源就会被其占用,因此,如果在同一时间段内有两台或两台以上的计算机同时发送数据,这些计算机之间就会互相干扰,使发送的数据产生冲突,相互破坏,导致数据发送失败。因此,如何协调各个站点的数据发送是以太网必须要解决的一个重要问题,以太网应当确立专门的协议来降低冲突发生的概率。这就像是在开会时,会议主持人允许参会人员随机发言,不需要举手示意,但是所有的参会者默认都会遵守另一个规则,就是当有人发言时,其他人需要等待他的发言结束后才可以发言。这个默认的规则可以在一定程度上保障不同的发言者不产生冲突。当然,这个规则也有缺陷,如在某人的发言刚结束的瞬间,若同时有两个人都想进行新的发言,则此时这两个人也会产生冲突。以太网中采用的避免数据发送产生冲突的协议和上面的例子非常相像,这就是所谓的CSMA/CD协议。
1)多点接入
多点接入主要是指总线型网络,是多台计算机各自使用自己的接入点连入同一根总线上。目前,局域网主要采用星型拓扑结构,但以集线器为核心的星型拓扑结构其本质依然是总线型网络。
2)载波监听
载波监听就是检测信道的意思,是指某个站点利用电子技术对总线进行检测,检测在总线上是否有其他站点在发送数据。不管是在数据发送前,还是在数据发送中,检测工作都需要持续进行。在数据发送前进行信道检测是为了确认能否发送数据,如果经检测发现有其他站点正在发送数据,本站点就暂时不可以发送数据,直至检测到信道空闲。在发送中检测信道,是为了及时发现是否有其他站点会和本站同时发送数据,进而造成数据的“碰撞”,即所谓的碰撞检测。
3)碰撞检测
所谓碰撞检测,是指站点一边发送数据,一边检测信道上信号电压的变化情况,以便判断本站在发送数据时,是否有其他站点也在发送数据。检测的原理是:当两个或两个以上的站点同时在总线上发送数据时,总线上的信号电压变化幅度将会增大,增大的原因是这些电压值会互相叠加。当站点的适配器检测到总线上的信号电压变化幅度超过一定的限定值时,就会判定总线上至少有两个站点在同时发送数据,也就是认为发生了“碰撞”。发生了碰撞,就是发生了冲突,所以碰撞检测也被称为冲突检测。当碰撞发生时,总线上的数据信号就会产生严重的失真,无法从中恢复出有用信息。所以,一个正在发送数据的站点,如果检测到有其他站点也在发送数据或者一旦检测到发生了碰撞,就应立即停止发送数据,以减少网络资源的浪费;而停止发送数据的站点,会在等待一个随机时间后,再次尝试发送数据。
2.碰撞的产生及检测
现在的问题是,既然所有站点在发送数据之前都会进行检测,当发现信道空闲时才会进行数据发送,那么为什么还会出现两个站点同时发送数据的情况呢?若要回答这个问题,则需要从数据的传输过程开始分析。
前面的章节中介绍过“时延”这个概念。时延是指数据从链路的一端传送到另一端所需的时间,由发送时延、传播时延、处理时延和排队时延四部分组成。其中传播时延是指电磁波在信道中传播一定距离时所需花费的时间,例如,电磁波在长度为1 km的电缆中的传播时延为5μs,即如果A、B两个站点相距1 km,中间用电缆连接,在某一时刻,A站点向B站点发送数据时,B站点至少需要5μs后才能检测到A站点正在发送数据(只有A站点发送的数据抵达B站点后,B站点才能检测到总线上信号电压的变化,并据此判定此时总线上有其他站点正在发送数据),即在上述情况下,B站点对于信道是否空闲的检测会有最长5μs的延迟,在此期间,B站点无法检测到信道被占用,会认为信道空闲,可以发送数据。在这段时间内,如果B站点真的发送了数据,那么在接下来的某一时刻,A、B两个站点发送的数据就会在信道中相遇,进而发生碰撞,导致数据无效。这些无效数据会继续在信道中向前传输,当A站点发送的数据抵达B站点时,B站点检测到信道中发生了碰撞,于是立即停止发送数据,但是之前发送出去的数据还会沿着信道向前传输,但却是一个不完整的帧,属于无效帧。当这个无效帧抵达A站点时,A站点也检测到信道中发生了碰撞,于是也立即停止发送数据,其过程如图3-11所示。
在图3-11中,A、B两个站点相距1 km,这两个站点进行碰撞检测的过程如下:
(1)当t=0时,A站点开始发送数据,此时B站点检测到信道空闲。
(2)当t=α-β时,A站点发送的数据还没有到达B站点,B站点因为检测到信道空闲,所以开始发送数据。
(3)当t=α-β/2时,A站点发送的数据和B站点发送的数据发生了碰撞,但是,此时A站点和B站点均不知道发生了碰撞。
(4)当t=α时,A站点发送的数据达到B站点,B站点由此检测到发生了碰撞,于是立即停止发送数据。
图3-11 碰撞的发生及检测
(5)当t=2α-β时,B站点发送的数据(因为B站点检测到碰撞后立即停止了数据发送,所以到达A站点的数据为残缺的帧)到达A站点,于是A站点也检测到发生了碰撞,立即停止数据发送。
经过此次碰撞,A站点和B站点的数据发送均失败了,它们都需要推迟一段时间后,再重新发送数据。
分析上述过程可知,以太网中每个站点在自己发送数据之后的一小段时间里,都存在发生碰撞的可能性。这个时间取决于另外一个发送数据的站点到达本站点的距离,是不确定的。如果希望降低以太网上发生碰撞的概率,就需要使整个以太网的平均通信量远低于以太网的最高数据率。(www.xing528.com)
从图3-11中可知,最开始发送数据的A站点,在经过2α-β的时间后,可以检测到之前发送的数据帧是否发生了碰撞。当β无限趋近于0时,可以认为A站点在最多经过一个往返时间2α后,即可检测到是否发生碰撞,而在这个时间范围内,随时都可能发生碰撞。这里把2α称为“争用期”,当一个站点发送完数据之后,只有经过争用期的考验后,才能够确定这一帧没有发生碰撞。
3.碰撞后的数据重发
以太网采用截断二进制指数退避(Truncated Binary Exponential Backoff)算法来确定碰撞发生后站点重新发送数据的时间,该算法的思想是发生碰撞的站点在停止发送数据后,不是等待信道空闲后就立即发送数据,而是退避(即推迟)一个随机的时间后再进行发送。这点很容易理解,因为几个发生碰撞的站点都在继续监听信道,它们会同时发现信道变成空闲状态,如果此时选择立即重新发送数据,那么这几个站点又会再次发生碰撞,所以需要退避一段时间后再尝试进行数据发送,进而降低再次发生碰撞的概率。截断二进制指数退避算法的具体做法如下:
(1)协议规定了基本退避时间为征用期2α,具体的征用期时间为51.2μs。对于10 Mb/s以太网,在争用期内可发送512 bit数据,把发送512 bit所需的时间称为512比特时间(1比特时间就是发送1 bit数据所需的时间)。为了计算方便,可以直接使用比特作为争用期的单位,所以,争用期是512 bit,等同于争用期是发送512 bit数据所需的时间。
(2)从离散的整数集合[0,1,…,(2k-1)]中随机取出一个数,记为r,重传应推后的时间应当是r倍的争用期。若重传次数小于10,则k的取值就是重传次数;若重传次数大于或等于10,则k的取值始终为10。
(3)当重传达到16次时,若仍不能发送成功,则将当前帧丢弃,并向高层报错。若连续多次发生冲突,说明当前总线上有多个站点参与争用信道,使用上述方法可以使重传所需推迟的平均时间随着重传次数的增大而增大,进而降低碰撞发生的概率,提高整个系统的稳定性。但是,这种碰撞重传的方法并没有兼顾各个站点的公平性,虽然适配器每次发送一个新的帧时都会执行一次CSMA/CD算法,但是它对之前发生的碰撞过程却没有记忆功能,也就没办法给多次发生碰撞的站点以额外的“关照”,即当有多个站点的适配器在同时执行指数退避算法时,有可能某一个适配器发送的新帧碰巧被成功地插入到信道中,获得了发送权,而已经推迟了好几次发送的站点,却依然没有获得发送权,需要继续执行截断二进制指数退避算法,以争取下一个发送权。
4.碰撞检测的改进
现在假设出现一种特殊情况:某个A站点向B站点发送了一个较短的帧s,发送时延很小,所以在发送过程中A站点并没有检测到碰撞,但是s帧在向前传播的过程中,却与C站点发出的帧发生了碰撞,进而成为无效帧。无效帧s抵达B站点后,被B站点丢弃,但是因为A站点始终没有检测到碰撞的发生,因此也就不会重传帧s,结果,帧s始终没有被正确发送和接收。
为了避免上述情况的发生,需要确保工作站发送一帧所需的时间不能太短,至少要大于或等于基本退避时间,也就是上文所说的征用期,即51.2μs。为了保障这个发送时间,工作站所发送的数据帧就要达到一定的长度,对于10 Mb/s以太网而言,数据帧的长度要大于或等于512 bit(在10 Mb/s以太网的链路上,发送512 bit数据所需的时间为51.2μs)。对于那些长度小于512 bit的帧,需要加入一些填充字节,使其长度不低于512 bit。
由此可见,以太网在发送数据时,如果在争用期(也就是发送了512 bit)之内没有发生碰撞,那么后续发送的数据就一定不会发生冲突。换言之,如果可能发生碰撞,那也一定是发生在发送前512 bit的时间之内。在此期间,如果检测到发生了碰撞,那么发送方就会立即停止发送,此时发送出去的帧一定小于64 Byte,因此,凡是长度小于64 Byte的帧都是由于发生碰撞而异常终止的无效帧,当接收方收到小于64 Byte的帧时,就应当直接丢弃。
5.强化碰撞
以太网规定争用期需要大于或等于2倍的端到端最大时延,端到端的最大时延为25.6μs,因为信号在以太网上传播1 km大概需要5μs,因此,以太网端到端的最大距离应该约为5 km,而实际上以太网的覆盖范围远远没有这么大,而之所以将争用期设置为51.2μs(远大于端到端的传输时延),是因为不仅要考虑端到端的传输时延,还要考虑其他一些因素,如碰撞发生之后的强化碰撞。
所谓强化碰撞,是指当发送站一旦检测到碰撞发生后,不仅要立即停止发送数据,还有再继续发送32 bit或48 bit的人为干扰信号,目的是让所有的用户都知道现在已经发生了碰撞。对于10 Mb/s以太网,发送32 bit只需要3.2μs,发送48 bit只需要4.8μs。以太网规定帧间最小时间间隔为9.6μs,这样做是为了让刚刚收到数据帧的站点的接收缓存有足够的时间清理空间,做好接收下一帧的准备。
6.CSMA/CD协议的工作过程
1)准备发送
发送端工作站的适配器从网络层获得一个数据分组,加上首部和尾部后封装成为以太网的数据帧,将其放入适配器的缓存中,准备发送。
2)检测信道
在正式发送数据帧之前,适配器需要进行信道检测。如果检测到信道忙,就一直持续检测下去,直到检测到信道空闲为止。如果这个空闲持续保持9.6μs,就将缓存中的帧发送出去。
3)持续检测
帧发送完毕后,发送端工作站的适配器会持续进行信道检测,如果在争用期(51.2μs)内始终没有检测到碰撞,那么这一帧一定能够成功发送,然后适配器重新进入准备发送状态。如果在争用期内检测到了碰撞,那么发送方应立即停止继续发送,并且按照规定发送认为干扰信号。接下来,适配器开始执行指数退避算法,等待r倍的51.2μs后,重新进入信道检测环节,开始准备重传。如果发送端连续16次重传失败,就放弃发送本帧,并向高层提交错误报告。
每发送完一帧后,以太网需要将这一帧临时保留一段时间,以备重传。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。