06. 交换基本原理
作者:互联网
三层交换机的转发机制分为二层转发和三层交换。
二层转发
MAC地址
MAC地址由48bit的二进制数组成,有单播、组播和广播地址。
-
第1个字节的倒数第一个bit,若为1表示此MAC为组播或广播MAC地址;若为0,表示此MAC为单播MAC;
- 单播MAC地址 00-e0-fc-00-00-06
- 多播MAC地址 01-e0-fc-00-00-06
- 广播地址:48位全1,如:ff-ff-ff-ff-ff-ff
-
第1个字节的倒数第二个bit,若为1表示此MAC为本地意义;若为0表示为全局意义。
二层转发
二层转发涉及两个重要线程:地址学习线程和报文转发线程。
地址学习线程:
- 交换机接收所有的数据帧,利用接收到的数据帧中源MAC地址构建MAC地址表(cam表)
- 端口移动机制。数据包源MAC地址对应的实际入端口和交换机的MAC地址表中对应的端口不同,就会产生端口移动,将MAC地址重新关联到新的端口。
- 地址老化进制。交换机在很长时间都没有接收到某台主机发出的报文, 则将cam表中该主机对应的MAC地址条目删除。等下次报文经过的时候重新学习。
报文转发线程:
- 在MAC地址表中查找数据帧中的目的MAC地址。若找到,则将数据帧通过记录的接口发送到传输链路;若找不到,则向所有的端口发送。
- 收到的数据帧,源MAC地址和目的MAC地址所在的端口相同,则丢弃该报文。、
- 广播报文转发,向入端口以外的其他所有端口转发
VLAN二层转发
报文转发线程
引入vlan之后对二层交换机的报文转发线程产生的影响如下:
-
交换机在MAC地址表中查找数据帧中的目的MAC地址,如果找到就将数据帧发送到相应的端口,同时要确保报文的入vlan和出vlan一致;如果找不到,就向所有同vlan内的所有端口发送。
-
如果接收到报文中的源MAC地址和目的MAC地址所在的端口相同,则丢弃该报文。
-
交换机向入端口以外的所有同vlan的端口转发广播报文。
以太网交换机引入vlan的好处:
-
限制局部的网络流量,提供网络的处理能力。
-
形成虚拟的工作组,通过灵活配置vlan,把不同的用户进行分组。
-
提供安全性,一个vlan内的用户和其他vlan内的用户不能互相访问。
VLAN终结和透传
VLAN透传:某个VLAN不仅在一台交换机上有效,还可以通过某种办法延伸到别的交换机上,在别的设备上依然有效
VLAN终结:某个VLAN的有效域不能再延伸到别的设备,或者不能通过某条链路延伸到别的设备上。
透传可以利用802.1Q,终结可以使用PVLAN。
IEEE802.1Q协议是VLAN的技术标准,主要是通过修改标准的帧头,添加一个tag字段,其中包含VLAN ID等vlan信息。
ps:
在trunk端口转发报文时,若报文的vlan tag等于端口上默认的vlan ID,则需要去掉tag后转发;对端接口收到没有tag的报文时,端口的默认vlan ID作为报文的tag。
去tag的原因 ? 保证一般用户插到trunk上以后,仍然能够通信。普通用户无法识别带有802.1Q vlan信息的报文。
三层交换
不同VLAN无法进行二层通信,需要借助支持VLAN的三层交换设备建立VLAN间通信。不直接使用路由器互联不同的VLAN有以下原因:
- 传统路由器依靠软件处理转发报文,三层交换机通过硬件完成报文转发
- 三层交换机接口基本是以太网接口,不像路由器接口多种多样
- 三层交换机可以工作在二层模式,进行二层转发;路由器不具备二层功能
#1. PC1————PC2通信:同一个VLAN
①PC1构造的IP报文:
源IP:10.1.1.1
目标IP:10.1.1.2
②PC1查自己的路由表,匹配直连路由
10.1.1.0/24 直连路由
0.0.0.0/0 10.1.1.254
③PC1将此IP报文封装到二层
L3:源IP:10.1.1.1 目标IP:10.1.1.2
L2:目标MAC:??? 源MAC:MAC_PC1
④如果在PC1的ARP缓存表中已经存在IP地址10.1.1.2所对应的MAC地址,则直接到步骤⑩;
这里假设PC1的ARP缓存表中未找到10.1.1.2对应的MAC地址。则:
PC1将向此广播域中发出ARP Request的广播报文,请求10.1.1.2对应的MAC地址。
目标MAC:FFFF-FFFF-FFFF 源MAC:MAC_PC1
⑤该数据帧到达SW1,学习源MAC地址,写入SW1的MAC地址表。并且将此广播帧在VLAN 10中泛洪。
SW1的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC1 f0/1 10
⑥此数据帧通过SW1的Trunk链路到达SW2。SW2学习源MAC地址,写入SW2的MAC地址表。然后SW2将此广播帧从VLAN 10的所有端口泛洪出去到达PC2。
SW2的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC1 f0/24 10
⑦PC2收到此ARP Request,将10.1.1.1与MAC_PC1的对应关系写入PC2自己的ARP缓存表。并且PC2回复一个ARP Reply报文。
目标MAC:MAC_PC1 源MAC:MAC_PC2
⑧PC2发出此ARP Reply,到达SW2。SW2学习源MAC地址,写入SW2的MAC地址表。
SW2的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC1 f0/24 10
MAC_PC2 f0/1 10
⑨ 从SW2的f0/24将此数据帧精确的转发出去,到达SW1。SW1学习源MAC地址,写入SW1的MAC地址表。然后SW1通过查看自己的MAC地址表将此数据帧精确的转发出去,到达PC1。
SW1的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC1 f0/1 10
MAC_PC2 f0/24 10
⑩ PC1将10.1.1.2与MAC_PC2的对应关系写入自己的ARP缓存表。
PC1继续步骤③,完成数据的二层封装。并且将此数据帧发送出去。
L3:源IP:10.1.1.1 目标IP:10.1.1.2
L2:目标MAC:MAC_PC2 源MAC:MAC_PC1
此数据包的通信在解封装到2层时就已经可以做转发决策,SW1、SW2通过查看自己的MAC地址表完成数据的转发任务。
#2. PC3————PC2通信:不同VLAN
①PC3构造IP报文
源IP:20.1.1.1 目标IP:10.1.1.2
②PC3查自己的路由表,匹配默认路由,即PC3认为此IP报文必须交由网关20.1.1.254来中转
20.1.1.0/24 直连路由
0.0.0.0/0 20.1.1.254
③PC3将此IP报文封装到二层
L3:源IP:20.1.1.1 目标IP:10.1.1.2
L2:目标MAC:???(网关) 源MAC:MAC_PC3
④如果在PC3的ARP缓存表中已经存在IP地址20.1.1.254所对应的MAC地址,则直接到步骤⑧
这里假设PC3的ARP缓存表中未找到20.1.1.254对应的MAC地址。则:
PC3将向此广播域中发出ARP Request的广播报文,请求20.1.1.254对应的MAC地址。
目标MAC:FFFF-FFFF-FFFF 源MAC:MAC_PC3
⑤该数据帧到达SW1,学习源MAC地址,写入SW1的MAC地址表。SW1发送该数据帧,将此广播帧在VLAN 20中泛洪。
SW1的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC3 f0/2 20
⑥此数据帧通过SW1的Trunk链路到达SW2。SW2学习源MAC地址,写入SW2的MAC地址表。SW2将此广播帧从VLAN 20的所有端口(包括划分到vlan 20的access端口、允许vlan 20通过的trunk端口,还有VLAN 20对应的三层接口/intface vlan 20)泛洪出去。
SW2的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC3 f0/24 20
SW2的int vlan 20收到此ARP Request,首先将20.1.1.1与MAC_PC3的对应关系写入SW2的ARP缓存表。并且SW2的int vlan 20接口回复一个ARP Reply报文。
目标MAC:MAC_PC3 源MAC:MAC_SW2_int_vlan_20
SW2的二层模块从一个内部接口(SW2的二层模块与三层模块互连的内部接口)收到此数据帧,学习源MAC地址。并且查找MAC地址表将此ARP Reply从f0/24口发送到SW1。
SW2的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC3 f0/24 20
MAC_SW2_int_vlan_20 指向L3引擎的内部接口 20
⑦SW1从F0/24收到此数据帧,学习源MAC地址,并将此数据帧从f0/2口发出,到达PC3。
SW1的MAC地址表:
MAC地址 端口号 VLAN
MAC_PC3 f0/2 20
MAC_SW2_int_vlan_20 f0/24 20
⑧PC3收到ARP Reply后,将20.1.1.254<----->MAC_SW2_int_vlan_20的对应关系写入ARP缓存表。并继续步骤③,完成IP报文到2层以太网帧的封装。并将此数据包发送出去。
L3:源IP:20.1.1.1 目标IP:10.1.1.2
L2:源MAC:MAC_PC3 目标MAC:MAC_SW2_int_vlan_20
⑨PC3将此数据帧发出,SW1收到后,只解封装到2层就进行了数据的转发送给了SW2。
⑩数据到达SW2后,SW2查看自己的MAC地址表将此数据包交给了三层引擎处理。SW2的三层引擎查看自己的路由表匹配到一条直连路由,将此数据包从这个L3引擎的内部接口下发到2层后,转发给PC2。
三层交换机怎样区分二层和三层的数据流?
同一个VLAN内部 A到B,报文的目的MAC地址是主机B的MAC地址;不同VLAN互通 A到C,报文的目的MAC地址是设备虚接口MAC地址。所以交换机判断二层/三层报文是看报文目的MAC地址是否等于交换机虚接口上的MAC地址。
三层交换机处理流程:
软件协议栈:运行路由协议、维护路由表信息和IP协议栈等功能。在硬件不能完成报文转发时,它可以代替硬件来完成报文的三层转发。像telnet、ping、ftp和snmp的数据流都是由它处理完成。
硬件处理:二层的MAC地址表和三层的ipfdb表,两张表用于保存转发信息。在信息很全面的情况下,报文的转发和处理均是由硬件来完成处理,不需要软件干预。两个表互相独立,互不影响。设备收到报文,先判断该报文是二层还是三层报文,然后判断源和目的地址是否已经解析,如果已经解析,则通过硬件完成报文转发,若是未解析,则产生CPU中断,靠软件先学习该未解析的地址。
区分二和三层数据流:
宏观角度:对于同一个vlan内通信,对于与交换机是二层数据流;跨越VLAN通信是三层的数据流。
微观角度:两个终端在同一个vlan内部通信,报文的目的MAC地址将是另一台终端的MAC地址;跨越VLAN通信,报文的目的MAC地址是 交换机设备上虚接口VLAN的MAC地址。区分二层、三层数据流的标准是看报文的目的MAC地址是否等于交换机虚接口上的MAC地址。
标签:vlan,06,基本原理,报文,VLAN,交换,MAC,地址,SW2 来源: https://blog.csdn.net/weixin_45035811/article/details/123566367