交换机主要对数据进行转发处理。数据的转发分为二层转发和三层转发两类,即数据链路层的转发和网络层的转发。

数据链路层的转发建立在MAC地址基础上,二层交换设备通过解析和学习以太网帧的源MAC来维护MAC地址与接口的对应关系,通过其目的MAC来查找MAC表决定向哪个接口转发。

由于二层交换设备不同的接口发送和接收数据独立,各接口属于不同的冲突域,因此有效隔离了网络中物理层冲突域,使得通过它互连的主机或网络之间不必再担心流量大小对于数据发送冲突的影响。二层交换通过维护MAC表以及根据目的MAC查表转发,有效利用网络带宽,改善网络性能。

二层设备虽然能够隔离冲突域,但是不能隔离广播域,如果一个接口发出广播报文,那么这个报文就会向除它之外的所有接口转发,主机数量少的时候还好说,如果这个二层设备连的主机数量比较多,那么这种无差别转发的行为就会大大消耗网络带宽,并且在安全方面也带来很多问题。为了避免这种情况,可以使用路由器,因为路由器的一个接口就是一个广播域,但是因为路由器成本太高且转发能力比较低,这种办法并不是最优解。基于这种情况,二层交换中出现了vlan技术。

什么是vlan呢?

vlan又叫做虚拟局域网,是将一个物理的网络在逻辑上划分为多个广播域的通信技术,就像是把一个网络通过二层设备变成了多个网络。主要的目的就是将广播报文限制在一个vlan内,一个vlan就是一个广播域,避免广播报文大量的转发,vlan内的主机可以互相通信,但是不同vlan间不能直接互通。那么vlan是怎样划分的呢?vlan的划分主要是根据使用需要进行,主要有三种方法,分别是基于接口的vlan划分,基于mac的vlan划分,以及基于IP子网的vlan划分。其中,基于接口划分vlan是最简单,最有效的vlan划分方法。

交换机是如何分辨不同vlan的报文呢?

tag标签。根据IEEE802.1q协议,在以太网数据帧的目的mac地址和源mac地址之后,协议类型字段之前加入4个字节的vlan标签(即tag)用于标识vlan信息。

HCIE-RS面试---交换机原理

TPID:tag protocol identifier ,标签协议标识符,表示数据帧类型,当其取值为0X8100时,表示IEEE802.1Q的vlan数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。各设备厂商也可自定义该字段的值,但是如果被修改为除0x8100的其他值时,对端设备也必须进行修改。

PRI:priority,表示数据帧的802.1p优先级,取值范围0-7,越大越优先。当网络阻塞时,交换机优先发送优先级高的数据帧。

CFI:canonical format indicator,标准格式指示位,表示MAC地址在不同的传输介质中是否以标准格式进行封装,用于兼容以太网和令牌环网。取0表示标准格式,在以太网中取0.

VID:vlan id.表示该数据帧所属vlan的编号,取值范围0-4095,0和4095为协议保留值,因此实际上我们可以有效取到1-4094.

交换机利用vlan标签中的vid来识别数据帧所属的vlan,广播帧只在同一vlan内转发,这就将广播域限制在一个vlan内。

在一个vlan交换网络中,以太网帧主要有两种存在形式:有标记帧(tagged帧)和无标记帧(untagged帧)

顾名思义,有标记帧就是加入了4字节vlan标签的帧,而无标记帧则是没有加vlan标签的帧。

在常用设备中,终端设备及傻瓜交换机,hub只能收发untagged帧,交换机、路由器和AC即能收发tagged帧,也能收发untagged帧,语音终端、AP等设备可以同时收发一个tagged帧和一个untagged帧。

为了提高处理效率,交换机内部处理的数据帧都是tagged帧。

现在,交换机内部处理的数据帧都带有了vlan标签,也就是我们之前所说的tag,但是现网中交换机连接的设备不止一台,有一些设备只会收发untagged帧,交换机如何才能与这些设备交互呢?这就需要接口能够识别untagged帧并且在收发时给帧添加或者剥离标签。同时,现网中属于同一个vlan的用户可能连接在不同的交换机上,且这些交换机之间交互的vlan有多个,这就需要交换机的接口能够识别和发送多个vlan的数据帧。

