以太网交换基础知识

以太网协议

以太网是当今局域网采用的最通用的通信协议标准,该标准定义了局域网中采用的电缆类型和信号处理方法。 以太网是建立在CSMA/CD机制上的广播型网络。冲突的产生是限制以太网性能的重要因素,早期以太网设备如HUB是物理层设备,无法隔离冲突扩散;如今的以太网基本是交换机组网,交换机作为二层设备,较好地隔离冲突,但交换机对网络中的广播数据不做限制,仍会影响网络性能。(为了解决广播风暴的问题,引入了 VLAN技术 )

CSMA/CD协议具体工作机制原理可以参考各大《计算机网络》书籍,里面都有讲的很清楚,或者可以看看这位大佬的 总结

交换机交换表工作原理

交换机的交换表作为转发数据的依据,里面存储了MAC地址和对应接口以及有效事件

交换表的自学习过程

如图所示,交换表一开始是空的,学习过程如下:

  • A向B发生数据帧,从接口1进入交换机
  • 交换机收到帧后,查找交换表,没有查找到从哪个接口转发这个帧
  • 交换机把这个帧的源MAC地址和接口1写入交换表中,并向其他接口广播这个帧
  • 只有B会收下这个帧,因为其他主机判断目的MAC不是它们
  • 以后不管从哪个接口收到目的MAC为A的帧,都将从接口1转发出去
  • 例如B通过接口3向A发送一帧,交换机查找交换表,找到A的表项,便直接从接口1转发数据帧,不再进行广播
  • 同理,交换机将B的MAC地址和接口3写入交换表
  • 每个交换表项都设有一定的有效时间,因为考虑到有时交换机接口会更换主机,或主机更换其他的网络适配器,这就需要更改交换表项。

注意:在这个过程中,是先学习再转发,即收到帧后,先查看有没有对应源MAC地址的项,若有,则进行更新,包括接口和有效时间,若没有,则添加对应的源MAC和接口表项;接着再查找有没有对应目的MAC地址的项,若有,从项对应的接口转发,没有则在其他接口进行广播。

实际应用例子

两台主机和交换机都处于初始化状态,现要实现主机1访问主机2

实现通信过程: 1.数据封装: 主机1在发送报文前,要先进行报文封装包括源目IP、源目MAC等。

2.ARP查询: 为了进行报文封装,主机1需要查找本地ARP缓存表,由于处于初始化状态,ARP缓存表为空,因此发送ARP请求报文,请求目的MAC地址,交换机收到数据帧查找MAC地址表,同样的,处于初始化状态的交换机MAC表为空,因此向所有非接收端口泛洪数据帧 。同时,交换机将收到的数据帧的源MAC地址和对应端口记录到MAC表中。

3.ARP响应: 主机2收到ARP请求报文后,在自己的ARP缓存表中记录或者更新主机1的ARP信息,并发送ARP响应报文给主机1。交换机收到主机2发送的数据帧后查找MAC表,发现有对应表项,向对应端口转发数据帧,并且将收到的数据帧的源MAC地址和对应端口记录到MAC地址表中。

4.完成访问: 主机1收到主机2的ARP响应报文后,就会将对应的IP地址和MAC地址记录到自己的ARP缓存中,并封装自己的报文,访问主机2。

ARP代理

如果ARP请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,连接它们的具有代理ARP功能的设备用自己的MAC地址回答该请求,这个过程称作代理ARP(Proxy ARP)。

ARP本地代理和普通代理的区别:

当想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中时,需要配置本地代理ARP功能。

当想要互通的主机分别连接到设备的不同三层接口或三层子接口上,且这些主机不在同一个广播域中时,需要配置普通代理ARP功能。

企业微信截图_16986431477747.png

以上图的实验环境为例,SW1和SW2和SW4在同一网段,SW1&SW4和SW3不在同一广播域中。 ① SW1ping SW3,由于不在同一广播域,SW1发出的ARP报文无法发送到SW3上,此时在SW2的vlan 10和20接口上均开启普通ARP代理,SW2会用vlan10接口的mac回应SW1的ARP请求,同时SW2会用vlan20接口的ip和mac发送一个ARP请求SW3的mac地址,至此,SW1学习到的ARP表项为(SW3_IP,SW2_MAC),SW3学习到的ARP表项为(SW2_IP,SW2_MAC);同理,SW3在回应ICMP reply报文给SW1时,需要发送ARP报文,过程类似,最终SW1和SW3均会学到对方的ARP表项,以及SW2上对应的vlan IP表项。 ② SW1 ping SW4,在SW2的vlan 10接口上开启本地ARP,此时发现SW1和仍然学习到了SW4的MAC,抓包分析原因: SW X的mac地址结尾为(0x:0x),如SW2的mac结尾为02:02

SW1上抓到的包

image.png

image.png

SW4上抓到的包

image.png 可以看到,SW1发送ARP请求,SW2作为ARP代理,会回应自身的MAC,并以自身IP和MAC请求SW4的MAC地址,但由于该场景下,SW1和SW4处于同一广播域,因此ARP会广播发送到SW4上,SW4又会回应ARP报文给SW1上,因此在SW1上收到的第二个ARP应答报文中会显示地址冲突。

实际上在EVPN-VXLAN分布式网关的代理场景中,是在VSI接口上开启本地ARP代理,此时便满足同一三层接口,不同广播域的场景:两台Leaf的VSI接口配置均一致,无论是IP还是MAC,可以看作同一三层接口,而两个接口处于同一个VSI中,并不在同一个广播域中(正常情况下,vxlan相同时,是在同一广播域中的,但在分布式网关中,vsi接口上配置了distribute-gateway local命令后,ARP便不会再泛洪出去),此时便开启本地ARP代理,可以实现三层转发。

image.png

如上图,VM1和VM3处于同一网段(默认掩码为24位),SWA和SWB上的vsi 1接口作为它们的网关,开启本地ARP代理,并在接口上配置distribute-gateway local命令,表示作为分布式网关,此时VM1 ping VM3发出的ARP报文到达SWA后,SWA的vsi1接口回应自身的mac地址给VM1,同时不会将ARP广播报文通过vxlan隧道泛洪给SWB。因此VM1的ping报文到达SWA后,SWA检查目的mac为设备本身,进行三层转发,而在路由表中存在一条BGP32位主机路由,是由SWB发送的EVPN 二类路由传递过来的。

image.png

image.png

而如果vsi接口不配置为分布式网关,则与前面的本地ARP代理情况一致,不仅本机会回应,同时还会将ARP进行泛洪出去,那么此时VM1学习到的mac则是真实VM3的mac地址,此时VM1和VM3的通信在SWA上使用vxlan隧道进行二层转发。