国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種dns數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法

      文檔序號(hào):7549869閱讀:587來(lái)源:國(guó)知局

      專(zhuān)利名稱::一種dns數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法
      技術(shù)領(lǐng)域
      :本發(fā)明涉及通信
      技術(shù)領(lǐng)域
      ,尤其涉及一種DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法。
      背景技術(shù)
      :DNS(域名系統(tǒng),DomainNameSystem)是一種用于TCP/IP(傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,TransmissionControlProtocol/InternetProtocol)的應(yīng)用程序的分布式數(shù)據(jù)庫(kù),它提供主機(jī)名字和IP地址之間的轉(zhuǎn)換信息。目前通常采用的域名解析方法如下:1)客戶端向DNS服務(wù)器發(fā)送域名解析請(qǐng)求;2)DNS服務(wù)器對(duì)域名進(jìn)行解析;3)DNS服務(wù)器將解析結(jié)果返回給客戶端;以及4)客戶端從該結(jié)果中選擇一個(gè)IP地址進(jìn)行訪問(wèn)。在家庭網(wǎng)關(guān)的使用中,經(jīng)常會(huì)使用家庭網(wǎng)關(guān)設(shè)備(CPE,CustomerPremiseEquipment)作為代理,解析LAN側(cè)用戶的域名解析請(qǐng)求。這樣可以對(duì)用戶的上網(wǎng)行為進(jìn)行一定的控制,或者是對(duì)通信運(yùn)營(yíng)商的業(yè)務(wù)進(jìn)行支持(比如說(shuō)通過(guò)注冊(cè)才可以上網(wǎng)等)。而一個(gè)CPE中,時(shí)常需要建立多條wan連接,用于上網(wǎng),用于IPTV,用TR069管理等。每條wan連接使用不同的業(yè)務(wù),都有相應(yīng)的DNS請(qǐng)求解析。這些請(qǐng)求可以是來(lái)自CPE,也可能是LAN側(cè)用戶請(qǐng)求的。對(duì)于來(lái)自用戶的請(qǐng)求,CPE代理都統(tǒng)一使用作為默認(rèn)網(wǎng)關(guān)的wan連接解析。為了在LAN側(cè)區(qū)分不同的業(yè)務(wù)使用,通常使用端口綁定,將LAN端口跟相應(yīng)的WAN連接綁定起來(lái)。這樣,如圖1所示,通過(guò)特定LAN端口進(jìn)來(lái)的數(shù)據(jù)包,會(huì)被標(biāo)記相應(yīng)的mark值,然后根據(jù)這個(gè)mark值走策略路由,最終到達(dá)綁定的對(duì)應(yīng)WAN接口;而未被標(biāo)記mark值的數(shù)據(jù)包,通過(guò)默認(rèn)路由發(fā)送出去。但是,因?yàn)镈NS解析使用了代理,由于代理進(jìn)程屬于應(yīng)用層,代理進(jìn)程在接收內(nèi)核數(shù)據(jù)的時(shí)候不能讀取skb數(shù)據(jù)包(skb是socketbuffer(套接字緩存)的縮寫(xiě),在整個(gè)Iinux的協(xié)議棧中是用來(lái)打包數(shù)據(jù)的結(jié)構(gòu)體,習(xí)慣上用skb表示一個(gè)數(shù)據(jù)包)的mark屬性值,所以進(jìn)程接收的DNS數(shù)據(jù)包不知道之前ebtables設(shè)置的mark值,使得在轉(zhuǎn)發(fā)的時(shí)候發(fā)送的數(shù)據(jù)包是不帶mark值的。因而代理進(jìn)程在接收DNS數(shù)據(jù)包并轉(zhuǎn)發(fā)的時(shí)候,會(huì)使得mark值丟失,于是轉(zhuǎn)發(fā)的數(shù)據(jù)包最終會(huì)通過(guò)默認(rèn)路由發(fā)送出去,而不是綁定的WAN接口。如果所有的WAN連接使用的DNS服務(wù)器都是相同的,那么無(wú)論走那條WAN連接都可以正確解析。但是,如果不同WAN連接的DNS服務(wù)器不同,并且各DNS服務(wù)器的業(yè)務(wù)內(nèi)容也不同(運(yùn)營(yíng)商有時(shí)會(huì)在某些業(yè)務(wù)上構(gòu)建自己的DNS服務(wù)器),則會(huì)出現(xiàn)異常錯(cuò)誤,最終不能解析或者解析錯(cuò)誤。因而,有必要針對(duì)此問(wèn)題提供一種有效的解決方案。
      發(fā)明內(nèi)容本發(fā)明的目的在于提供一種DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,克服現(xiàn)有DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法過(guò)程中mark值丟失所造成的解析失敗的缺陷。本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:一種DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,包括步驟:在代理進(jìn)程接收域名解析請(qǐng)求數(shù)據(jù)包時(shí),讀取Iinux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值,將該域名解析請(qǐng)求數(shù)據(jù)包與其對(duì)應(yīng)的mark值一并存儲(chǔ)于緩沖鏈表中;在數(shù)據(jù)包轉(zhuǎn)發(fā)前,對(duì)于緩沖鏈表中有標(biāo)記mark值的域名解析請(qǐng)求數(shù)據(jù)包,從緩沖鏈表中讀取標(biāo)記的mark值,將該mark值設(shè)置于該域名解析請(qǐng)求數(shù)據(jù)包對(duì)應(yīng)的套接字的屬性選項(xiàng)中,然后通過(guò)套接字轉(zhuǎn)發(fā)域名解析請(qǐng)求數(shù)據(jù)包。上述方法中,通過(guò)系統(tǒng)調(diào)用recvmsg函數(shù)讀取Iinux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值。上述方法中,對(duì)于緩沖鏈表中未標(biāo)記有mark值的域名解析請(qǐng)求數(shù)據(jù)包,將該域名解析請(qǐng)求數(shù)據(jù)包通過(guò)默認(rèn)路由轉(zhuǎn)發(fā)至域名服務(wù)器。上述方法中,在通過(guò)套接字轉(zhuǎn)發(fā)域名解析請(qǐng)求數(shù)據(jù)包的過(guò)程中,將套接字中的mark值設(shè)置于對(duì)應(yīng)skb數(shù)據(jù)包的mark選項(xiàng)中,由Iinux內(nèi)核路由模塊根據(jù)該mark值選擇匹配的策略路由。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例具有以下有益效果:為了避免DNS數(shù)據(jù)包在轉(zhuǎn)發(fā)過(guò)程中其mark值丟失,本發(fā)明實(shí)施利用數(shù)據(jù)包透?jìng)骷夹g(shù):采用擴(kuò)展Iinux套接字的選項(xiàng)配置,使得代理進(jìn)程可以在讀取LAN側(cè)數(shù)據(jù)包的時(shí)候讀取記錄mark值;在轉(zhuǎn)發(fā)數(shù)據(jù)包的時(shí)候,設(shè)置mark值到套接字選項(xiàng)中。這樣可以保證mark值不會(huì)丟失,DNS數(shù)據(jù)包能夠根據(jù)原來(lái)的mark值走策略路由,從而確保了域名解析的正確性。圖1是現(xiàn)有技術(shù)中DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法流程圖。圖2是本發(fā)明實(shí)施例中DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法流程圖。具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。請(qǐng)參閱圖2所示,本實(shí)施例中DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法包括以下步驟:在初始時(shí)刻,根據(jù)端口綁定設(shè)置信息為L(zhǎng)AN側(cè)端口中的綁定端口標(biāo)記相應(yīng)的mark值。201、在LAN側(cè)端口接收到用戶發(fā)送的域名解析請(qǐng)求數(shù)據(jù)包時(shí),根據(jù)端口綁定設(shè)置,給每個(gè)域名解析請(qǐng)求數(shù)據(jù)包分別標(biāo)記相應(yīng)的mark值。該過(guò)程中,CPE通過(guò)linuxebtables的mark模塊,給綁定的LAN側(cè)端口標(biāo)上一個(gè)mark值,當(dāng)該綁定端口收到LAN側(cè)用戶發(fā)送的域名請(qǐng)求解析數(shù)據(jù)包時(shí),mark模塊給每個(gè)skb數(shù)據(jù)包的mark選項(xiàng)設(shè)置相應(yīng)的mark值。202、在CPE上的代理進(jìn)程接收域名解析請(qǐng)求數(shù)據(jù)包的同時(shí),CPE使用系統(tǒng)調(diào)用recvmsg(系統(tǒng)函數(shù))讀取Iinux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值。Recvmsg最終會(huì)調(diào)用kernel/linux/net/ipv4/ip_sockglue.c文件的函數(shù)ip_cmsg_recv,通過(guò)擴(kuò)展這個(gè)函數(shù)讀取skb的mark值即可。203、CPE將讀取到的域名解析請(qǐng)求數(shù)據(jù)包與其mark值一并存儲(chǔ)到一個(gè)緩沖鏈表中。204、從緩沖鏈表讀取域名解析請(qǐng)求數(shù)據(jù)包。判斷該數(shù)據(jù)包的mark值是否被設(shè)置,如果沒(méi)有,則執(zhí)行步驟205;如果有,則執(zhí)行步驟206。205、由于該數(shù)據(jù)包的mark值沒(méi)有被設(shè)置(即為0),表明該數(shù)據(jù)包不是來(lái)自于綁定端口,所以通過(guò)默認(rèn)路由轉(zhuǎn)發(fā)該數(shù)據(jù)包。206、對(duì)于設(shè)置了mark值的域名解析請(qǐng)求數(shù)據(jù)包,不能夠立刻轉(zhuǎn)發(fā)。此時(shí)套接字還沒(méi)有標(biāo)識(shí)該mark值,轉(zhuǎn)發(fā)會(huì)丟失或者標(biāo)志上(上一次發(fā)送設(shè)置的mark值沒(méi)有修改,則會(huì)被下一次發(fā)送使用)錯(cuò)誤的mark值。套接字是數(shù)據(jù)報(bào)文的發(fā)送通道,當(dāng)數(shù)據(jù)包通過(guò)套接字發(fā)送的時(shí)候,套接字的屬性就可以設(shè)置到報(bào)文屬性中,因而本實(shí)施例中在對(duì)域名解析請(qǐng)求數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)前,通過(guò)系統(tǒng)調(diào)用setsockopt設(shè)置該數(shù)據(jù)包對(duì)應(yīng)的套接字的mark值。這樣在數(shù)據(jù)包通過(guò)套接字發(fā)送的時(shí)候,套接字的屬性值就會(huì)設(shè)置到報(bào)文屬性中(此時(shí),域名解析請(qǐng)求數(shù)據(jù)包已經(jīng)被打包成一個(gè)skb數(shù)據(jù)包,可以設(shè)置屬性),從而為域名解析請(qǐng)求數(shù)據(jù)包打上了mark值。該設(shè)置操作通過(guò)擴(kuò)展kernel/linux/net/ipv4/ip_sockglue.c文件的函數(shù)do_ip_setsockopt來(lái)實(shí)現(xiàn)。207、linux內(nèi)核路由模塊根據(jù)mark值查找匹配的策略路由,如果沒(méi)有匹配的策略路由,則通過(guò)默認(rèn)路由轉(zhuǎn)發(fā)當(dāng)前的數(shù)據(jù)包;如果有匹配的策略路由,則通過(guò)匹配的策略路由來(lái)轉(zhuǎn)發(fā)當(dāng)前的數(shù)據(jù)包。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,其特征在于,該方法包括步驟:在代理進(jìn)程接收域名解析請(qǐng)求數(shù)據(jù)包時(shí),讀取Iinux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值,將該域名解析請(qǐng)求數(shù)據(jù)包與其對(duì)應(yīng)的mark值一并存儲(chǔ)于緩沖鏈表中;在數(shù)據(jù)包轉(zhuǎn)發(fā)前,對(duì)于緩沖鏈表中有標(biāo)記mark值的域名解析請(qǐng)求數(shù)據(jù)包,從緩沖鏈表中讀取標(biāo)記的mark值,將該mark值設(shè)置于該域名解析請(qǐng)求數(shù)據(jù)包對(duì)應(yīng)的套接字的屬性選項(xiàng)中,然后通過(guò)套接字轉(zhuǎn)發(fā)域名解析請(qǐng)求數(shù)據(jù)包。2.按權(quán)利要求1所述的DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,其特征在于,該方法中,通過(guò)系統(tǒng)調(diào)用recvmsg函數(shù)讀取Iinux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值。3.按權(quán)利要求1所述的DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,其特征在于,該方法中,對(duì)于緩沖鏈表中未標(biāo)記有mark值的域名解析請(qǐng)求數(shù)據(jù)包,將該域名解析請(qǐng)求數(shù)據(jù)包通過(guò)默認(rèn)路由轉(zhuǎn)發(fā)至域名服務(wù)器。4.按權(quán)利要求1至3任一所述的DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,其特征在于,該方法中,在通過(guò)套接字轉(zhuǎn)發(fā)域名解析請(qǐng)求數(shù)據(jù)包的過(guò)程中,將套接字中的mark值設(shè)置于對(duì)應(yīng)skb數(shù)據(jù)包的mark選項(xiàng)中,由Iinux內(nèi)核路由模塊根據(jù)該mark值選擇匹配的策略路由。全文摘要本發(fā)明提供了一種DNS數(shù)據(jù)包的代理轉(zhuǎn)發(fā)方法,包括步驟在代理進(jìn)程接收域名解析請(qǐng)求數(shù)據(jù)包時(shí),讀取linux內(nèi)核中對(duì)應(yīng)skb數(shù)據(jù)包的mark值,將該域名解析請(qǐng)求數(shù)據(jù)包與其對(duì)應(yīng)的mark值一并存儲(chǔ)于緩沖鏈表中;在數(shù)據(jù)包轉(zhuǎn)發(fā)前,對(duì)于緩沖鏈表中有標(biāo)記mark值的域名解析請(qǐng)求數(shù)據(jù)包,從緩沖鏈表中讀取標(biāo)記的mark值,將該mark值設(shè)置于該域名解析請(qǐng)求數(shù)據(jù)包對(duì)應(yīng)的套接字的屬性選項(xiàng)中,然后通過(guò)套接字轉(zhuǎn)發(fā)域名解析請(qǐng)求數(shù)據(jù)包。本發(fā)明應(yīng)用透?jìng)骷夹g(shù),在轉(zhuǎn)發(fā)數(shù)據(jù)包的時(shí)候,設(shè)置mark值到套接字選項(xiàng)中,這樣域名解析請(qǐng)求數(shù)據(jù)包能夠根據(jù)原來(lái)的mark值走策略路由,從而確保了域名解析的正確性。文檔編號(hào)H04L29/12GK103095608SQ20131000393公開(kāi)日2013年5月8日申請(qǐng)日期2013年1月7日優(yōu)先權(quán)日2013年1月7日發(fā)明者朱其武,王金桂申請(qǐng)人:深圳市共進(jìn)電子股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1