基于dns服務器測量特定ip范圍解析占比的方法及系統的制作方法
【技術領域】
[0001]本發明涉及互聯網技術領域,更具體地,涉及一種基于DNS服務器測量特定IP范圍解析占比的方法,用于為ICP和運營商分析ICP內子域名解析情況的數據支撐,便于下一步制定相關方案以優化ICP用戶體驗。
【背景技術】
[0002]DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。可見,DNS在web服務中占有極其重要的地位。其中本地dns服務器,采用遞歸的工作方式為客戶端解析域名,常見的本地dns服務器主要有bind和dnspod-sr。其中dnspod-sr是一個運行在Linux平臺上的高性能的遞歸DNS服務器軟件,具備高性能、高負載、易擴展的優勢,非BIND等軟件可以比擬。
[0003]因特網的域名解析系統被設計為一個聯機分布式數據庫系統,并采用客戶服務器方式。DNS解析主要采用UDP協議通信,端口號為53。當通過UDP協議多次請求查詢失敗時才會使用TCP協議通信。DNS大多數域名都通過本地進行DNS解析。本地域名服務器對域名解析系統非常重要,當一個主機發出DNS查詢請求時,這個查詢請求報文就會發給本地DNS服務器。本地DNS服務器一般都會采用遞歸查詢。所謂遞歸查詢就是:如果主機所訪問的域名本地DNS服務器不知道域名對應的IP地址,那么本地域名服務器就會以DNS客戶的身份,向其他根域名DNS服務器發出查詢請求報文(即替主機查詢),而不是讓主機自己進行下一步的查詢。因此,遞歸查詢返回的結果或者所要查詢的IP地址,或者是報錯,表示無法找到需要的IP地址。
[0004]DNS解析技術本身比較成熟,開源軟件也相對豐富。常見的本地dns服務器主要有bind和dnspod-sr。其中dnspod-sr是一個運行在Linux平臺上的高性能的遞歸DNS服務器軟件,具備高性能、高負載、易擴展的優勢,非BIND等軟件可以比擬。dnspod-sr具有以下特性:高性能,比所有流行的開源DNS軟件性能高出2倍以上;安全,能抵御一般攻擊;穩定,有效降低解析失敗率;主動刷新緩存,響應速度更快;易于擴展,非常容易部署;防污染,能夠正確解析被污染域名。
[0005]情況描述:
[0006](I)無論是bind還是dnspod-sr,這些傳統的DNS服務器只負責域名解析,作為運營商或者ICP往往想知道該ICP在使用本地DNS解析時特定運營商的ip解析占比情況。
[0007](2)如經過測量發現,某ICP的教育網ip解析占比相對較小,這樣可能該ICP在教育網內提供的IP個數較少,為教育網內用戶提供的帶寬自然就相對較小,從而教育網內用戶體驗不佳。另外,教育網內用戶訪問ICP時還有可能會跨網,這樣網絡延時可能相對增加,從而降低用戶訪問速度。
【發明內容】
[0008]為解決上述現有技術中存在的問題,本發明提出一種基于DNS服務器測量特定IP范圍解析占比的系統及方法。通過測量特定ip范圍的解析占比情況,供網絡運營商或ICP(內容服務提供商)決策提高解析占比,優化網內用戶體驗。
[0009]根據本發明一方面,其提供了一種基于DNS服務器測量預定IP地址范圍內的IP解析占比的方法,該方法包括:
[0010]步驟1、解析用戶發起的DNS解析請求,并把解析成功的域名以及對應的IP地址集合插入到單鏈表;
[0011]步驟2、從單鏈表中提取域名和IP地址集,并根據ICP列表和特定IP地址范圍生成記錄插入到哈希表中;
[0012]步驟3、從哈希表中讀取每個ICP相關的記錄,并計算出每個ICP在預定IP地址范圍的解析占比,并寫入日志文件。
[0013]根據本發明另一方面,其提供了一種基于DNS服務器測量預定IP范圍內的IP解析占比的系統,該系統包括:
[0014]DNS解析子系統,用于解析用戶發起的DNS解析請求,并把解析成功的域名以及對應的IP地址集合插入到單鏈表;
[0015]ICP判別子系統,用于從單鏈表中提取域名和IP地址集,并根據ICP列表和特定IP地址范圍生成記錄插入到哈希表中;
[0016]解析占比統計子系統,用于從哈希表中讀取每個ICP相關的記錄,并計算出每個ICP在預定IP地址范圍的解析占比,并寫入日志文件
[0017]本發明提出的上述方案通過將DNS解析、ICP判別、解析占比統計各模塊結合,實現實時、高效和準確地統計出ICP的IP解析占比情況,用于向網絡運營商或者ICP提供域名解析情況。
【附圖說明】
[0018]圖1為本發明中基于DNS服務器測量特定IP范圍解析占比的系統架構圖;
[0019]圖2為本發明中DNS解析子系統的系統架構圖;
[0020]圖3為本發明中ICP判別過程流程圖;
[0021 ]圖4為本發明中解析占比統計過程流程圖。
【具體實施方式】
[0022]為使本發明的目的、技術方案和優點更加清楚明白,以下結合具體實施例,并參照附圖,對本發明進一步詳細說明。根據本發明的實施例程,能夠清晰展示該發明下的解析占比統計功能。
[0023]為了提高效率本發明借鑒了開源軟件dnspod-sr。后續的子系統均是在dnspod-sr的基礎之上設計研發。
[0024]如圖1所示,本發明公開的一種基于DNS服務器測量特定IP范圍解析占比的系統,其包括:
[0025]DNS解析子系統,其用于解析用戶發起的DNS解析請求,并把解析成功的域名以及對應的ip地址集合插入到單鏈表;
[0026]ICP判別子系統,從單鏈表中提取解析成功的域名和ip地址集合,并根據ICP列表和特定ip地址范圍生成記錄插入到哈希表中;
[0027]解析占比統計子系統,從哈希表中讀取每個ICP相關的記錄計算出每個ICP特定范圍ip的解析占比,并寫入日志文件。
[0028]從具體實現上看,圖2示出了本發明中DNS解析子系統的實現模塊架構示意圖。如圖1所示,DNS解析子系統包括:邏輯處理模塊、功能模塊和支撐模塊;下面就各個模塊的實現及功能詳細做一介紹。
[0029]1、邏輯處理模塊
[°03°]邏輯處理模塊是dnspod-sr的主要工作線程,功能是完成整個DNS的遞歸解析過程。其包括以下子模塊:
[0031]I) sentinel子模塊,其使用EPOLL模型處理UDP和TCP的DNS查詢請求,接收數據并將數據地址存放到msgcache中。
[0032]2)f etcher子模塊,其從msgcache中獲取DNS查詢請求數據,解包后先查詢內存緩存(CNAME和請求類型),如果查詢成功則返回解析結果,如果查詢失敗則將查詢請求加入到quizzer列表中。
[0033]3) quizzer子模塊,其循環遍歷quizzer列表中的查詢請求,對每一個請求進行遞歸查詢,逐級向各級授權DNS服務器發送查詢請求,并解析各級授權服務器返回的解析結果,直到解析出結果后返回給客戶端并將中間各級解析結果插入本地緩存。
[0034]特別的,如果嘗試解析次數在將要達到最大嘗試次數時還未解析出結果,將會向GOOGLE的公共DNS服務器轉發該解析請求;如果解析超時或超過最大嘗試解析次數后則停止解析該請求。
[0035]4)control子模塊,其主要是配合客戶端工具(tool目錄)手動刷新指定的域名的緩存,可以用于某些TTL較長的記錄修改后或者被污染記錄修復后的強制刷新。
[0036]2、功能模塊
[0037]所述功能模塊主要用于處理網絡包和dns數據包的相關操作,其包括以下幾個子模塊:
[0038]I) event子模塊,主要功能是處理EPOLL和UDP/TCP查詢數據接收的相關操作。
[0039]2)dns子模塊,其主要完成DNS數據包的解包、組包等功能操作。
[0040]3、支撐模塊
[0041 ]所述支撐模塊為各功能提供支撐的基礎模塊,其包括以下幾個子模塊:
[0042]l)net子模塊,其為網絡的各種操作接口,完成socket的相關操作和數據收發。
[0043]2) storage子模塊,其為內存存儲模塊,為解析記錄緩存和quizzer列表提供增、刪、改、查功能支持。
[0044]3)memory子模塊,其為內存池的相關操作接口,用于內存池的創建、分配和釋放。
[0045]4)1子模塊,其為物理讀寫模塊,包括加載配置文件和記錄日志等功能。
[0046]5)datas子模塊,其為
[0047]紅黑樹的相關實現接口,用于自動刷新即將過期的記錄。
[0048]6)utils子模塊,其為一些雜項操作接口,如獲取隨機數據、大小寫轉換等操作。
[0049]本發明還公開了一種基于DNS服務器測量特定IP范圍解析占比的方法,該方法包括:
[0050]步驟1、DNS解析子系統解析用戶發起的DNS解析請求,并把解析成功的域名以及對應的ip地址集合插入到單鏈表;
[0051 ]步驟2、ICP判別子系統從單鏈表中提取域名和ip地址集,并根據ICP列表和特定ip地址范圍生成記錄插入到hash表中;
[0052]步驟3、解析占比統計子系統從hash表中讀取每個ICP相關的記錄計算出每個ICP特定范圍ip的解析占比,并寫入日志文件。
[0053]下面就上面三個步驟詳細介紹其實現過程。
[0054]本發明中步驟I的詳細實現過程,具體包括:步驟IUsentinel子模塊接收用戶發起的DNS解析請求,并將接收的DNS解析請求數據插入到msgcache中;
[°°55] 步驟12、f etcher子模塊從msgcache中獲取DNS解析請求對其解包并驗證查詢是否有效,之后查找本地緩存,如果緩存查找失敗則將所述DNS解析請求加入quizzer列表;
[0056]步驟13、quizzer子模塊遍歷quizzer列表獲取DNS解析請求之后查找轉發緩存,若查找失敗,則各級授權DNS服務器轉發所述DNS解析請求。