首页> 中国专利> 一种基于Linux策略路由扩展实现网络物理端口绑定的方法

一种基于Linux策略路由扩展实现网络物理端口绑定的方法

摘要

本发明提供一种基于Linux策略路由扩展实现网络物理端口绑定的方法,包括:步骤S11、在开启WAN侧的网络设备时,用户空间的配置组件利用算法算出WAN侧的网络设备的全局唯一标签,且将所述全局唯一标签传递给内核空间进行保存;步骤S12、在内核空间对驱动上传至协议栈的数据包进行打所述全局唯一标签处理,且根据打上的所述全局唯一标签来对数据包进行转发。本发明优点:在Linux原有接口的基础上扩展了自定义的pbmark模式,使得通过设置的全局唯一标签不仅能够很好的处理路由的灵活分配转发,而且也能够很好的处理桥接数据的转发。

著录项

  • 公开/公告号CN107749821A

    专利类型发明专利

  • 公开/公告日2018-03-02

    原文格式PDF

  • 申请/专利权人 福建星网智慧软件有限公司;

    申请/专利号CN201710968701.8

  • 发明设计人 黄永;罗海斌;许少滨;陈乃康;

    申请日2017-10-18

  • 分类号

  • 代理机构福州市鼓楼区京华专利事务所(普通合伙);

  • 代理人宋连梅

  • 地址 350000 福建省福州市仓山区金山大道618号桔园洲工业区21楼2层

  • 入库时间 2023-06-19 04:40:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-29

    授权

    授权

  • 2018-03-27

    实质审查的生效 IPC(主分类):H04L12/721 申请日:20171018

    实质审查的生效

  • 2018-03-02

    公开

    公开

说明书

技术领域

本发明涉及网络通信领域,特别涉及一种基于Linux策略路由扩展实现网络物理端口绑定的方法。

背景技术

Linux策略路由是一种比基于目标网络进行路由更加灵活的数据包路由转发机制。它能根据配置对数据包打上标识,使得在查询路由表时,可根据打上的标识优先查找特定的路由表,而不是查找默认的路由表转发,并以此来达到对数据包的灵活分类转发。

目前,网络运营商对家庭网络终端至少要求承载两条以上的业务流,特别是对于IPTV/OTT这样的大视频数据流,家庭网络终端则需要对该数据流做特殊处理,网络运营商也规定了特殊的网络数据拓扑,这就涉及了网络物理端口绑定的设计需求。虽然在路由方面是可以通过策略路由的方式来对网络数据进行分类处理的,但是,策略路由对于桥接数据转发却是无能为力的,因为策略路由的fwmark是公用的,会经常出现fwmarkbit(位)被重复使用而导致协议栈数据转发异常的情况。

发明内容

本发明要解决的技术问题,在于提供一种基于Linux策略路由扩展实现网络物理端口绑定的方法,通过该方法来解决现有策略路由无法处理二层桥接数据的问题以及解决项目中经常出现fwmarkbit(位)被重复使用而导致协议栈数据转发异常的情况。

本发明是这样实现的:一种基于Linux策略路由扩展实现网络物理端口绑定的方法,所述方法需提供用户空间和内核空间;所述方法包括如下步骤:

步骤S11、在开启WAN侧的网络设备时,用户空间的配置组件利用算法算出WAN侧的网络设备的全局唯一标签,且将所述全局唯一标签传递给内核空间进行保存;

步骤S12、在内核空间对驱动上传至协议栈的数据包进行打所述全局唯一标签处理,且根据打上的所述全局唯一标签来对数据包进行转发。

进一步地,在所述步骤S11之前,还包括:

步骤S10、对Linux自带的ioctl接口、Socket接口以及Busybox的ip rule指令进行扩展,以实现对算出的网络设备的全局唯一标签进行获取或者设置操作。

进一步地,在所述步骤S10中,所述“对Linux自带的ioctl接口、Socket接口以及Busybox的ip rule指令进行扩展”具体为:

