欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于linux操作系統(tǒng)的DNS服務(wù)系統(tǒng)和方法

文檔序號:7704689閱讀:126來源:國知局
專利名稱:一種基于linux操作系統(tǒng)的DNS服務(wù)系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù),特別涉及一種基于Iinux操作系統(tǒng)的DNS服務(wù)系統(tǒng)和方法。
背景技術(shù)
從靜態(tài)角度,DNS (Domain Name System,域名系統(tǒng))可以理解為一個分布式數(shù)據(jù)庫。數(shù)據(jù)庫的管理員負責(zé)授權(quán)給他的那部分數(shù)據(jù)的維護。該數(shù)據(jù)是對某些主機相關(guān)信息的記錄,如主機名、別名、IP地址、email路由等。從動態(tài)角度,DNS可以理解為對主機信息的查詢和應(yīng)答服務(wù)。該查詢應(yīng)答采用典型的CS模型。客戶端發(fā)起DNS請求,查詢某主機的信息。服務(wù)器收到該請求后產(chǎn)生攜帶主機IP地址等信息的應(yīng)答,返回給客戶端??蛻舳诉M一步使用查詢到的信息從主機獲得相應(yīng)服務(wù),從而能夠使人們不用去記住服務(wù)器的IP地址, 就可以方便地訪問互聯(lián)網(wǎng),這個過程通常稱為域名解析。
現(xiàn)有的DNS服務(wù)均運行在操作系統(tǒng)的應(yīng)用層,在OSI (Open System Interconnection,開放系統(tǒng)網(wǎng)絡(luò)互連)七層網(wǎng)絡(luò)模型中,劃歸在第7層,即應(yīng)用層。
現(xiàn)有的DNS服務(wù)處理模塊的工作流程包括如下步驟 1、在需要提供DNS服務(wù)時向操作系統(tǒng)申請打開一個UDP (User Datagram Protocol,用戶數(shù)據(jù)包協(xié)議)類型套接字(socket); 2、綁定socket的目的IP為本機的所有IP地址,本機可以有一個或多個IP地址; 3、綁定socket的目的端口為53,端口 53為現(xiàn)有標準規(guī)定的DNS服務(wù)端口 ; 4、監(jiān)聽該socket,接收客戶端發(fā)送的數(shù)據(jù); 5、接收到客戶端發(fā)送的DNS請求報文時提供DNS服務(wù); 6、向客戶端返回DNS應(yīng)答報文,其中攜帶客戶端需要查詢的主機IP地址; 7、返回步驟4,繼續(xù)監(jiān)聽該socket。
如圖1所示,為DNS服務(wù)處理模塊進行業(yè)務(wù)處理時的數(shù)據(jù)處理流程示意圖,其中, OSI七層網(wǎng)絡(luò)模型中的傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層屬于系統(tǒng)內(nèi)核,其他會話層表示層和應(yīng)用層屬于系統(tǒng)應(yīng)用層面。
網(wǎng)卡設(shè)置在物理層,用于監(jiān)聽53端口,接收用戶客戶端發(fā)送的數(shù)據(jù),如果網(wǎng)卡設(shè)置“混雜模式”,網(wǎng)卡收到DNS請求報文后會將該報文放入內(nèi)存并以硬件中斷形式通知數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊。如果網(wǎng)卡未設(shè)置“混雜模式”,將檢查報文的目標MAC地址,只有目標MAC地址符合本網(wǎng)卡的MAC地址,網(wǎng)卡才會將該報文放入內(nèi)存并以硬件中斷形式通知數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊,否則就丟棄該報文。
處于數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊構(gòu)造內(nèi)核所有模塊處理報文所需的結(jié)構(gòu)體,并添加該報文相應(yīng)的邏輯網(wǎng)絡(luò)設(shè)備信息,然后交給網(wǎng)絡(luò)層。
網(wǎng)絡(luò)層包含了很多處理模塊,主要包括路由模塊、Netfilter框架及插件和IP報文處理模塊。路由模塊根據(jù)報文的源IP和目標IP做路由選擇,或是傳送到上層,或是將報文往下發(fā)送到其他機器,或是丟棄該報文。Netfilter框架及插件是一個網(wǎng)絡(luò)層的框架,提供了對IP報文的操作接口?;贜etfilter框架及插件可以較為方便地開發(fā)插件,直接處理IP報文。如果Netfilter框架及插件配置了很多插件,這里將消耗大量的時間。IP報文處理模塊將IP報文解成傳輸層能理解的TCP包、UDP包等。處理完后,報文將遞送給傳輸層。
傳輸層的處理相對簡單。端口注冊進程匹配模塊根據(jù)報文端口信息查找注冊的服務(wù)程序,經(jīng)UDP報文處理模塊將報文交給運行在應(yīng)用層的服務(wù)程序,該報文在表示層和會話層被透傳。由于報文要從內(nèi)核層轉(zhuǎn)移到應(yīng)用層,所以這里最大的性能消耗就是將整個報文做一次內(nèi)存拷貝。
DNS請求報文送到應(yīng)用層對應(yīng)的DNS服務(wù)處理模塊后,DNS服務(wù)處理模塊進行業(yè)務(wù)處理,然后生成一個DNS應(yīng)答報文,將DNS應(yīng)答報文逐級往下遞送。
同樣地,報文交給傳輸層的時候,又將做一次整個報文的內(nèi)存拷貝,從應(yīng)用層拷貝到內(nèi)核層。傳輸層封裝上UDP包頭后交給網(wǎng)絡(luò)層。網(wǎng)絡(luò)層封裝IP包頭,netfilter框架及插件再一次做IP報文處理,路由模塊根據(jù)IP包頭里所示的目標IP地址進行路由選擇和網(wǎng)卡選擇,然后交給物理層。物理層調(diào)用網(wǎng)卡驅(qū)動模塊,將DNS應(yīng)答報文從內(nèi)存寫入網(wǎng)卡,發(fā)送指令讓網(wǎng)卡發(fā)送該DNS應(yīng)答報文到網(wǎng)絡(luò)上,通過網(wǎng)絡(luò)傳輸最終被發(fā)送DNS請求報文的客戶端接收。
從上述過程可見,客戶端的DNS請求報文需要經(jīng)過網(wǎng)卡驅(qū)動模塊、數(shù)據(jù)幀處理模塊、Netfilter框架及插件、路由模塊、端口注冊進程匹配等多個Linux內(nèi)核模塊才到應(yīng)用層的DNS服務(wù)處理模塊。反過來,DNS服務(wù)處理模塊產(chǎn)生的DNS應(yīng)答報文,需要經(jīng)過端口注冊進程匹配、路由模塊、Netfilter框架及插件、網(wǎng)卡驅(qū)動模塊等,才能發(fā)送出去。而且數(shù)據(jù)在從內(nèi)核到應(yīng)用層和從應(yīng)用層到內(nèi)核的兩個過程中,不可避免地進行兩次內(nèi)存拷貝。所有這些降低了服務(wù)效率。

