使用MTR命令診斷網路問題

Federico發表於2018-06-01

  以前在檢查網路時習慣使用ping命令,因為ping命令非常簡單,現在喜歡上了mtr命令,因為它真的很強大,但是對於剛剛接觸這個命令的同學來說,理解起來就沒有ping命令來的那麼直觀了,所以今天寫一下自己使用mtr命令的理解歷程。

安裝mtr命令

MAC:
brew install mtr
Ubuntu:
apt-get update
apt-get install mtr
CentOS:
yum -y install mtr

mtr命令輸出列解析

Start: 2018-06-01T15:34:08+0800
HOST: Mac                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                 0.0%    10    1.5   3.8   1.2   9.9   2.7
  2.|-- 172.16.105.25              0.0%    10   14.9   5.2   2.0  14.9   4.3
  3.|-- 210.73.209.81              0.0%    10   19.7   8.9   5.0  19.7   4.5
  4.|-- 118.186.62.141             0.0%    10    8.3   3.7   2.2   8.3   2.1
  5.|-- 114.112.78.66              0.0%    10    2.9   3.6   2.3   7.3   1.6
  6.|-- 103.241.231.130            0.0%    10   51.0  45.2  43.1  51.0   2.9
  7.|-- 103.241.231.69             0.0%    10   48.1  46.5  43.9  51.1   2.3
  8.|-- te3-1.c01.cnhkg.hk02.link  0.0%    10   44.4  46.1  44.0  52.8   2.7
  9.|-- google2-lacp-100g.hkix.ne  0.0%    10   44.1  45.5  44.0  49.2   1.6
 10.|-- 108.170.241.97             0.0%    10   44.9  46.4  44.9  47.8   1.0
 11.|-- 209.85.241.219             0.0%    10   44.7  48.2  44.7  54.4   3.6
 12.|-- hkg12s17-in-f14.1e100.net  0.0%    10   44.6  47.2  44.6  58.5   4.4

  我為什麼要把解析輸出結果放到引數前呢,因為更多情況下,我們都是用mtr命令來測試當前的網路情況的,對於我們來說最重要的是當前的網路情況如何,使用引數是為了更好的或者說更高效的讓我們瞭解當前的情況而已。
第一列:顯示的是IP地址或主機名,表示當前路由途徑的地址資訊。
第二列:顯示的是對應IP或主機的丟包率
第三列:顯示的是每秒傳送資料包的數量
第四列:顯示最近一次的時延
第五列:顯示平均時延
第六列:顯示最小時延
第七列:顯示最大時延
第八列:顯示資料包在每個主機的標準偏差,如果標準偏差數值很大(例如:網路極其不穩定,Best與W人rst抖動嚴重)那麼即使是平均時延正常那我們也不能得出當前網路是正常的結論。

