此处重点总结交换机二层与三层交换的原理与 VLAN 的基本概念

共享式以太网互连

以太网采用CSMA/CD机制,这种冲突检测方法使得以太网可以使用共享总线型的连接方式。最初的局域网搭建采用HUB或者同轴电缆将同一网络的主机互连起来,如下图所示。

  • 总结
    好处:流量较少时,冲突较少,利用CSMA/CD可以保证通讯质量;
    坏处:当流量到达一定程度时,冲突不断,导致数据被拒绝发送。
    解决办法:二层交换机

    二层交换原理

    二层交换机工作在 OSI 模型的第二层,即数据链路层,它对数据包的转发是建立在链路层信息——MAC(Media Access Control )地址基础之上的,它的内部一般使用称为 ASIC(Application Specific Integrated Circuit )的硬件芯片来实现转发,同时由于是硬件转发,其转发性能非常高。二层交换机不同的端口发送和接收数据独立,各端口属于不同的冲突域,因此有效地隔离了网络中物理层冲突域,使得通过它互连的主机(或网络)之间不必再担心流量大小对于数据发送冲突的影响,典型的组网结构如下图所示。
    二层交换机的转发依据是MAC地址。下面介绍下 MAC 地址的概念

    MAC 地址简介

    在每个以太网帧的帧头,都包含有一个目的MAC地址和一个源MAC地址,它的作用是标志帧的源节点和目的节点的物理地址。一个MAC地址有 48bit(6个字节),从应用上可以分为单播地址组播地址广播地址

  • 单播地址:第1字节的最低位为0,比如0000-0EF3-0038,一般用于标志唯一的设备;

  • 组播地址:第1字节的最低位为1,比如0100-5E00-0001,一般用于标志同属一组的多个设备;
  • 广播地址:所有 48bit 全为1,即FFFF-FFFF-FFFF,它用于标志同一网段中的所有设备。

在常用的以太网帧结构中,目的、源MAC的位置如下图所示。
交换基础知识 - 图1

二层交换基本原理

二层交换机通过解析和学习以太网帧的源MAC来维护MAC地址与端口的对应关系(保存MAC与端口对应关系的表称为MAC表),通过其目的MAC来查找MAC表决定向哪个端口转发,基本流程如下:

  1. 二层交换机收到以太网帧,将其源MAC与接收端口的对应关系写入MAC表,作为以后的二层转发依据。如果MAC表中已有相同表项,那么就刷新该表项的老化时间。MAC表表项采取一定的老化更新机制,老化时间内未得到刷新的表项将被删除掉;
  2. 根据以太网帧的目的MAC去查找MAC表,如果没有找到匹配表项,那么向所有端口转发(接收端口除外);如果目的MAC是广播地址,那么向所有端口转发(接收端口除外);如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的端口相同,则丢弃该帧。

从上述流程可以看出,二层交换通过维护MAC表以及根据目的MAC查表转发,有效的利用了网络带宽,改善了网络性能。下图是一个二层交换的示例。
二层交换机虽然能够隔离冲突域,但是它并不能有效的划分广播域。因为从前面介绍的二层交换机转发流程可以看出,广播报文以及目的MAC查找失败的报文会向所有端口转发,当网络中的主机数量增多时,这种情况会消耗大量的网络带宽,并且在安全性方面也带来一系列问题。当然,通过路由器来隔离广播域是一个办法,但是由于路由器的高成本以及转发性能低的特点使得这一方法应用有限。基于这些情况,二层交换中出现了VLAN技术。

  • 总结
    二层交换机工作在 OSI 第二层,简称数据链路层。使用 MAC 表进行数据转发,每个端口有独立的冲突域,使用硬件 ASIC 专用集成芯片传输。
    好处:专用硬件芯片,转发不必消耗CPU资源,转发性能大大提高;有效隔离冲突域。由于每个端口属于1个冲突域,使得每个端口都能独立发送和接收,不必考虑数据冲突;
    坏处:不能隔离广播域,可通过 vlan 解决

    支持VLAN的二层交换机

    VLAN简介

    VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。
    如图所示,两台交换机放置在不同的地点,比如写字楼的不同楼层,每台交换机分别连接两台属于不同企业用户的计算机,此时就可以将两台计算机划分到不同的VLAN,实现对不同企业用户的隔离。
    交换基础知识 - 图2

要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(称VLAN Tag,简称Tag),用以标识VLAN信息。VLAN数据帧格式如所示。

交换基础知识 - 图3