在原有ioctl框架的基础上添加一全局唯一标签的获取选项以及一全局唯一标签的设置选项,且如果应用层下发给内核空间的是获取选项的指令,内核空间就执行全局唯一标签的获取操作;如果应用层下发给内核空间的是设置选项的指令,内核空间就执行全局唯一标签的设置操作;

在原有socket框架的基础上添加一全局唯一标签的设置选项,在应用层下发给内核空间的是设置选项的指令时,内核空间就执行全局唯一标签的设置操作;

在原有ip rule中添加一由全局唯一标签来创建策略路由表的table ID。

进一步地,在所述步骤S11中,所述“将所述全局唯一标签传递给内核空间进行保存”具体包括:将所述全局唯一标签通过所述ioctl接口传递给内核空间对应的内核网络设备进行保存,将所述全局唯一标签通过所述Socket接口传递给内核空间的sock进行保存,以及通过所述ip rule指令将所述全局唯一标签设置到内核空间的策略路由表中。

进一步地,在所述步骤S11中,所述“用户空间的配置组件利用算法算出WAN侧的网络设备的全局唯一标签”具体为:

用户空间的配置组件先获取WAN侧的网络设备上端口的PVC id,然后将获取的PVCid通过位运算左移一位得到一个数值,再将得到的数值与0xFFFFFFFF进行异或位运算得到全局唯一标签。

进一步地,所述步骤S12具体为:

在内核空间对驱动上传至协议栈的数据包进行打所述全局唯一标签处理,具体包括:如果需要桥接转发数据包,则在二层桥接数据包中嵌入对全局唯一标签的过滤规则,以使打有全局唯一标签的数据包仅能转发给保存有对应全局唯一标签的内核网络设备;如果需要通过路由方式来转发数据包,则在三层进行策略路由表查找时嵌入对全局唯一标签的过滤规则,以通过所述全局唯一标签来引导策略路由表的查询转发;如果需要作为网络数据代理来转发数据包,则在四层应用层的数据包中嵌入对全局唯一标签的过滤规则,以通过所述全局唯一标签来对数据包进行代理转发控制。

本发明具有如下优点:通过借鉴策略路由fwmark的方式,在Linux原有接口的基础上扩展了自定义的pbmark模式,使得通过设置的全局唯一标签不仅能够很好的处理路由的灵活分配转发,而且也能够很好的处理桥接数据的转发,有效的解决了现有策略路由无法处理二层桥接数据的问题,也有效的克服了项目中经常出现fwmarkbit(位)被重复使用而导致协议栈数据转发异常的情况。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明基于Linux策略路由扩展实现网络物理端口绑定的方法的执行流程图。

具体实施方式

请参照图1所示,本发明一种基于Linux策略路由扩展实现网络物理端口绑定的方法的较佳实施例,所述方法需提供用户空间和内核空间;所述方法包括如下步骤:

步骤S11、在开启WAN侧的网络设备时,用户空间的配置组件利用算法算出WAN侧的网络设备的全局唯一标签(pbmark),且将所述全局唯一标签传递给内核空间进行保存。由于WAN侧的网络设备的状态会发生变化,当在关闭网络设备时,之前设置的全局唯一标签(pbmark)就会被清除,因此,当再次开启网络设备时,就需要对全局唯一标签(pbmark)进行重新计算和设置。

步骤S12、在内核空间对驱动上传至协议栈的数据包进行打所述全局唯一标签处理,且根据打上的所述全局唯一标签来对数据包进行转发。

其中,在所述步骤S11之前,还包括:

步骤S10、对Linux自带的ioctl接口、Socket接口以及Busybox的ip rule指令进行扩展,以实现对算出的网络设备的全局唯一标签进行获取或者设置操作。

在所述步骤S10中,所述“对Linux自带的ioctl接口、Socket接口以及Busy box的ip rule指令进行扩展”具体为:

在原有ioctl框架的基础上添加一全局唯一标签的获取选项以及一全局唯一标签的设置选项,且如果应用层下发给内核空间的是获取选项的指令,内核空间就执行全局唯一标签的获取操作;如果应用层下发给内核空间的是设置选项的指令,内核空间就执行全局唯一标签的设置操作。在具体实施时,可以在原有ioctl框架的基础上SIOCGETMARK code选项和SIOCSETMARK code选项,这样,内核空间在接收到应用层下发的指令后,如果指令的code为SIOCGETMARK,那么就处理全局唯一标签的获取操作;如果指令的code为SIOCSETMARK,那么就处理全局唯一标签的设置操作。

在原有socket框架的基础上添加一全局唯一标签的设置选项,在应用层下发给内核空间的是设置选项的指令时,内核空间就执行全局唯一标签的设置操作。在具体实施时,可以在原有setsocketopt的基础上添加IP_MARKINFO type选项,这样,内核空间在接收到应用层下发的指令后,如果指令的type为MARKINFO,那么就处理全局唯一标签的设置操作。

在原有ip rule中添加一由全局唯一标签来创建策略路由表的table ID,原生linux是支持由fwmark来创建策略路由表table ID的。

在所述步骤S11中,所述“将所述全局唯一标签传递给内核空间进行保存”具体包括:将所述全局唯一标签通过所述ioctl接口传递给内核空间对应的内核网络设备进行保存,将所述全局唯一标签通过所述Socket接口传递给内核空间的sock进行保存,以及通过所述ip rule指令将所述全局唯一标签设置到内核空间的策略路由表中。

在所述步骤S11中,所述“用户空间的配置组件利用算法算出WAN侧的网络设备的全局唯一标签”具体为:

用户空间的配置组件先获取WAN侧的网络设备上端口的PVC id(WAN侧的网络设备的每个WAN接口都有一个全局唯一不为零的PVC id),然后将获取的PVC id通过位运算左移一位得到一个数值,再将得到的数值与0xFFFFFFFF进行异或位运算得到全局唯一标签。

所述步骤S12具体为:

在内核空间对驱动上传至协议栈的数据包进行打所述全局唯一标签处理,具体包括:如果需要桥接转发数据包,则在二层桥接数据包中嵌入对全局唯一标签的过滤规则,以使打有全局唯一标签的数据包仅能转发给保存有对应全局唯一标签的内核网络设备;由于在内核协议栈中,每个数据包都是由skb结构体来表示的,当数据包从驱动上传上来后,skb就会带着数据包进入入口的网络设备,而入口的网络设备是带有全局唯一标签的(它是由用户空间通过扩展的ioctl接口配置下来的),此时,入口的网络设备会将自身的全局唯一标签赋值打在skb上;skb带着全局唯一标签会在内核协议栈的出口处与出口的网络设备所带有的全局唯一标签进行匹配,且如果匹配结果一致,则将数据包转发至此出口的网络设备,如果匹配结果不一致,则无法转发数据包。

如果需要通过路由方式来转发数据包,则在三层进行策略路由表查找时嵌入对全局唯一标签的过滤规则,以通过所述全局唯一标签来引导策略路由表的查询转发;由于策略路由表上设置有全局唯一标签,通过将该全局唯一标签打到数据包上,这样,在查询路由表时,就可以根据打上的全局唯一标签来优先查找特定路由表转发,而不是查找默认路由表转发,因此可实现对数据包进行灵活分类转发。

如果需要作为网络数据代理来转发数据包,则在四层应用层的数据包中嵌入对全局唯一标签的过滤规则,以通过所述全局唯一标签来对数据包进行代理转发控制;由于在应用层数据创建socket通信时,就已经通过设置socket opt的方式将全局唯一标签设置到内核的sock中保存,因此,只需将全局唯一标签打到数据包上即可实现对数据包的代理转发控制。

综上所述,本发明优点:通过借鉴策略路由fwmark的方式,在Linux原有接口的基础上扩展了自定义的pbmark模式,使得通过设置的全局唯一标签不仅能够很好的处理路由的灵活分配转发,而且也能够很好的处理桥接数据的转发,有效的解决了现有策略路由无法处理二层桥接数据的问题,也有效的克服了项目中经常出现fwmarkbit(位)被重复使用而导致协议栈数据转发异常的情况。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号