Start: Fri Jun  1 16:24:23 2018
HOST: Federico                    Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???                       100.0     1    0.0   0.0   0.0   0.0   0.0
  2.|-- 11.211.20.53               0.0%     1    7.4   7.4   7.4   7.4   0.0
  3.|-- 11.211.20.114              0.0%     1    1.2   1.2   1.2   1.2   0.0
  4.|-- 116.251.74.146             0.0%     1    1.7   1.7   1.7   1.7   0.0
  5.|-- 202.77.19.33               0.0%     1    1.5   1.5   1.5   1.5   0.0
  6.|-- 202.77.18.194              0.0%     1    4.7   4.7   4.7   4.7   0.0
  7.|-- 43.252.86.66               0.0%     1    4.3   4.3   4.3   4.3   0.0
  8.|-- 202.77.23.29               0.0%     1    5.9   5.9   5.9   5.9   0.0
  9.|-- 219.158.97.241             0.0%     1    9.5   9.5   9.5   9.5   0.0
 10.|-- 219.158.96.210             0.0%     1   16.7  16.7  16.7  16.7   0.0
 11.|-- 219.158.103.217            0.0%     1   13.5  13.5  13.5  13.5   0.0
 12.|-- 219.158.108.241            0.0%     1   50.0  50.0  50.0  50.0   0.0
 13.|-- 202.96.12.62               0.0%     1   46.0  46.0  46.0  46.0   0.0
 14.|-- 123.126.6.118              0.0%     1   49.2  49.2  49.2  49.2   0.0
 15.|-- 202.106.43.30              0.0%     1   41.9  41.9  41.9  41.9   0.0
 16.|-- ???                       100.0     1    0.0   0.0   0.0   0.0   0.0
 17.|-- ???                       100.0     1    0.0   0.0   0.0   0.0   0.0
 18.|-- 123.125.115.110            0.0%     1   47.1  47.1  47.1  47.1   0.0

  我們已經解釋了當前mtr報告中列引數的意義了,那麼看我上面的報告第16和17跳丟包率為100%是否是正常現象呢?接下來我們就來解釋下出現此丟包率的原因。這就不得不說跳數的問題了。
  首先我們分析為什麼的第16和第17跳會有百分之百的丟包率呢,當我們在任何跳數中發現丟包率存在一定的數值時都有可能是當前路由器的網路存在一定問題,然而有很多服務提供商會限制MTR使用ICMP流量,也就是說我們的16和17跳很可能是沒有問題的,只不過是人為的限制因素導致我們的丟包率達到了100%,那麼我們如何判斷是不是認為限制導致當前網路出現問題了呢,這就需要我們檢視最後一跳,我們會發現如果最後一跳沒有丟包現象,那麼我們就可以基本的肯定在此之前的網路丟包是由於人為限制導致的了,所以即使是100%的丟包率,但是並沒有真實的影響到當前的網路情況。

接下來,我們來分析幾種情況:

Start: Fri Jun  1 16:55:57 2018
HOST: 192.168.1.109               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- gateway                    0.0%     3    0.9   0.8   0.8   0.9   0.0
  2.|-- 117.79.135.53              0.0%     3    0.7  13.4   0.7  38.9  22.0
  3.|-- 117.79.134.97              0.0%     3    0.9   0.9   0.9   1.0   0.0
  4.|-- ???                       100.0     3    0.0   0.0   0.0   0.0   0.0
  5.|-- 220.181.177.61            66.7%     3    1.5   1.5   1.5   1.5   0.0
  6.|-- 220.181.0.197              0.0%     3    1.9   3.6   1.9   5.9   2.0
  7.|-- ???                       100.0     3    0.0   0.0   0.0   0.0   0.0

  上面這種情況呢,就是完全丟包了,因為我們使用了一臺不能訪問谷歌的伺服器,我們可以看最後一跳丟包率為100%,就說明當前主機到目標主機不可達。

HOST: localhost                   Loss%   Snt   Last   Avg  Best  Wrst StDev
1. 63.247.74.43                   0.0%    10    0.3   0.6   0.3   1.2   0.3
2. 63.247.64.157                  0.0%    10    0.4   1.0   0.4   6.1   1.8
3. 209.51.130.213                60.0%    10    0.8   2.7   0.8  19.0   5.7
4. aix.pr1.atl.google.com        60.0%    10    6.7   6.8   6.7   6.9   0.1
5. 72.14.233.56                  50.0%   10    7.2   8.3   7.1  16.4   2.9
6. 209.85.254.247                40.0%   10   39.1  39.4  39.1  39.7   0.2
7. 64.233.174.46                 40.0%   10   39.6  40.4  39.4  46.9   2.3
8. gw-in-f147.1e100.net          40.0%   10   39.6  40.5  39.5  46.7   2.2

  從這個例子中我們可以看出來,丟包率是可以和延遲同時發生的,證明當前網路確實存在問題。因為丟包率有可能是人為限制導致所以當我們真正遇到丟包是需要從最後幾跳來考慮。
  網際網路設施的維護或短暫的網路擁擠可能會帶來短暫的丟包率,當出現短暫的10%丟包率時候,不必擔心,應用層的程式會彌補這點損失。

