ping(8)

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

命令概要
ping [ -LRUbdfnqrvR] [-c count] [-i wait] [-l preload] [-p pattern] [-s packetsize]

更改過的選項：

-I <device name>
    可用於設置輸出接口

新增選項：

-T [ping only]:
    發送IP時間戳選項。

-T tsonly
    只有時間戳

-T tsandaddr
    時間戳和地址

-T tsprespec host1 [host2 [host3 [host 4]]]
    預先指定跳數的時間戳

改進：

- 可理解ICMP錯誤訊息並恢復正確。

- 可檢查ICMP校驗和並把損壞的分組恢復正確。

- 可正確測試linux的回環地址。

描述
ping 程式使用 ICMP 協議的強制回顯請求數據報以使主機或網關發送一份 ICMP 的回顯應答。回顯請求數據報(" pings ")含有一個 IP 及 ICMP 的報頭，後跟一個``時間值關鍵字''然後是一段任意長度的填充字節用於把保持分組長度為16的整數倍。以下是程式的選項：

-c  count 在發送(和接收)了正好數量為 count 的回顯應答分組後停止操作。在發送了 count 個分組後沒有收到任何分組的特別情況是發送導致了終止(選程主機或網關不可達)。

-d  在所用的套接字上使用 SO_DEBUG 選項。

-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 數據報。

-v  詳細模式輸出。列印接收到的回顯應答以外的 ICMP 分組。

-w  waitsecs 在 waitsecs 秒後停止 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。其它系統使用原始值。(校對者請指教此句之確切含義：meaculpa@21cn.com)

錯誤
很多主機和網關忽略記錄路由選項。 最大IP首部對如記錄路由這樣非常有用的選項來說長度太小。但對此無法再做更多 事情了。 通常情況並不推薦以高速方式作ping，而且只在非常受限的條件下才可對廣播地址 這樣做。

另見
netstat(1), ifconfig(8)

歷史
ping程式出現於4.3BSD 。

[中文版維護人]
meaculpa <meaculpa@21cn.com>

[中文版最新更新]
2000/12/08

[中國Linux論壇man手冊頁翻譯計劃]
http://cmpp.linuxforum.net