其中,数据帧中的VID(VLAN ID)字段标识了该数据帧所属的VLAN,数据帧只能在其所属VLAN内进行传输。

对于交换机来说,其内部处理的数据帧都带有VLAN标签,而现网中交换机连接的设备有些只会收发Untagged帧,要与这些设备交互,就需要接口能够识别Untagged帧并在收发时给帧添加、剥除VLAN标签。同时,现网中属于同一个VLAN的用户可能会被连接在不同的交换机上,且跨越交换机的VLAN可能不止一个,如果需要用户间的互通,就需要交换机间的接口能够同时识别和发送多个VLAN的数据帧。

因此,根据接口连接对象以及对收发数据帧处理的不同,华为定义了4种接口的链路类型:Access、Trunk、Hybrid和QinQ,以适应不同的连接和组网:

  • Access接口:一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。Access接口大部分情况只能收发Untagged帧,且只能为Untagged帧添加唯一的VLAN Tag。
  • Trunk接口:一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag(即剥除Tag)。
  • Hybrid接口:既可以用于连接不能识别Tag的用户终端(如用户主机、服务器等)和网络设备(如Hub、傻瓜交换机),也可以用于连接交换机、路由器以及可同时收发Tagged帧和Untagged帧的语音终端、AP。它可以允许多个VLAN的帧带Tag通过,且允许从该类接口发出的帧根据需要配置某些VLAN的帧带Tag(即不剥除Tag)、某些VLAN的帧不带Tag(即剥除Tag)。
  • 使用QinQ(802.1Q-in-802.1Q)协议,一般用于私网与公网之间的连接,也被称为Dot1q-tunnel接口。它可以给帧加上双层Tag,即在原来Tag的基础上,给帧加上一个新的Tag,从而可以支持多达4094×4094个VLAN。

VLAN的划分方法有多种,根据不同的场景,可以采用基于接口、MAC地址、子网、网络层协议、匹配策略方式来划分VLAN,各种VLAN划分方式的介绍及适用场景如表所示。

划分方式 简介 适用场景
基于接口 根据交换机的接口来划分VLAN 适用于任何大小但位置比较固定的网络
基于MAC地址 根据数据帧的源MAC地址来划分VLAN 适用于位置经常移动但网卡不经常更换的小型网络
基于子网 据数据帧中的源IP地址和子网掩码来划分VLAN 适用于对安全需求不高、对移动性和简易管理需求较高的场景中
基于网络层协议 根据数据帧所属的协议(族)类型及封装格式来划分VLAN 适用于需要同时运行多协议的网络
基于匹配策略 根据配置的策略划分VLAN,能实现多种组合的划分方式,包括接口、MAC地址、IP地址等 适用于需求比较复杂的环境

三层交换原理

ARP 简介

ARP,Address Resolve Protocol,地址解析协议,是以广播的形式查询单播的目的IP地址对应的下一跳IP地址的MAC地址,以完成以太网的封装。ARP是网络层较下层的协议,下层使用以太网封装,以太网类型(Ethernet Type)号是0x0806。ARP在RFC 826中描述。

网络层及以上的设备在向外转发数据时,需要把网络层的数据包封装成以太网的数据帧,封装成帧就需要封装目的MAC地址和源MAC地址。源MAC地址封装出接口的MAC地址,那么目的MAC地址如何封装呢?

  1. 对于广播IP地址,下一跳地址和目的地址是同一个地址,广播IP地址(32个1或主机位全1)直接映射为广播MAC地址(48个1);
  2. 对于组播IP地址,目的MAC地址会以01-00-5E开头,后面23位把IP地址的后23位直接映射过来。
  3. 对于单播IP地址,IP地址到MAC地址的映射是通过ARP来完成的。

单播IP地址才是常态,组播IP地址只有在组播协议或组播应用的网络中才有,数量也比较小,产生广播IP地址的场景主要是ARP和DHCP,并以ARP为主。其实ARP产生的广播IP也是由单播地址而来。我们经常说网络通信是基于广播的,其实很大程度上是指代ARP,IPv4最受诟病的广播风暴问题,很大程度上也是指ARP,ARP简单高效的设计也让它倍受指责,对网络的规划设计和安全防范带来了额外挑战,因此在IPv6当中,广播被取消。

  • 何时用到 ARP?
    1. 网络层及以上设备在转发数据包时,首先会通过与(AND)的方式检查目的IP地址与自己是否在同一网段。
    2. 对于目的IP地址与自己不是同一网段的数据包,需要将它向外网路由,通过查路由信息表(RIB,Routing Information Base)派生出来的转发信息表(FIB,Forwarding Information Base),逐条查询匹配长度最大的条目直到最后一条,找到合适的下一跳,并查询下一跳IP地址对应的MAC地址是否在ARP表中。
    3. 如果目的IP地址与自己是在同一网段,将其设置为下一跳,并查询下一跳IP地址对应的MAC地址是否在ARP表中。
    4. 如果目的IP地址对应的MAC地址在ARP表中没有找到,就会以广播的形式发送这个单播地址的ARP Request请求,以获取这个MAC地址,并将它封装在以太网帧的目的MAC地址字段,并启动老化定时器;如果ARP表中有对应的条目,查到它并将它封装在以太网帧的目的MAC地址字段,并更新老化定时器。成帧结束,数据送往下层处理。