为了适应不同的连接和组网,华为定义了access接口,trunk接口,hybrid接口和qinq接口4种接口类型,以及接入链路、干道链路两种链路类型。

根据链路种需要承载的vlan数目不同,以太网链路分为:

接入链路:只可以承载1个vlan的数据帧,用于连接交换机和用户终端(如用户主机、服务器、傻瓜交换机等)通常情况下,用户终端并不需要知道自己属于哪个vlan,也不能识别带有tag的帧,所以在接入链路上传输的帧都是untagged帧。

干道链路:可以承载多个不同vlan的数据帧,用于交换机间互联或者连接交换机与路由器,为了保证其他网络设备能够正确识别数据帧中的vlan信息,在干道链路上传输的数据帧必须打上tag.

根据接口连接对象以及收发数据帧处理的不同,以太网接口分为:

access接口:一般用于和不能识别tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同vlan成员时使用,access接口大部分情况只能收发untagged帧,且只能为untagged帧添加唯一vlan的tag.但当access接口收到带有tag的帧,并且帧中vid与pvid(port vid)相同时,access接口也能接受并处理该帧。

trunk接口:一般用于连接交换机,路由器,AP以及可以同时收发tagged帧和untagged帧的语音终端,它可以允许多个vlan的帧带tag通过,但是只允许一个vlan的帧从该类接口上发出时不带tag(即剥除tag).

hybrid接口(混合接口):既可以用于连接不能识别tag的用户终端(如用户主机、服务器等)和网络设备(如hub、傻瓜交换机),也可以用于连接交换机、路由器以及可同时收发tagged帧和untagged帧的语音终端、ap,它可以允许多个vlan的帧带tag通过,且允许从该类接口发出的帧根据需要配置某些vlan的帧带tag(即不剥除tag),某些vlan的帧不带tag(即剥除tag),注意trunk接口只允许一个vlan的帧从该类接口上发出时不带tag。

qinq接口(802.1qin802.1q):一般用于私网与公网之间的连接,它可以给帧加上双层tag.即在原来tag的基础上,给帧加上一个新的tag.从而可以支持多达4094*4094个vlan,,满足对vlan数量的需求,外网的tag通常被称为公网tag,用来标识公网的vlan,内层的tag被称为私网tag,用来标识私网的vlan。

如果需要访问不同vlan内的设备,应该怎么办呢?

需要借助三层交换机或路由器实现三层交换。

早期的网络中一般使用二层交换机来搭建局域网,而不同局域网之间的网络互通由路由器来完成。那时的网络流量,局域网内部的流量占了绝大部分,而网络间的通信访问量比较少,使用少量路由器已经足够应付了。

但是,随着数据通信网络范围的不断扩大,网络业务的不断丰富,网络间互访的需求越来越大,而路由器由于自身成本高、转发性能低、接口数量少等特点无法很好的满足网络发展的需求。因此出现了三层交换机这样一种能实现高速三层转发的设备。

路由器的三层转发主要依靠CPU进行,而三层交换机的三层转发依靠硬件完成,这就决定了两者在转发性能上的巨大差别。当然,三层交换机并不能完全替代路由器,路由器所具备的丰富的接口类型、良好的流量服务等级控制、强大的路由能力等仍然是三层交换机的薄弱环节。

三层交换机的应用主要有两种情况,一种是同设备的三层互访。

另一种是跨设备的三层互访

现在,访问不同vlan内的设备已经通过三层交换方式实现了,但是很多情况下,我们并不希望所有接入交换机的用户可以访问任意vlan下的设备。比如为了通信的安全性,公司在交换机下配置了三个vlan,分别作为访客区,员工区,服务器区,公司希望员工、服务器主机、访客均能访问Internet,但访客不能与员工互通,且只能访问服务器区的服务器_1。

为了实现这种目标,我们需要在三层交换机上配置流策略,并在连接访客区的接口下应用流策略。

