本發(fā)明涉及一種互聯(lián)網(wǎng)故障的故障源定位方法,屬于應(yīng)用軟件開發(fā)技術(shù)領(lǐng)域,適用于資源類互聯(lián)網(wǎng)業(yè)務(wù)故障的故障源定位。
背景技術(shù):
近年來,互聯(lián)網(wǎng)技術(shù)的進(jìn)步為互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展帶來了極大的空間?;ヂ?lián)網(wǎng)業(yè)務(wù)需求急劇增加,很多網(wǎng)站的訪問量激增,這為服務(wù)器帶來了很大的負(fù)擔(dān),服務(wù)器崩潰的現(xiàn)象時(shí)有發(fā)生,使得用戶體驗(yàn)變差。決跨運(yùn)營商、跨地區(qū)、服務(wù)器負(fù)載能力過低、帶寬過少等帶來的問題日益突出。cdn(內(nèi)容分發(fā)網(wǎng)絡(luò))應(yīng)運(yùn)而生。cdn基于緩存服務(wù)器,將內(nèi)容供應(yīng)商所提供的的信息鏡像到各個(gè)服務(wù)節(jié)點(diǎn)上,能夠?qū)崟r(shí)地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點(diǎn)的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時(shí)間等綜合信息將用戶的請(qǐng)求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點(diǎn)上。
cdn將網(wǎng)站內(nèi)容鏡像到多個(gè)服務(wù)節(jié)點(diǎn)上,這樣在很大程度上分擔(dān)了服務(wù)器的壓力,提高了用戶的訪問速度,但是也使得相關(guān)服務(wù)設(shè)備增多,組網(wǎng)更加復(fù)雜。雖然cdn的使用可以有效防止黑客攻擊、解決跨運(yùn)營商等問題,但是它的實(shí)時(shí)性不是很好,自于遠(yuǎn)程服務(wù)器的網(wǎng)絡(luò)內(nèi)容網(wǎng)頁與復(fù)本服務(wù)器或緩存器中的網(wǎng)頁不能保持實(shí)時(shí)同步。當(dāng)有故障產(chǎn)生時(shí),由于組網(wǎng)復(fù)雜,服務(wù)節(jié)點(diǎn)具有不確定性,這為相關(guān)工作人員定位故障源時(shí)帶來了較大的阻礙。
現(xiàn)在運(yùn)營商工作人員在對(duì)互聯(lián)網(wǎng)故障的故障源進(jìn)行定位時(shí),主要通過人工對(duì)相關(guān)抓包文件進(jìn)行分析,經(jīng)過分析后獲取到故障ip地址后再與映射表進(jìn)行比對(duì)從而判斷出故障廠家。整個(gè)故障源定位過程都依賴人工完成,工作復(fù)雜繁瑣,效率較低,而且相關(guān)工作人員在對(duì)抓包文件進(jìn)行分析時(shí)主要憑借經(jīng)驗(yàn)來判斷,分析結(jié)果不夠準(zhǔn)確。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于解決現(xiàn)有對(duì)資源類互聯(lián)網(wǎng)故障的故障源定位不準(zhǔn)確、效率低的問題,將網(wǎng)絡(luò)監(jiān)聽技術(shù)、dns域名解析技術(shù)、路由跟蹤技術(shù)等相關(guān)技術(shù)相結(jié)合,抓取主機(jī)所傳輸?shù)幕ヂ?lián)網(wǎng)數(shù)據(jù)幀,對(duì)數(shù)據(jù)幀進(jìn)行分析,準(zhǔn)確、高效地定位出互聯(lián)網(wǎng)故障源。
本發(fā)明實(shí)現(xiàn)上述技術(shù)創(chuàng)新的方案是,采用網(wǎng)絡(luò)監(jiān)聽技術(shù)捕獲計(jì)算機(jī)所傳輸?shù)臄?shù)據(jù)幀并對(duì)其加以分析。internet由眾多的局域網(wǎng)所組成,這些局域網(wǎng)一般是以太網(wǎng)、令牌網(wǎng)結(jié)構(gòu)。數(shù)據(jù)在這些網(wǎng)絡(luò)上是以很小的稱為幀(frame)的單位傳輸?shù)模瑤ㄟ^特定的網(wǎng)絡(luò)驅(qū)動(dòng)程序進(jìn)行成型,然后通過網(wǎng)卡發(fā)送到網(wǎng)線上。當(dāng)網(wǎng)絡(luò)接口處于正常狀態(tài)時(shí),網(wǎng)卡收到傳輸來的數(shù)據(jù)幀,網(wǎng)卡內(nèi)的芯片程序先接收數(shù)據(jù)頭的目的mac地址,根據(jù)計(jì)算機(jī)上的網(wǎng)卡驅(qū)動(dòng)程序設(shè)置的接收模式判斷該不該接收,如果認(rèn)為是目的地址為本機(jī)地址的數(shù)據(jù)幀或是廣播幀,則接收并在接收后產(chǎn)生中斷信號(hào)通知cpu,否則就丟棄不管,cpu得到中斷信號(hào)產(chǎn)生中斷,操作系統(tǒng)就根據(jù)網(wǎng)卡驅(qū)動(dòng)程序中設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動(dòng)程序接收數(shù)據(jù),驅(qū)動(dòng)程序接收數(shù)據(jù)后放入堆棧讓操作系統(tǒng)處理。本發(fā)明使用winpcap所提供的存儲(chǔ)和讀取網(wǎng)絡(luò)數(shù)據(jù)的函數(shù),通過將網(wǎng)卡設(shè)置為混雜模式,它對(duì)遇到的每一個(gè)幀都產(chǎn)生一個(gè)硬件中斷以便提醒操作系統(tǒng)處理流經(jīng)該物理媒體上的每一個(gè)報(bào)文包。再設(shè)計(jì)相應(yīng)的軟件對(duì)報(bào)文處理,分析這些數(shù)據(jù)的內(nèi)容,獲取到故障ip地址。最后通過路由跟蹤、與地址池比對(duì)定位出互聯(lián)網(wǎng)業(yè)務(wù)故障的cdn廠家或源地址廠家。
本發(fā)明提出的優(yōu)點(diǎn)所在之處:提出一種完整的互聯(lián)網(wǎng)故障源定位流程,將網(wǎng)絡(luò)監(jiān)聽技術(shù)、dns域名解析技術(shù)、路由跟蹤技術(shù)等相關(guān)技術(shù)相結(jié)合,能夠智能地準(zhǔn)確定位出資源類互聯(lián)網(wǎng)故障源,很大程度上節(jié)省了人力,提高了故障處理的效率。故障源定位軟件可根據(jù)不同情況進(jìn)行定位,針對(duì)網(wǎng)頁類故障,能夠直觀獲取到故障的域名url,這類型故障可直接通過dns域名解析將域名url解析為與其映射的ip地址,獲取到故障源ip地址;而針對(duì)軟件類、游戲類等故障,無法直接獲取到故障ip地址,這類型故障首先需要進(jìn)行網(wǎng)絡(luò)監(jiān)聽獲取到主機(jī)在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù),再通過對(duì)數(shù)據(jù)幀通過http協(xié)議、tcp/ip協(xié)議等進(jìn)行分析,定位出故障源ip地址。
附圖說明
圖1是本發(fā)明互聯(lián)網(wǎng)業(yè)務(wù)故障源定位流程圖。
圖2網(wǎng)絡(luò)監(jiān)聽系統(tǒng)的整體框架。
圖3是網(wǎng)絡(luò)監(jiān)聽程序的實(shí)現(xiàn)步驟。
圖4是對(duì)數(shù)據(jù)幀進(jìn)行關(guān)鍵的協(xié)議分析模塊簡(jiǎn)化流程圖(也即解碼函數(shù)調(diào)用關(guān)系圖)。
具體實(shí)施方式
本發(fā)明提出一種基于網(wǎng)絡(luò)監(jiān)聽的資源類互聯(lián)網(wǎng)故障源定位方法,由網(wǎng)絡(luò)監(jiān)聽、dns域名解析、數(shù)據(jù)幀分析、路由跟蹤、與地址池比五個(gè)部分組成。
對(duì)互聯(lián)網(wǎng)故障源進(jìn)行定位,首先要獲取故障的ip地址。針對(duì)網(wǎng)頁類互聯(lián)網(wǎng)故障,可以直觀的獲取到故障的域名url,這類型故障可直接通過dns域名解析將域名url解析為與其映射的ip地址,獲取到故障源ip地址。針對(duì)這類情況,本發(fā)明采用動(dòng)、靜態(tài)域名解析相結(jié)合的方法對(duì)域名進(jìn)行解析映射,首先采用靜態(tài)域名解析的方法,如果靜態(tài)域名解析不成功,再采用動(dòng)態(tài)域名解析的方法,將一些常用的域名放入靜態(tài)域名解析表中,這樣可以大大提高域名解析效率。
針對(duì)軟件類或游戲類的互聯(lián)網(wǎng)故障,無法直觀的獲取到故障的域名url,這類型故障首先需要進(jìn)行網(wǎng)絡(luò)監(jiān)聽獲取到主機(jī)在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)。首先要?jiǎng)?chuàng)建一個(gè)使用wpcap.dll或packet.dll的程序,通常一個(gè)winpcap應(yīng)用程序要做的第一件事是獲得網(wǎng)絡(luò)適配器列表。winpcap提供了pacp_findalldevs_ex()功能,它返回一個(gè)pcap_if結(jié)構(gòu)的鏈表,每個(gè)pcap_if結(jié)構(gòu)含有適配器的信息。該結(jié)構(gòu)中的名和描述域是設(shè)備的名字和描述。第二件要做的事就是打開網(wǎng)絡(luò)適配器。打開捕獲設(shè)備的方法是pcap_open()。第三件要做的事就是編譯和設(shè)置過濾器。winpcap提供的一個(gè)非常強(qiáng)大的特性就是過濾引擎。它提供了非常有效的方法接收部分網(wǎng)絡(luò)流量,它集成在winpcap提供的包捕獲機(jī)制中。用來過濾包的功能是pcap_compile()和pcap_setfilter()opcap_compile()接收一個(gè)高層布爾過濾表達(dá)式字符串,并產(chǎn)生能被過濾引擎解釋的低級(jí)二進(jìn)制碼。pcap_compile()用來把字符串編譯成過濾程序。pcap_setfilter()使捕獲和內(nèi)核驅(qū)動(dòng)相關(guān)聯(lián)。一旦pcap_setfilter()被調(diào)用,相關(guān)的過濾器能夠用于網(wǎng)絡(luò)上到來的所有數(shù)據(jù)包,所有符合要求的包能被拷貝到應(yīng)用程序。一旦打開了適配器,就可以使用pcap_dispatch()或pcap_loop()功能進(jìn)行捕獲。這也是第四件要做的事。這兩個(gè)功能很相似,不同之處在于pcap_dispatch()超時(shí)會(huì)返回,而pcap_loop()直到包被捕獲才會(huì)返回。這些功能都有一個(gè)回調(diào)參數(shù),packed_hardler,指向一個(gè)接收包的功能。每當(dāng)新的包到來,這個(gè)功能被調(diào)用,接收一個(gè)狀態(tài)和和一個(gè)頭,這個(gè)頭含有一些包的信息,比如時(shí)間戳,包長(zhǎng)度以及實(shí)際的包數(shù)據(jù)。最后一步就是捕獲數(shù)據(jù)包的協(xié)議分析和內(nèi)容分析了。在數(shù)據(jù)包處理函數(shù)中聲明packet結(jié)構(gòu)體變量,并調(diào)用相應(yīng)的解碼函數(shù),例如若調(diào)用以太網(wǎng)解碼函數(shù),則會(huì)捕獲數(shù)據(jù)鏈路層信息并存入packet結(jié)構(gòu)中,并根據(jù)以太網(wǎng)報(bào)頭中的幀類型域判斷報(bào)文上一層(網(wǎng)絡(luò)層)協(xié)議類型,調(diào)用相應(yīng)的網(wǎng)絡(luò)層解碼函數(shù)。每一層的解碼函數(shù)相似,整個(gè)解碼模塊就是一個(gè)由頂向下,不斷分支的樹形結(jié)構(gòu)。每一層分析都將本層信息寫入packet結(jié)構(gòu)并抽去本層報(bào)頭,根據(jù)報(bào)文內(nèi)容,按照協(xié)議層次選擇下一級(jí)解碼函數(shù),將剩下的報(bào)文交給它處理。然后分析packet結(jié)構(gòu),即可抽取各層信息并將這些信息輸出至用戶界面或日志文件。在每一層的處理過程中都將修改統(tǒng)計(jì)信息(packetcount結(jié)構(gòu)),分析packetcount結(jié)構(gòu),就可得出統(tǒng)計(jì)信息。
在獲取到故障ip地址后,對(duì)該ip地址進(jìn)行路由跟蹤,確定ip數(shù)據(jù)報(bào)訪問目標(biāo)所采取的路徑,判斷出所走出口的路由節(jié)點(diǎn)或路由中斷的路由節(jié)點(diǎn)。
最后,將獲取到的所走出口的路由節(jié)點(diǎn)與運(yùn)營商內(nèi)部數(shù)據(jù)庫的地址池進(jìn)行比對(duì),定位出互聯(lián)網(wǎng)業(yè)務(wù)故障的cdn廠家或源地址廠家。