Linux中國

使用 Linux 的 ping 命令診斷網路連接問題

如今,聯網計算機變得十分普遍,以至於我們大多數人都理所當然地認為,房間一側的計算機可以連接上房間另一側的計算機,更不用說能連接上世界的另一端的計算機了。如此,網路使互聯網、雲、文件共享、媒體流、遠程管理、列印等服務成為可能。但是當網路出現問題時,有時很難診斷到底是其中哪一環節出現了問題。下面,我們就來介紹:網路連接最基本的診斷工具之一—— ping 命令。

基本的 ping 命令

當你無法訪問本地網路上的計算機或互聯網上的伺服器時,你可以 ping 它的 IP 地址。ping 互聯網控制報文協議 Internet Control Message Protocol (ICMP)數據包發送到目標 IP 地址。當我們要對網路連接狀況進行判斷時,ICMP 是個非常有用的協議,本質上 ICMP 是一個響應和應答信號。

讓我們由近及遠地進行故障排除。請先 ping 你自己的計算機,以確保你的計算機正在運行 網路棧 networking stack 。你正在操作的計算機稱為 主機 localhost ,本地迴環地址是:127.0.0.1

ping 命令能用主機的 主機名 hostname 、IP 地址(即 127.0.0.1)或者僅僅用簡寫 0 來表示 「主機」。

你可以使用 -c 選項,來控制發送數據包的 次數 count

$ ping 0 -c 1
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms

--- 0 ping statistics 1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms

在你確認本地網路棧已啟動並運行後,接下來,你可以 ping 你的路由器的 IP 地址。路由器的 IP 地址通常以 192.16810 開頭。實際的 IP 地址取決於路由器的配置。

當你沒有指定要發送多少次請求時,你可以用 Ctrl+C,來終止 ping 的運行。

$ ping 192.168.0.1 
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.100: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=3 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=4 Redirect Host(New nexthop: 192.168.0.1)
From 192.168.0.100: icmp_seq=5 Redirect Host(New nexthop: 192.168.0.1)
^C

如果你能 ping 通路由器,則表示你的有線或無線連接能正常工作。

對於你的區域網上的其他主機呢?你可以 ping 各種設備,但是並非所有設備都能保證響應,因為一些設備會丟棄 ICMP 數據包,但許多設備會做出響應。例如,我可以 ping 我的印表機:

$ ping 192.168.0.4 

ping 路由器以外的其他伺服器

在確定你自己的網路內部都能連通以後,你還可以 ping 通到路由器以外的其他伺服器。同樣地,並非所有伺服器都能接收 ICMP 數據包,更不用說響應 ICMP 數據包了。然而,也有一些伺服器可以接收並響應 ICMP 數據包,而在互聯網中的一個重要伺服器是 域名伺服器 nameserver

谷歌的 域名解析伺服器 DNS server 的 IP 地址很容易記住,而且它會響應 ping 請求:

$ ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.5 ms

--- 8.8.8.8 ping statistics 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms

當你連不上一個網站時,你可以查詢全球 DNS 網路,以找出其主機伺服器的地址,然後 ping 該伺服器。這至少可以告訴你,網站不通的原因是主機已關閉,或者只是 Web 伺服器問題。

例如,假設你嘗試訪問 example.com,但是發現失敗了。首先,使用 host 命令找到 example.com 的 IP 地址:

$ host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
example.com mail is handled by 0

然後,ping 該網站的的 IP 地址:

$ ping 93.184.216.34 -c 1

使用 IPv6

ping 不僅可以使用 IPv4,還能使用 IPv6。可以通過指定 -4-6 選項,來只使用 IPv4 或 IPv6。

設置數據包大小

你可以使用 -s 選項,來更改要發送的 ICMP 數據包的 大小 size 。默認的數據大小為 56 位元組,加上 8 位元組包頭,總共得到 64 位元組的 ICMP 數據包。以下的示例將發送的 ICMP 數據包大小修改為 35+8=43 個位元組:

$ ping -s 35 -c 5 8.8.8.8

你可以使用 -D 選項,使得在終端中的每個 ping 回復之前,先列印出當前的時間戳。該時間戳為 UNIX 時間戳,加上微秒:

$ ping -D 8.8.8.8 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1634013430.297468] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
[1634013431.298738] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.1 ms

設置時間間隔/長短

你可以使用 -i 選項,來更改兩次 ping 請求之間的 時間間隔 interval 。以下的示例將 ping 間隔更改為 2 秒:

$ ping -i 2 

你也可以使用 -w 選項,來在一段時間後終止 ping,單位為秒。

$ ping -w 6

ping 的變體

ping 有很多變體。例如,iputils 包提供了 ping 命令;Busybox 也有ping 命令;BSD 也有;甚至還有一個圖形界面的 pinggping,它可用於 Linux、macOS 和 Windows。你可以在 GitHub 上找到更多有關 gping 的信息。

一起來學習吧

ping 命令很簡單,但它可以幫你診斷網路連接問題。下次再遇到網路連接問題時,讓 ping 命令成為你解決問題的第一個工具吧。

via: https://opensource.com/article/21/10/linux-ping-command

作者:Seth Kenlon 選題:lujun9972 譯者:chai001125 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國