HOST: localhost                   Loss%   Snt   Last   Avg  Best  Wrst StDev
1. 63.247.74.43                  0.0%    10    0.3   0.6   0.3   1.2   0.3
2. 63.247.64.157                 0.0%    10    0.4   1.0   0.4   6.1   1.8
3. 209.51.130.213                0.0%    10    0.8   2.7   0.8  19.0   5.7
4. aix.pr1.atl.google.com        0.0%    10  388.0 360.4 342.1 396.7   0.2
5. 72.14.233.56                  0.0%    10  390.6 360.4 342.1 396.7   0.2
6. 209.85.254.247                0.0%    10  391.6 360.4 342.1 396.7   0.4
7. 64.233.174.46                 0.0%    10  391.8 360.4 342.1 396.7   2.1
8. gw-in-f147.1e100.net          0.0%    10  392.0 360.4 342.1 396.7   1.2

  我們可以發現從第4條開始,延遲增加,可能是因為當前網路堵塞,或者路由規則設定不合理導致。
  以上案例有部分是從其他途徑拷貝過來的,請見諒。

mtr命令引數詳解

OPTIONS -4/-6

  使用-4選項,表示只測試IPv4地址,使用-6選項,表示只測試IPv6地址。

OPTIONS -r

sudo mtr -r google.com

Start: 2018-06-01T15:34:08+0800
HOST: Mac                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                 0.0%    10    1.5   3.8   1.2   9.9   2.7
  2.|-- 172.16.105.25              0.0%    10   14.9   5.2   2.0  14.9   4.3
  3.|-- 210.73.209.81              0.0%    10   19.7   8.9   5.0  19.7   4.5
  4.|-- 118.186.62.141             0.0%    10    8.3   3.7   2.2   8.3   2.1
  5.|-- 114.112.78.66              0.0%    10    2.9   3.6   2.3   7.3   1.6
  6.|-- 103.241.231.130            0.0%    10   51.0  45.2  43.1  51.0   2.9
  7.|-- 103.241.231.69             0.0%    10   48.1  46.5  43.9  51.1   2.3
  8.|-- te3-1.c01.cnhkg.hk02.link  0.0%    10   44.4  46.1  44.0  52.8   2.7
  9.|-- google2-lacp-100g.hkix.ne  0.0%    10   44.1  45.5  44.0  49.2   1.6
 10.|-- 108.170.241.97             0.0%    10   44.9  46.4  44.9  47.8   1.0
 11.|-- 209.85.241.219             0.0%    10   44.7  48.2  44.7  54.4   3.6
 12.|-- hkg12s17-in-f14.1e100.net  0.0%    10   44.6  47.2  44.6  58.5   4.4

  使用-r選項,該選項使mtr進入報告模式。在此模式下,mtr將執行由指定的週期數-c選項,然後列印統計資訊並退出。此模式對於生成有關網路質量的統計資訊很有用。請注意,每個執行的mtr例項會產生大量的網路流量。可能會導致使用mtr來測量您的網路質量網路效能下降。

OPTIONS -F

vim hosts.txt

www.google.com
www.facebook.com
www.youtube.com

sudo mtr -c 3 -r -F hosts.txt

Start: 2018-06-01T15:57:18+0800
HOST: Mac                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                 0.0%     3    4.0   6.0   4.0   8.4   2.3
  2.|-- 172.16.105.25              0.0%     3   12.0  11.8   4.6  18.9   7.1
  3.|-- 210.73.209.81              0.0%     3    9.1  21.1   8.3  45.8  21.4
  4.|-- 118.186.62.137             0.0%     3    2.9   4.2   2.9   5.2   1.1
  5.|-- 114.112.78.70              0.0%     3   18.6  13.2   2.6  18.6   9.2
  6.|-- 103.241.231.130            0.0%     3   47.1  49.7  47.1  52.2   2.6
  7.|-- 103.241.231.69             0.0%     3   56.8  52.2  44.3  56.8   6.8
  8.|-- te3-3.c01.cnhkg.hk02.link  0.0%     3   48.3  51.2  48.3  53.9   2.8
  9.|-- 15169.hkg.equinix.com      0.0%     3   48.1  49.4  48.1  51.4   1.8
 10.|-- 108.170.241.65             0.0%     3   47.8  55.4  47.8  64.7   8.6
 11.|-- 209.85.241.209             0.0%     3   69.4  59.2  45.3  69.4  12.4
 12.|-- hkg12s17-in-f4.1e100.net   0.0%     3   63.9  60.2  50.6  66.1   8.4
