專利名稱::一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,尤其涉及一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法。
背景技術(shù):
:網(wǎng)絡(luò)運(yùn)營(yíng)商一般會(huì)對(duì)接入網(wǎng)絡(luò)按照業(yè)務(wù)類型進(jìn)行劃分成多個(gè)子網(wǎng),比如在中國(guó)電信的光接入網(wǎng)絡(luò)里,根據(jù)VLAN將網(wǎng)絡(luò)劃分成上網(wǎng)、TR069、VOIP和IPTV四個(gè)子網(wǎng)。上網(wǎng)子網(wǎng)承載用戶訪問(wèn)INTERNET的數(shù)據(jù),如網(wǎng)頁(yè)、聊天、在線視頻等;TR069子網(wǎng)承載ACS服務(wù)器管理網(wǎng)關(guān)設(shè)備的數(shù)據(jù);V0IP子網(wǎng)承載語(yǔ)音業(yè)務(wù)的數(shù)據(jù);IPTV子網(wǎng)承載電信IPTV業(yè)務(wù)的數(shù)據(jù)。對(duì)于網(wǎng)關(guān)設(shè)備的技術(shù)實(shí)現(xiàn)而言,各種類型的上行數(shù)據(jù)(網(wǎng)關(guān)設(shè)備發(fā)向運(yùn)營(yíng)商接入網(wǎng)絡(luò)的數(shù)據(jù))只能走運(yùn)營(yíng)商指定的通道,不能互竄。而對(duì)于網(wǎng)關(guān)設(shè)備上的一些應(yīng)用進(jìn)程,比如sntp客戶端、DNS客戶端、TR069客戶端、VOIP客戶端等等,必須選擇正確的子網(wǎng)向運(yùn)營(yíng)商網(wǎng)絡(luò)發(fā)送數(shù)據(jù),才能符合運(yùn)營(yíng)商的要求。在基于Linux實(shí)現(xiàn)的網(wǎng)關(guān)設(shè)備上,一般的實(shí)現(xiàn)方法是每個(gè)子網(wǎng)對(duì)應(yīng)于一個(gè)網(wǎng)絡(luò)接口,發(fā)送·上行數(shù)據(jù)時(shí)選擇子網(wǎng)就是要選擇對(duì)應(yīng)的網(wǎng)絡(luò)接口。目前設(shè)備廠商一般使用靜態(tài)路由的方法來(lái)實(shí)現(xiàn)應(yīng)用進(jìn)程和網(wǎng)絡(luò)接口的綁定,但該方法有下面幾個(gè)缺陷1.不夠靈活,在同一個(gè)路由表中操作,增加了系統(tǒng)路由表規(guī)劃的復(fù)雜度;2.在某些網(wǎng)絡(luò)環(huán)境里,不能解決問(wèn)題,比如當(dāng)TR069服務(wù)器和VOIP服務(wù)器的地址相同時(shí),必然有一個(gè)進(jìn)程無(wú)法正確選路;3.對(duì)于訪問(wèn)的資源是URL時(shí),需要在DNS解析到地址后動(dòng)態(tài)更新路由表,實(shí)現(xiàn)過(guò)程復(fù)雜,增加系統(tǒng)開(kāi)銷。
發(fā)明內(nèi)容針對(duì)現(xiàn)有技術(shù)中所存在的技術(shù)問(wèn)題,本發(fā)明提供了一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,以解決上述的系統(tǒng)開(kāi)銷大,無(wú)法正確選路等問(wèn)題。具體技術(shù)方案如下所示一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其中,具體包括如下步驟步驟1.為所述網(wǎng)關(guān)設(shè)備連接每個(gè)子網(wǎng)的網(wǎng)絡(luò)接口分配一策略路由表;步驟2.為所述網(wǎng)關(guān)設(shè)備上要求不同子網(wǎng)的應(yīng)用進(jìn)程分配不同的轉(zhuǎn)發(fā)標(biāo)記;步驟3.將所述轉(zhuǎn)發(fā)標(biāo)記設(shè)置為所述網(wǎng)關(guān)設(shè)備內(nèi)核策略路由機(jī)制中,數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)發(fā)標(biāo)記;步驟4.將所述內(nèi)核策略路由機(jī)制中的轉(zhuǎn)發(fā)標(biāo)記和所述策略路由表關(guān)聯(lián)映射;步驟5.當(dāng)所述網(wǎng)關(guān)設(shè)備獲取所述子網(wǎng)的地址信息時(shí),將所述網(wǎng)絡(luò)接口對(duì)應(yīng)網(wǎng)段的路由作為默認(rèn)路由添加到相應(yīng)的所述策略路由表中;步驟6.所述網(wǎng)關(guān)設(shè)備根據(jù)策略路由機(jī)制,自動(dòng)將待轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)中的轉(zhuǎn)發(fā)標(biāo)記字段匹配所述策略路由表,并根據(jù)所述策略路由表中的默認(rèn)路由轉(zhuǎn)發(fā)數(shù)據(jù)包。上述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其中,所述網(wǎng)關(guān)設(shè)備基于Linux操作系統(tǒng)。上述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其中,所述步驟3中,包括步驟3.1.當(dāng)所述網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為從網(wǎng)絡(luò)接口接收的數(shù)據(jù)包時(shí),根據(jù)所述轉(zhuǎn)發(fā)標(biāo)記設(shè)置Linux內(nèi)核策略路由機(jī)制中一數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。上述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其中,所述步驟3中,還包括步驟3.2.當(dāng)所述網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為本地應(yīng)用進(jìn)程產(chǎn)生的數(shù)據(jù)包時(shí),在Linux操作系統(tǒng)內(nèi)核中根據(jù)所述轉(zhuǎn)發(fā)標(biāo)記,擴(kuò)展設(shè)置一Skjnark字段;步驟3.3根據(jù)所述Skjnark字段設(shè)置Linux內(nèi)核策略路由機(jī)制中所述數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。本發(fā)明的積極進(jìn)步效果在于使網(wǎng)關(guān)設(shè)備上的進(jìn)程能夠方便地實(shí)現(xiàn)正確選路,減低了系統(tǒng)開(kāi)銷。為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。如圖1所示為本發(fā)明一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法實(shí)施例的流程示意圖。具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,但不作為本發(fā)明的限定。如圖1所示為本發(fā)明一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法實(shí)施例的流程示意圖,其中,具體包括如下步驟步驟1.為網(wǎng)關(guān)設(shè)備連接每個(gè)子網(wǎng)的網(wǎng)絡(luò)接口分配策略路由表;于上述技術(shù)方案的基礎(chǔ)上,分別為INTERNET子網(wǎng)、TR069子網(wǎng)、VOIP子網(wǎng)各分配一個(gè)路由表tbl_internet、tbl_tr069和tbl_voip。步驟2.為網(wǎng)關(guān)設(shè)備上要求不同子網(wǎng)的應(yīng)用進(jìn)程分配不同的轉(zhuǎn)發(fā)標(biāo)記;于上述技術(shù)方案的基礎(chǔ)上,設(shè)置轉(zhuǎn)發(fā)標(biāo)記(forwardmark)0x10000對(duì)應(yīng)INTERNET子網(wǎng)、0x20000對(duì)應(yīng)TR069子網(wǎng)、0x30000對(duì)應(yīng)VOIP子網(wǎng)。步驟3.將轉(zhuǎn)發(fā)標(biāo)記設(shè)置為網(wǎng)關(guān)設(shè)備內(nèi)核策略路由機(jī)制中,數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)發(fā)標(biāo)記;步驟4.將內(nèi)核策略路由機(jī)制中的轉(zhuǎn)發(fā)標(biāo)記和策略路由表關(guān)聯(lián)映射;于上述技術(shù)方案的基礎(chǔ)上,利用iprule命令建立forwardmark和具體策略路由表間的關(guān)系,具體實(shí)現(xiàn)如下ipruleaddfwmarkOxlOOOO/OxffffOOOOtabletbl_internetipruleaddfwmark0x20000/0xffff0000tabletbl_tr069ipruleaddfwmark0x30000/0xffff0000tabletbl_voip;步驟5.當(dāng)網(wǎng)關(guān)設(shè)備獲取子網(wǎng)的地址信息時(shí),將網(wǎng)絡(luò)接口對(duì)應(yīng)網(wǎng)段的路由作為默認(rèn)路由添加到相應(yīng)的策略路由表中;于上述技術(shù)方案的基礎(chǔ)上,在初始化設(shè)置完成后,tbl_internet>tbl_tr069和tbl_voip路由表是空的,當(dāng)對(duì)應(yīng)的網(wǎng)絡(luò)接口獲取到地址信息后,可以通過(guò)使用iproute命令將到該網(wǎng)絡(luò)接口對(duì)應(yīng)網(wǎng)段的路由做為默認(rèn)路由加到對(duì)應(yīng)的策略路由表中;步驟6.網(wǎng)關(guān)設(shè)備根據(jù)策略路由機(jī)制,自動(dòng)將待轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)中的轉(zhuǎn)發(fā)標(biāo)記字段匹配策略路由表,并根據(jù)策略路由表中的默認(rèn)路由轉(zhuǎn)發(fā)數(shù)據(jù)包。于上述技術(shù)方案的基礎(chǔ)上,對(duì)于Linux系統(tǒng)而言,完成上面的工作后,只要數(shù)據(jù)包的sk_buff的forwardmark字段和OxffffOOOO做與運(yùn)算,其結(jié)果如果等于0x10000該數(shù)據(jù)包查路由表時(shí),就會(huì)自動(dòng)查找tbl_internet中的記錄;如果等于0x20000就會(huì)查找tbl_tr069中的記錄;如果等于0x30000就會(huì)查找tbl_voip中的記錄。因?yàn)檫@三個(gè)路由表中把相應(yīng)接口的路由配置成了默認(rèn)路由,所以數(shù)據(jù)包就會(huì)發(fā)送到運(yùn)營(yíng)商要求的子網(wǎng)絡(luò)中。本發(fā)明的一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法具體實(shí)施例中,網(wǎng)關(guān)設(shè)備基于Linux操作系統(tǒng)。本發(fā)明的一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法具體實(shí)施例中,步驟3中,包括步驟3.1.當(dāng)網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為從網(wǎng)絡(luò)接口接收的數(shù)據(jù)包時(shí),根據(jù)轉(zhuǎn)發(fā)標(biāo)記設(shè)置Linux內(nèi)核策略路由機(jī)制中數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。于上述技術(shù)方案的基礎(chǔ)上,Linux系統(tǒng)中對(duì)于從一個(gè)網(wǎng)絡(luò)接口接收由另一個(gè)網(wǎng)絡(luò)接口發(fā)送的數(shù)據(jù)包,可以通過(guò)ebtables或iptables工具設(shè)置相應(yīng)的規(guī)則,讓內(nèi)核模塊給該數(shù)據(jù)包設(shè)置上forwardmark,保證查路由時(shí)可以查指定表中的記錄。本發(fā)明的一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法具體實(shí)施例中,步驟3中,還包括步驟3.2.當(dāng)網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為本地應(yīng)用進(jìn)程產(chǎn)生的數(shù)據(jù)包時(shí),在Linux操作系統(tǒng)內(nèi)核中根據(jù)轉(zhuǎn)發(fā)標(biāo)記,擴(kuò)展設(shè)置Skjnark字段;對(duì)于由本地應(yīng)用進(jìn)程發(fā)送數(shù)據(jù)包時(shí),上述通過(guò)ebtables或iptables工具設(shè)置相應(yīng)的規(guī)則的方式不能完成此工作,所以需要對(duì)內(nèi)核機(jī)制做擴(kuò)充。于上述技術(shù)方案的基礎(chǔ)上,Linux系統(tǒng)中應(yīng)用進(jìn)程發(fā)送數(shù)據(jù)包是通過(guò)socket接口實(shí)現(xiàn)的,在調(diào)用socketO函數(shù)成功創(chuàng)建socket后,會(huì)返回該socket的句柄,下文用fd表示。該機(jī)制的擴(kuò)充是,在獲得socket句柄后,通過(guò)setsockopt系統(tǒng)調(diào)用根據(jù)綁定要求設(shè)置sk_mark字段的值(sk_mark是內(nèi)核描述socket的數(shù)據(jù)結(jié)構(gòu)中的一個(gè)成員)。實(shí)現(xiàn)如下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));上述實(shí)現(xiàn)方式表明對(duì)于INTERNET子網(wǎng)用第一段代碼;TR069子網(wǎng)用第二段代碼;VOIP子網(wǎng)用第三段代碼。步驟3.3根據(jù)Skjnark字段設(shè)置Linux內(nèi)核策略路由機(jī)制中數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。在內(nèi)核里socket將數(shù)據(jù)包向網(wǎng)絡(luò)層發(fā)送時(shí),需要根據(jù)Skjnark設(shè)置對(duì)應(yīng)sk_buff的forwardmark字段,需要分別在文件net/ipv4/udp.c的函數(shù)udp_sendmsg()、文件net/ipv4/udp.c的函數(shù)raw_send_hdrinc()、函數(shù)raw_sendmsg()、文件net/ipv4/ip_output.c的函數(shù)ip_build_and_send_pkt()、函數(shù)ip_queue_xmit()、函數(shù)ip_push_pending_frames()、文件net/ipv4/inet_connection_sock.c的函數(shù)inet_csk_route_req()、文件net/ipv4/icmp.c的函數(shù)icmp_send()、文件include/net/route.h的函數(shù)ip_route_connect()、文件net/ipv6/datagram,c的函數(shù)ip6_datagram_connect()、文件net/ipv6/ip6_output.c的函數(shù)ip6_xmit()、函數(shù)ip6_push_pending_frames()、文件net/ipv6/raw.c的函數(shù)rawv6_send_hdrinc()、函數(shù)rawv6_sendmsg()、文件net/ipv6/udp.c的函數(shù)udpv6_sendmsg()等相應(yīng)位置做出修改,例如在文件net/ipv4/udp.c中對(duì)函數(shù)udp_sendmsg()的改動(dòng)權(quán)利要求1.一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其特征在于,具體包括如下步驟步驟1.為所述網(wǎng)關(guān)設(shè)備連接每個(gè)子網(wǎng)的網(wǎng)絡(luò)接口分配一策略路由表;步驟2.為所述網(wǎng)關(guān)設(shè)備上要求不同子網(wǎng)的應(yīng)用進(jìn)程分配不同的轉(zhuǎn)發(fā)標(biāo)記;步驟3.將所述轉(zhuǎn)發(fā)標(biāo)記設(shè)置為所述網(wǎng)關(guān)設(shè)備內(nèi)核策略路由機(jī)制中,數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)發(fā)標(biāo)記;步驟4.將所述內(nèi)核策略路由機(jī)制中的轉(zhuǎn)發(fā)標(biāo)記和所述策略路由表關(guān)聯(lián)映射;步驟5.當(dāng)所述網(wǎng)關(guān)設(shè)備獲取所述子網(wǎng)的地址信息時(shí),將所述網(wǎng)絡(luò)接口對(duì)應(yīng)網(wǎng)段的路由作為默認(rèn)路由添加到相應(yīng)的所述策略路由表中;步驟6.所述網(wǎng)關(guān)設(shè)備根據(jù)策略路由機(jī)制,自動(dòng)將待轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)中的轉(zhuǎn)發(fā)標(biāo)記字段匹配所述策略路由表,并根據(jù)所述策略路由表中的默認(rèn)路由轉(zhuǎn)發(fā)數(shù)據(jù)包。2.如權(quán)利要求1所述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其特征在于,所述網(wǎng)關(guān)設(shè)備基于Linux操作系統(tǒng)。3.如權(quán)利要求2所述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其特征在于,所述步驟3中,包括步驟3.1.當(dāng)所述網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為從網(wǎng)絡(luò)接口接收的數(shù)據(jù)包時(shí),根據(jù)所述轉(zhuǎn)發(fā)標(biāo)記設(shè)置Linux內(nèi)核策略路由機(jī)制中一數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。4.如權(quán)利要求3所述的多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其特征在于,所述步驟3中,還包括步驟3.2.當(dāng)所述網(wǎng)關(guān)設(shè)備上需要轉(zhuǎn)發(fā)的數(shù)據(jù)包為本地應(yīng)用進(jìn)程產(chǎn)生的數(shù)據(jù)包時(shí),在Linux操作系統(tǒng)內(nèi)核中根據(jù)所述轉(zhuǎn)發(fā)標(biāo)記,擴(kuò)展設(shè)置一Skjnark字段;步驟3.3根據(jù)所述Skjnark字段設(shè)置Linux內(nèi)核策略路由機(jī)制中所述數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)sk_buff的轉(zhuǎn)發(fā)標(biāo)記。全文摘要本發(fā)明公開(kāi)了一種多接口網(wǎng)關(guān)設(shè)備數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,屬于一種數(shù)據(jù)發(fā)送實(shí)現(xiàn)方法,其中,包括如下步驟S1.為網(wǎng)關(guān)設(shè)備連接每個(gè)子網(wǎng)的網(wǎng)絡(luò)接口分配策略路由表;S2.為要求不同子網(wǎng)的應(yīng)用進(jìn)程分配不同的轉(zhuǎn)發(fā)標(biāo)記;S3.將轉(zhuǎn)發(fā)標(biāo)記設(shè)置為網(wǎng)關(guān)設(shè)備內(nèi)核策略路由機(jī)制中,數(shù)據(jù)報(bào)數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)發(fā)標(biāo)記;S4.將轉(zhuǎn)發(fā)標(biāo)記和策略路由表關(guān)聯(lián)映射;S5.當(dāng)網(wǎng)關(guān)設(shè)備獲取子網(wǎng)的地址信息時(shí),將網(wǎng)絡(luò)接口對(duì)應(yīng)網(wǎng)段的路由作為默認(rèn)路由添加到相應(yīng)的策略路由表中;S6.網(wǎng)關(guān)設(shè)備根據(jù)策略路由規(guī)則,自動(dòng)將待轉(zhuǎn)發(fā)數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)中的轉(zhuǎn)發(fā)標(biāo)記字段匹配策略路由表,并根據(jù)策略路由表中的默認(rèn)路由轉(zhuǎn)發(fā)數(shù)據(jù)包。本發(fā)明的有益效果是使網(wǎng)關(guān)設(shè)備上的進(jìn)程能夠方便地實(shí)現(xiàn)選路問(wèn)題,減低了系統(tǒng)開(kāi)銷。文檔編號(hào)H04L12/741GK103036788SQ20121054636公開(kāi)日2013年4月10日申請(qǐng)日期2012年12月14日優(yōu)先權(quán)日2012年12月14日發(fā)明者管建智申請(qǐng)人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司