有点问题。 任何加入bridge的port,如果是vconfig生成的虚拟port,那么它只能收取带tag的报文,发送的报文也必定带着tag,这是8021q这个模块决定的。 对于vlan100,eth0和eth1都只能收取tag=100的报文,不能收取不带tag或者是带其它tag的报文。 从这个意义上来说,它不是access口(如果把access定义为只接受不带tag的报文的话)。 不考虑硬件的vlan加速(由硬件剥离tag),报文在vlan100的处理流程为: 1)eth0接收报文(假设目的mac不是本机); 2)eth0口不是bridge的port,所以进入正常的本地layer 2分发; 3)如果报文不带tag,则是普通IP报文,进入本地IP协议栈处理,已经跟vlan无关了; 4)带tag的报文是8021q报文,所以进入8021q的处理函数; 5)剥离tag,检查入口(eth0)上有没有对应的虚接口; 6)如果tag不是100或200,则不存在虚接口,报文被丢弃; 7)找到eth0.100或者eth0.200,以此为新的接收口,重新执行接收逻辑(模拟虚接口的rx); 8)在虚口eth0.100上收到了剥离tag后的IP报文; 9)eth0.100是bridge的port,所以进入vlan100的处理流程,不再进行layer 2的分发。 只要是把虚接口加入到bridge里面,就只能接受带特定tag的报文了。 如果只创建了vlan100而没有创建vlan200,eth0,eth1还是trunk口,只是这个trunk只能允许一个tag而已。 楼主的“在linux上如果某个网卡只属于一个vlan,那么这个网卡就是access口”这句话,我理解成把port本身加入vlan,于是说是正确的; 但楼主想表达的是把port的一个虚口加入vlan(相对于多个虚口而言),不好意思,没真正理解楼主的意图。 |
|
来自: just_person > 《待分类》