Start: 2018-06-01T15:58:17+0800
HOST: Mac                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                 0.0%     3    1.4   1.7   1.4   2.5   0.7
  2.|-- 172.16.105.25              0.0%     3    2.6   4.1   2.4   7.2   2.7
  3.|-- 210.73.209.81              0.0%     3    7.2  19.5   6.7  44.6  21.7
  4.|-- 118.186.62.141             0.0%     3   59.5  21.6   2.5  59.5  32.8
  5.|-- 114.112.78.66              0.0%     3    2.5   2.5   2.5   2.5   0.0
  6.|-- xe-0-0-2.c02.cnhkg.hk02.l  0.0%     3   47.3  47.2  44.0  50.3   3.2
  7.|-- 32934.hkg.equinix.com      0.0%     3   45.6  66.0  45.6  76.5  17.6
  8.|-- po112.asw03.hkg3.tfbnw.ne  0.0%     3   46.2  45.4  44.7  46.2   0.7
  9.|-- po231.psw02.hkg3.tfbnw.ne  0.0%     3   45.3  45.7  45.0  46.8   1.0
 10.|-- 173.252.67.177             0.0%     3   44.9  45.5  44.7  46.8   1.2
 11.|-- edge-star-z-mini-shv-01-h  0.0%     3   52.9  47.2  44.1  52.9   4.9
Start: 2018-06-01T15:58:44+0800
HOST: Mac                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                 0.0%     3    1.3   1.5   1.3   1.7   0.2
  2.|-- 172.16.105.25              0.0%     3    2.3   2.3   2.1   2.6   0.2
  3.|-- 210.73.209.81              0.0%     3    5.3   5.4   5.2   5.8   0.3
  4.|-- 118.186.62.137             0.0%     3    2.5   2.9   2.5   3.3   0.4
  5.|-- 114.112.78.70              0.0%     3    3.6   2.8   2.2   3.6   0.7
  6.|-- 103.241.231.130            0.0%     3   46.1  44.3  43.3  46.1   1.6
  7.|-- 103.241.231.69             0.0%     3   44.2  50.0  44.2  61.6  10.0
  8.|-- te3-1.c01.cnhkg.hk02.link  0.0%     3   44.1  46.1  44.1  50.0   3.4
  9.|-- google2-lacp-100g.hkix.ne  0.0%     3   44.4  45.2  44.3  47.0   1.5
 10.|-- 108.170.241.1              0.0%     3   47.5  49.8  45.6  56.3   5.8
 11.|-- 72.14.233.169              0.0%     3   45.7  47.1  45.3  50.3   2.8
 12.|-- hkg07s22-in-f110.1e100.ne  0.0%     3   45.1  45.5  45.1  46.4   0.7

  由此可見,使用-F選項是從指定檔案中讀取主機選項進行網路測試。-c選項是設定每秒傳送資料包的次數,在這裡我們指定了3次,可以從Snt列表現出來。

OPTIONS -w

sudo mtr -w google.com