發(fā)明內(nèi)容
本發(fā)明實施例提供一種基于Iinux操作系統(tǒng)的DNS服務(wù)系統(tǒng)和方法,用以提高DNS 服務(wù)的處理效率。
一種基于Iinux操作系統(tǒng)的DNS服務(wù)系統(tǒng),包括 網(wǎng)卡驅(qū)動模塊,用于在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層;以及從發(fā)送隊列中讀取DNS響應(yīng)報文并發(fā)送給客戶端; 數(shù)據(jù)幀處理模塊,用于在數(shù)據(jù)鏈路層接收所述網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文,將DNS請求報文保存到第一內(nèi)存中,并輸出第一內(nèi)存地址信息;以及根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中; DNS服務(wù)處理模塊,用于根據(jù)數(shù)據(jù)幀處理模塊轉(zhuǎn)發(fā)的第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊。
較佳的,所述網(wǎng)卡驅(qū)動模塊,具體用于通過調(diào)用數(shù)據(jù)幀處理模塊中的第一數(shù)據(jù)處理函數(shù)將所述DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊; 所述數(shù)據(jù)幀處理模塊,具體用于生成包含所述DNS請求報文的第一數(shù)據(jù)結(jié)構(gòu)體, 將第一數(shù)據(jù)結(jié)構(gòu)存放保存到第一內(nèi)存中,并通過調(diào)用鉤子內(nèi)核函數(shù),將第一內(nèi)存地址信息轉(zhuǎn)發(fā)給DNS服務(wù)處理模塊。
較佳的,所述DNS服務(wù)處理模塊,具體用于生成包含DNS響應(yīng)報文的第二數(shù)據(jù)結(jié)構(gòu)體,將第二數(shù)據(jù)結(jié)構(gòu)存放保存到第二內(nèi)存中,并通過調(diào)用數(shù)據(jù)幀處理模塊中的第二數(shù)據(jù)處理函數(shù),將第二內(nèi)存地址信息轉(zhuǎn)發(fā)給數(shù)據(jù)幀處理模塊。
其中,所述第一數(shù)據(jù)處理函數(shù)為netif_reCeiVe_Slib內(nèi)核函數(shù),所述鉤子內(nèi)核函數(shù)為netif_receive_skb內(nèi)核函數(shù)中的packet_frame_handle鉤子內(nèi)核函數(shù),該packet_ frame_handle鉤子內(nèi)核函數(shù)被調(diào)用后,將第一內(nèi)存的地址信息傳輸給內(nèi)核中的DNS服務(wù)處理模塊; 所述第二數(shù)據(jù)處理函數(shù)為dev_queue_xmit內(nèi)核函數(shù),所述dev_queue_xmit內(nèi)核函數(shù)函數(shù)被調(diào)用后,完成如下操作根據(jù)第二內(nèi)存的地址信息,從第二內(nèi)存中獲得DNS響應(yīng)報文;為DNS響應(yīng)報文選擇發(fā)送隊列;將DNS響應(yīng)報文加在選擇的發(fā)送隊列中。
一種用于上述系統(tǒng)中的DNS服務(wù)方法,包括 步驟一、網(wǎng)卡驅(qū)動模塊在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層; 步驟二、數(shù)據(jù)幀處理模塊在數(shù)據(jù)鏈路層接收所述網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文,將DNS請求報文和保存到第一內(nèi)存中,并將第一內(nèi)存地址信息發(fā)送給DNS服務(wù)處理模塊; 步驟三、DNS服務(wù)處理模塊根據(jù)第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊; 步驟四、數(shù)據(jù)幀處理模塊根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中; 步驟五、網(wǎng)卡驅(qū)動模塊從發(fā)送隊列中讀取DNS響應(yīng)報文并發(fā)送給客戶端。
本發(fā)明實施例提供的技術(shù)方案中,將DNS服務(wù)處理模塊放在內(nèi)核的數(shù)據(jù)鏈路層, 數(shù)據(jù)幀處理模塊在收到網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文時,將DNS請求報文存入內(nèi)存, 并調(diào)用內(nèi)核的DNS服務(wù)處理模塊處理內(nèi)存中保存的DNS請求報文,DNS服務(wù)處理模塊根據(jù) DNS請求報文請求的內(nèi)容,獲得查詢結(jié)果,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存到另一個內(nèi)存中,然后調(diào)用數(shù)據(jù)幀處理模塊,數(shù)據(jù)幀處理模塊從另一個內(nèi)存中讀取DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中,由網(wǎng)卡驅(qū)動模塊將DNS響應(yīng)報文發(fā)送給客戶端。在上述處理過程中,由于數(shù)據(jù)幀處理模塊和DNS服務(wù)處理模塊都位于內(nèi)核的數(shù)據(jù)鏈路層中,省去了其他內(nèi)核模塊的處理,同時避免了數(shù)據(jù)從內(nèi)核到應(yīng)用層和從應(yīng)用層到內(nèi)核的兩次內(nèi)存拷貝,從而提高了 DNS服務(wù)的處理效率。


圖1為背景技術(shù)中DNS服務(wù)處理模塊進行DNS服務(wù)處理時的數(shù)據(jù)處理流程示意圖; 圖2為本發(fā)明實施例提供的基于Iinux操作系統(tǒng)的DNS服務(wù)系統(tǒng)結(jié)構(gòu)框圖; 圖3為本發(fā)明實施例提供的DNS服務(wù)方法流程示意圖。
6
具體實施例方式現(xiàn)有基于Linux內(nèi)核態(tài)的DNS服務(wù)處理模塊運行在應(yīng)用層,導(dǎo)致DNS服務(wù)的效率很低,本發(fā)明實施例提供的技術(shù)方案中,將DNS服務(wù)處理模塊放在內(nèi)核的數(shù)據(jù)鏈路層,數(shù)據(jù)幀處理模塊在收到網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文時,將DNS請求報文存入內(nèi)存,并調(diào)用內(nèi)核的DNS服務(wù)處理模塊處理內(nèi)存中保存的DNS請求報文,DNS服務(wù)處理模塊根據(jù)DNS請求報文請求的內(nèi)容,獲得查詢結(jié)果,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存到另一個內(nèi)存中,然后調(diào)用數(shù)據(jù)幀處理模塊,數(shù)據(jù)幀處理模塊從另一個內(nèi)存中讀取DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中,由網(wǎng)卡驅(qū)動模塊將DNS響應(yīng)報文發(fā)送給客戶端。在上述處理過程中,由于數(shù)據(jù)幀處理模塊和DNS服務(wù)處理模塊都位于內(nèi)核的數(shù)據(jù)鏈路層中,省去了其他內(nèi)核模塊的處理,同時避免了數(shù)據(jù)從內(nèi)核到應(yīng)用層和從應(yīng)用層到內(nèi)核的兩次內(nèi)存拷貝, 從而提高了 DNS服務(wù)的處理效率。
現(xiàn)有技術(shù)中,網(wǎng)卡驅(qū)動模塊通過調(diào)用數(shù)據(jù)幀處理模塊中的數(shù)據(jù)處理函數(shù)對數(shù)據(jù)進行處理,數(shù)據(jù)處理函數(shù)例如netif_receive_skb內(nèi)核函數(shù),netif_receive_skb內(nèi)核函數(shù)被調(diào)用后,執(zhí)行如下功能 1.將DNS請求報文寫入slib數(shù)據(jù)結(jié)構(gòu)體里; 2.申請第一內(nèi)存保存Ab數(shù)據(jù)結(jié)構(gòu)體; 3.調(diào)用 handle_bridge 處理橋報文,進一步調(diào)用 handle_macvlan 處理 vlan ; 4.最后將保存Slcb數(shù)據(jù)結(jié)構(gòu)體的第一內(nèi)存地址信息送給上一層的網(wǎng)絡(luò)層處理。
而在本發(fā)明實施例中,應(yīng)該執(zhí)行如下功能 1.將DNS請求報文寫入slib數(shù)據(jù)結(jié)構(gòu)體里; 2.申請第一內(nèi)存保存Slcb數(shù)據(jù)結(jié)構(gòu)體; 3.將第一內(nèi)存的地址信息傳輸給內(nèi)核中的DNS服務(wù)處理模塊,觸發(fā)DNS服務(wù)處理模塊進行DNS業(yè)務(wù)處理。
上述第三個功能可以通過在netif_reCeiVe_Slib內(nèi)核函數(shù)中新增一個鉤子內(nèi)核函數(shù)來實現(xiàn),例如packet_frame_handle鉤子內(nèi)核函數(shù),在netif_receive_skb內(nèi)核函數(shù)被調(diào)用并生成數(shù)據(jù)結(jié)構(gòu)體,申請第一內(nèi)存保存slA數(shù)據(jù)結(jié)構(gòu)體后,調(diào)用paCket_frame_ handle鉤子內(nèi)核函數(shù),并將第一內(nèi)存地址信息輸入給packetframejiandle鉤子內(nèi)核函數(shù),packet_frame_handle鉤子內(nèi)核函數(shù)被調(diào)用后,將第一內(nèi)存地址信息作為變量發(fā)送給 DNS服務(wù)處理模塊,觸發(fā)DNS服務(wù)處理模塊根據(jù)第一內(nèi)存的地址信息進行業(yè)務(wù)處理。
本發(fā)明實施例中,DNS服務(wù)處理模塊根據(jù)第一內(nèi)存的地址信息,讀取保存在第一內(nèi)存中的DNS請求報文,進行DNS業(yè)務(wù)處理后,生成包含DNS響應(yīng)報文,并將DNS響應(yīng)報文存放在申請的第二內(nèi)存中,觸發(fā)數(shù)據(jù)處理模塊發(fā)送DNS響應(yīng)報文。一種具體的是實現(xiàn)方式可以是DNS服務(wù)處理模塊生成包含DNS響應(yīng)報文的Slcb數(shù)據(jù)結(jié)構(gòu)體,申請第二內(nèi)存保存生成的slA數(shù)據(jù)結(jié)構(gòu)體,進一步觸發(fā)數(shù)據(jù)幀處理模塊發(fā)送該DNS響應(yīng)報文,該過程也可以在數(shù)據(jù)幀處理模塊中新增一個具有數(shù)據(jù)處理功能的函數(shù)來完成,例如新增dev_qUeUe_xmit內(nèi)核函數(shù),DNS服務(wù)處理模塊將第二內(nèi)存的地址信息作為變量輸入給dev_qUeUe_xmit內(nèi)核函數(shù),以觸發(fā)數(shù)據(jù)幀處理模塊發(fā)送DNS響應(yīng)報文,dev_qUeUe_xmit內(nèi)核函數(shù)被調(diào)用后,完成如下操作 1.根據(jù)第二內(nèi)存的地址信息,從第二內(nèi)存中獲得DNS響應(yīng)報文,如果DNS響應(yīng)報文超過長度限制,還要進行分包處理; 2.計算DNS響應(yīng)報文并填寫到包中,如果需要分包,則分別計算每一個數(shù)據(jù)分包的校驗值并填寫到分包中; 3.為DNS響應(yīng)報文或者每一個數(shù)據(jù)分包選擇發(fā)送隊列; 4.將DNS響應(yīng)報文或者每一個數(shù)據(jù)分包加在選擇的發(fā)送隊列之后。
而網(wǎng)卡驅(qū)動模塊從各個發(fā)送隊列中獲取數(shù)據(jù)并發(fā)送,這個過程和現(xiàn)有技術(shù)的處理完全一樣,這里不再詳細描述。
基于上述原理,如圖2所示,本發(fā)明實施例首先提供一種基于Iinux操作系統(tǒng)的 DNS服務(wù)系統(tǒng),包括 網(wǎng)卡驅(qū)動模塊201,用于在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層;以及從發(fā)送隊列中讀取DNS響應(yīng)報文并發(fā)送給客戶端; 數(shù)據(jù)幀處理模塊202,用于在數(shù)據(jù)鏈路層接收網(wǎng)卡驅(qū)動模塊201轉(zhuǎn)發(fā)的DNS請求報文,將DNS請求報文保存到第一內(nèi)存中,并輸出第一內(nèi)存地址信息;以及根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊201的發(fā)送隊列中; DNS服務(wù)處理模塊203,用于根據(jù)數(shù)據(jù)幀處理模塊轉(zhuǎn)發(fā)的第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊201。
一種在圖2所示系統(tǒng)中實現(xiàn)的DNS服務(wù)方法如圖3所示,主要包括如下步驟 步驟301、網(wǎng)卡驅(qū)動模塊在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層; 步驟302、數(shù)據(jù)幀處理模塊在數(shù)據(jù)鏈路層接收網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文, 將DNS請求報文保存到第一內(nèi)存中,并將第一內(nèi)存地址信息發(fā)送給DNS服務(wù)處理模塊; 步驟303、DNS服務(wù)處理模塊根據(jù)第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文和保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊; 步驟304、數(shù)據(jù)幀處理模塊根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中; 步驟305、網(wǎng)卡驅(qū)動模塊從發(fā)送隊列中讀取DNS響應(yīng)報文,并發(fā)送客戶端。
其中,網(wǎng)卡驅(qū)動模塊201,通過調(diào)用數(shù)據(jù)幀處理模塊中的第一數(shù)據(jù)處理函數(shù)將DNS 請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊; 數(shù)據(jù)幀處理模塊,生成包含DNS請求報文的第一數(shù)據(jù)結(jié)構(gòu)體,將第一數(shù)據(jù)結(jié)構(gòu)存放保存到第一內(nèi)存中,并通過調(diào)用鉤子內(nèi)核函數(shù),將第一內(nèi)存地址信息轉(zhuǎn)發(fā)給DNS服務(wù)處理模塊。
其中,DNS服務(wù)處理模塊,生成包含DNS響應(yīng)報文的第二數(shù)據(jù)結(jié)構(gòu)體,將第二數(shù)據(jù)結(jié)構(gòu)存放保存到第二內(nèi)存中,并通過調(diào)用數(shù)據(jù)幀處理模塊中的第二數(shù)據(jù)處理函數(shù),將第二內(nèi)存地址信息轉(zhuǎn)發(fā)給數(shù)據(jù)幀處理模塊。
本發(fā)明實施例中,第一數(shù)據(jù)處理函數(shù)為netif_reCeiVe_Slib內(nèi)核函數(shù),鉤子內(nèi)核函數(shù)為netif_receive_skb內(nèi)核函數(shù)中的packet_frame_handle鉤子內(nèi)核函數(shù),該packet_
8frame_handle鉤子內(nèi)核函數(shù)被調(diào)用后,將第一內(nèi)存的地址信息傳輸給內(nèi)核中的DNS服務(wù)處理模塊; 第二數(shù)據(jù)處理函數(shù)為dev_queue_xmit內(nèi)核函數(shù),dev_queue_xmit內(nèi)核函數(shù)函數(shù)被調(diào)用后,完成如下操作根據(jù)第二內(nèi)存的地址信息,從第二內(nèi)存中獲得DNS響應(yīng)報文;為 DNS響應(yīng)報文選擇發(fā)送隊列;將DNS響應(yīng)報文加在選擇的發(fā)送隊列之后。
本發(fā)明實施例中,第一數(shù)據(jù)結(jié)構(gòu)體和/或第二數(shù)據(jù)結(jié)構(gòu)體為Slcb數(shù)據(jù)結(jié)構(gòu)體。
本發(fā)明實施例中,DNS服務(wù)處理模塊是專門針對DNS開發(fā)的內(nèi)核模塊,運行在 Linux內(nèi)核態(tài)。在OSI七層網(wǎng)絡(luò)模型中,該模塊運行在第二層,即數(shù)據(jù)鏈路層。DNS服務(wù)處理模塊根據(jù)客戶端的請求,產(chǎn)生相應(yīng)的DNS應(yīng)答報文,并調(diào)用deV_qUeUe_Xmit內(nèi)核函數(shù)將 DNS應(yīng)答報文發(fā)送出去。
為實現(xiàn)本發(fā)明,在Linux內(nèi)核中修改代碼,將業(yè)務(wù)代碼內(nèi)核化。通過修改Linux內(nèi)核代碼,在數(shù)據(jù)幀處理函數(shù)中增加鉤子內(nèi)核函數(shù),使得數(shù)據(jù)可以在數(shù)據(jù)鏈路層送給內(nèi)核的 DNS服務(wù)處理模塊,從而將DNS服務(wù)處理邏輯移到內(nèi)核態(tài)。
本發(fā)明實施例中,需要修改Linux內(nèi)核,增加數(shù)據(jù)鏈路層的鉤子,并新增Linux內(nèi)核模塊,即DNS業(yè)務(wù)處理模塊,配合該鉤子內(nèi)核函數(shù),在數(shù)據(jù)鏈路層對DNS請求報文進行處理。相對于現(xiàn)有的DNS服務(wù)軟件,本發(fā)明實施例提供的技術(shù)效率高,安全性強,受Linux內(nèi)核制約小,功能擴展性好。同等業(yè)務(wù)模型下,相同的硬件環(huán)境,本架構(gòu)的性能是比現(xiàn)有架構(gòu)的20-40倍。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明實施例進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種基于Iinux操作系統(tǒng)的DNS服務(wù)系統(tǒng),其特征在于,包括網(wǎng)卡驅(qū)動模塊,用于在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層;以及從發(fā)送隊列中讀取DNS響應(yīng)報文并發(fā)送給客戶端;數(shù)據(jù)幀處理模塊,用于在數(shù)據(jù)鏈路層接收所述網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文,將 DNS請求報文保存到第一內(nèi)存中,并輸出第一內(nèi)存地址信息;以及根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中;DNS服務(wù)處理模塊,用于根據(jù)數(shù)據(jù)幀處理模塊轉(zhuǎn)發(fā)的第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于所述網(wǎng)卡驅(qū)動模塊,具體用于通過調(diào)用數(shù)據(jù)幀處理模塊中的第一數(shù)據(jù)處理函數(shù)將所述 DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層的數(shù)據(jù)幀處理模塊;所述數(shù)據(jù)幀處理模塊,具體用于生成包含所述DNS請求報文的第一數(shù)據(jù)結(jié)構(gòu)體,將第一數(shù)據(jù)結(jié)構(gòu)存放保存到第一內(nèi)存中,并通過調(diào)用鉤子內(nèi)核函數(shù),將第一內(nèi)存地址信息轉(zhuǎn)發(fā)給DNS服務(wù)處理模塊。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于所述DNS服務(wù)處理模塊,具體用于生成包含DNS響應(yīng)報文的第二數(shù)據(jù)結(jié)構(gòu)體,將第二數(shù)據(jù)結(jié)構(gòu)存放保存到第二內(nèi)存中,并通過調(diào)用數(shù)據(jù)幀處理模塊中的第二數(shù)據(jù)處理函數(shù),將第二內(nèi)存地址信息轉(zhuǎn)發(fā)給數(shù)據(jù)幀處理模塊。
4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述第一數(shù)據(jù)處理函數(shù)為netif_reCeive_ skb內(nèi)核函數(shù),所述鉤子內(nèi)核函數(shù)為netif_receive_skb內(nèi)核函數(shù)中的packet_frame_ handle鉤子內(nèi)核函數(shù),該packetframejiandle鉤子內(nèi)核函數(shù)被調(diào)用后,將第一內(nèi)存的地址信息傳輸給內(nèi)核中的DNS服務(wù)處理模塊;所述第二數(shù)據(jù)處理函數(shù)為dev_queue_xmit內(nèi)核函數(shù),所述dev_queue_xmit內(nèi)核函數(shù)函數(shù)被調(diào)用后,完成如下操作根據(jù)第二內(nèi)存的地址信息,從第二內(nèi)存中獲得DNS響應(yīng)報文;為DNS響應(yīng)報文選擇發(fā)送隊列;將DNS響應(yīng)報文加在選擇的發(fā)送隊列中。
5.一種權(quán)利要求所述系統(tǒng)中的DNS服務(wù)方法,其特征在于,包括步驟一、網(wǎng)卡驅(qū)動模塊在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層;步驟二、數(shù)據(jù)幀處理模塊在數(shù)據(jù)鏈路層接收所述網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文, 將DNS請求報文和保存到第一內(nèi)存中,并將第一內(nèi)存地址信息發(fā)送給DNS服務(wù)處理模塊;步驟三、DNS服務(wù)處理模塊根據(jù)第一內(nèi)存地址信息,對第一內(nèi)存中保存的DNS請求報文進行DNS業(yè)務(wù)處理,生成DNS響應(yīng)報文,并將DNS響應(yīng)報文保存至第二內(nèi)存中,以及將第二內(nèi)存對應(yīng)的第二內(nèi)存地址信息發(fā)送給數(shù)據(jù)幀處理模塊;步驟四、數(shù)據(jù)幀處理模塊根據(jù)獲得的第二內(nèi)存的地址信息,將保存在第二內(nèi)存中的DNS 響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中;步驟五、網(wǎng)卡驅(qū)動模塊從發(fā)送隊列中讀取DNS響應(yīng)報文并發(fā)送給客戶端。
6.如權(quán)利要求5所述的方法,其特征在于所述步驟一中,所述網(wǎng)卡驅(qū)動模塊在物理層中將網(wǎng)卡從客戶端接收的DNS請求報文,通過調(diào)用數(shù)據(jù)幀處理模塊中的第一數(shù)據(jù)處理函數(shù),將接收的DNS請求報文轉(zhuǎn)發(fā)給數(shù)據(jù)鏈路層;所述步驟二中,所述數(shù)據(jù)幀處理模塊生成包含所述DNS請求報文的第一數(shù)據(jù)結(jié)構(gòu)體, 將第一數(shù)據(jù)結(jié)構(gòu)存放保存到第一內(nèi)存中,并通過調(diào)用DNS服務(wù)處理模塊中的第一鉤子內(nèi)核函數(shù),將第一內(nèi)存地址信息轉(zhuǎn)發(fā)給DNS服務(wù)處理模塊。
7.如權(quán)利要求6所述的方法,其特征在于所述步驟三中,所述DNS服務(wù)處理生成DNS響應(yīng)報文后,進一步生成包含DNS響應(yīng)報文的第二數(shù)據(jù)結(jié)構(gòu)體,將第二數(shù)據(jù)結(jié)構(gòu)存放保存到第二內(nèi)存中,并通過調(diào)用數(shù)據(jù)幀處理模塊中的第二數(shù)據(jù)處理函數(shù),將第二內(nèi)存地址信息轉(zhuǎn)發(fā)給數(shù)據(jù)幀處理模塊。
8.如權(quán)利要求6所述的方法,其特征在于,所述第一鉤子內(nèi)核函數(shù)為netif_reCeive_ skb內(nèi)核函數(shù)中的packetframejiandle鉤子內(nèi)核函數(shù),該函數(shù)被調(diào)用后,將第一內(nèi)存的地址信息傳輸給內(nèi)核中的DNS服務(wù)處理模塊;所述第二數(shù)據(jù)處理函數(shù)為dev_queue_xmit內(nèi)核函數(shù),所述dev_queue_xmit內(nèi)核函數(shù)函數(shù)被調(diào)用后,完成如下操作根據(jù)第二內(nèi)存的地址信息,從第二內(nèi)存中獲得DNS響應(yīng)報文;為DNS響應(yīng)報文選擇發(fā)送隊列;將DNS響應(yīng)報文加在選擇的發(fā)送隊列中。
9.如權(quán)利要求7或8中所述的方法,其特征在于,所述第一數(shù)據(jù)結(jié)構(gòu)體和/或第二數(shù)據(jù)結(jié)構(gòu)體為Ab數(shù)據(jù)結(jié)構(gòu)體。
全文摘要
本發(fā)明涉及計算機技術(shù),特別涉及一種基于linux操作系統(tǒng)的DNS服務(wù)系統(tǒng)和方法。本發(fā)明實施例中,將DNS服務(wù)處理模塊放在內(nèi)核的數(shù)據(jù)鏈路層,數(shù)據(jù)幀處理模塊在收到網(wǎng)卡驅(qū)動模塊轉(zhuǎn)發(fā)的DNS請求報文時存入內(nèi)存,并調(diào)用內(nèi)核的DNS服務(wù)處理模塊處理,DNS服務(wù)處理模塊生成DNS響應(yīng)報文并將保存到另一個內(nèi)存中,然后調(diào)用數(shù)據(jù)幀處理模塊從另一個內(nèi)存中讀取DNS響應(yīng)報文放入網(wǎng)卡驅(qū)動模塊的發(fā)送隊列中發(fā)送給客戶端。由于數(shù)據(jù)幀處理模塊和DNS服務(wù)處理模塊都位于內(nèi)核的數(shù)據(jù)鏈路層中,省去了其他內(nèi)核模塊的處理,同時避免了數(shù)據(jù)從內(nèi)核到應(yīng)用層和從應(yīng)用層到內(nèi)核的兩次內(nèi)存拷貝,從而提高了DNS服務(wù)的處理效率。
文檔編號H04L29/08GK102185936SQ201110172449
公開日2011年9月14日 申請日期2011年6月23日 優(yōu)先權(quán)日2011年6月23日
發(fā)明者張大順 申請人:上海牙木通訊技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
保亭| 大安市| 潼南县| 泰兴市| 富阳市| 贵德县| 婺源县| 冕宁县| 深州市| 富锦市| 宁晋县| 崇礼县| 鄯善县| 金湖县| 手机| 定边县| 合山市| 永川市| 逊克县| 余干县| 绥江县| 大安市| 文水县| 正阳县| 绵竹市| 惠安县| 固镇县| 富顺县| 东乌珠穆沁旗| 河曲县| 合水县| 封开县| 柘城县| 湾仔区| 遂溪县| 岢岚县| 古蔺县| 博乐市| 漯河市| 昭平县| 马鞍山市|