面试中可能出现的问题。

1、收到未知表项怎么处理

交换机是依据数据帧中的dmac查找mac地址表(一张二层转发表,用于存放该设备所学习到的其他设备的mac地址信息)进行转发的。根据dmac格式的不同涉及到对于未知单播、未知组播(mac地址第8bit为1的mac地址为组播mac地址,用来代表lan上的一组终端)、未知广播(全1,表示lan上的所有终端设备)的处理。
收到未知单播数据帧,(未知单播帧即不能从mac地址表中查找得到相应的出接口的单播帧)泛洪。并且,由于mac地址表中不存在该mac地址表项,设备会将这个新的mac地址以及该mac地址对应的端口号和vlan id 作为一个新的表项加入到mac地址表中。
收到未知组播数据帧,泛洪。
收到广播数据帧,泛洪。
2、收到组播帧是否一定泛洪

如MAC地址为0180-c200-0000 为STP协议,就交给STP协议处理

如MAC地址为0180-C200-0014 15 就交给ISIS协议处理

如果收到组播数据,如果运行了PIM协议,就会依据(S,G)表项下游接口转发。

如果没有运行PIM协议,收到组播数据帧就泛洪。

如果运行了IGMP snooping,则依据IGMP snooping中成员端口转发数据。

如果运行了IGMP proxy 则依据IGMP proxy表项来进行转发组播数据

3、三层交换机如何判断数据帧做二层还是三层转发

源主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在收到目的主机的ARP应答后获得对方的物理层(MAC)地址,然后用对方MAC地址作为报文的目的MAC地址进行报文发送。
当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC发送报文。此时发送报文的源IP是源主机的IP,目的IP仍然是目的主机的IP。
4、两台主机接三层交换机工作过程

如图所示,通信的源、目的主机连接在同一台三层交换机上,但它们位于不同VLAN(网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。

图中标明了两台主机的MAC、IP地址、网关,以及三层交换机的MAC、不同VLAN配置的三层接口IP。当 PC A向PC B发起PING时,流程如下:(假设三层交换机上还未建立任何硬件转发表项)

根据前面的描述,PC A首先检查出目的IP地址10.2.1.2(PC B)与自己不在同一网段,因此它发出请求网关地址10.1.1.1对应MAC的ARP请求;
L3 Switch收到PC A的ARP请求后,检查请求报文发现被请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC Switch)包含在其中。同时它还会把PC A的IP地址与MAC地址对应(10.1.1.2与MAC A)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);
PC A得到网关(L3 Switch)的ARP应答后,组装ICMP请求报文并发送,报文的目的MAC(即DMAC)=MAC Switch、源MAC(即SMAC)=MAC A、源IP(即SIP)=10.1.1.2、目的IP(即DIP)=10.2.1.2;
L3 Switch收到报文后,首先根据报文的源MAC+VLAN ID更新MAC表。然后,根据报文的目的MAC+VLAN ID查找MAC地址表,发现匹配了自己三层接口MAC的表项,说明需要作三层转发,于是继续查找交换芯片的三层表项;
交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;
CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后L3 Switch会在目的网段对应的VLAN 3的所有接口发送请求地址10.2.1.2对应MAC的ARP请求;
PC B收到L3 Switch发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3 Switch的IP与MAC的对应关系(10.2.1.1与MAC Switch)记录到自己的ARP表中去;
L3 Switch收到PC B的ARP应答后,将其IP和MAC对应关系(10.2.1.2与MAC B)记录到自己的ARP表中去,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为自己的MAC(MAC Switch)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出接口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了;
PC B收到L3 Switch转发过来的ICMP请求报文以后,回应ICMP应答给PC A。ICMP应答报文的转发过程与前面类似,只是由于L3 Switch在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC A;
这样,后续的往返报文都经过查MAC表到查三层转发表的过程由交换芯片直接进行硬件转发了。
从上述流程可以看出,三层交换机正是充分利用了“一次路由(首包CPU转发并建立三层硬件表项)、多次交换(后续包芯片硬件转发)”的原理实现了转发性能与三层交换的完美统一。