當(dāng)網(wǎng)站訪問很慢或無法訪問時,若排除其它顯著問題,而檢測到 ping 有明顯丟包時,建議您作鏈路測試。Linux 環(huán)境下,您可以通過 mtr 命令行工具(優(yōu)先使用) 或 traceroute 命令行工具進行鏈路測試來判斷問題來源。
通常情況下,請依照下述步驟進行處理:
利用鏈路測試工具探測網(wǎng)絡(luò)狀況和服務(wù)器狀態(tài)。
根據(jù)鏈路測試結(jié)果分析處理。
mtr命令行工具(優(yōu)先使用)
mtr (My traceroute)幾乎是所有 Linux 發(fā)行版本預(yù)裝的網(wǎng)絡(luò)測試工具,集成了 tracert 與 ping 這兩個命令的圖形界面,功能十分強大。
ping 與 tracert 通常被用來檢測網(wǎng)絡(luò)狀況和服務(wù)器狀態(tài),具體說明如下:
命令名稱 |
具體說明 |
ping |
送出封包到指定的服務(wù)器。如果服務(wù)器有回應(yīng)就會傳送回封包,并附帶返回封包來回的時間。 |
tracret |
返回從用戶的電腦到指定的服務(wù)器中間經(jīng)過的所有節(jié)點(路由)以及每個節(jié)點的回應(yīng)速度。 |
mtr 默認發(fā)送 ICMP 數(shù)據(jù)包進行鏈路探測,通過 -u 參數(shù)來指定 UDP 數(shù)據(jù)包用于探測。相對于 traceroute 只作一次鏈路跟蹤測試,mtr 會對鏈路上的相關(guān)節(jié)點做持續(xù)探測并給出相應(yīng)的統(tǒng)計信息。mtr 能避免節(jié)點波動對測試結(jié)果的影響,所以其測試結(jié)果更正確,建議優(yōu)先使用。
用法說明
1. mtr [-hvrctglspni46] [--help] [--version] [--report]
2. [--report-cycles=COUNT] [--curses] [--gtk]
3. [--raw] [--split] [--no-dns] [--address interface]
4. [--psize=bytes/-s bytes]
5. [--interval=SECONDS] HOSTNAME [PACKETSIZE]
常見可選參數(shù)說明
-r 或 —report:以報告模式顯示輸出。
-p 或 —split:將每次追蹤的結(jié)果分別列出來,而非如 —report 統(tǒng)計整個結(jié)果。
-s 或 —psize:指定 ping 數(shù)據(jù)包的大小。
-n 或 —no-dns:不對 IP 地址做域名反解析。
-a 或 —address:設(shè)置發(fā)送數(shù)據(jù)包的 IP 地址。用于主機有多個 IP 時。
-4:只使用 IPv4 協(xié)議。
-6:只使用 IPv6 協(xié)議。
在mtr運行過程中,您也可以輸入相應(yīng)字母來快速切換模式,各字母的含義如下:
? 或 h:顯示幫助菜單。
d:切換顯示模式。
n:切換啟用或禁用 DNS 域名解析。
u:切換使用 ICMP 或 UDP 數(shù)據(jù)包進行探測。
返回結(jié)果說明
默認配置下,返回結(jié)果中各數(shù)據(jù)列的說明如下:
第一列(Host):節(jié)點 IP 地址和域名。如前面所示,按 n 鍵可以切換顯示。
第二列(Loss%):節(jié)點丟包率。
第三列(Snt):每秒發(fā)送數(shù)據(jù)包數(shù)。默認值是 10,可以通過參數(shù) -c 指定。
第四列(Last):最近一次的探測延遲值。
第五、六、七列(Avg、Best、Wrst):分別是探測延遲的平均值、最小值和最大值。
第八列(StDev):標(biāo)準偏差。越大說明相應(yīng)節(jié)點越不穩(wěn)定。
traceroute命令行工具
traceroute 是幾乎所有 Linux 發(fā)行版本預(yù)裝的網(wǎng)絡(luò)測試工具,用于跟蹤 Internet 協(xié)議(IP)數(shù)據(jù)包傳送到目標(biāo)地址時經(jīng)過的路徑。
traceroute 先發(fā)送具有小的最大存活時間值(Max_TTL)的 UDP 探測數(shù)據(jù)包,然后偵聽從網(wǎng)關(guān)開始的整個鏈路上的 ICMP TIME_EXCEEDED 響應(yīng)。探測從 TTL=1 開始,TTL值逐步增加,直至接收到 ICMP PORT_UNREACHABLE 消息。ICMP PORT_UNREACHABLE 消息用于標(biāo)識目標(biāo)主機已經(jīng)被定位,或命令已經(jīng)達到允許跟蹤的最大TTL值。
traceroute 默認發(fā)送 UDP 數(shù)據(jù)包進行鏈路探測。可以通過 -I 參數(shù)來指定發(fā)送 ICMP 數(shù)據(jù)包用于探測。
用法說明
traceroute [-I] [ -m Max_ttl ] [ -n ] [ -p Port ] [ -q Nqueries ] [ -r ] [ -s SRC_Addr ] [ -t TypeOfService ] [ -f flow ] [ -v ] [ -w WaitTime ] Host [ PacketSize ]
常見可選參數(shù)說明
-d 使用 Socket 層級的排錯功能。
-f 設(shè)置第一個檢測數(shù)據(jù)包的存活數(shù)值 TTL 的大小。
-F 設(shè)置不要分段標(biāo)識。
-g 設(shè)置來源路由網(wǎng)關(guān),最多可設(shè)置 8 個。
-i 使用指定的網(wǎng)卡送出數(shù)據(jù)包。用于主機有多個網(wǎng)卡時。
-I 使用 ICMP 數(shù)據(jù)包替代 UDP 數(shù)據(jù)包進行探測。
-m 設(shè)置檢測數(shù)據(jù)包的最大存活數(shù)值 TTL 的大小。
-n 直接使用 IP 地址而非主機名稱(禁用 DNS 反查)。
-p 設(shè)置 UDP 傳輸協(xié)議的通信端口。
-r 忽略普通的 Routing Table,直接將數(shù)據(jù)包送到遠端主機上。
-s 設(shè)置本地主機送出數(shù)據(jù)包的 IP 地址。
-t 設(shè)置檢測數(shù)據(jù)包的 TOS 數(shù)值。
-v 詳細顯示指令的執(zhí)行過程。
-w 設(shè)置等待遠端主機回包時間。
-x 開啟或關(guān)閉數(shù)據(jù)包的正確性檢驗。
分析鏈路測試結(jié)果
以如下鏈路測試結(jié)果示例圖為基礎(chǔ)進行闡述:
操作步驟
1.判斷各區(qū)域是否存在異常,并根據(jù)各區(qū)域的情況分別處理。
區(qū)域 A:客戶端本地網(wǎng)絡(luò),即本地局域網(wǎng)和本地網(wǎng)絡(luò)提供商網(wǎng)絡(luò)。針對該區(qū)域異常,客戶端本地網(wǎng)絡(luò)相關(guān)節(jié)點問題,請對本地網(wǎng)絡(luò)進行排查分析;本地網(wǎng)絡(luò)提供商網(wǎng)絡(luò)相關(guān)節(jié)點問題,請向當(dāng)?shù)剡\營商反饋。
區(qū)域 B:運營商骨干網(wǎng)絡(luò)。針對該區(qū)域異常,可根據(jù)異常節(jié)點 IP 查詢歸屬運營商,然后直接或通過售后技術(shù)支持,向相應(yīng)運營商反饋問題。
區(qū)域 C:目標(biāo)服務(wù)器本地網(wǎng)絡(luò),即目標(biāo)主機歸屬網(wǎng)絡(luò)提供商網(wǎng)絡(luò)。針對該區(qū)域異常,需要向目標(biāo)主機歸屬網(wǎng)絡(luò)提供商反饋問題。
2.結(jié)合 Avg(平均值)和 StDev(標(biāo)準偏差),判斷各節(jié)點是否存在異常。
若 StDev 很高,則同步觀察相應(yīng)節(jié)點的 Best 和 Wrst,來判斷相應(yīng)節(jié)點是否存在異常。
若 StDev 不高,則通過 Avg 來判斷相應(yīng)節(jié)點是否存在異常。
注意:上述 StDev 高 或者 不高,并沒有具體的時間范圍標(biāo)準。而需要根據(jù)同一節(jié)點其它列的延遲值大小來進行相對評估。比如,如果 Avg 為 30 ms,那么,當(dāng) StDev 為 25 ms,則認為是很高的偏差。而如果 Avg 為 325 ms,則同樣的 StDev(25 ms),反而認為是不高的偏差。
3.查看節(jié)點丟包率,若 Loss% 不為零,則說明這一跳網(wǎng)絡(luò)可能存在問題。
導(dǎo)致節(jié)點丟包的原因通常有兩種:
Ø 人為限制了節(jié)點的 ICMP 發(fā)送速率,導(dǎo)致丟包。
Ø 節(jié)點確實存在異常,導(dǎo)致丟包。
4.確定當(dāng)前異常節(jié)點的丟包原因。
Ø 若隨后節(jié)點均沒有丟包,說明當(dāng)前節(jié)點丟包是由于運營商策略限制所致,可以忽略。如前文鏈路測試結(jié)果示例圖中的第 2 跳所示。
Ø 若隨后節(jié)點也出現(xiàn)丟包,說明當(dāng)前節(jié)點存在網(wǎng)絡(luò)異常,導(dǎo)致丟包。如前文鏈路測試結(jié)果示例圖中的第 5 跳所示。
說明:前述兩種情況可能同時發(fā)生,即相應(yīng)節(jié)點既存在策略限速,又存在網(wǎng)絡(luò)異常。對于這種情況,若當(dāng)前節(jié)點及其后續(xù)節(jié)點連續(xù)出現(xiàn)丟包,而且各節(jié)點的丟包率不同,則通常以最后幾跳的丟包率為準。如前文鏈路測試結(jié)果示例圖所示,在第 5、6、7跳均出現(xiàn)了丟包。所以,最終丟包情況,以第 7 跳的 40% 作為參考。
5.通過查看是否有明顯的延遲,來確認節(jié)點是否存在異常。通過如下兩個方面進行分析:
Ø 若某一跳之后延遲明顯陡增,則通常判斷該節(jié)點存在網(wǎng)絡(luò)異常。如前文鏈路測試結(jié)果示例圖所示,從第 5 跳之后的后續(xù)節(jié)點延遲明顯陡增,則推斷是第 5 跳節(jié)點出現(xiàn)了網(wǎng)絡(luò)異常。
注意:高延遲并不一定完全意味著相應(yīng)節(jié)點存在異常,延遲大也有可能是在數(shù)據(jù)回包鏈路中引發(fā)的,建議結(jié)合 反向鏈路測試一并分析。
Ø ICMP 策略限速也可能會導(dǎo)致相應(yīng)節(jié)點的延遲陡增,但后續(xù)節(jié)點通常會恢復(fù)正常。如前文鏈路測試結(jié)果示例圖所示,第 3 跳有 100% 的丟包率,同時延遲也明顯陡增。但隨后節(jié)點的延遲馬上恢復(fù)了正常。所以判斷該節(jié)點的延遲陡增及丟包是由于策略限速所致。