遇到網(wǎng)絡(luò)故障的時候,你一般會最先使用哪條命令進行排障?
除了Ping,還有Traceroute、Show、Telnet又或是Clear、Debug等等。
今天安排的,是Traceroute命令詳解,還有經(jīng)典排障案例哈。
Traceroute 原理和功能
traceroute是一個常用的Linux網(wǎng)絡(luò)診斷命令,用于追蹤數(shù)據(jù)包從源主機到目標(biāo)主機的路徑。它可以幫助確定網(wǎng)絡(luò)中的延遲和丟包問題。
當(dāng)發(fā)送一個數(shù)據(jù)包時,TTL的值被設(shè)置為1,數(shù)據(jù)包被送到網(wǎng)絡(luò)上。當(dāng)數(shù)據(jù)包到達安防個路由器時,路由器會刪除TTL值并將數(shù)據(jù)包發(fā)送到下一個路由器。這個過程一直重復(fù),直到數(shù)據(jù)包到達目標(biāo)主機。如果數(shù)據(jù)包沒有到達目標(biāo)主機,目標(biāo)主機將發(fā)回ICMPtimeexceeded消息,以此來指示從數(shù)據(jù)包到達目標(biāo)過程中經(jīng)過了多少個路由器。traceroute命令通過不斷發(fā)送數(shù)據(jù)包并遞增TTL的值,來確定到達目標(biāo)主機前所經(jīng)過的路由器數(shù)量。
Traceroute 命令用于測試數(shù)據(jù)報文從發(fā)送主機到目的地所經(jīng)過的網(wǎng)關(guān)。 主要用于檢查網(wǎng)絡(luò)連接是否可達,以及分析網(wǎng)絡(luò)什么地方發(fā)生了故障。
命令格式
traceroute 命令使用方式也非常簡單,具體的命令格式可以參考如下:
traceroute [參數(shù)] [主機]
參數(shù)含義
traceroute 命令格式已經(jīng)了解了,那么其中的參數(shù)都支持哪些設(shè)置呢?接下來具體看一下。
-d #使用 Socket 層級的排錯功能。
-f #設(shè)置第一個檢測數(shù)據(jù)包的存活數(shù)值 TTL 的大小。
-F #設(shè)置勿離斷位。
-g #設(shè)置來源路由網(wǎng)關(guān),最多可設(shè)置 8 個。
-i #使用指定的網(wǎng)絡(luò)界面送出數(shù)據(jù)包。
-I #使用 ICMP 回應(yīng)取代 UDP 資料信息。
-m #設(shè)置檢測數(shù)據(jù)包的最大存活數(shù)值 TTL 的大小。
-n #直接使用 IP 地址而非主機名稱。
-p #設(shè)置 UDP 傳輸協(xié)議的通信端口。
-r #忽略普通的 Routing Table,直接將數(shù)據(jù)包送到遠端主機上。
-s #設(shè)置本地主機送出數(shù)據(jù)包的 IP 地址。
-t #設(shè)置檢測數(shù)據(jù)包的 TOS 數(shù)值。
-v #詳細(xì)顯示指令的執(zhí)行過程。
-w #設(shè)置等待遠端主機回報的時間。
-x #開啟或關(guān)閉數(shù)據(jù)包的正確性檢驗。
詳細(xì)的使用舉例
配置等待時間
traceroute 中的默認(rèn)等待時間為3秒,要修改這個時間,可以使用 -w 選項。比如,我們將等待時間改為 1 秒:
traceroute -w 1 google.com
更改收發(fā)包的數(shù)量
默認(rèn)情況下,traceroute 為一個躍點(hop)發(fā)送3個包,如果想更改此行為,可使用 -q 選項。
比如,我們我們將其改為4個數(shù)據(jù)包:
traceroute -q 4 google.com
指定最大躍點數(shù)
在traceroute中,單個查詢的默認(rèn)最大跳數(shù)為30,可以擴展到255。使用 -m 選項:
traceroute -m 4 google.com
指定 TTL
默認(rèn)情況下,traceroute 將以第一個 TTL 開始,但您可以使用 -f 選項更改此行為。
如下例子,我們從第5個TTL開始跟蹤 google:
traceroute -f 5 google.com
添加備用源IP地址
使用-s 選項添加備用 IP 地址:
traceroute -s 192.168.1.7 google.com
跟蹤時禁用主機名映射到IP地址
如果出于某種原因希望在跟蹤時禁用主機名映射,可以使用 -n 選項:
traceroute -n google.com
通過網(wǎng)關(guān)路由包
可以在要跟蹤路由的域時,使用 -g 選項指定網(wǎng)關(guān)地址。比如,我們添加 192.168.1.7 作為網(wǎng)關(guān)地址:
traceroute -g 192.168.1.7 google.com
更改目標(biāo)端口
可以使用 -p 來指定要跟蹤的目標(biāo)端口:
traceroute -p 29879 google.com
設(shè)置最大數(shù)據(jù)包長度
默認(rèn)情況下,traceroute 跟蹤的數(shù)據(jù)包長度為 60 字節(jié)(bytes),可以在目標(biāo)地址后跟一個數(shù)字(即包大小)來修改:
traceroute google.com
禁用探測數(shù)據(jù)包碎片(probe packet fragmentation)
如果你不想允許探測數(shù)據(jù)包碎片化,有一種簡單的方法來實現(xiàn)這個目的,使用 -F 選項:
traceroute -F google.com
故障排除案例
排障案例①:使用Traceroute命令定位不當(dāng)?shù)木W(wǎng)絡(luò)配置點
1、現(xiàn)象描述:
組網(wǎng)情況如下圖所示:
某校園網(wǎng)中,RouterB和RouterC同屬于一個運行RIPv2路由協(xié)議的網(wǎng)絡(luò),主機4.0.0.2訪問數(shù)據(jù)庫服務(wù)器5.0.0.2,用戶抱怨訪問性能差。
2、相關(guān)信息:
在主機上ping 5.0.0.2顯示如下:
C:\Documents and Settings\c>ping -n 10 -l 1000 5.0.0.2
Pinging 5.0.0.2 with 1000 bytes of data:
Reply from 5.0.0.2: bytes=1000 time=552ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=5735ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=551ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=5734ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=549ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=5634ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=555ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=5738ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=455ms TTL=250
Reply from 5.0.0.2: bytes=1000 time=5811ms TTL=250
3、原因分析
上面的Ping顯示出一個規(guī)律,奇數(shù)報文的返回時長短,而偶數(shù)報文返回時長很長(是奇數(shù)報文的10倍多)。
可以初步判斷奇數(shù)報文和偶數(shù)報文是通過不同的路徑傳輸?shù)摹?/p>
現(xiàn)在我們需要使用Traceroute命令來追蹤這不同的路徑。在RouterC上,Traceroute遠端RouterA的以太網(wǎng)接口5.0.0.1。
RouterC(config)#traceroute
Target IP address or host: 5.0.0.1
Maximum number of hops to search for target [30]:10
Repeat count for each echo[3]:8
Wait timeout milliseconds for each reply [2000]:
Type esc/CTRLc/CTRLz/q to abort.
traceroute 5.0.0.1 …
1 6 ms 4 ms 4 ms 4 ms 4 ms 4 ms 4 ms 4 ms 4.0.0.1
。。。。。。(中間省略)
5 20 ms 16 ms 15 ms 16 ms 16 ms 16 ms 16 ms 16 ms 3.0.0.2
6 30 ms 278 ms 25 ms 279 ms 25 ms 278 ms 25 ms 277 ms 5.0.0.1
RouterC(config)#
從上面的顯示可看到,直至3.0.0.2,UDP探測報文的返回時長都基本一。
而到5.0.0.1時,則發(fā)生明顯變化,呈現(xiàn)奇數(shù)報文時長短,偶數(shù)報文時長長的現(xiàn)象。
于是判斷,問題發(fā)生在RouterB和RouterA之間。
通過詢問該段網(wǎng)絡(luò)的管理員,得知這兩路由器間有一主一備兩串行鏈路,主鏈路為2.048Mbps(s0口之間),備份鏈路為128Kbps(s1口之間)。
網(wǎng)絡(luò)管理員在此兩路由器間配置了靜態(tài)路由。
RouterB上如下配置:
RouterB(config)# ip route 5.0.0.0 255.0.0.0 1.0.0.2
RouterB(config)# ip route 5.0.0.0 255.0.0.0 2.0.0.2
RouterA上如下配置:
outerA(config)# ip route 0.0.0.0 0.0.0.0 1.0.0.1
RouterA(config)# ip route 0.0.0.0 0.0.0.0 2.0.0.1
于是問題就清楚了。
例如RouterB,由于管理員配置時沒有給出靜態(tài)路由的優(yōu)先級,這兩條路由項的管理距離就同為缺省值1。
然后就同時出現(xiàn)在路由表中,實現(xiàn)的是負(fù)載分擔(dān),而不能達到主備的目的。
4、處理過程
可以有兩種處理方法。
一個是,繼續(xù)使用靜態(tài)路由,進行配置更改 RouterB上進行如下更改:
RouterB(config)# ip route 5.0.0.0 255.0.0.0 1.0.0.2 (主鏈路仍使用缺省1)
RouterB(config)# ip route 5.0.0.0 255.0.0.0 2.0.0.2 100(備份鏈路的降低至100)
RouterA上進行如下更改:
RouterA(config)# ip route 0.0.0.0 0.0.0.0 1.0.0.1
RouterA(config)# ip route 0.0.0.0 0.0.0.0 2.0.0.1 100
這樣,只有當(dāng)主鏈路發(fā)生故障,備份鏈路的路由項才會出線在路由表中,從而接替主鏈路完成報文轉(zhuǎn)發(fā),實現(xiàn)主備目的。
第二個是,在兩路由器上運行動態(tài)路由協(xié)議,如OSPF,但不要運行RIP協(xié)議(因為RIP協(xié)議是僅以hop作為Metric的)。
5、建議和總結(jié)
本案例的目的不是為了解釋網(wǎng)絡(luò)配置問題,而是用來展示Ping命令和Traceroute命令的相互配合來找到網(wǎng)絡(luò)問題的發(fā)生點。
尤其在一個大的組網(wǎng)環(huán)境中,維護人員可能無法沿著路徑逐機排查,此時,能夠迅速定位出發(fā)生問題的線路或路由器就非常重要了。
排障案例②:使用Traceroute命令發(fā)現(xiàn)路由環(huán)路
1、現(xiàn)象描述
組網(wǎng)情況如下圖所示:
三臺路由器均配置靜態(tài)路由,完成后,登錄到RouterA上Ping主機4.0.0.2,發(fā)現(xiàn)不通。
2、相關(guān)信息
RouterA# ping 4.0.0.2
Sending 5, 100-byte ICMP Echos to 4.0.0.2,
timeout is 2000 milliseconds.
…
Success rate is 0 percent (0/5)
RouterA# traceroute 4.0.0.2
Type esc/CTRLc/CTRLz/q to abort.
traceroute 4.0.0.2 …
1 6 ms 4 ms 4 ms 1.0.0.1(RouterB)
2 8 ms 8 ms 8 ms 1.0.0.2(RouterA)
3 12 ms 12 ms 12 ms 1.0.0.1(RouterB)
4 16 ms 16 ms 16 ms 1.0.0.2(RouterA)
。。。。。。
3、原因分析
從上面的Traceroute命令的顯示可以立即發(fā)現(xiàn),在RouterA和RouterB間產(chǎn)生了路由環(huán)路。
由于是配置的是靜態(tài)路由,基本可以斷定是RouterA或RouterB的靜態(tài)路由配置錯誤。檢查RouterA的路由表,配置的是缺省靜態(tài)路由:ip route 0.0.0.0 0.0.0.0 1.0.0.1,沒有問題。
檢查RouterB的路由表,配置到4.0.0.0網(wǎng)絡(luò)的靜態(tài)路由為:ip route 4.0.0.0 255.0.0.0 1.0.0.2――下一跳配置的是1.0.0.2,而不是3.0.0.1。這正是錯誤所在。
4、處理過程
修改RouterB的配置如下:
RouterB(config)# no ip route 4.0.0.0 255.0.0.0 1.0.0.2
RouterB(config)# ip route 4.0.0.0 255.0.0.0 3.0.0.1
故障排除。
5、建議和總結(jié)
Traceroute命令能夠很容易發(fā)現(xiàn)路由環(huán)路等潛在問題。
當(dāng)路由器A認(rèn)為路由器B知道到達目的地的路徑,而路由器B也認(rèn)為路由器A知道目的地時,就是路由環(huán)路發(fā)生了。
使用Ping命令只能知道接收端出現(xiàn)超時錯誤,而Traceroute能夠立即發(fā)現(xiàn)環(huán)路所在――如果Traceroute命令兩次或者多次顯示同樣的接口。
當(dāng)通過Traceroute發(fā)現(xiàn)路由環(huán)路后,如果配置為:
靜態(tài)路由:幾乎可以肯定是手工配置有問題,如本案例所示。
OSPF協(xié)議:可能是地址聚合產(chǎn)生的問題。
多路由協(xié)議:可能是路由引入產(chǎn)生的問題。文章來源:http://www.zghlxwxcb.cn/news/detail-736485.html
關(guān)注公眾號↑↑↑:IT運維大本營,獲取60個G的《網(wǎng)工大禮包》文章來源地址http://www.zghlxwxcb.cn/news/detail-736485.html
到了這里,關(guān)于【 一個比 ping 更強大、更牛逼的命令行工具!】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!