不管你是敲代碼的,搞運(yùn)維的,玩管理項目的,就算你只是想在家上個網(wǎng),你都可能會用到成哥總結(jié)的網(wǎng)絡(luò)連通性工具。
成哥打算用上下兩篇文章把下圖總結(jié)的工具給大家講透。
上篇給大家講講ICMP和TCP層面的網(wǎng)絡(luò)連通性測試工具。
ICMP(Internet Control Message Protocol)是IP層的一個組成部分,用于傳遞差錯報文以及其它差錯信息。說的簡單點(diǎn),ICMP協(xié)議就是用來確認(rèn)網(wǎng)絡(luò)是否正常,以及出現(xiàn)異常時進(jìn)行問題診斷。
PING和traceroute是ICMP協(xié)議的經(jīng)典實(shí)用場景。
ICMP報文格式很簡單,ICMP所有報文的前4個字節(jié)都是一樣的。格式如下圖所示:
其中通過類型和代碼字段數(shù)值組合,可以確認(rèn)ICMP報文的類型,明確是查詢報文還是差錯報文。如果是差錯報文,還能夠進(jìn)一步分析時何種原因?qū)е碌牟铄e。
代碼和類型的組合,如下圖所示:
這里再提下,當(dāng)發(fā)送一份ICMP差錯報文時,報文始終包含IP的首部和產(chǎn)生ICMP差錯報文的IP數(shù)據(jù)報的前8個字節(jié)(即能夠包含TCP/UDP的源目端口號)。這樣接收ICMP差錯報文的模塊就會把它與某個特定的協(xié)議聯(lián)系起來。
PING(Packet Internet Groper)是最常用的網(wǎng)絡(luò)連通性情況探測工具。。
通過向?qū)Χ酥鳈C(jī)發(fā)送ICMP ECHO請求消息(類型8,代碼0)及接收對端主機(jī)發(fā)送過來的ICMP ECHO應(yīng)答消息(類型0,代碼0)來判斷網(wǎng)絡(luò)的可達(dá)性。
PING ECHO請求和應(yīng)答的截圖如下:
例如使用ping 8.8.8.8來探測源主機(jī)到目標(biāo)地址的可達(dá)性情況。
可看到PING命令簡單易用,PING默認(rèn)發(fā)送四個數(shù)據(jù)包,每個數(shù)據(jù)包都有回顯,能夠看到包括時間、TTL等信息。截圖如下:
除了直接PING地址外,PING還有一些常用的參數(shù),如下:
(1)次數(shù)
ping –t x.x.x.x 一直PING下去
ping –n x.x.x.x PING具體的n次
(2)數(shù)據(jù)大小
ping –l x.x.x 設(shè)置每次PING包的數(shù)據(jù)大小
(3)PING域名
Ping baidu.com 可以直接ping域名
tracert和traceroute都是路由跟蹤的工具,用于確定IP數(shù)據(jù)包訪問目標(biāo)所經(jīng)過的路徑。
雖然兩者的作用相同,但是兩者的實(shí)現(xiàn)原理不同。
(1)tracert
tracert是windows系統(tǒng)上用于實(shí)現(xiàn)路由跟蹤的工具。
實(shí)現(xiàn)方法是通過發(fā)送ICMP ECHO數(shù)據(jù)包來實(shí)現(xiàn)的,和PING工具的原理相同(用到ICMP報文的類型8和代碼0、以及類型0和代碼0)。
例如我們探測到8.8.8.8的路徑。截圖如下:
通過抓包可以看到,tracert工具通過發(fā)送ICMP ECHO數(shù)據(jù)包,并配合使用ICMP報文和IP首部中的TTL字段,來實(shí)現(xiàn)路徑記錄功能。
通過沿途每個處理數(shù)據(jù)報的網(wǎng)絡(luò)設(shè)備都需要把TTL的值減1的原理。當(dāng)網(wǎng)絡(luò)設(shè)備收到一份IP數(shù)據(jù)報,如果其TTL字段是0或1,則網(wǎng)絡(luò)設(shè)備不轉(zhuǎn)發(fā)該數(shù)據(jù)報。相反,網(wǎng)絡(luò)設(shè)備將該數(shù)據(jù)包丟棄,并給信源發(fā)送一份'ICMP超時'信息。發(fā)送ICMP超時的源地址即為該跳網(wǎng)絡(luò)設(shè)備的IP地址。
(2)traceroute
traceroute是linux系統(tǒng)上用于實(shí)現(xiàn)路由跟蹤的工具。
雖然tracerout也是通過沿途每個處理數(shù)據(jù)報的網(wǎng)絡(luò)設(shè)備都需要把TTL的值減1的原理。但是它不是使用ICMP ECHO數(shù)據(jù)包來實(shí)現(xiàn)的。
Traceroute默認(rèn)使用類型11和代碼0的差錯報文來實(shí)現(xiàn)的。過程如下:traceroute發(fā)送的UDP數(shù)據(jù)包給目的主機(jī)IP,和大數(shù)值的UDP端口號(一般大于30000,通常初始的端口為33434),為了使目的主機(jī)的任何一個應(yīng)用程序都不可能使用該端口。因?yàn)楫?dāng)該數(shù)據(jù)報到達(dá)時,目的主機(jī)的UDP模塊會產(chǎn)生一份'端口不可達(dá)'錯誤的ICMP報文,即表示達(dá)到目的地。
同時需要注意,成哥剛說了traceroute默認(rèn)使用的使用11和0的差錯報文,并發(fā)送UDP消息。但是traceroute也可以使用ICMP ECHO數(shù)據(jù)包來探測路徑,這就和tracert原理相同了。另外探測的協(xié)議也能從UDP修改為TCP。截圖如下:
TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。面向連接意味著兩個使用TCP的應(yīng)用在彼此交換數(shù)據(jù)之前必須先建立一個TCP連接。
telnet和tcping/tcpping就是用到了TCP連接的建立過程來探測網(wǎng)絡(luò)連通性的。
我們來看下TCP連接的建立過程,如下圖所示:
(1)第一次握手
客戶端執(zhí)行主動打開(active open)連接,發(fā)送一個SYN段指明客戶打算連接的服務(wù)器的端口,以及初始序號(ISN)。這個SYN段為報文段1。發(fā)送內(nèi)容包括:SYN=1,Seq=J
(2)第二次握手
服務(wù)器端收到SYN,執(zhí)行被動打開(passive open)連接,服務(wù)器發(fā)回包含服務(wù)器的初始序號的SYN報文段,作為應(yīng)答。同時,將確認(rèn)序號(Ack)設(shè)置為客戶的ISN加1以對客戶的SYN報文段進(jìn)行確認(rèn)。一個SYN將占用一個序號。發(fā)送內(nèi)容包括:SYN=1,ACK=1,Seq=K,Ack=J+1
(3)第三次握手
客戶端收到服務(wù)器ACK回包后,首先進(jìn)入ESTABLISHED狀態(tài),之后發(fā)送ACK給服務(wù)器,最后服務(wù)器也進(jìn)入ESTABLISHED狀態(tài)。發(fā)送內(nèi)容包括:ACK=1,Seq=J+1,Ack=K+1
telnet是Internet遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。
通過使用telnet工具來和目標(biāo)主機(jī)建立TCP會話,即可驗(yàn)證目標(biāo)主機(jī)的特定端口開放情況。
我們通過telnet baidu.com的TCP443端口,驗(yàn)證端口的開放情況,如下圖所示:
Tcping/tcpping命令的原理和telnet原理一樣,都是通過和目標(biāo)主機(jī)的特定端口建立TCP會話,來驗(yàn)證網(wǎng)絡(luò)開放情況。
接來下詳細(xì)介紹下windows平臺中tcping的安裝和使用。Linux平臺的tcpping使用方法相同,不再贅述。
(1)下載tcping.exe工具
(2)存放tcping.exe工具
Tcping.exe是可執(zhí)行文件,不用安裝,直接運(yùn)行。
這里成哥是放到了e盤下面,所以要切換到e盤來使用tcping的命令。
(3)使用示例
注意這里使用了-d ,-h ,-t三個參數(shù),顯示如下,能看到時間間隔,以及不停的探測。
我們通過抓包,來看看每一次探測的情況。
可以看到源主機(jī)和目標(biāo)主機(jī)建立了TCP會話,之后又立刻進(jìn)行了TCP會話釋放。
常用的參數(shù)如下:
-t 不停的發(fā)送數(shù)據(jù)包??赏ㄟ^Ctrl+C停止發(fā)包。
-n 5 一次發(fā)送 5 個數(shù)據(jù)包,默認(rèn)一次發(fā)送4個 : tecping -n 5 www.baidu.com 會tcping 百度5次,也可以跟其他數(shù)字。
-d 在每行前面顯示詳細(xì)日期時間。
-g 5 失敗5次就放棄(注意默認(rèn)是80端口,端口沒開也算失?。?/p>
-h 以http 的模式工作,可以測試主機(jī)是否提供http服務(wù)
本篇文章介紹了使用ICMP協(xié)議和TCP協(xié)議的網(wǎng)絡(luò)連通性測試工具,這些工具都是我們工作和生活中最常用的網(wǎng)絡(luò)探測工具,希望對大家有幫助。
聯(lián)系客服