本發(fā)明涉及操作系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法及裝置。
背景技術(shù):
在信息化時(shí)代,網(wǎng)絡(luò)顯現(xiàn)出非常重要的作用。無論是在個(gè)人主機(jī)還是在服務(wù)器中,網(wǎng)絡(luò)的可用性和可靠性都直接影響著系統(tǒng)性能,決定主機(jī)之間通信的質(zhì)量好壞。
當(dāng)計(jì)算機(jī)系統(tǒng)出現(xiàn)網(wǎng)絡(luò)故障時(shí),用戶通常會(huì)借助外部的網(wǎng)絡(luò)管理工具來檢測網(wǎng)絡(luò)問題,常用的網(wǎng)絡(luò)管理工具,如ping、netstat、ip等,都是從用戶態(tài)的角度出發(fā)對(duì)網(wǎng)絡(luò)問題進(jìn)行檢測,需要用戶熟悉相應(yīng)的網(wǎng)絡(luò)管理工具才能進(jìn)行網(wǎng)絡(luò)問題的檢測,操作比較被動(dòng),不方便用戶及時(shí)了解網(wǎng)絡(luò)出錯(cuò)詳情。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明提供一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法及裝置。
一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法,包括:
通過協(xié)議層事件收集模塊在檢測到故障收集函數(shù)中存在差錯(cuò)報(bào)文時(shí),根據(jù)所述差錯(cuò)報(bào)文,生成故障事件,所述差錯(cuò)報(bào)文為數(shù)據(jù)包傳輸過程中的差錯(cuò)報(bào)文;
通過事件發(fā)送模塊對(duì)所述故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中;
通過事件接收模塊監(jiān)聽所述故障事件列表,并對(duì)所述故障事件列表中的故障事件進(jìn)行解析,獲得故障詳情,輸出故障信息給系統(tǒng)用戶,所述故障信息中攜帶所述故障詳情。
在本發(fā)明的一種具體實(shí)施方式中,所述根據(jù)所述差錯(cuò)報(bào)文,生成故障事件,包括:
利用錯(cuò)誤處理函數(shù)對(duì)所述差錯(cuò)報(bào)文進(jìn)行解析;
根據(jù)所述差錯(cuò)報(bào)文的頭部信息,生成故障事件。
在本發(fā)明的一種具體實(shí)施方式中,所述將封裝后的故障事件添加到故障事件列表中,包括:
調(diào)用已注冊的事件發(fā)送函數(shù)將封裝后的故障事件添加到故障事件列表中,所述事件發(fā)送函數(shù)為所述事件接收模塊注冊以供所述事件發(fā)送模塊調(diào)用的。
在本發(fā)明的一種具體實(shí)施方式中,所述故障事件中包含故障事件鏈表指針信息、IP版本號(hào)信息、報(bào)文類型信息、報(bào)文類型子碼信息、錯(cuò)誤碼信息和差錯(cuò)報(bào)文的嚴(yán)重程度信息。
一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測裝置,包括:
協(xié)議層事件收集模塊,用于在檢測到故障收集函數(shù)中存在差錯(cuò)報(bào)文時(shí),根據(jù)所述差錯(cuò)報(bào)文,生成故障事件,所述差錯(cuò)報(bào)文為數(shù)據(jù)包傳輸過程中的差錯(cuò)報(bào)文;
事件發(fā)送模塊,用于對(duì)所述故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中;
事件接收模塊,用于監(jiān)聽所述故障事件列表,并對(duì)所述故障事件列表中的故障事件進(jìn)行解析,獲得故障詳情,輸出故障信息給系統(tǒng)用戶,所述故障信息中攜帶所述故障詳情。
在本發(fā)明的一種具體實(shí)施方式中,所述協(xié)議層事件收集模塊,具體用于:
利用錯(cuò)誤處理函數(shù)對(duì)所述差錯(cuò)報(bào)文進(jìn)行解析;
根據(jù)所述差錯(cuò)報(bào)文的頭部信息,生成故障事件。
在本發(fā)明的一種具體實(shí)施方式中,所述事件發(fā)送模塊,具體用于:
調(diào)用已注冊的事件發(fā)送函數(shù)將封裝后的故障事件添加到故障事件列表中,所述事件發(fā)送函數(shù)為所述事件接收模塊注冊以供所述事件發(fā)送模塊調(diào)用的。
在本發(fā)明的一種具體實(shí)施方式中,所述故障事件中包含故障事件鏈表指針信息、IP版本號(hào)信息、報(bào)文類型信息、報(bào)文類型子碼信息、錯(cuò)誤碼信息和差錯(cuò)報(bào)文的嚴(yán)重程度信息。
應(yīng)用本發(fā)明實(shí)施例所提供的技術(shù)方案,通過協(xié)議層事件收集模塊可以檢測故障收集函數(shù)中是否存在差錯(cuò)報(bào)文,當(dāng)存在差錯(cuò)報(bào)文時(shí),可以根據(jù)差錯(cuò)報(bào)文,生成故障事件,通過事件發(fā)送模塊可以對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中,通過事件接收模塊可以監(jiān)聽故障事件列表,并對(duì)監(jiān)聽到的故障事件進(jìn)行解析,獲得故障詳情,向系統(tǒng)用戶輸出故障信息。實(shí)現(xiàn)了內(nèi)核態(tài)下數(shù)據(jù)包傳輸出錯(cuò)自動(dòng)檢測,方便系統(tǒng)用戶及時(shí)了解網(wǎng)絡(luò)出錯(cuò)詳情。
附圖說明
為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例中一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法的實(shí)施流程圖;
圖2為本發(fā)明實(shí)施例中一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
參見圖1所示,為本發(fā)明實(shí)施例所提供的一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法的實(shí)施流程圖,該方法可以包括以下步驟:
S110:通過協(xié)議層事件收集模塊在檢測到故障收集函數(shù)中存在差錯(cuò)報(bào)文時(shí),根據(jù)差錯(cuò)報(bào)文,生成故障事件。
差錯(cuò)報(bào)文為數(shù)據(jù)包傳輸過程中的差錯(cuò)報(bào)文。
在本發(fā)明實(shí)施例中,可以通過修改錯(cuò)誤處理函數(shù)err_handler,修改Linux原始內(nèi)核協(xié)議層中各協(xié)議的錯(cuò)誤處理方法。具體的,可以在錯(cuò)誤處理函數(shù)添加故障收集函數(shù),使之具有故障收集功能。
在數(shù)據(jù)包傳輸過程中,如果遇到問題,將調(diào)用協(xié)議結(jié)構(gòu)net_protocol的錯(cuò)誤處理函數(shù)err_handler,在錯(cuò)誤處理函數(shù)的故障收集函數(shù)中可以記錄差錯(cuò)報(bào)文,該差錯(cuò)報(bào)文即為數(shù)據(jù)包傳輸過程中的差錯(cuò)報(bào)文。
通過協(xié)議層事件收集模塊可以檢測故障收集函數(shù)中是否存在差錯(cuò)報(bào)文,如果存在,則協(xié)議層事件收集模塊可以根據(jù)該差錯(cuò)報(bào)文,生成故障事件。
在本發(fā)明的一種具體實(shí)施方式中,根據(jù)差錯(cuò)報(bào)文,生成故障事件的步驟具體可以包括以下步驟:
步驟一:利用錯(cuò)誤處理函數(shù)對(duì)差錯(cuò)報(bào)文進(jìn)行解析;
步驟二:根據(jù)差錯(cuò)報(bào)文的頭部信息,生成故障事件。
為便于描述,將上述兩個(gè)步驟結(jié)合起來進(jìn)行說明。
在實(shí)際應(yīng)用中,當(dāng)協(xié)議層事件收集模塊檢測到故障收集函數(shù)中存在差錯(cuò)報(bào)文時(shí),可以基于內(nèi)核代碼中結(jié)構(gòu)體struct net_protocol,利用其成員錯(cuò)誤處理函數(shù)err_handler,對(duì)差錯(cuò)報(bào)文進(jìn)行解析,即對(duì)差錯(cuò)報(bào)文數(shù)據(jù)包進(jìn)行分析,獲得該差錯(cuò)報(bào)文的頭部信息。根據(jù)差錯(cuò)報(bào)文的頭部信息,可以生成故障事件。
在本發(fā)明實(shí)施例中,故障事件中包含故障事件鏈表指針信息、IP版本號(hào)信息、報(bào)文類型信息、報(bào)文類型子碼信息、錯(cuò)誤碼信息和差錯(cuò)報(bào)文的嚴(yán)重程度信息。
故障事件結(jié)構(gòu)體定義如下:
在該故障事件結(jié)構(gòu)體中,list為故障事件鏈表指針;ipv代表IP版本號(hào);type為報(bào)文類型,其中,在ipv4中,ICMP_TIME_EXCEEDED、ICMP_SOURCE_QUENCH、ICMP_PARAMETERPROB、ICMP_DEST_UNREACH為差錯(cuò)報(bào)文,在ipv6中,ICMPV6_DEST_UNREACH、ICMPV6_PKT_TOOBIG、ICMPV6_TIME_EXCEED、ICMPV6_PARAMPROB為差錯(cuò)報(bào)文;code為報(bào)文類型子碼,通過該信息可以進(jìn)一步確定錯(cuò)誤類型;err為錯(cuò)誤碼,不同種類的差錯(cuò)報(bào)文的錯(cuò)誤碼不同,說明故障類型不同;harderr表示差錯(cuò)報(bào)文的嚴(yán)重程度,是否可修復(fù)。
協(xié)議層事件收集模塊對(duì)差錯(cuò)報(bào)文進(jìn)行解析,獲得差錯(cuò)報(bào)文的頭部信息后,可以根據(jù)該差錯(cuò)報(bào)文的頭部信息,對(duì)故障事件結(jié)構(gòu)體protocol_evt中的成員進(jìn)行賦值,生成故障事件。例如,在UDP中,err_handler被賦值為__udp4_lib_err(),在__udp4_lib_err()中添加相應(yīng)代碼,可以實(shí)現(xiàn)對(duì)protocol_evt中各成員的賦值。
通過協(xié)議層事件收集模塊生成故障事件后,可以繼續(xù)執(zhí)行步驟S120的操作。
S120:通過事件發(fā)送模塊對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中。
在步驟S110,通過協(xié)議層事件收集模塊生成故障事件后,可以進(jìn)一步通過事件發(fā)送模塊對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中。
在本發(fā)明的一種具體實(shí)施方式中,將封裝后的故障事件添加到故障事件列表中的步驟具體可以包括以下步驟:
調(diào)用已注冊的事件發(fā)送函數(shù)將封裝后的故障事件添加到故障事件列表中,事件發(fā)送函數(shù)為事件接收模塊注冊以供事件發(fā)送模塊調(diào)用的。
事件發(fā)送模塊調(diào)用已注冊的事件發(fā)送函數(shù)將封裝后的故障事件添加到故障事件列表中,事件接收模塊會(huì)對(duì)該故障事件列表進(jìn)行監(jiān)聽。
舉例而言,事件發(fā)送函數(shù)protocol_post_error可以表示如下:
在上述代碼中,protocol_evt_post為具體的發(fā)送函數(shù),由外部模塊實(shí)現(xiàn)。在實(shí)際應(yīng)用中,可以將上述代碼以kpatch動(dòng)態(tài)補(bǔ)丁機(jī)制加載至內(nèi)核工作。
外部模塊實(shí)現(xiàn)發(fā)送故障事件的功能,以ko模塊的形式加載工作,具體可以參考以下代碼:
S130:通過事件接收模塊監(jiān)聽故障事件列表,并對(duì)故障事件列表中的故障事件進(jìn)行解析,獲得故障詳情,輸出故障信息給系統(tǒng)用戶,故障信息中攜帶故障詳情。
在步驟S110和步驟S120中,通過協(xié)議層事件收集模塊可以生成故障事件,通過事件發(fā)送模塊可以對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中。
在本發(fā)明實(shí)施例中,通過事件接收模塊可以監(jiān)聽故障事件列表。當(dāng)監(jiān)聽到故障事件列表中存在故障事件時(shí),可以對(duì)故障事件進(jìn)行解析,獲得故障詳情,并將故障信息輸出給系統(tǒng)用戶,在故障信息中攜帶故障詳情。
舉例而言,事件接收模塊的具體工作過程可以參考以下代碼:
其中,結(jié)構(gòu)體protocol_evt_u為用戶態(tài)下的事件結(jié)構(gòu),errmsg_parse()可以根據(jù)故障事件的成員值,解析故障詳情,輸出故障信息。
在本發(fā)明實(shí)施例中,利用kpatch動(dòng)態(tài)內(nèi)核補(bǔ)丁方式,修改Linux原始內(nèi)核協(xié)議層中各協(xié)議的錯(cuò)誤處理方法,增添了故障收集函數(shù),實(shí)現(xiàn)了數(shù)據(jù)包傳輸出錯(cuò)檢測。
應(yīng)用本發(fā)明實(shí)施例所提供的方法,通過協(xié)議層事件收集模塊可以檢測故障收集函數(shù)中是否存在差錯(cuò)報(bào)文,當(dāng)存在差錯(cuò)報(bào)文時(shí),可以根據(jù)差錯(cuò)報(bào)文,生成故障事件,通過事件發(fā)送模塊可以對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中,通過事件接收模塊可以監(jiān)聽故障事件列表,并對(duì)監(jiān)聽到的故障事件進(jìn)行解析,獲得故障詳情,向系統(tǒng)用戶輸出故障信息。實(shí)現(xiàn)了內(nèi)核態(tài)下數(shù)據(jù)包傳輸出錯(cuò)自動(dòng)檢測,方便系統(tǒng)用戶及時(shí)了解網(wǎng)絡(luò)出錯(cuò)詳情。
相應(yīng)于上面的方法實(shí)施例,本發(fā)明還提供了一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測裝置。
參見圖2所示,該裝置可以包括以下模塊:
協(xié)議層事件收集模塊210,用于在檢測到故障收集函數(shù)中存在差錯(cuò)報(bào)文時(shí),根據(jù)差錯(cuò)報(bào)文,生成故障事件,差錯(cuò)報(bào)文為數(shù)據(jù)包傳輸過程中的差錯(cuò)報(bào)文;
事件發(fā)送模塊220,用于對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中;
事件接收模塊230,用于監(jiān)聽故障事件列表,并對(duì)故障事件列表中的故障事件進(jìn)行解析,獲得故障詳情,輸出故障信息給系統(tǒng)用戶,故障信息中攜帶故障詳情。
應(yīng)用本發(fā)明實(shí)施例所提供的裝置,通過協(xié)議層事件收集模塊可以檢測故障收集函數(shù)中是否存在差錯(cuò)報(bào)文,當(dāng)存在差錯(cuò)報(bào)文時(shí),可以根據(jù)差錯(cuò)報(bào)文,生成故障事件,通過事件發(fā)送模塊可以對(duì)故障事件進(jìn)行封裝,并將封裝后的故障事件添加到故障事件列表中,通過事件接收模塊可以監(jiān)聽故障事件列表,并對(duì)監(jiān)聽到的故障事件進(jìn)行解析,獲得故障詳情,向系統(tǒng)用戶輸出故障信息。實(shí)現(xiàn)了內(nèi)核態(tài)下數(shù)據(jù)包傳輸出錯(cuò)自動(dòng)檢測,方便系統(tǒng)用戶及時(shí)了解網(wǎng)絡(luò)出錯(cuò)詳情。
在本發(fā)明的一種具體實(shí)施方式中,協(xié)議層事件收集模塊210,具體用于:
利用錯(cuò)誤處理函數(shù)對(duì)差錯(cuò)報(bào)文進(jìn)行解析;
根據(jù)差錯(cuò)報(bào)文的頭部信息,生成故障事件。
在本發(fā)明的一種具體實(shí)施方式中,事件發(fā)送模塊220,具體用于:
調(diào)用已注冊的事件發(fā)送函數(shù)將封裝后的故障事件添加到故障事件列表中,事件發(fā)送函數(shù)為事件接收模塊230注冊以供事件發(fā)送模塊220調(diào)用的。
在本發(fā)明的一種具體實(shí)施方式中,故障事件中包含故障事件鏈表指針信息、IP版本號(hào)信息、報(bào)文類型信息、報(bào)文類型子碼信息、錯(cuò)誤碼信息和差錯(cuò)報(bào)文的嚴(yán)重程度信息。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同或相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上對(duì)本發(fā)明所提供的一種內(nèi)核態(tài)下網(wǎng)絡(luò)故障檢測方法及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。