名稱

ping - 向網路主機發送 ICMP 回顯請求(ECHO_REQUEST)分組

概要

ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark ] [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern] [-Q tos ] [-s packetsize] [-S sndbuf ] [-t ttl] [-T timestamp option ] [hop ...] destination
 

描述

ping 使用 ICMP 協議規定的 ECHO_REQUEST 資料報引發一個來自主機或網管的 ICMP ECHO_RESPONSE 回應。 ECHO_REQUEST 資料報(“ping”資訊)有一個 IP 和 ICMP 頭部, 其後跟隨了一個結構,包含一個時間相關的值以及一個任意的“pad” 位元組的隨機數用以填充資料包。
ping可以同時在 IPv4 和 IPv6 下工作。 如需明確強制指定使用其中某個,可以使用 -4 或者 -6
ping 還可以傳送 IPv6 節點資訊查詢(Node Information Quries, RFC4620)。 中間節點( hop)可能不被允許,因為 IPv6 源路由已不贊成使用(RFC5095)。

選項

-4
僅使用 IPv4。
-6
僅使用 IPv6。
-a
Audible ping.
-A
自適應 ping。
-b
允許對一個廣播地址進行 ping。
-t ttl
僅進行ping。 設定 IP 的 TTL(Time to Live)。
-T timestamp option
設定特殊的 IP 時間戳選項。 timestamp option 可以是 tsonly(僅時間戳)、 tsandaddr(時間戳和地址)或者 tsprespec host1 [host2 [host3 [host4]]](預先指定跳數的時間戳)。
-U
列印完整的使用者到使用者的延遲(舊行為)。通常情況下 ping 列印網路往返延時,它們可能不同,例如在 DNS 解析出現失敗時。
-v
輸出詳細資訊。
-V
顯示版本並退出。
-c
count 在傳送(和接收)了正好數量為 count 的回顯應答分組後停止操作。在傳送了 count 個分組後沒有收到任何分組的特別情況是傳送導致了終止(選程主機或閘道器不可達)。
-d
在所用的套接字上使用 SO_DEBUG 選項。 實際上,這個套接字選項沒有被 Linux 核心所使用。
-D
在每行之前列印時間戳(UNIX 時間 + gettimeofday 中的毫秒)。
-f
以高速(洪水)方式進行 ping。 以分組返回的速度來輸出其它分組或每秒輸出百次。當收到每個回顯應答並列印一個退格符時,對每個回顯請求都列印一個句點``.''。這可以快速顯示出丟棄了多少個分組,只有超級使用者可以用這個選項。這(操作)對網路要求非常苛刻,應該慎重使用。
-i
wait 在傳送每個分組時等待 wait 個秒數。預設值為每個分組等待一秒。此選項與-f選項不能同時使用。
-l
preload 如果指定 preload ,那麼 ping 程式在開始正常執行模式前儘可能快地傳送分組。同樣只有超級使用者可以用這個選項。
-n
只以數字形式輸出資訊。這樣就不嘗試去查詢主機名了。
-p
pattern 可以指定最多16個填充位元組用於保持分組長度為16的整數倍。在網路上診斷與資料相關問題時此選項很有用。例如``-p ff''將使發出的分組都用全1填充資料區。
-q
靜態輸出。在程式啟動和結束時只顯示摘要行。
-R
記錄路由。在回顯請求分組中包含記錄路由選項並在相應的分組返回時顯示路由緩衝區。注意IP首部的容量只能存放9條這樣的路由。很多主機 忽略或禁用此選項。
-r
在所連線的網路上旁路正常的選路表,直接向主機發送分組。如果主機未處於直接相連的網路上,那麼返回一個錯誤。此選項可用來透過無路由介面對一臺主機進行檢測(例如當介面已被 routed 程式丟棄後)。
-s
packetsize 指定要傳送資料的位元組量。預設值為 56 ,這正好在添加了 8 位元組的 ICMP 首部後組裝成 64 位元組的 ICMP 資料報。
-w
waitsecswaitsecs 秒後停止 ping 程式的執行。當試圖檢測不可達主機時此選項很有用。
當用ping來隔離故障時,應首先在本地主機上執行,以檢查本地網路介面有效 執行。然後,應該進一步檢查主機和閘道器。計算出往返時間和分組丟失率。如 果收到重複的分組,雖然這些分組的往返時間要用於計算往返時間的最小/平均 /最大值,但是它們不應該算在剛才計算的丟失的分組中。當指定數量的分組已 經發送(和接收)時或如果程式被SIGINT訊號終止,會顯示一份簡短的摘要。
如果ping程式根本沒有收到任何返回分組,那它將以返回碼1退出。出錯時返回 2。否則返回0。這些值可能用於檢視主機存在與否。
此程式專用於網路測試,度量和管理。因為它會使用網路的流量,在正常操作或 自動的指令碼中使用它並不明智。

