立足網(wǎng)絡(luò)層 輕松排除網(wǎng)絡(luò)故障
下面將列舉兩個(gè)基于網(wǎng)絡(luò)層的網(wǎng)絡(luò)故障分析案例。
分析工具:科來網(wǎng)絡(luò)分析系統(tǒng)6.0專家版(當(dāng)然大家也可以用類似的工具)
一、巧用TTL值診斷網(wǎng)絡(luò)故障
1、簡(jiǎn)介
TTL,全稱是Time To Live,中文名為“生存時(shí)間”,它是IP報(bào)頭中一個(gè)非常重要的參數(shù)。通過TTL的值,我們可以判斷出當(dāng)前網(wǎng)絡(luò)IP層的工作狀況。
TTL告訴網(wǎng)絡(luò)中的路由器數(shù)據(jù)包在網(wǎng)絡(luò)中的時(shí)間是否太長(zhǎng)而應(yīng)被丟棄,TTL的最初設(shè)想是確定一個(gè)時(shí)間范圍,超過此時(shí)間就把包丟棄。由于數(shù)據(jù)包每經(jīng)過一個(gè)路由器時(shí),TTL值都會(huì)至少被路由器減1,所以TTL值通常表示包在被丟棄前還能最多經(jīng)過的路由器個(gè)數(shù)。當(dāng)TTL值為0時(shí),路由器丟棄該數(shù)據(jù)包,并發(fā)送一個(gè)ICMP報(bào)文給數(shù)據(jù)包的最初發(fā)送者。
有很多原因會(huì)導(dǎo)致數(shù)據(jù)包在一定時(shí)間內(nèi)不能被傳遞到目的地。例如,不正確的路由表配置可能導(dǎo)致數(shù)據(jù)包的無限循環(huán),而解決方法就是在一段時(shí)間后丟棄這個(gè)數(shù)據(jù)包,然后給發(fā)送者發(fā)送一個(gè)報(bào)文,由發(fā)送者決定是否重發(fā)該數(shù)據(jù)包。當(dāng)網(wǎng)絡(luò)出現(xiàn)這種情況時(shí),數(shù)據(jù)包就會(huì)在路由表中配置錯(cuò)誤的路由器處重復(fù)發(fā)送,每發(fā)送一次,TTL值減1,直到TTL為0時(shí)路由器丟棄該數(shù)據(jù)包,造成網(wǎng)絡(luò)中數(shù)據(jù)傳輸錯(cuò)誤。
操作系統(tǒng)和傳輸協(xié)議不同,對(duì)應(yīng)TTL的默認(rèn)值也不同。圖1列出了常見操作系統(tǒng)通過TCP和UDP協(xié)議傳輸時(shí)的TTL默認(rèn)值。(圖1)
2、查看數(shù)據(jù)包的TTL值并分析傳輸故障
網(wǎng)絡(luò)中的網(wǎng)絡(luò)設(shè)備,其內(nèi)部都是由操作系統(tǒng)進(jìn)行處理的(有些硬件設(shè)備將系統(tǒng)預(yù)裝在了硬件芯片里面),在網(wǎng)絡(luò)遇到傳輸故障時(shí),我們可以使用網(wǎng)絡(luò)檢測(cè)軟件,結(jié)合上表的信息對(duì)網(wǎng)絡(luò)中流通的數(shù)據(jù)包進(jìn)行檢測(cè),查看數(shù)據(jù)包的TTL值,以確定故障是否由錯(cuò)誤的路由等原因引起。圖2是使用科來網(wǎng)絡(luò)分析系統(tǒng)5.0查看一個(gè)數(shù)據(jù)包TTL值的情況。(圖2)
圖中的生存時(shí)間(TTL)是247,結(jié)合圖1,確定出這個(gè)數(shù)據(jù)包在從源端(這里是61.139.2.69)到目的端(這里是192.168.10.44)共經(jīng)歷了255-247=8個(gè)路由器,且在傳輸過程中未出現(xiàn)故障。
注意:
1.確定數(shù)據(jù)包在網(wǎng)絡(luò)中經(jīng)歷了多少個(gè)路由器,可用數(shù)據(jù)包源端設(shè)備的TTL默認(rèn)值減去捕獲到的數(shù)據(jù)包TTL值;
2.在不知道數(shù)據(jù)包源端設(shè)備的默認(rèn)TTL時(shí),一般用大于捕獲數(shù)據(jù)包的TTL,且最接近這個(gè)TTL的默認(rèn)值。
3.TTL字段長(zhǎng)1個(gè)字節(jié),所以TTL的最大值255;
通過查看數(shù)據(jù)包的TTL,可以確定網(wǎng)絡(luò)傳輸是否正常。如果捕獲到的數(shù)據(jù)包的TTL值過小,則表示網(wǎng)絡(luò)中很可能存在傳輸故障,應(yīng)及時(shí)檢查網(wǎng)絡(luò)中三層設(shè)備的路由表配置,以及各主機(jī)上的路由表信息。#p#
二、利用TCP標(biāo)記分析故障
1、TCP標(biāo)記簡(jiǎn)介
TCP,全稱Transfer Control Protocol,中文名為傳輸控制協(xié)議;它工作在OSI的傳輸層,提供面向連接的可靠傳輸服務(wù)。
在TCP的報(bào)頭中,有一個(gè)TCP標(biāo)記字段,這個(gè)字段用來指出當(dāng)前這個(gè)數(shù)據(jù)包的用途。TCP連接標(biāo)記字段長(zhǎng)6比特,共有6種不同的標(biāo)記,在一個(gè)TCP連接中可能會(huì)使用其中的多個(gè)標(biāo)記。這6種標(biāo)記是:
(1).緊急(Urgent,簡(jiǎn)稱URG):通知對(duì)方主機(jī)該TCP數(shù)據(jù)包中包含有緊急數(shù)據(jù);
(2).確認(rèn)(Acknowledgement,簡(jiǎn)稱ACK):用來確認(rèn)接收到對(duì)方主機(jī)的TCP數(shù)據(jù)包;
(3).急迫(Push,簡(jiǎn)稱PSH):通知對(duì)方主機(jī)立即將該數(shù)據(jù)包送往上層協(xié)議;
(4).重置(Reset,簡(jiǎn)稱RST):表示此TCP連接已被對(duì)方主機(jī)重新啟動(dòng);
(5).同步(Synchronization,簡(jiǎn)稱SYN):用來建立和對(duì)方主機(jī)的TCP連接;
(6).終止(Finish,簡(jiǎn)稱FIN):用來關(guān)閉TCP連接。
不同數(shù)據(jù)包中的TCP 標(biāo)記可能相同,也可能不同,通過數(shù)據(jù)包的解碼,可以知道當(dāng)前數(shù)據(jù)包正在進(jìn)行的操作及其作用。如TCP三次握手的第一步會(huì)將同步位置為1;第二步會(huì)同時(shí)將確認(rèn)位和同步位置為1;第三步會(huì)將確認(rèn)位置為1。根據(jù)TCP標(biāo)記的特性,我們可以利用它分析網(wǎng)絡(luò)中常見的網(wǎng)絡(luò)應(yīng)用故障。
2、利用TCP標(biāo)記分析網(wǎng)絡(luò)故障
當(dāng)遇到目標(biāo)主機(jī)的某TCP服務(wù)不能訪問時(shí),我們可以通過對(duì)其訪問的過程進(jìn)行抓包分析,從而找出不能訪問的原因,下面我們用科來網(wǎng)絡(luò)分析系統(tǒng)6.0,以分析Telnet為例說明分析的方法。
圖3是在Windows客戶端(客戶端主機(jī)名為lw)上使用Telnet命令訪問其他主機(jī)的情況。從圖3的返回結(jié)果可知,兩臺(tái)主機(jī)的Telnet服務(wù)都不能正常訪問,但我們無法確定不能訪問的原因,是因?yàn)榫W(wǎng)絡(luò)不通,還是這臺(tái)主機(jī)沒有提供Telnet服務(wù)。(圖3)
注意:
(1).這里使用的Telnet命令是在假定目標(biāo)服務(wù)器使用默認(rèn)的端口配置,即Telnet服務(wù)器端口是TCP 23;
(2).可能有些用戶想到使用Ping命令測(cè)試網(wǎng)絡(luò)的連通性,但由于承載Ping命令的ICMP協(xié)議可以導(dǎo)致一些非法攻擊,對(duì)網(wǎng)絡(luò)的安全會(huì)造成一定的威脅,使得某些ISP廠商或者網(wǎng)絡(luò)管理員都在他們的三層設(shè)備處禁用了ICMP協(xié)議的轉(zhuǎn)發(fā)。在這種情況下,使用Ping命令便無法準(zhǔn)確測(cè)試主機(jī)的連通性。
圖4是在WINDOWS客戶端使用Telnet命令訪問192.168.2.10主機(jī)時(shí),科來網(wǎng)絡(luò)分析系統(tǒng)6.0捕獲到的數(shù)據(jù)包信息。(圖4)
從圖4可知,使用Telnet命令訪問192.168.2.10主機(jī)時(shí),兩主機(jī)間共有三個(gè)數(shù)據(jù)包通信,仔細(xì)查看數(shù)據(jù)包及其解碼,發(fā)現(xiàn)三個(gè)數(shù)據(jù)包都是從客戶端發(fā)往192.168.2.10主機(jī)的,三個(gè)數(shù)據(jù)包的確認(rèn)號(hào)都是0,且都將TCP標(biāo)記中的同步位置1,表明三個(gè)數(shù)據(jù)包都是TCP三次握手的第一步,即TCP同步數(shù)據(jù)包。沒有從192.168.2.10發(fā)往客戶端的數(shù)據(jù)包,說明此時(shí)客戶端與192.168.2.10主機(jī)在物理鏈路上不通,可能是網(wǎng)絡(luò)中沒有IP地址為192.168.2.10這臺(tái)機(jī)器,或者這臺(tái)機(jī)器沒有開機(jī)。#p#
圖5是在WINDOWS客戶端使用Telnet命令訪問192.168.2.100主機(jī)時(shí),科來網(wǎng)絡(luò)分析系統(tǒng)6.0捕獲到的數(shù)據(jù)包信息。(圖5)
從圖5可知,使用Telnet命令訪問192.168.2.100主機(jī)時(shí),兩主機(jī)間共有6個(gè)數(shù)據(jù)包通信,仔細(xì)查看數(shù)據(jù)包及其解碼,發(fā)現(xiàn)1,3,5這三個(gè)數(shù)據(jù)包是從客戶端發(fā)往192.168.2.100主機(jī)的,這三個(gè)數(shù)據(jù)包的確認(rèn)號(hào)是0,TCP標(biāo)記是同步位置1,表明三個(gè)數(shù)據(jù)包都是TCP三次握手的第一步,即TCP同步數(shù)據(jù)包。2,4,6這三個(gè)數(shù)據(jù)包是從192.168.2.100主機(jī)發(fā)往客戶端的,這三個(gè)數(shù)據(jù)包的確認(rèn)號(hào)是確認(rèn)號(hào)2643478089,TCP標(biāo)記是確認(rèn)位和重置位同時(shí)置1,表示這三個(gè)數(shù)據(jù)包都是192.168.2.100對(duì)客戶端的確認(rèn)數(shù)據(jù)包,同時(shí)它拒絕了客戶端的建立連接的TCP同步請(qǐng)求,告訴客戶端當(dāng)前主機(jī)(這里是192.168.2.100)沒有打開客戶端請(qǐng)求的服務(wù),并中斷這個(gè)連接。
注意:我們發(fā)現(xiàn)在圖4和圖5中,客戶端都向服務(wù)器(這里是192.168.2.10和192.168.2.100)發(fā)送了三次相同的TCP SYN請(qǐng)求,這是為什么呢?其實(shí)這是TCP的協(xié)議規(guī)定造成的,當(dāng)客戶端使用TCP SYN向服務(wù)器發(fā)起三方握手的第一步后,如果沒有收到服務(wù)器的SYN/ACK響應(yīng),就會(huì)在等待一段時(shí)間后再次嘗試對(duì)服務(wù)器進(jìn)行連接,如果連接三次后仍然失敗,則不會(huì)再重復(fù)此操作,所以我們?cè)趫D中看到了三次完全一樣的TCP SYN數(shù)據(jù)包。
通過對(duì)上面兩種情況的抓包分析,我們可知道,192.168.2.10主機(jī)不能訪問的原因是兩臺(tái)主機(jī)之間的物理鏈路不通,可能是不存在192.168.2.10這臺(tái)機(jī)器,或者192.168.2.10處于關(guān)機(jī)狀態(tài)等。而192.168.2.100不能訪問的原因是192.168.2.100這臺(tái)機(jī)器沒有提供客戶端請(qǐng)求的Telnet服務(wù),即沒有打開TCP 23端口。
總結(jié)
當(dāng)然,筆者列舉的兩個(gè)應(yīng)用案例只是個(gè)案。其實(shí)這種方法適用于中所有的TCP服務(wù),用戶在遇到不能訪問某服務(wù)器(各種TCP應(yīng)用的服務(wù)器)時(shí),便可使用這種方法對(duì)數(shù)據(jù)包進(jìn)行跟蹤分析,幫助用戶對(duì)故障進(jìn)行排查。這樣,管理員從網(wǎng)絡(luò)層把握網(wǎng)絡(luò)故障,就能夠不受故障表象的影響,從而盡快排除故障,利于提高工作效率。
【編輯推薦】