计算机网络数据链路层传送门:
「计网三」数据链路层(上篇)
「计网三」数据链路层(中篇)
「计网三」数据链路层(下篇)(本文)
九、集线器与交换机
9.1 集线器
早起的总线型以太网使用同轴电缆作为传输媒体,但是可靠性没有达到人们的预期,逐渐被淘汰。 后来以太网发明出了一种使用大规模集成电路,可靠性非常高的设备,叫做集线器,并且使用更加便宜灵活的双绞线作为传输媒体。实践证明使用集线器和双绞线的星型拓扑结构的以太网比早起使用大量机械接头的无源电缆可靠的多,且价格便宜,使用方便。 使用集线器的以太网在逻辑上仍是一个总线网,各站共享资源,使用的还是CSMA/CD协议; 集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测(由各站的网卡检测); 集线器一般都有少量的容错能力和网络管理能力。例如,若网络中某个网卡出现了故障,不停的发送帧。此时集线器就可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍能正常工作。
使用集线器HUB可以在物理层扩展以太网。假设某大学下设三个系,每个系都以一个使用集线器互联设备的以太网。这三个以太网相互独立,各自共享自己的总线资源,是三个独立的碰撞域(或冲突域)。此时某台主机发送的信息只能在自己的系中传输,若发生碰撞,碰撞信号也只有自己系中总线上的主机才会收到。 为了使各系能够相互通信,可以使用集线器将这三个独立的以太网连接成为一个更大的总线型以太网。这样原来三个独立的碰撞域就合并成了一个更大的碰撞域。
9.2 以太网交换机
在集线器之后,发明出了更先进的网络交换设备,就是以太网交换机。 以太网交换机的特点: 以太网交换机通常有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都会工作在全双工方式,也就是发送帧和接受帧可以同时进行(使用集线器的以太网在逻辑上是共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,即收发帧不能同时进行); 以太网交换机具有并行性,能同时联通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议); 以太网交换机一般都具有多种速率的接口,如10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合; 以太网交换机工作在数据链路层和物理层,它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧; 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动的逐渐建立起来的。 帧的两种转发方式: (1)存储转发 (2)直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是否有差错)
9.3 两者区别
集线器和交换机的区别(为了简单起见,本小结忽略了ARP过程并假设交换机的帧交换表已经“学习好了”): 1.发送单播帧 使用集线器互联的总线型以太网上的某主机要给另一个主机发送单播帧,改单播帧会被转发到该网络上的各个主机,各主机自己判断是否要接收该帧; 使用交换机互联而成的交换式以太网上的某主机要给另一个主机发送发播帧,改单播帧只会转发给目的主机。
2.发送广播帧 总线型以太网上的各主机和交换式以太网上的各主机分别属于同一个广播域,因此从效果上看,二者没有什么区别。 3.网络中多台主机同时给另一台主机发送单播帧 使用集线器连接的总线型以太网必然会产生碰撞,碰撞信号会沿着总线发送给各主机。 交换式以太网会将收到的多个帧缓存起来,然后逐个转发给目的主机,不会产生碰撞。 4.使用集线器扩展以太网和使用交换机扩展以太网
单播帧的情况
多播帧的情况
HUB竞争总线并产生碰撞,SWITCH则不会
因此,若使用集线器连接两个网络,不仅增加了广播域,还会增加碰撞域。而使用交换机连接两个网络,只会增加了广播域,而不会产生碰撞域,也就是隔离了碰撞域。 小结: 由于交换机的性能远高于集线器且价格并不高,因此集线器逐渐被市场淘汰
十、以太网交换机
10.1 以太网交换机的自学习和转发帧
以太网交换机工作在数据链路层和物理层,目前也有包含网络层部分功能的交换机,称为三层交换机; 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧; 以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中个主机的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
举例说明交换机的字学习和转发帧(假设个主机知道网络中其他各主机的MAC地址,即无需进行ARP来获取目的主机的MAC地址): 主机A给主机B发送帧 主机A给主机B发送帧,该帧从交换机接口1进入交换机1。交换机1将该帧的源MAC地址A记录到帧交换表中,将该帧进入交换机的接口号1相应地也记录到帧交换表中。这个登记工作就称为交换机的自学习; 然后交换机1对该帧进行转发。该帧的目的MAC地址是B,交换机1在帧交换表中查找MAC地址B,找不到,于是对该帧进行盲目的转发(也称为泛洪),也就是向除该帧进入交换机接口外的所有接口转发该帧; 主机B的网卡接收到该帧后,根据帧的目的MAC地址就知道这是发送给自己的帧,便接收该帧。主机C的网卡收到该帧后,根据帧的目的MAC地址这知道不是发送给自己的帧,便丢弃该帧; 该帧从交换机的接口2进入交换机2。交换机2首先进行登记工作,将该帧的源MAC地址A和该帧进入自己的接口号2对应记录到自己的帧交换表中。然后交换机2对该帧进行转发。由于交换机2在自己的帧交换表中也没有找到目的MAC地址B,因此对该帧进行盲目转发,主机D、E、F都会收到该帧,然后根据目的MAC地址是B知道该帧不是发送给自己的,便丢弃该帧。 主机B给主机A发送帧 该帧进入交换1后,交换机首先进行登记工作,将该帧的源MAC地址B和进入自己的接口号3对应的记录到帧转发表中,然后转发该帧; 交换机1在自己的帧交换表中查找该帧的目的MAC地址A,可以找到,于是按照MAC地址A所对应的接口号1从接口1转发该帧; 主机A接收到该帧后,根据帧的目的MAC地址就知道这是发送给自己的帧,便接收该帧。 显然这种情况下,主机B、C以及交换机2都不会收到该帧,因为该帧是明确转发的。 主机E给主机A发送帧 该帧从交换机2的3号接口进入交换机2,交换机先对其进行登记,在自己的帧交换表中记录下该帧的源MAC地址E以及对应的端口号3,然后对该帧进行转发; 交换机在自己的帧交换表中查找该帧的目的MAC地址A,找到了,于是向MAC地址A对应的接口号2转发该帧; 该帧从交换机1的接口4进入交换机1。交换机1先对其进行登记工作,记录下该帧的源MAC地址E以及进入自己的端口号4,然后转发该帧; 交换机1在自己的帧交换表中查找该帧的目的地址A,找到了,便根据其所对应的接口号向接口1转发该帧; 主机A的网卡接收到该帧,根据该帧的目的MAC地址知道是发送给自己的帧,便接收该帧。 丢弃帧得情况:主机G给主机A发送帧 为了方便演示,在交换机1的接口1处用集线器多连接一个主机G,这样主机A、主机G和交换机1的接口1共享同一条总线。 主机G给主机A发送的帧主机A和交换机1的接口1都能够接到。主机A的网卡接收到该帧后,根据该帧的目的MAC地址便知道该帧是发送给自己的,便接收该帧; 交换机1收到该帧后对其进行登记,记录下该帧的源MAC地址和其进入自己的接口号1,然后对该帧进行转发; 交换机1在帧交换表中查找该帧的目的MAC地址A,找到了,发现该MAC地址对应的接口号是1。但是该帧正是从该接口进入,因此交换机1不会再从该接口将帧转发出去,因为这是没有必要的,于是丢弃该帧。 随着网络中的各主机发送MAC帧,网络中的各交换机会不断学习各主机的MAC地址以及它们与自己各接口的对应关系。
10.2 以太网交换机的生成树协议STP
10.2.1 广播风暴
思考这样一个问题,如何提高以太网的可靠性呢? 如下图所示的以太网由三个交换机互联而成,每个交换机上都有一些主机(为了方便仅画出一个)。假设交换机A与交换机B之间的链路出现问题,那么主机H1无法和主机H2、H3通信;若交换机A与交换机B和C之间的链路都出现了问题,那么原来的以太网就变成了3个较小的以太网,他们之间无法通信。 最容易想到的解决办法就是在交换机B和C之间添加一条冗余链路。这样即使交换机A和B之间的链路故障,这三个交换机连接的以太网仍可以正常通信。 但是冗余链路会带来负面效应,就是形成网络环路。网络环路会带来广播风暴的问题: 主机H1发送一个广播帧,交换机B收到该帧后,将其从自己的其他所有接口转发出去(交换机A、C将会收到); 交换机A收到交换机B转发来的帧后,将其从自己的其他所有端口转发出去(H3、交换机C将收到,此时交换机C已经收到两遍了); 交换机C收到交换机B转发来的帧后,将其从自己的其他所有端口转发出去(H2、交换机A将收到,此时交换机A也已经收到两遍了); 交换机C又收到交换机A转发来的帧后,将其从自己的其他所有端口转发出去(H2、交换机B将收到; … 这样下去,该广播帧将在各交换机之间反复转发,分别按顺时针和逆时针方向同时兜圈,这就是广播风暴。 广播风暴会带来以下问题: (1)大量消耗网络资源,使得网络无法正常转发其他数据帧; (2)会让主机收到重复的广播帧,大量消耗主机资源; (3)使交换机的帧交换表震荡(漂移) 如图所示,由于交换机不断的收到来自交换机A和C的广播帧,因此其帧转发表会不断的删除之前的H1的MAC地址与接口的对应关系,用错误的记录将其覆盖,使帧交换表震荡。
10.2.1 生成树协议STP
为了在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题以太网交换机使用生成树协议STP(Spanning Tree Protocol). 生成树协议STP的几个特点: (1)不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其拓扑结构必须是树形的,也就是无逻辑环路的; (2)最终生成的树型逻辑拓扑要确保连通整个网络; (3)当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
如图所示:如果各交换机的各接口都处于正常状态,那么会形成多个网络环路。实际上各交换机之间按照生成树协议中规定的的生成树算法交互一些参数后,就可以判断出自己应该阻塞自己的哪些端口(黄点),这样就会形成一个逻辑上没有环路且能够使各个交换机连通的网络(蓝色线) 当某条链路出现故障(红叉),相关交换机检测到故障后便重新进行生成树计算,可能会将之前自己阻塞的接口恢复为正常状态,这样就会形成一个新的逻辑上没有环路的网络:
十一、虚拟局域网VLAN
11.1 VLAN概述
我们已经知道了使用以太网交换机互联的交换是以太网属于同一个广播域。随着交换是以太网规模的扩大,广播域也随之扩大。而巨大的广播域会带来广播风暴、难以管理和维护、潜在的安全问题等弊端。 如图所示,网络中的一台主机要给另一台主机发送帧,但是不知道目的主机的MAC地址,于是通过ARP来获取其MAC地址,该ARP广播会传遍整个网络,造成广播风暴。广播风暴会浪费网络资源和各主机的CPU资源,因此除非应用需求必须要使用广播,否则网络中的主机应尽量不使用广播。 但是实际上网络中会频繁出现广播信息,如: (1)TCP/IP协议栈中的很多协议都会使用广播如**地址解析协议ARP(已知IP地址,找出其相应的MAC地址)、路由信息协议RIP(一种小型的内部路由协议)、动态主机配置协议DHCP(用于自动配置IP地址); (2)NetBEUI:Windows下使用的广播型协议; (3)IPX/SPX:Novell网络的协议栈; (4)Apple Talk:Apple公司的网络协议栈等。
因此,我们就需要将较大的广播域隔离成较小的广播域,路由器就可以实现该功能: 如图所示,路由器将一个大的广播域分割成两个较小的广播域。路由器工作在网络体系结构的网络层,它默认情况下不转发广播数据包,因此路由器很自然的就可以隔离广播域。但是路由器成本较高,局域网内部全部使用路由器来隔离广播域是不现实的。于是虚拟局域网VLAN技术应运而生。
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分称为与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。 如图所示,1楼、2楼、3楼分别有一个局域网,将他们通过一个交换机互联成为一个更大的局域网,原来的每一个局域网成为了现在局域网的一个网段,网络中的各主机属于同一个广播域,某个主机发送的广播数据包,其他所有主机都可以收到。根据应用需求,将该局域网划分称为两个VLAN:VLAN1和VLAN2。此后,VLAN1中的广播数据包不会传送的VLAN2,VLAN2中的广播数据包也不会传送的VLAN1。
11.2 VLAN的实现机制
VLAN技术实在交换机上实现的,需要交换机能够实现以下两大功能: (1)能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧; (2)交换机的各端口可以支持不同的端口类型,不同类型的端口对帧的处理方式有所不同。
IEEE 802.1Q帧 IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。 VLAN标记的最后12比特称为VLAN标识符VID,它唯一的标志了以太网帧属于哪一个VLAN。VID的取值范围是0~4095(0~212 - 1),其中0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1~4094. 802.1Q帧是由交换机来处理的,而不是用户主机来处理。当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”;当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签”。
交换机的端口类型 交换机的端口类型一般有Access、Trunk、Hybrid三种类型,思科交换机没有Hybrid端口。 为了了解这三个端口类型,先来了解一下交换机各端口的缺省VLAN ID。 在思科交换机上将其称为Native VLAN,即本征VLAN。如思科交换机在用户为配置VLAN时,所有端口都默认属于VLAN1,即所有端口的本征VLAN都是VLAN1; 在华为交换机上将其称为Port VLAN ID,即端口VLAN ID,简记为PVID,为了方便,本文使用PVID的说法。 交换机的每一个端口有且仅有一个PVID。
Access端口 Access端口一般用于连接用户计算机,只能属于一个VLAN,其PVID值与端口所属VLAN的ID相同,默认为1。 Access端口的接收处理方法: 一般只接收“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
如图所示,主机A发送的广播帧从交换机的端口1进入,交换机的端口类型为Access,用A表示。交换机给该广播帧打标签,由于端口1的PVID值为1,因此所插入的4字节VLAN标记字段中的VID的值也为1。 Access端口的发送处理方法: 若帧中的VID与端口的PVID相等,则“去标签”后转发该帧,否则不转发。
如图所示,广播帧的VID值为1,与端口2、3、4的PVID值相等,因此交换机会从这三个端口对帧进行“去标签”转发。 现在有一个应用需求:将主机A和B划分到VLAN2,将主机C和D划分到VLAN3,这样VLAN2中的广播帧就不会传送到VLAN3。为了实现这种应用,可以在交换机上创建VLAN2和VLAN3,然后将交换机的端口1和2划归到VLAN2,即PVID值为2;将端口3和4划归到VLAN3,即PVID值为3. 此时主机A发送广播帧,该广播帧从交换机端口1进入,交换机根据端口的PVID值2给该帧打标签,令其4字节VLAN标记字段的VID的值也为2.此时广播帧中的VID取值与端口2的PVID取值都为2,因此交换机将该广播帧从端口2进行“去标签”转发。 主机C发送广播帧的情况:
Trunk端口 Trunk端口一般用于交换机之间或交换机与路由器之间的互连; Trunk端口可以属于多个VLAN,也就是说Trunk可以接收和发送多个VLAN的帧; 用户可以设置Trunk端口的PVID值。默认情况下Trunk端口的PVID值为1。
如图所示,两台交换机互联而成了一个交换式以太网,应用需求是将主机A、B、E、F划归到VLAN1,将主机C、D、G、H划归到VLAN2。由于交换机首次上电时默认配置各端口属于VLAN1,其相应的PVID值为1并且端口类型为Access。因此,我们需要对交换机进行相应的配置才能满足应用需求。 分别在两个交换机上创建VLAN2,并将他们的端口3和4都划归到VLAN2,其相应的PVID值为2。而两个交换机的端口1和2保持默认配置即可,属于VLAN1,相应的PVID值为1。需要注意的要将两个交换机互联的端口5的类型改为Trunk类型,PVID值保持默认的1即可。
Trunk端口的发送处理方法: 对于VID等于PVID的帧,”去标签“,再转发; 对于VID不等于PVID的帧,直接转发;
假设主机A发送了一个广播帧,该帧从交换机1的端口1进入交换机,由于端口1的类型为Access,因此交换机1根据该端口的PVID值1给该帧打标签,给其插入4字节VLAN标记字段并将该字段的VID值设置为1。 由于端口2的PVID值为1和该帧的VID值相等且端口2为Access类型,因此该帧被交换机1在端口2被“去标签”转发; 由于端口5的PVID值为1和该帧的VID值相等且端口5为Trunk类型,因此该帧被交换机1在端口5被“去标签”转发,便从交换机2的端口5进入了交换机2; Trunk端口的接收处理方法: 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等; 接收“已打标签的帧”;
如图所示,交换机2根据广播帧进入该交换机的端口号5的PVID值1,给该帧插入4字节的VLAN标记字段,并将其VID字段设置为1。由于端口1和2的PVID的值也为1,等于该帧的VID的值且端口1和2的类型为Access,因此交换机2将该帧在端口1和2对其进行“去标签”转发。 再来看主机C发送广播帧的情况:交换机1对从端口3进入的广播帧“打标签”,给其插入一个4字节的VLAN标记字段,并设置其VID字段的值等于该帧进入的端口的PVID的值也就是2。该广播帧中的VID的值与4号端口的PVID的值相等,且4号端口为Access类型,于是交换机1便从4号端口对该帧进行“去标签”转发。 该帧中的VID的值与端口5的PVID的值不相等,但是端口5的类型为Trunk,Trunk会对VID值与自己PVID值不等的帧直接转发。因此,交换机1会从端口5将帧带着标签直接转发,于是该802.1Q广播帧会从交换机2的端口5进入交换机2。 交换机的5号Trunk端口接收已经“打标签”的帧,该帧的VID值与自己的端口3、4的PVID值相等,且端口3、4的类型为Access,便将该帧从这两个端口进行“去标签”转发。 通过本例可以看出:在由多个交换机互联而成的交换式以太网中划分VLAN时,连接主机的交换机接口应设置为Access类型,交换机之间互联的接口应设置为Trunk类型。
华为交换机私有的Hybrid端口 Hybrid端口即可用于交换机之间或交换机与路由器之间的互联,这一点与Trunk端口相同;也可用于交换机与用户计算机之间的互联,这一点与Access端口相同。除此之外Hybrid端口的绝大部分功能与Trunk端口相同,不同点在于Hybrid端口的发送处理方法。 Hybrid端口会查看帧的VID是否在端口的“去标签”列表中: 若存在,则“去标签”后再转发;若不存在,则直接转发。
主机A、B、C连接在同一个交换机的不同端口上。利用Hybrid端口的功能,实现以下应用需求:A和B都能与C相互通信,但A与B不能相互通信。
如图所示,可以将这三台主机所连接的交换机的3个端口划分到不同的VLAN,并且端口类型设置为Hybrid。假设这三个VLAN分别为VLAN10、VLAN20、VLAN30,相应的PVID为10、20、30。在端口1的去标签列表中配置VLAN10和VLAN30;在端口2的去标签列表中配置VLAN20和VLAN30;在端口3的去标签列表中配置VLAN10、VLAN20和VLAN30。 主机A给C发送数据帧,该帧从交换机的端口1进入交换机。由于端口1的类型为Hybrid,他会对接收到的未“打标签”的普通以太网MAC帧“打标签”,即插入一个4字节的VLAN标记字段,并将其中VID的值设置成和自己PVID值相等也就是10。该帧将从端口3转发,由于帧的VID的值在端口3的去标签列表中,因此该帧会被“去标签”后从端口3转发,这样主机C就收到了主机A发送的帧。同理,主机C给A、主机B与C间相互通信都是如此,不再演示。 主机A给主机B发送帧的过程:该帧从交换机的端口1进入交换机,交换机给该帧“打标签”,其中VID的值为10。该帧会从端口2转发,由于帧中的VID值不在端口2的去标签列表中,因此该帧被直接转发。这样主机B就会收到一个带有VLAN标记的802.1Q帧,但是主机B可以识别普通以太网MAC帧而不能识别802.1Q帧,只能丢弃该帧。 同理,主机B给主机A发送的普通以太网MAC帧,主机A收到的却是802.1Q帧,无法识别而将其丢弃。
|