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