1
计算机网络技术理论与实践
1.5.2.1 4.2.1 以太网工作原理

4.2.1 以太网工作原理

以太网是由Xeros公司开发的一种基带局域网技术,最早的以太网使用同轴电缆作为传输介质,采用载波监听多路访问和冲突检测(CSMA/CD)算法作为媒体访问控制技术(MAC)来解决争用信道的问题,数据传输速率为10Mbit/s。IEEE 802.3规范则是基于最初的以太网规范制定的。以太网2.0版本由Digital Equipment Corporation、Intel和Xeros三家公司联合开发,与IEEE 802.3规范相互兼容。

早期的以太网采用的是总线型拓扑结构,如图4-2所示,各种不同的网络设备通过总线互联在一起。

img70

图4-2 总线型结构的以太网

由于采用的是总线型拓扑,同一时刻只能有一台设备使用总线传输数据,所以以太网中的所有设备需要争用总线的使用权,以便传输数据。在以太网中采用CSMA/CD媒体访问控制机制来解决总线的争用问题。

CSMA/CD机制中任何设备都可以在任何时间向网络发送数据包。在发送数据包之前,网络设备首先需要侦听网络是否空闲,如果网络上没有任何数据传输,设备就会把所要发送的信息传输到网络中。否则,设备只能等待网络下一次出现空闲的时候再进行数据的发送。

CSMA/CD没有采用集中式的管理措施,而是利用竞争机制,允许任何一台网络设备在网络空闲时发送数据,所以非常有可能出现多台网络设备同时检测到网络处于空闲状态,并同时向网络发送数据的情况。在这种情况下所有设备发出的信息会相互碰撞而导致全部损坏。网络设备必须等待一段时间后,才能重新发送数据。采用二进制后退算法来决定发生碰撞后,应该等待多久再重新发送数据。网络设备在发送数据帧时,还要进行冲突检测,以便尽快发现数据帧的碰撞,及时停止已经被破坏的数据帧的发送,降低无效数据对总线的占用。

媒体访问控制子层(MAC)是以太网的核心,它决定了以太网的主要网络性能。MAC子层通常又分为帧的封装/解封和媒体访问控制两个功能。以太网的帧结构是了解MAC子层的基础,其帧结构如表4-1所示。

表4-1 以太网的帧结构

img71

前导码:包括7个字节的二进制“1”、“0”间隔的代码,即1010…10共56位。当以太网帧在媒体上传输时,接收方能根据前导码建立起同步,在使用曼彻斯特编码情况下,这种“1”、“0”间隔的传输波形为一种周期性的方波。

帧首定界符(SFD):长度为1个字节,内容为10101011,帧首定界符表示一帧的开始,用于接收设备对以太网帧的第一位进行定位。所以以太网的数据帧是从SFD后面的“目的地址”开始,一直到“帧检验序列”结束。

目的地址(DA):表示以太网帧所要发往目的设备的地址,以太网采用6个字节的MAC地址来标识网络设备。目的地址可以是单播地址、组播地址和广播地址,如果是组播地址,表示该帧的目的地是一组网络设备,如果是广播地址,表示该帧的目的地是局域网内的所有网络设备。可以根据目的地址的最高位来判断地址的类型,若最高位为“0”则表示单播地址,为“1”则表示多播地址或广播地址,其中整个地址都为“1”表示广播地址。

源地址(SA):表示发送该帧的设备的地址,长度也是6个字节。

长度(L):此字段的长度为2个字节,表示LLC PDU的字节数。这个字段在以太网协议和IEEE802.3协议中的解释是不一样的,被解释成数据的类型(TYPE)。这两种解释不会产生混淆,因为作为类型时,它的值大于1 500,而表示长度时则小于1 500。

数据链路层协议数据单元(LLC PDU):长度在46~1 500字节。最小LLC PDU长度46字节是一个限制,为了保证冲突检测正常工作,如果LLC PDU小于46个字节,则发送该帧的设备的MAC子层会在本字段的末尾自动填充“0”代码以补齐46字节。

帧检验序列(FCS):它处在帧尾,共占4个字节,是32位的冗余检验码(CRC),检验除前导、SFD和FCS以外的内容,即从DA开始至LLC PDU结束的CRC检验结果。

总线型以太网一个最大的问题是总线上任何一点出现故障都会导致整个网络无法工作。采用集线器(HUB)组网可以很好地解决这个问题,如图4-3所示。使用HUB来组建以太网时,网络的拓扑结构发生了变化,由总线网络变成星型结构,在这种结构中,只要集线器不出现故障,整个网络就可以正常工作,主机的故障和局部线路的故障只会影响局部区域,而不会影响到整个网络。通常网络设备的稳定性相对比较好,所以星型网络的整体稳定性比较高。

img72

图4-3 使用HUB的以太网

