技术领域
[0001] 本
发明涉及网络技术领域,具体的说,是一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法。
背景技术
[0002] Linux
操作系统已广泛应用于各种
嵌入式系统,同其他的操作系统相比具有有点:1)Linxux是开源的;2)Linux
内核小,效率高,内核的更新速度很快,Linux是可以定制的;3)Linux是免费的操作系统。另外Linux还有着嵌入式才做系统突出的特点,适应于多种CPU和多种
硬件平台,是一个跨平台的系统,Linux对网络中最常用的TCP/IP协议有着完备的支持,提供了多种速率的以太网络以及多种总线方式,所以Linux很适用于网络设备,特别是网络交换机、路由器和网桥。目前路由器应用和网桥等设备中都存在着与不同的物理设备端口之间的桥接需求,用于实现与物理设备之间的数据传输。Linux网络协议栈实现了基本的网桥功能,支持网桥的MAC地址学习,老化和数据包转发功能,可以实时进行网桥的创建,网桥内的端口可以动态添加或删除,支持STP协议等。但是Linux网络协议栈的软桥不支持vlan功能,对于网桥等网络设备莱索,一般都是支持vlan功能的,因此Linux网络协议栈存在不能直接区别vlan帧和非vlan帧,需要对端口配置后才能支持vlan。为了实现Linux软桥支持vlan,通常采用
修改Linux内核,在Linux内核中创建网桥和网络端口的方法,这种方法,改动较大,工作量大,且容易修改出错引起整个Linux系统的崩溃。
发明内容
[0003] 本发明的目的在于提供一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法,用于解决
现有技术中在Linux内核创建网桥和网络端口工作量大且容易出错导致系统崩溃的问题。
[0004] 为了达到上述目的,本发明通过下述技术方案实现:
[0005] 一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法,包括步骤:
[0006] 步骤S100:用户态下配置虚拟逻辑接口veth;
[0007] 步骤S200:配置虚拟逻辑接口veth,自动识别vlan帧和非vlan帧并分别转发。
[0008] 工作原理:
[0009] 在Linux系统的用户态下创建物理接口eth0的虚拟化实例,即在用户态下创建网桥br0和网络端口,并将网络端口添加到网桥br0中,完成物理接口的虚拟化,再对虚拟逻辑接口veth进行配置,使能够自动识别接收的数据包是vlan帧还是非vlan帧,并将vlan帧和非vlan帧分别从不同的端口转发。创建物理接口veth的虚拟化实例可在用户态配置,相对传统编写内核模
块方法,不需要写内核模块,操作简单,只需要创建多对虚拟逻辑接口veth即可,而且相对编写内核,更稳定。
[0010] 进一步地,所述步骤S100包括:
[0011] 步骤S110:创建网桥br0,添加物理接口eth0到网桥br0;
[0012] 步骤S120:创建虚拟逻辑接口veth;
[0013] 步骤S130:将所述虚拟逻辑接口veth添加到网桥br0。
[0014] 工作原理:
[0015] 步骤S100中在用户态下创建虚拟逻辑接口veth的步骤具体包括:在用户态下创建网桥br0,按照需要添加多个物理接口到网桥br0,这里的物理接口为eth0,eth1,……,ethN,以物理接口eth0为例,为物理接口eth0创建多对虚拟逻辑接口veth,如veth0-veth1,veth2-veth3,……,veth2N-veth(2N+1),将这些虚拟逻辑接口veth添加到网桥br0,虚拟逻辑接口veth中的veth0,veth2,……,veth2N与网桥br0连接,虚拟逻辑接口veth的另一端veth1,veth3,……,veth(2N+1)输出到下一级。值得说明的是,veth2N-veth(2N+1)中,veth2N与veth(2N+1)互为数据输入端和数据输出端。
[0016] 进一步地,所述步骤S120中创建的虚拟逻辑接口veth为多对。
[0017] 工作原理:
[0018] 每一对虚拟逻辑接口veth均可以添加到交换机实例ovs0中,也可以留作备用虚拟逻辑接口veth,或者由用户设定其用途。
[0019] 进一步地,所述步骤S200包括:
[0020] 步骤S210:创建开放虚拟交换标准交换机open vswitch的交换机实例ovs0;
[0021] 步骤S220:将步骤S120中创建的虚拟逻辑接口veth添加到交换机实例ovs0;
[0022] 步骤S230:配置虚拟逻辑接口veth,设置trunk属性和native属性,用于自动识别vlan帧和非vlan帧;
[0023] 步骤S240:创建虚拟
访问端口,所述虚拟访问端口用于剥离交换机实例ovs0内部转发的vlan帧的vlan标签以及将接收的数据转发至虚拟逻辑接口veth。
[0024] 工作原理:
[0025] 配置虚拟逻辑接口veth,使能够实现自动识别vlan帧和非vlan帧的步骤包括:在网桥br0的下一级创建交换机实例ovs0,将步骤S100中创建的虚拟逻辑接口veth中的添加到交换机实例osv0的端口veth1,veth3,……,veth(2N+1)添加到交换机实例ovs0中,配置添加到交换机实例osv0的端口veth1,veth3,……,veth(2N+1),使能够自动识别接收的数据包是vlan帧还是非vlan帧。在交换机实例ovs0上创建虚拟访问端口,包括用于分别转发vlan帧和非vlan帧的access访问端口veth_access,虚拟逻辑接口veth中的添加到交换机实例osv0的端口识别到含有vlan的数据包即vlan帧,并识别数据包进入交换机实例ovs0的端口,然后从对应的access访问端口veth_access转发,将不含vlan的数据包即非vlan帧添加vlan ID后通过对应的access访问端口veth_access转发。access访问端口与它对应的数据端口组成一条数据通道,与交换机实例ovs0进行数据交换。
[0026] 进一步地,所述步骤S220中的虚拟逻辑接口veth包括与网桥br0连接的第一端口和与交换机实例ovs0连接的第二端口。
[0027] 工作原理:
[0028] 虚拟逻辑接口veth的两个端口分别连接网桥br0与交换机实例ovs0,而网桥br0连接网络设备的物理接口,因此,从网路设备的物理接口传送的数据包经过网桥br0,网桥br0相当于工作在数据链路层的“路由器”,根据数据包的MAC地址来转发数据包,网桥br0根据帧的终点地址处于哪一网段来进行转发和过滤,虚拟逻辑接口veth的veth0,veth2,……,veth2N为第一端,虚拟逻辑接口veth的veth1,veth3,……,veth(2N+1)为第二端。经过网桥br0转发的数据包通过虚拟逻辑接口veth的第一端口、第二端口进入
软件交换机ovs0,进入软件交换机ovs0的数据包中是否为vlan帧,在第二端口中被识别,按照软件交换机ovs0的交换原则,根据识别出来的数据包属性,选择发送至对应的虚拟访问端口。
[0029] 进一步地,所述步骤S230具体包括:设置所述虚拟逻辑接口veth的trunk属性承载的vlan ID,所述vlan ID为转发vlan帧的端口编号,设置native属性的native ID,用于非vlan帧的识别;
[0030] 工作原理:
[0031] 将添加到交换机实例ovs0中的虚拟逻辑接口veth中的第二端口设置为trunk属性,即为汇聚,设置trunk属性以及vlan ID,即能够承载的access访问端口veth_access的个数,如设置为可以承载十个,那么可以这十个access访问端口veth_access的名称分别为veth_access_1,veth_access_2,……,veth_access_10。
[0032] 进一步地,所述步骤S240具体包括:设置交换机实例ovs0上的access访问端口veth_access的属性为access属性,设置access访问端口veth_access名称为veth_access_ID并设置ID的值,设置与所述access访问端口veth_access对应的数据端口名称为veth_access_ID_peer。
[0033] 步骤230中创建的access访问端口veth_access的属性为access属性,那么这十个access访问端口veth_access对应的数据端口名称为veth_access_1_peer,veth_access_2_peer,……,veth_access_10_peer。设置虚拟访问端口的PV ID即端口ID,将access访问端口中名称为veth_access_1的设置为转发非vlan帧的端口,由于设置了trunk属性,所有的帧都是打上tag标签的,这里的tag标签包括vlan标记和转发的端口ID。如果在进入trunk链路之前就已经是vlan帧,比如已经有了vlan2标记,并且trunk链路中允许vlan2标记的数据帧通过,则vlan2标记的数据帧通过名称为veth_access_2的access访问端口转发,如果不允许,则丢弃;如果数据帧在进入trunk链路时是没有标记的,那么trunk就会给它打上native vlan的标记后在交换机实例ovs0内传输,然后通过名称为veth_access_1的access访问端口转发,解除native vlan标签后通过与access访问端口veth_access_1对应的数据端口输入到网络设备。native vlan标记是用于trunk链路的,在access链路没有native vlan的概念。
[0034] 本发明与现有技术相比,具有以下优点及有益效果:
[0035] (1)本发明创建多个物理接口的虚拟化实例可在用户态配置,相对传统编写内核模块方法,不需要写内核模块,操作简单,只需要创建多对虚拟逻辑接口veth即可,而且相对编写内核,更稳定。
[0036] (2)创建虚拟物理接口实例后,配置多个IP地址到同一个物理接口的情况可改变为:配置这些IP地址分别到不同的虚拟物理接口实例上。巧妙的解决了IP重定向(IP redirect)问题;虚拟物理接口实例可工作在二层或者三层。如虚拟逻辑接口实例作为开放虚拟交换标准交换机open vswitch的成员接口,可工作在网络二层转发,根据端口编号和MAC地址做转发;可以明显看到,物理接口的虚拟化实例提供了一种物理接口“分身术”的方法,扩展了物理接口本身的局限性,提供了用户对物理接口的定制化需求的一种途径。
附图说明
具体实施方式
[0038] 下面结合
实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0039] 实施例1:
[0040] 结合附图1所示,一种用户态配置物理接口自动识别vlan帧和非vlan帧的方法,包括步骤:
[0041] 步骤S100:用户态下配置虚拟逻辑接口veth;
[0042] 步骤S200:配置虚拟逻辑接口veth,自动识别vlan帧和非vlan帧并分别转发。
[0043] 工作原理:
[0044] 在Linux系统的用户态下创建物理接口eth0的虚拟化实例,即在用户态下创建网桥br0和网络端口,并将网络端口添加到网桥br0中,完成物理接口的虚拟化,再对虚拟逻辑接口veth进行配置,使能够自动识别接收的数据包是vlan帧还是非vlan帧,并将vlan帧和非vlan帧分别从不同的端口转发。创建物理接口veth的虚拟化实例可在用户态配置,相对传统编写内核模块方法,不需要写内核模块,操作简单,只需要创建多对虚拟逻辑接口veth即可,而且相对编写内核,更稳定。
[0045] 实施例2:
[0046] 在实施例1的
基础上,结合附图1所示,所述步骤S100包括:
[0047] 步骤S110:创建网桥br0,添加物理接口eth0到网桥br0;
[0048] 步骤S120:创建虚拟逻辑接口veth;
[0049] 步骤S130:将所述虚拟逻辑接口veth添加到网桥br0。
[0050] 工作原理:
[0051] 步骤S100中在用户态下创建虚拟逻辑接口veth的步骤具体包括:在用户态下创建网桥br0,按照需要添加多个物理接口到网桥br0,这里的物理接口为eth0,eth1,……,ethN,以物理接口eth0为例,为物理接口eth0创建多对虚拟逻辑接口veth,如veth0-veth1,veth2-veth3,……,veth2N-veth(2N+1),将这些虚拟逻辑接口veth添加到网桥br0,虚拟逻辑接口veth中的veth0,veth2,……,veth2N与网桥br0连接,虚拟逻辑接口veth的另一端veth1,veth3,……,veth(2N+1)输出到下一级。值得说明的是,veth2N-veth(2N+1)中,veth2N与veth(2N+1)互为数据输入端和数据输出端。
[0052] 进一步地,所述步骤S120中创建的虚拟逻辑接口veth为多对。
[0053] 工作原理:
[0054] 每一对虚拟逻辑接口veth均可以添加到交换机实例ovs0中,也可以留作备用虚拟逻辑接口,或者由用户设定其用途。
[0055] 实施例3:
[0056] 在实施例2的基础上,结合附图1所示,所述步骤S200包括:
[0057] 步骤S210:创建开放虚拟交换标准交换机open vswitch的交换机实例ovs0;
[0058] 步骤S220:将步骤S120中创建的虚拟逻辑接口veth添加到交换机实例ovs0;
[0059] 步骤S230:配置虚拟逻辑接口veth,设置trunk属性和native属性,用于自动识别vlan帧和非vlan帧;
[0060] 步骤S240:创建虚拟访问端口,所述虚拟访问端口用于剥离交换机实例ovs0内部转发的vlan帧的vlan标签以及将接收的数据转发至虚拟逻辑接口veth。
[0061] 工作原理:
[0062] 配置虚拟逻辑接口veth,使能够实现自动识别vlan帧和非vlan帧的步骤包括:在网桥br0的下一级创建交换机实例ovs0,将步骤S100中创建的虚拟逻辑接口veth中的添加到交换机实例osv0的端口veth1,veth3,……,veth(2N+1)添加到交换机实例ovs0中,配置添加到交换机实例osv0的端口veth1,veth3,……,veth(2N+1),使能够自动识别接收的数据包是vlan帧还是非vlan帧。在交换机实例ovs0上创建虚拟访问端口,包括用于分别转发vlan帧和非vlan帧的access访问端口veth_access,虚拟逻辑接口veth中的添加到交换机实例osv0的端口识别到含有vlan的数据包即vlan帧,并识别数据包进入交换机实例ovs0的端口,然后从对应的access访问端口veth_access转发,将不含vlan的数据包即非vlan帧添加vlan ID后通过对应的access访问端口veth_access转发。access访问端口与它对应的数据端口组成一条数据通道,与交换机实例ovs0进行数据交换。
[0063] 进一步地,所述步骤S220中的虚拟逻辑接口veth包括与网桥br0连接的第一端口和与交换机实例ovs0连接的第二端口。
[0064] 工作原理:
[0065] 虚拟逻辑接口veth的两个端口分别连接网桥br0与交换机实例ovs0,而网桥br0连接网络设备的物理接口,因此,从网路设备的物理接口传送的数据包经过网桥br0,网桥br0相当于工作在数据链路层的“路由器”,根据数据包的MAC地址来转发数据包,网桥br0根据帧的终点地址处于哪一网段来进行转发和过滤,虚拟逻辑接口veth的veth0,veth2,……,veth2N为第一端,虚拟逻辑接口veth的veth1,veth3,……,veth(2N+1)为第二端。经过网桥br0转发的数据包通过虚拟逻辑接口veth的第一端口、第二端口进入软件交换机ovs0,进入软件交换机ovs0的数据包中是否为vlan帧,在第二端口中被识别,按照软件交换机ovs0的交换原则,根据识别出来的数据包属性,选择发送至对应的虚拟访问端口。
[0066] 实施例4:
[0067] 在实施例3的基础上,结合附图1所示,所述步骤S230具体包括:设置所述虚拟逻辑接口veth的trunk属性承载的vlan ID,所述vlan ID为转发vlan帧的端口编号,设置native属性的native ID,用于非vlan帧的识别;
[0068] 工作原理:
[0069] 将添加到交换机实例ovs0中的虚拟逻辑接口veth中的第二端口设置为trunk属性,即为汇聚,设置trunk属性以及vlan ID,即能够承载的access访问端口veth_access的个数,如设置为可以承载十个,那么可以这十个access访问端口veth_access的名称分别为veth_access_1,veth_access_2,……,veth_access_10。
[0070] 进一步地,所述步骤240具体包括:设置交换机实例ovs0上的access访问端口veth_access的属性为access属性,设置access访问端口veth_access名称为veth_access_ID并设置ID的值,设置与所述access访问端口veth_access对应的数据端口名称为veth_access_ID_peer。
[0071] 步骤230中设置的access访问端口veth_access的属性为access属性,那么这十个access访问端口veth_access对应的数据端口名称为veth_access_1_peer,veth_access_2_peer,……,veth_access_10_peer。设置虚拟访问端口的PV ID即端口ID,将access访问端口中名称为veth_access_1的设置为转发非vlan帧的端口,由于设置了trunk属性,所有的帧都是打上tag标签的,这里的tag标签包括vlan标记和转发的端口ID。如果在进入trunk链路之前就已经是vlan帧,比如已经有了vlan2标记,并且trunk链路中允许vlan2标记的数据帧通过,则vlan2标记的数据帧通过名称为veth_access_2的access访问端口转发,如果不允许,则丢弃;如果数据帧在进入trunk链路时是没有标记的,那么trunk就会给它打上native vlan的标记后在交换机实例ovs0内传输,然后通过名称为veth_access_1的access访问端口转发,解除native vlan标签后通过与access访问端口veth_access_1对应的数据端口输入到网络设备。native vlan标记是用于trunk链路的,在access链路没有native vlan的概念。
[0072] 以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。