交换基础知识 - 图4

  • ARP 报文类型
    • ARP request
    • ARP response
    • ARP
  • ARP 协议过程
    如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
    交换基础知识 - 图5
  • ARP 协议字段解读
    Hardware type :硬件类型,标识链路层协议
    Protocol type: 协议类型,标识网络层协议
    Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
    Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)
    Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应
    Sender MAC address :发送者MAC
    Sender IP address :发送者IP
    Target MAC address :目标MAC,全0表示在请求
    Target IP address: 目标IP

三层交换基本原理

随着数据通信网络范围的不断扩大,网络业务的不断丰富,网络间互访的需求越来越大,而路由器由于自身成本高、转发性能低、端口数量少等特点无法很好的满足网络发展的需求。我们知道,路由器主要是通过IP转发(三层转发)来实现不同网络间的互连,那么是否能够将交换机的高性能应用到三层转发中去呢?答案是肯定的,三层交换机就是这样一种实现了高速三层转发的设备。大多数三层交换机采用ASIC硬件芯片来完成转发,ASIC芯片内部集成了IP三层转发的功能,包括检查IP报文头、修改存活时间(TTL)参数、重新计算IP头校验和、IP包的数据链路封装等等。三层交换机的组网结构如图所示。

交换基础知识 - 图6

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

目前的三层交换机一般是通过VLAN来划分二层网络并实现二层交换,同时能够实现不同VLAN间的三层IP互访。在讨论三层交换机的转发原理之前有必要交代一下不同网络的主机之间互访时的行为:

  1. 源主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在收到目的主机的ARP应答后获得对方的物理层(MAC)地址,然后用对方MAC作为报文的目的MAC进行报文发送。位于同一VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作二层交换转发;
  2. 当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC进行报文发送。注意,发送报文的源IP是源主机的IP,目的IP仍然是目的主机的IP。位于不同VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作三层交换转发。

下面分别以两种组网情况下的主机间通信来解释三层交换机的转发原理。

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

交换基础知识 - 图7

当 PC A 向 PC B 发起ICMP请求时,流程如下:(假设三层交换机上还未建立任何硬件转发表项)

  1. 根据前面的描述,PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,因此它发出请求网关地址1.1.1.1对应MAC的ARP请求;
  2. L3_SW收到PC A的ARP请求后,检查请求报文发现被请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。同时它还会把PC A的IP地址与MAC地址对应(1.1.1.2<==>MAC A)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);
  3. PC A得到网关(L3_SW)的ARP应答后,组装ICMP请求报文并发送,报文的目的MAC=MAC S、源MAC=MAC A、源IP=1.1.1.2、目的IP=2.1.1.2;
  4. L3_SW收到报文后,首先根据报文的源MAC+VID(即VLAN ID)更新MAC地址表。然后,根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;
  5. 交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;
  6. CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后L3_SW会在目的网段对应的VLAN 3的所有端口发送请求地址2.1.1.2对应MAC的ARP请求;
  7. PC B收到L3_SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3_SW的IP与MAC的对应关系(2.1.1.1<==>MAC S)记录到自己的ARP表中去;
  8. L3_SW收到PC B的ARP应答后,将其IP和MAC对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为自己的MAC(MAC S)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了;
  9. PC B收到L3_SW转发过来的ICMP请求报文以后,回应ICMP应答给PC A。ICMP应答报文的转发过程与前面类似,只是由于L3_SW在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC A;
  10. 这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了。
  • 总结
    三层转发的基本循环流程为,查 MAC 表 -> 查三层转发表 -> 报文送往 CPU -> 匹配直连路由 -> ARP 解析 -> 转发报文同时添加硬件表项。

参考资料

VLAN技术介绍

H3C交换知识

ARP介绍