在集线器组成的星型网络中,数据传输的工作原理没有改变,依然采用CSMA/CD媒体访问控制方式来解决线路争用问题,只是碰撞不发生在总线上而是在集线器中,所以这种拓扑结构在物理上虽然是星型结构,但是逻辑上仍然是总线型结构,就好像是将总线缩短,变为一个集线器设备。因此,使用集线器组建网络可以解决总线的稳定性问题,但是碰撞问题依旧存在,整个网络的吞吐量并没有增加。直到交换式以太网的出现才解决了数据碰撞问题,使以太网的吞吐量得到迅速提高。

交换式以太网通常采用以太网交换机或者网桥来组网。在交换式以太网中,以太网的工作方式发生了根本性的改变,从广播方式变成了类似点对点的方式(主机到交换机)。数据传输方式由原来的共享信道的广播变成了交换机内部的交换方式,由半双工传输变成全双工传输。在交换式以太网中不再有数据碰撞问题,消除了网络吞吐量提高的瓶颈,只需提高传输速率和交换能力就可以不断地提高以太网的吞吐量,从而发展出了百兆以太网、千兆以太网、10G以太网等。

在交换式以太网中,到达交换机每个端口的数据包都由交换机接收下来。当一个数据包到达时,交换机必须决定将其丢弃还是转发,如果要转发,则必须决定发往哪个端口。交换机按照数据包的目的MAC地址来查询本机的转发表,转发表中记录了目的MAC地址对应的端口号,如果数据包的目的MAC地址在转发表中能够找到相匹配的表项,则将数据包从对应的端口中转发出去;否则从所有的端口转发出去。也就是说当交换机知道这个数据包的目的主机连接在哪个端口时,就只向该端口转发,否则,为了保证数据包能够发送到目的主机就必须向所有的端口转发。

在交换机刚开始工作时,它并不知道哪台主机连接到了哪个端口,所以转发表初始的内容为空。此时收到的数据包都需要采用洪泛算法(Flooding Algorithm)向所有端口转发,而收到的这个数据包的源MAC地址表示具有这个MAC地址的主机连接在收到这个数据包的端口上,因此,在转发表中记录该源MAC地址与端口的对应关系。之后如果有数据包需要发送到这个MAC地址时,就不需要进行洪泛了,只向对应端口转发即可。随着交换机的不断工作,其中的转发表会记录下每个连接了设备的端口所连设备的MAC地址。这时候发送的单播帧就只转发到对应端口上,不再进行洪泛了,这种学习MAC地址与端口对应关系的方法叫逆向学习法(Backward Learning)。

当网络中的设备加电、断电,或对网络设备的连接进行修改时,网络的拓扑结构都会随之改变。为了处理动态拓扑问题,要对转发表中的地址项进行“老化”操作,当收到数据帧时要对源地址对应表项的生命周期计时器进行刷新(设为最大值),然后开始递减,每当有新的数据帧到达时重新将对应表项的生命周期计时器设为最大值。当某表项的生命周期计时器减到0,说明对应的主机长时间没有发送数据帧了,可能已经关机或网络已中断,应该将该地址表项从转发表中清除。采用这种方式改变拓扑时,不需要人工干预,交换机可以自行完成转发表的更新,从而保证网络的正常工作。同时这也意味着,如果某台主机长时间无收发数据时,发给它的帧将被广播,一直到它自己发送出一帧为止。

以太网中设备之间互联可能会出现环路,而环路会导致广播风暴,因此以太网中需要能够避免环路的产生。但是由于需要冗余线路(保证稳定性)或者无法控制的原因,网络的物理结构中通常会出现环路。在交换机中采用生成树(Spanning Tree)算法来解决这个问题。生成树算法通过阻塞交换机上的一些端口,来防止网络中环路的产生,使网络在逻辑上是一棵树形结构。在图4-4中,网络在物理拓扑结构上形成了一个环路,可以通过阻塞环上某个交换机的某个端口来防止在数据传输的逻辑链路上产生环路。

img73

图4-4 网络中的环路

在生成树算法中,初始时会阻塞交换机的所有端口,这时交换机不能转发数据报文,只能收发生成树算法所发送的BPDU(Bridge Protocol Data Unit,网桥协议数据单元)报文。通过交换BPDU报文,生成树算法可以找到网络中的环路,并计算出需要阻塞的端口以避免环路的产生,然后激活不需要阻塞的端口,被激活的端口就可以进行正常的数据收发。从开始计算到算出所有需要阻塞的端口所持续的时间叫做生成树算法的收敛时间。在通常的生成树算法中,收敛时间大约为15s,所以当交换机开机,或者某个端口启用时,需要等待15s才能正常通信。当使用快速生成树算法时,可以将收敛时间缩短到300ms。

以太网的设备上包括3种网络接口:RJ-45、BNC和AUI,所用的传输介质分别为:双绞线、细同轴电缆和粗同轴电缆。其中双绞线类型的RJ-45接口在网络设备中使用的非常普遍,而目前采用同轴电缆作为传输介质的网络已经非常少见了,所以现在的交换机通常都不带BNC或AUI接口,或者为兼顾同轴电缆介质的网络连接,配上少量的BNC或AUI接口。