一种多接口网关设备数据发送实现方法

文档序号:7869006阅读:441来源:国知局

专利名称::一种多接口网关设备数据发送实现方法
技术领域
:本发明涉及一种数据发送实现方法,尤其涉及一种多接口网关设备数据发送实现方法。
背景技术
:网络运营商一般会对接入网络按照业务类型进行划分成多个子网,比如在中国电信的光接入网络里,根据VLAN将网络划分成上网、TR069、VOIP和IPTV四个子网。上网子网承载用户访问INTERNET的数据,如网页、聊天、在线视频等;TR069子网承载ACS服务器管理网关设备的数据;V0IP子网承载语音业务的数据;IPTV子网承载电信IPTV业务的数据。对于网关设备的技术实现而言,各种类型的上行数据(网关设备发向运营商接入网络的数据)只能走运营商指定的通道,不能互窜。而对于网关设备上的一些应用进程,比如sntp客户端、DNS客户端、TR069客户端、VOIP客户端等等,必须选择正确的子网向运营商网络发送数据,才能符合运营商的要求。在基于Linux实现的网关设备上,一般的实现方法是每个子网对应于一个网络接口,发送·上行数据时选择子网就是要选择对应的网络接口。目前设备厂商一般使用静态路由的方法来实现应用进程和网络接口的绑定,但该方法有下面几个缺陷1.不够灵活,在同一个路由表中操作,增加了系统路由表规划的复杂度;2.在某些网络环境里,不能解决问题,比如当TR069服务器和VOIP服务器的地址相同时,必然有一个进程无法正确选路;3.对于访问的资源是URL时,需要在DNS解析到地址后动态更新路由表,实现过程复杂,增加系统开销。
发明内容针对现有技术中所存在的技术问题,本发明提供了一种多接口网关设备数据发送实现方法,以解决上述的系统开销大,无法正确选路等问题。具体技术方案如下所示一种多接口网关设备数据发送实现方法,其中,具体包括如下步骤步骤1.为所述网关设备连接每个子网的网络接口分配一策略路由表;步骤2.为所述网关设备上要求不同子网的应用进程分配不同的转发标记;步骤3.将所述转发标记设置为所述网关设备内核策略路由机制中,数据包数据结构的转发标记;步骤4.将所述内核策略路由机制中的转发标记和所述策略路由表关联映射;步骤5.当所述网关设备获取所述子网的地址信息时,将所述网络接口对应网段的路由作为默认路由添加到相应的所述策略路由表中;步骤6.所述网关设备根据策略路由机制,自动将待转发数据包的数据结构中的转发标记字段匹配所述策略路由表,并根据所述策略路由表中的默认路由转发数据包。上述的多接口网关设备数据发送实现方法,其中,所述网关设备基于Linux操作系统。上述的多接口网关设备数据发送实现方法,其中,所述步骤3中,包括步骤3.1.当所述网关设备上需要转发的数据包为从网络接口接收的数据包时,根据所述转发标记设置Linux内核策略路由机制中一数据包数据结构sk_buff的转发标记。上述的多接口网关设备数据发送实现方法,其中,所述步骤3中,还包括步骤3.2.当所述网关设备上需要转发的数据包为本地应用进程产生的数据包时,在Linux操作系统内核中根据所述转发标记,扩展设置一Skjnark字段;步骤3.3根据所述Skjnark字段设置Linux内核策略路由机制中所述数据包数据结构sk_buff的转发标记。本发明的积极进步效果在于使网关设备上的进程能够方便地实现正确选路,减低了系统开销。为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。如图1所示为本发明一种多接口网关设备数据发送实现方法实施例的流程示意图。具体实施例方式下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。如图1所示为本发明一种多接口网关设备数据发送实现方法实施例的流程示意图,其中,具体包括如下步骤步骤1.为网关设备连接每个子网的网络接口分配策略路由表;于上述技术方案的基础上,分别为INTERNET子网、TR069子网、VOIP子网各分配一个路由表tbl_internet、tbl_tr069和tbl_voip。步骤2.为网关设备上要求不同子网的应用进程分配不同的转发标记;于上述技术方案的基础上,设置转发标记(forwardmark)0x10000对应INTERNET子网、0x20000对应TR069子网、0x30000对应VOIP子网。步骤3.将转发标记设置为网关设备内核策略路由机制中,数据包数据结构的转发标记;步骤4.将内核策略路由机制中的转发标记和策略路由表关联映射;于上述技术方案的基础上,利用iprule命令建立forwardmark和具体策略路由表间的关系,具体实现如下ipruleaddfwmarkOxlOOOO/OxffffOOOOtabletbl_internetipruleaddfwmark0x20000/0xffff0000tabletbl_tr069ipruleaddfwmark0x30000/0xffff0000tabletbl_voip;步骤5.当网关设备获取子网的地址信息时,将网络接口对应网段的路由作为默认路由添加到相应的策略路由表中;于上述技术方案的基础上,在初始化设置完成后,tbl_internet>tbl_tr069和tbl_voip路由表是空的,当对应的网络接口获取到地址信息后,可以通过使用iproute命令将到该网络接口对应网段的路由做为默认路由加到对应的策略路由表中;步骤6.网关设备根据策略路由机制,自动将待转发数据包的数据结构中的转发标记字段匹配策略路由表,并根据策略路由表中的默认路由转发数据包。于上述技术方案的基础上,对于Linux系统而言,完成上面的工作后,只要数据包的sk_buff的forwardmark字段和OxffffOOOO做与运算,其结果如果等于0x10000该数据包查路由表时,就会自动查找tbl_internet中的记录;如果等于0x20000就会查找tbl_tr069中的记录;如果等于0x30000就会查找tbl_voip中的记录。因为这三个路由表中把相应接口的路由配置成了默认路由,所以数据包就会发送到运营商要求的子网络中。本发明的一种多接口网关设备数据发送实现方法具体实施例中,网关设备基于Linux操作系统。本发明的一种多接口网关设备数据发送实现方法具体实施例中,步骤3中,包括步骤3.1.当网关设备上需要转发的数据包为从网络接口接收的数据包时,根据转发标记设置Linux内核策略路由机制中数据包数据结构sk_buff的转发标记。于上述技术方案的基础上,Linux系统中对于从一个网络接口接收由另一个网络接口发送的数据包,可以通过ebtables或iptables工具设置相应的规则,让内核模块给该数据包设置上forwardmark,保证查路由时可以查指定表中的记录。本发明的一种多接口网关设备数据发送实现方法具体实施例中,步骤3中,还包括步骤3.2.当网关设备上需要转发的数据包为本地应用进程产生的数据包时,在Linux操作系统内核中根据转发标记,扩展设置Skjnark字段;对于由本地应用进程发送数据包时,上述通过ebtables或iptables工具设置相应的规则的方式不能完成此工作,所以需要对内核机制做扩充。于上述技术方案的基础上,Linux系统中应用进程发送数据包是通过socket接口实现的,在调用socketO函数成功创建socket后,会返回该socket的句柄,下文用fd表示。该机制的扩充是,在获得socket句柄后,通过setsockopt系统调用根据绑定要求设置sk_mark字段的值(sk_mark是内核描述socket的数据结构中的一个成员)。实现如下unsignedintnfmark_internet=0xl0000;setsockopt(fd,S0L_S0CKET,S0_MARK,(void*)&nfmark_internet,sizeof(unsignedint));unsignedintnfmark_tr069=0x20000;setsockopt(fd,S0L_S0CKET,S0_MARK,(void*)&nfmark_tr069,sizeof(unsignedint));unsignedintnfmark_voip=0x30000;setsockopt(fd,S0L_S0CKET,S0_MARK,(void*)&nfmark_voip,sizeof(unsignedint));上述实现方式表明对于INTERNET子网用第一段代码;TR069子网用第二段代码;VOIP子网用第三段代码。步骤3.3根据Skjnark字段设置Linux内核策略路由机制中数据包数据结构sk_buff的转发标记。在内核里socket将数据包向网络层发送时,需要根据Skjnark设置对应sk_buff的forwardmark字段,需要分别在文件net/ipv4/udp.c的函数udp_sendmsg()、文件net/ipv4/udp.c的函数raw_send_hdrinc()、函数raw_sendmsg()、文件net/ipv4/ip_output.c的函数ip_build_and_send_pkt()、函数ip_queue_xmit()、函数ip_push_pending_frames()、文件net/ipv4/inet_connection_sock.c的函数inet_csk_route_req()、文件net/ipv4/icmp.c的函数icmp_send()、文件include/net/route.h的函数ip_route_connect()、文件net/ipv6/datagram,c的函数ip6_datagram_connect()、文件net/ipv6/ip6_output.c的函数ip6_xmit()、函数ip6_push_pending_frames()、文件net/ipv6/raw.c的函数rawv6_send_hdrinc()、函数rawv6_sendmsg()、文件net/ipv6/udp.c的函数udpv6_sendmsg()等相应位置做出修改,例如在文件net/ipv4/udp.c中对函数udp_sendmsg()的改动权利要求1.一种多接口网关设备数据发送实现方法,其特征在于,具体包括如下步骤步骤1.为所述网关设备连接每个子网的网络接口分配一策略路由表;步骤2.为所述网关设备上要求不同子网的应用进程分配不同的转发标记;步骤3.将所述转发标记设置为所述网关设备内核策略路由机制中,数据包数据结构的转发标记;步骤4.将所述内核策略路由机制中的转发标记和所述策略路由表关联映射;步骤5.当所述网关设备获取所述子网的地址信息时,将所述网络接口对应网段的路由作为默认路由添加到相应的所述策略路由表中;步骤6.所述网关设备根据策略路由机制,自动将待转发数据包的数据结构中的转发标记字段匹配所述策略路由表,并根据所述策略路由表中的默认路由转发数据包。2.如权利要求1所述的多接口网关设备数据发送实现方法,其特征在于,所述网关设备基于Linux操作系统。3.如权利要求2所述的多接口网关设备数据发送实现方法,其特征在于,所述步骤3中,包括步骤3.1.当所述网关设备上需要转发的数据包为从网络接口接收的数据包时,根据所述转发标记设置Linux内核策略路由机制中一数据包数据结构sk_buff的转发标记。4.如权利要求3所述的多接口网关设备数据发送实现方法,其特征在于,所述步骤3中,还包括步骤3.2.当所述网关设备上需要转发的数据包为本地应用进程产生的数据包时,在Linux操作系统内核中根据所述转发标记,扩展设置一Skjnark字段;步骤3.3根据所述Skjnark字段设置Linux内核策略路由机制中所述数据包数据结构sk_buff的转发标记。全文摘要本发明公开了一种多接口网关设备数据发送实现方法,属于一种数据发送实现方法,其中,包括如下步骤S1.为网关设备连接每个子网的网络接口分配策略路由表;S2.为要求不同子网的应用进程分配不同的转发标记;S3.将转发标记设置为网关设备内核策略路由机制中,数据报数据结构的转发标记;S4.将转发标记和策略路由表关联映射;S5.当网关设备获取子网的地址信息时,将网络接口对应网段的路由作为默认路由添加到相应的策略路由表中;S6.网关设备根据策略路由规则,自动将待转发数据包的数据结构中的转发标记字段匹配策略路由表,并根据策略路由表中的默认路由转发数据包。本发明的有益效果是使网关设备上的进程能够方便地实现选路问题,减低了系统开销。文档编号H04L12/741GK103036788SQ20121054636公开日2013年4月10日申请日期2012年12月14日优先权日2012年12月14日发明者管建智申请人:上海斐讯数据通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1