ICMP分組細節

一個無選項的IP首部長為20位元組。一個ICMP回顯請求分組包含了額外的8個位元組 用於任意數量的資料。當給出分組長度時,就同時指出了額外資料的長度(預設為 56)。因此接收到的ICMP回顯應答這樣的一個IP分組內部所含的資料量總是8個字 節從而超過了請求資料空間(ICMP首部)。
如果資料空間至少有8個位元組大小,ping程式使用此空間的頭8個位元組來包含一個 用於計算往返時間的時間戳。如果指定了填充位元組小於8個位元組,就不給定往返 時間了。

重複和受損的分組

ping程式會報告重複和受損的分組。分組重複不應該發生,不適當的鏈路層傳輸 可能會導致這樣問題。分組重複在很多情況下可能會發生,雖然存在少量重複並 不總會導致警告,但並不是個好訊號。
分組受損很顯然會引起嚴重警告,並通常會在檢測分組的路徑上某處指出受損的 硬體(在網路中或主機中)。

嘗試不同的資料結構

網際網路絡並不會因為分組資料部分的內容不同而區別看待分組。不幸的是,與資料相關的問題都已知潛存於網路中,並在一個較長時期內無法檢測到。在很多情況下,引起問題的特殊結構是些未完全轉換的內容如全1或全0,接近臨界的結構如幾乎全0。在命令列上沒有足夠的必要去指定如全0這樣的一個數據結構,因為有影響的結構位於資料鏈路層,並且與指定的和控制器傳輸的複雜程度有關。
這說明如果你有一個與資料相關的問題,可能必須用很多測試來找出它。如果幸運的話,可以設法查詢一個不能在網上傳送或傳送時要花比同長度的檔案更多時間的檔案。然後檢查此檔案中用ping程式的-p選項來指定的重複結構。

有效時間細節

一個IP分組的TTL值表示分組在被丟棄前穿越IP路由器的最大資料。在現有的實際中, 你可以認為網際網路上每個路由器都對TTL欄位減1。
TCP/IP規定TCP分組的TTL欄位應該設為60,但很多系統用較小的值(4.3 BSD 用30, 4.2用15)。
此欄位可能的最大值為255,多數UNIX系統把ICMP回顯請求分組的TTL欄位設 為255。這就是為什麼你可以``ping''一些主機而不能用telnet(1)ftp(1)到達。
在正常操作時ping列印它收到分組的TTL值。當選程系統收到一份ping的分組時, 在作出響應時可以用TTL欄位完成三件事:
不變;
4.3BSD-Tahoe release之前的Berkeley Unix系統是這樣做的。 在此情況下,收到的分組的TTL值為255減往返路徑中的路由器數。
把它設為255;
當前的Berkeley Unix系統是這樣做的。在此情況下,收到的 分組的TTL值為為255減選程系統與執行ping主機之間的路由器數。
把它設為其它值。
有些主機對ICMP分組使用與TCP分組相同的值,例如30或 60。其它系統使用原始值。(校對者請指教此句之確切含義:[email protected])

缺陷

很多主機和閘道器忽略記錄路由(RECORD_ROUTE)選項。
最大 IP 頭部長度對如記錄路由(RECORD_ROUTE)這樣非常有用的選項來說長度太小。 但對這個問題也沒什麼可做的了。
通常情況並不推薦以高速方式作 ping, 而且只應當在非常受限的條件下才可對廣播地址這樣做。

另見

netstat(1), ifconfig(8).

歷史

ping 命令出現於 4.3BSD。
當前文件描述的版本是它在 Linux 平臺上的後續版本。
從版本 s20160815 開始, ping6 二進位制程式不再存在。 它已經被合併進了 ping 程式中。 建立一個名為 ping6 指向 ping 的符號連結可以提供原有的功能。

安全性

ping 在下述條件下執行時需要 CAP_NET_RAW 能力: 1) 如果程式被用於進行 non-echo 查詢(請見 -N 選項),或 2) 如果核心不支援 non-raw ICMP 套接字,或 3) 如果使用者不被允許建立 ICMP echo 套接字。 本程式設計可以用於在設定使用者ID為 root 的情況下執行。

獲取

pingiputils 軟體包的一部分。 其最新版本原始碼可以從下述地址獲取到: http://www.skbuff.net/iputils/iputils-current.tar.bz2.
 

本頁面中文版由中文 man 手冊頁計劃提供。
 
中文 man 手冊頁計劃: https://github.com/man-pages-zh/manpages-zh

Recommended readings

Pages related to ping you should read also: