代码改变世界

一个VLAN配置的实际例子

2013-08-01 08:31  zmkeil  阅读(1686)  评论(0编辑  收藏  举报

背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样。

    首先看一种硬件效率较高的方法:

  1. Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据包,是不带VLAN-tag的,SW硬件接收到后,会根据内部的vlan配置,若目的是同一个vlan的其他PC,则直接转发;若要发往CPU,则硬件自动为它们打上tag,然后交由Kernel的vlan设备。同样,由Kernel下发的数据包是带tag的(因为是由vlan设备发出的),最后硬件根据tag找到对应的port后,剥去tag,发往PC。
  2. Port5作为trunk口,同时在硬件上作为传输模式,(作为WAN口)即外部PC发给它的包是要带tag的(会有多种tag),然后硬件查看是否是发往同一个vlan的其它port的,是则直接转发,否则,直接传输给CPU的Kernel的vlan设备。Kernel下发的带tag的数据包,也直接发往PC。这里的PC一般是外部的ISP,它们对哪些应用(如PPP、TR069等)用什么VID有自己的要求,当然也能识别各种vlan-tag。

 

这种方法的一个缺点是,WAN口(port5)的vid不能和LAN口重合,即LAN口用了哪些vid,WAN口就不能再用了,这对ISP来说是不利的。

 

下面看另一种方法:

    LAN口的方式不变,WAN口(port5)不再作为trunk口,而是和LAN口一样,作为access口,且硬件上采用用户模式。

    不同的是,它在Kernel采用两层vlan的方式。这就允许ISP发给SW的数据包可以自由带仍和vid的tag,SW硬件上会自动给数据包加上vid5(该port在SW内的vlan标示)的tag,然后交给Kernel,Kernel中的eth2.5首先剥掉vid5-tag,再根据二层vid交给相应的二层vlan设备来处理。

    这样做的优点就是ISP的vid不再有限制。

    但缺点也很明显,首先效率降低,因为大部分工作要通过Kernel软件来完成;其次,WAN作为access口,不可能再和LAN口直接交换。