玩转Openvwitch第五站:Port和VLAN

2020-06-01 00:00:00 专区 也会 收到 包头 也能

Port在数据库中的结构如下:



一般来说一个Port就是一个Interface,当然也有一个Port对应多个Interface的情况,成为Bond


Port的一个重要的方面就是VLAN Configuration,有两种模式:

  • trunk port

    • 这个port不配置tag,配置trunks

    • 如果trunks为空,则所有的VLAN都trunk,也就意味着对于所有的VLAN的包,本身带什么VLAN ID,就是携带者什么VLAN ID,如果没有设置VLAN,就属于VLAN 0,全部允许通过。

    • 如果trunks不为空,则仅仅带着这些VLAN ID的包通过。

  • access port

    • 这个port配置tag,从这个port进来的包会被打上这个tag

    • 如果从其他的trunk port中进来的本身就带有VLAN ID的包,如果VLAN ID等于tag,则会从这个port发出

    • 从其他的access port上来的包,如果tag相同,也会被forward到这个port

    • 从access port发出的包不带VLAN ID

    • 如果一个本身带VLAN ID的包到达access port,即便VLAN ID等于tag,也会被抛弃。


我们做一个实验来测试Port的VLAN



创建拓扑结构


ovs-vsctl add-port ubuntu_br first_br

ovs-vsctl add-port ubuntu_br second_br

ovs-vsctl add-port ubuntu_br third_br

ovs-vsctl set Port vnet0 tag=101

ovs-vsctl set Port vnet1 tag=102

ovs-vsctl set Port vnet2 tag=103

ovs-vsctl set Port first_br tag=103

ovs-vsctl clear Port second_br tag

ovs-vsctl set Port third_br trunks=101,102

需要监听ARP,所以禁止MAC地址学习

ovs-vsctl set bridge ubuntu_br flood-vlans=101,102,103



从192.168.100.102来ping 192.168.100.103,应该first_if和second_if能够收到包


first_if收到包了,从first_br出来的包头是没有VLAN ID的



second_if也收到包了,由于second_br是trunk port,因而出来的包头是有VLAN ID的,103



third_if收不到包


从192.168.100.100在ping 192.168.100.105, 则second_if和third_if可以收到包(当然ping不通,因为third_if不属于某个VLAN)


first_if收不到包


second_if能够收到包,而且包头里面是VLAN ID = 101



third_if也能收到包,而且包头里面是VLAN ID =101



从192.168.100.101来ping 192.168.100.104, 则second_if和third_if可以收到包


first_if收不到包


second_br能够收到包,而且包头里面是VLAN ID = 102



third_if也能收到包,而且包头里面是VLAN ID =102



清理环境


ovs-vsctl clear Bridge ubuntu_br flood_vlans

ovs-vsctl list Port

ovs-vsctl clear Port vnet1 tag

ovs-vsctl clear Port vnet0 tag

ovs-vsctl clear Port first_br tag

ovs-vsctl clear Port third_br trunks


相关文章