vSwitch报文转发分析
一、 vSwitch虚拟交换机简介虚拟交换机(vSwitch)是负责主机上的虚拟机之间以及虚拟机与外部之间流量交换的重要部件。vSwitch主要用于实现本台主机上虚拟机的网络接入,转发效果与传统二层交换机类似。在虚拟化和云计算环境中,虚拟机在虚拟化平台内部流量的转发无法直观进行监控。维护人员对于流量在虚拟机和物理主机的端口之间的走向也经常存在很多疑问与困惑。除了使用VEPA解决方案外,也可以针对性
一、 vSwitch虚拟交换机简介
虚拟交换机(vSwitch)是负责主机上的虚拟机之间以及虚拟机与外部之间流量交换的重要部件。vSwitch主要用于实现本台主机上虚拟机的网络接入,转发效果与传统二层交换机类似。
在虚拟化和云计算环境中,虚拟机在虚拟化平台内部流量的转发无法直观进行监控。维护人员对于流量在虚拟机和物理主机的端口之间的走向也经常存在很多疑问与困惑。除了使用VEPA解决方案外,也可以针对性地在vSwitch上抓包分析。
二、 vSwitch转发原理
1. vSwitch上的端口角色
图1
如图1中所示,vSwitch中主要包含三种接口:
1)VNET口:用于连接虚拟机的下行接口,其数量与虚拟机的虚拟网卡数有关。一个虚拟机中的一个虚拟网卡对应vSwitch上的一个VNET口。值得注意的是VNET的端口号在同一台主机上是连续的,并不会因为vSwitch的不同而重复标号。
2)eth X 口:是编号为“X”的服务器主机上的物理端口,新建虚拟交换机时需要选择的上行接口,负责将vSwitch的上行流量从接口转发出去。
3)vswitchX 口:位于 vswitchX上的内核接口,与相应vSwitch同名,MAC地址与所绑定的物理接口相同。当新建vSwitch时,会自动生成同名的接口,直接连接到Linux内核中。
如图2,通过命令ifconfig查看所有的接口信息,比如物理端口ethX、虚拟交换机的内核端口vswitchX、虚拟交换机连接虚拟机的VNET口的MAC地址,IP地址等详细信息。
图2
2. vSwitch的转发原理
由于vSwitch虚拟交换机是基于MAC地址进行二层转发的,我们也可以通过命令:ovs-appctl fdb/show vSwitchname对相应名称为vSwitchname的vSwitch的MAC地址表进行查看,同时也能通过输出的port字段了解相应端口的角色:
图3
其输出结果如图3所示:port 1指的是连接VM的上联口,从物理端口学习MAC。port 2及标号2以上的端口指vSwitch连接到VM的下联端口,从VNET端口学习MAC。比如port2对应的MAC地址为从VNET0口上学习到的MAC地址。LOCAL指vSwitch自身所相连的物理端口的MAC。而MAC地址与传统网络设备一致,通过vSwitch自行学习得到,MAC表老化时间为60s,到了时间MAC地址项就从表中删除了。
对于流量的转发,vSwitch还是按照二层交换机的转发原理进行转发,不过有以下几点注意事项:
1)从服务器外部进入的数据包,物理网口收到报文后,交给相连的vSwitch。vSwitch查看自身的mac表,通过对应的接口发送报文。如果MAC表中因为老化导致没有目的MAC地址记录,则进行广播。其流量走向如图4所示:蓝色流量为单播转发,红色为广播转发情况。
图4
2)对于VM发出的报文,先发送到vSwitch上,再根据转发机制查表转发或广播转发发送到相应的接口。流量走向如图5:蓝色代表查表直接转发,红色代表广播。
图5
3)对于内核发出的报文,先查看主机路由表,决定发送到哪个vSwitch,再根据转发机制由vSwitch将流量发送到相应的接口。对于内核接收到的报文,先查看路由表,如果收包和回包来回路径对称,则根据路由回包;如果收包和回包来回路径不对称,则直接忽略不回包。如图6中的例子,VMB连接在vswitch0上,配置为vSwitch0同一网段的地址。VMB上ping vswitch1的地址,流量经过vSwitch0的转发通过eth0到外部转发至eth1上,进入vSwitch1后转发给vSwitch1内核口,内核口回包时发现应该从vSwitch0口发送,来回路径不一致,于是不予回包。
图6
更多推荐
所有评论(0)