老板讓我在Linux中使用traceroute排查服務器網絡問題,幸好我收藏了這篇文章!

來源:網絡技術聯(lián)盟站
鏈接:https://www.wljslmz.cn/19854.html
一、前言
作為網絡工程師或者運維工程師,traceroute命令不會陌生,它的作用類似于ping命令,用于診斷網絡的連通性,不過traceroute命令輸出的命令會比ping命令豐富的多,可以跟蹤從源系統(tǒng)到目標系統(tǒng)的路徑。
很多工程師對traceroute命令僅停留在基礎使用上,但是在真實的實戰(zhàn)過程中,基礎操作并不能解決問題。本文我將給大家介紹幾個traceroute命令的使用例子,讓你完全掌握traceroute命令,讓我們直接開始吧!
二、前置知識
在正式介紹命令使用前,請大家看下以下拓撲圖:

如圖所示,電腦想要訪問服務器,期間到底走電腦->R1->R2->R4->服務器還是走電腦->R1->R3->R4->服務器,這個是就可以通過traceroute命令實現(xiàn),這也是traceroute命令的價值所在。
三、在Linux中安裝traceroute命令
首先我們通過命令lsb_release -a看下我們的服務器是什么發(fā)行版:
root@ecs-adf0-0003:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
由輸出可知,我們的系統(tǒng)是Ubuntu系統(tǒng),所以安裝traceroute命令如下:
apt install traceroute
安裝過程:

如果您的Linux系統(tǒng)發(fā)行版是CentOS或者Fedora,可以使用
yum install traceroute命令。
四、在Linux中使用traceroute命令
4.1 基本用法
traceroute命令最基本的用法是:
traceroute host
命令執(zhí)行后會顯示到達目的地所需的路由器列表。
比如我們traceroute我們的博客網站:
traceroute www.wljslmz.cn
執(zhí)行結果:

如圖所示,我們執(zhí)行完traceroute www.wljslmz.cn命令后,看到從我的ecs服務器到達www.wljslmz.cn所在服務器一共經歷了20臺路由器,每臺路由器響應的時間也都打印下來了。
4.2 更改等待時間
traceroute 中的默認等待時間是 3 秒,這個意思就是,假如有20臺路由器,每經歷一臺路由器默認等待時間是3秒,如果我們想改變這個值,可以加一個參數(shù)-w:
traceroute -w 1 www.wljslmz.cn
執(zhí)行結果:

4.3 更改收發(fā)數(shù)據(jù)包的數(shù)量
默認情況下,traceroute 一次發(fā)送 3 個包,假如想更改這個數(shù)量,可以使用-q參數(shù),比如我現(xiàn)在把它改成5個包:
traceroute -q 5 www.wljslmz.cn
執(zhí)行結果:

由此可見,現(xiàn)在每臺路由器收發(fā)就變成了5個包了。
4.4 更改最大跳數(shù)
所謂跳數(shù)就是一次請求經歷的路由器的數(shù)量,還是這張圖:

比如流量走向是電腦->R1->R2->R4->服務器,那么其跳數(shù)是3.
traceroute 中默認單次查詢的最大跳數(shù)是 30,可以擴展到 255。
如果想要更改這個參數(shù),可以加上-m參數(shù)。
我們上面執(zhí)行的跳數(shù)都是20,我們?yōu)榱孙@示出效果,將這個值改為10:
traceroute -m 10 www.wljslmz.cn
執(zhí)行結果:

可以看到最大跳數(shù)改為10以后,原先經歷20臺路由器,現(xiàn)在輸出顯示只有10臺,參數(shù)生效了。
4.5 更改TTL開始值
首先給大家解釋一下什么是TTL。
TTL英文全稱:Time To Live,翻譯成中文就是生存時間,是網絡技術中比較常見的專業(yè)術語。
如果你使用過ping命令,那么TTL經常會看到:
root@ecs-adf0-0003:~# ping www.wljslmz.cn
執(zhí)行結果:

