廈門北京網(wǎng)站建設(shè)公司seo專業(yè)知識培訓(xùn)
路由追蹤工具 traceroute 使用技巧
- 路由追蹤工作原理
- 路由追蹤實(shí)例
- 1. 如何運(yùn)行 traceroute
- 2. 禁用 IP 地址和主機(jī)名映射
- 3. 配置回復(fù)等待時間
- 4. 配置每一跳的查詢次數(shù)
- 5. 配置 TTL 值
我想知道一個數(shù)據(jù)包從出發(fā)地到目的地所遵循的路由,即所有轉(zhuǎn)發(fā)實(shí)體(中間的路由器)的 IP 地址。雖然不能保證所有數(shù)據(jù)包都走相同的路線,但通常都是一樣的。路由信息非常有助于調(diào)試網(wǎng)絡(luò)相關(guān)的問題。
此時使用 traceroute 工具能夠輸出數(shù)據(jù)包到特定目的地的完整路徑。
路由追蹤工作原理
traceroute 工具使用 IP 包頭中的 TTL 字段來實(shí)現(xiàn)。而 TTL 字段表示數(shù)據(jù)包在網(wǎng)絡(luò)中經(jīng)過多少跳(中轉(zhuǎn))到達(dá)目的地。所以這就有效地描述了數(shù)據(jù)包在網(wǎng)絡(luò)上的生命周期。這個字段通常設(shè)置為32或64。數(shù)據(jù)包每經(jīng)過一個中間路由器,TTL 會減1。當(dāng)某個路由器在接收到數(shù)據(jù)包后發(fā)現(xiàn) TTL 值為1,這個數(shù)據(jù)包不會被轉(zhuǎn)發(fā)而是被丟棄。
在丟包后,路由器丟包的同時也會對數(shù)據(jù)包來源發(fā)送一個 ICMP TTL Exceeded 的信息。這個被發(fā)回的 ICMP 包攜帶了此路由器的 IP 地址。
所以通過每次發(fā)送 TTL 值從1開始遞增的數(shù)據(jù)包來實(shí)現(xiàn)路由追蹤。每當(dāng)一個路由器收到了數(shù)據(jù)包,例行檢查 TTL 字段,如果 TTL 值為1就丟包并向源 IP 地址發(fā)送 ICMP 錯誤信息。traceroute 就這樣逐步獲取到起始地和目的地之間所有路由器的 IP。
路由追蹤實(shí)例
1. 如何運(yùn)行 traceroute
traceroute [-dFlnrvx][-f<存活數(shù)值>][-g<網(wǎng)關(guān)>...][-i<網(wǎng)絡(luò)界面>][-m<存活數(shù)值>][-p<通信端口>][-s<來源地址>][-t<服務(wù)類型>][-w<超時秒數(shù)>][主機(jī)名稱或IP地址][數(shù)據(jù)包大小]
參數(shù)說明:
-d 使用Socket層級的排錯功能。
-f<存活數(shù)值> 設(shè)置第一個檢測數(shù)據(jù)包的存活數(shù)值TTL的大小。
-F 設(shè)置勿離斷位。
-g<網(wǎng)關(guān)> 設(shè)置來源路由網(wǎng)關(guān),最多可設(shè)置8個。
-i<網(wǎng)絡(luò)界面> 使用指定的網(wǎng)絡(luò)界面送出數(shù)據(jù)包。
-I 使用ICMP回應(yīng)取代UDP資料信息。
-m<存活數(shù)值> 設(shè)置檢測數(shù)據(jù)包的最大存活數(shù)值TTL的大小。
-n 直接使用IP地址而非主機(jī)名稱。
-p<通信端口> 設(shè)置UDP傳輸協(xié)議的通信端口。
-r 忽略普通的Routing Table,直接將數(shù)據(jù)包送到遠(yuǎn)端主機(jī)上。
-s<來源地址> 設(shè)置本地主機(jī)送出數(shù)據(jù)包的IP地址。
-t<服務(wù)類型> 設(shè)置檢測數(shù)據(jù)包的TOS數(shù)值。
-v 詳細(xì)顯示指令的執(zhí)行過程。
-w<超時秒數(shù)> 設(shè)置等待遠(yuǎn)端主機(jī)回報的時間。
-x 開啟或關(guān)閉數(shù)據(jù)包的正確性檢驗(yàn)。
server-name 是目標(biāo)名稱或者 IP 地址。舉個例子,使用 traceroute 來找出我的機(jī)器到 blog.crazytaxii.com 的網(wǎng)絡(luò)路徑:
$ traceroute SZH-C-005ME
traceroute to SZH-C-005ME (10.161.229.120), 30 hops max, 60 byte packets1 _gateway (10.0.2.2) 0.307 ms 0.304 ms 0.432 ms2 _gateway (10.0.2.2) 3.579 ms 3.402 ms 3.256 ms
每行提供了與中間路由器交互的詳細(xì)信息,不僅有路由器的 IP 地址,還有此路由器的三個往返時間,因?yàn)?traceroute 命令每次發(fā)了三包數(shù)據(jù)。
有時候輸出 *,表示無法獲取所需的字段。可能是從反向 DNS 查詢失敗、沒有命中目標(biāo)路由器甚至在回程中丟包。雖然可能有多種失敗原因,但是 traceroute 統(tǒng)統(tǒng)輸出 *。
2. 禁用 IP 地址和主機(jī)名映射
traceroute 提供選項(xiàng) -n 來禁用 IP 地址與主機(jī)名映射。
$ traceroute -n SZH-C-005ME
traceroute to SZH-C-005ME (10.161.229.120), 30 hops max, 60 byte packets1 10.0.2.2 0.427 ms 1.134 ms 0.849 ms2 10.0.2.2 3.505 ms 3.358 ms 3.214 ms
然后我們在輸出中就看不到主機(jī)名了。
3. 配置回復(fù)等待時間
還可以配置 traceroute 工具在發(fā)包后的等待時間,-w 選項(xiàng)帶上值。下面例子中,等待時間設(shè)置為1秒。
$ traceroute -w 1 SZH-C-005ME
traceroute to SZH-C-005ME (10.161.229.120), 30 hops max, 60 byte packets1 _gateway (10.0.2.2) 0.374 ms 0.175 ms 0.312 ms2 _gateway (10.0.2.2) 3.355 ms 3.203 ms 3.050 ms
4. 配置每一跳的查詢次數(shù)
traceroute 工具默認(rèn)每跳發(fā)送3包數(shù)據(jù)來得到3次來回時間。選項(xiàng) -q 需要帶上整數(shù)。
$ traceroute -q 5 SZH-C-005ME
traceroute to SZH-C-005ME (10.161.229.120), 30 hops max, 60 byte packets1 _gateway (10.0.2.2) 0.421 ms 0.290 ms 0.299 ms 0.293 ms 0.287 ms2 _gateway (10.0.2.2) 3.432 ms 3.279 ms 3.130 ms 2.880 ms 2.731 ms
5. 配置 TTL 值
traceroute 可以根據(jù)用戶的需求靈活改變初始 TTL 值。默認(rèn)為1意味著從第一個路由器就開始,使用 -f 選項(xiàng)來設(shè)置一個自定義的值。
$ traceroute -f 2 szh-c-005me
traceroute to szh-c-005me (10.161.229.120), 30 hops max, 60 byte packets2 _gateway (10.0.2.2) 3.404 ms 3.108 ms 2.956 ms
看到相比于之前的輸出少了第一跳 10.0.2.2,也就是從第二跳開始抓取。