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.168 或 10 開頭。實際的 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 也有;甚至還有一個圖形界面的 ping:gping,它可用於 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中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...