TTL,專業(yè)點解釋就是用于限制數(shù)據(jù)包在 Internet 傳輸系統(tǒng)中“存活”的時間,或者說數(shù)據(jù)包在被丟棄之前在網絡中的時間限制。
如果你還是不明白,你就把TTL看作是跳數(shù)限制,目的是防止數(shù)據(jù)包在網絡中永遠流通,最大 TTL 值為 255。
數(shù)據(jù)包的 TTL 字段由發(fā)送方設置,并由到達目的地的路徑上的每個路由器減少,路由器在轉發(fā) IP 數(shù)據(jù)包時將 TTL 值減一,當數(shù)據(jù)包 TTL 值達到 0 時,路由器將其丟棄并向始發(fā)主機發(fā)送回ICMP 消息。

這就是TTL的全部解釋了,如果還想更深入的了解TTL的底層原理,瑞哥可以后期專門出一篇文章進行解釋。
默認情況下,traceroute 將從第一個 TTL 開始,如果想要更改這個值,我們可以使用-f參數(shù)實現(xiàn):
traceroute -f 8 www.wljslmz.cn
執(zhí)行結果:

可以看到我們這里是從第8個TTL開始的。
4.6 禁用主機名到 IP 地址的映射
我們在執(zhí)行traceroute www.wljslmz.cn命令時,注意箭頭所指的位置,會有域名的出現(xiàn):

現(xiàn)在是因為域名比較少,假如你跟蹤的服務器中間路由器涉及到的域名比較多,那么是不便于排查問題的,所以我們需要去除主機名到 IP 地址的映射,可以使用-n參數(shù):
traceroute -n www.wljslmz.cn
執(zhí)行結果:

可以看到已經沒有域名了。
4.7 更改跟蹤路由目的端口
先問大家可以問題:traceroute www.wljslmz.cn這條命令跟蹤的是什么端口?
答案是80端口,如果我們想更改這個目的端口,怎么辦?
可以使用-p參數(shù),比如改成跟蹤其2222端口:
traceroute -p 2222 www.wljslmz.cn
執(zhí)行結果:

4.8 更改最大數(shù)據(jù)包大小
默認情況下,最大數(shù)據(jù)包為60字節(jié),如下圖箭頭所示:

如果我們覺得跟蹤的路由器數(shù)量比較多,一看就不止60字節(jié),這個時候想調大,可以這樣操作:
traceroute www.wljslmz.cn 200
執(zhí)行結果:

可以看到直接在命令后加入數(shù)字即可。
我們嘗試執(zhí)行一下這條命令:
traceroute www.wljslmz.cn 1
猜一下執(zhí)行結果中,最大數(shù)據(jù)包大小是多少?
1?
當然不是!

我們看到最終的大小是28字節(jié),也就是說這條命令只能用來限制最大大小,而不是設置多大,包就被過濾了,28字節(jié)是跟蹤包的最小大小,你設置的值小于這個大小,那么不管用!

4.9 啟用ipv4跟蹤
traceroute -4 www.wljslmz.cn
執(zhí)行結果:

4.10 啟用ipv6跟蹤
traceroute -6 www.wljslmz.cn
執(zhí)行結果:

說明我們的網站未支持ipv6.
4.11 使用ICMP ECHO
默認情況下,traceroute 命令使用 UDP 端口進行跟蹤路由,要使用 ICMP ECHO,可以結合參數(shù)-I:
traceroute -I www.wljslmz.cn
執(zhí)行結果:

4.12 將traceroute信息保存到文件
這個跟traceroute命令本身沒有太大關系,有時候我們需要將traceroute的信息離線分析,這個時候就需要將traceroute返回信息持久化,我們可以使用以下命令:
traceroute www.wljslmz.cn > wljslmz.txt
執(zhí)行結果:

我們通過命令more wljslmz.txt來看下這個wljslmz.txt文件:

五、總結
traceroute 命令是一個有用且易于運行的網絡診斷工具,本文給大家介紹了12個traceroute 命令示例,希望本文能夠對您使用traceroute 命令有所幫助,如果有問題可以在下方評論區(qū)與我討論!