Start: 2018-06-01T16:03:13+0800
HOST: Mac                                         Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.131.5.1                                   0.0%    10    2.2  17.2   1.2  95.9  29.3
  2.|-- 172.16.105.25                                0.0%    10    3.5   4.1   2.3  10.1   2.8
  3.|-- 210.73.209.81                                0.0%    10    6.7  11.6   5.8  26.1   6.4
  4.|-- 118.186.62.141                               0.0%    10   26.3   7.5   2.6  26.3   7.5
  5.|-- 114.112.78.66                                0.0%    10    2.6   4.7   2.4  18.5   5.0
  6.|-- 103.241.231.130                              0.0%    10   43.4  47.1  43.3  61.4   5.9
  7.|-- 103.241.231.69                               0.0%    10   44.1  46.7  44.0  54.7   4.1
  8.|-- te3-1.c01.cnhkg.hk02.link.capitalonline.net  0.0%    10   44.3  47.4  43.9  65.3   6.6
  9.|-- google2-lacp-100g.hkix.net                   0.0%    10   48.1  49.2  44.3  68.8   8.4
 10.|-- 108.170.241.97                               0.0%    10   46.4  50.6  45.3  69.1   7.4
 11.|-- 209.85.241.219                               0.0%    10   45.5  52.2  44.9  64.3   7.2
 12.|-- hkg12s17-in-f14.1e100.net                    0.0%    10   44.8  48.1  44.8  53.6   2.9

  使用-w選項表示使用mtr的廣泛模式,在報告中顯示更詳細的主機名。

OPTIONS -x/C/j

sudo mtr -r -c 1 -j baidu.com >> baidu.json
cat baidu.json

{
  "report": {
    "mtr": {
      "src": "Mac",
      "dst": "baidu.com",
      "tos": "0x0",
      "psize": "64",
      "bitpattern": "0x00",
      "tests": "1"
    },
    "hubs": [{
      "count": "1",
      "host": "10.131.5.1",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 1.94,
      "Avg": 1.94,
      "Best": 1.94,
      "Wrst": 1.94,
      "StDev": 0.00
    },
    {
      "count": "2",
      "host": "114.112.84.193",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.62,
      "Avg": 2.62,
      "Best": 2.62,
      "Wrst": 2.62,
      "StDev": 0.00
    },
    {
      "count": "3",
      "host": "114.112.76.98",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.09,
      "Avg": 2.09,
      "Best": 2.09,
      "Wrst": 2.09,
      "StDev": 0.00
    },
    {
      "count": "4",
      "host": "117.79.134.97",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.41,
      "Avg": 2.41,
      "Best": 2.41,
      "Wrst": 2.41,
      "StDev": 0.00
    },
    {
      "count": "5",
      "host": "139.159.7.122",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 6.17,
      "Avg": 6.17,
      "Best": 6.17,
      "Wrst": 6.17,
      "StDev": 0.00
    },
    {
      "count": "6",
      "host": "61.49.37.9",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.95,
      "Avg": 2.95,
      "Best": 2.95,
      "Wrst": 2.95,
      "StDev": 0.00
    },
    {
      "count": "7",
      "host": "61.148.7.141",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.26,
      "Avg": 2.26,
      "Best": 2.26,
      "Wrst": 2.26,
      "StDev": 0.00
    },
    {
      "count": "8",
      "host": "bt-230-101.bta.net.cn",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 14.30,
      "Avg": 14.30,
      "Best": 14.30,
      "Wrst": 14.30,
      "StDev": 0.00
    },
    {
      "count": "9",
      "host": "bt-230-122.bta.net.cn",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 4.87,
      "Avg": 4.87,
      "Best": 4.87,
      "Wrst": 4.87,
      "StDev": 0.00
    },
    {
      "count": "10",
      "host": "61.49.168.86",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 3.36,
      "Avg": 3.36,
      "Best": 3.36,
      "Wrst": 3.36,
      "StDev": 0.00
    },
    {
      "count": "11",
      "host": "???",
      "Loss%": 100.00,
      "Snt": 1,
      "Last": 0.00,
      "Avg": 0.00,
      "Best": 0.00,
      "Wrst": 0.00,
      "StDev": 0.00
    },
    {
      "count": "12",
      "host": "123.125.115.110",
      "Loss%": 0.00,
      "Snt": 1,
      "Last": 2.96,
      "Avg": 2.96,
      "Best": 2.96,
      "Wrst": 2.96,
      "StDev": 0.00
    }]
  }
}

  使用-x可以將輸出儲存為xml格式檔案,使用-C可以將輸出儲存為CSV格式檔案,使用-j選項可以將輸出儲存為json格式檔案。
  更多引數可以直接執行man mtr

相關文章