因耗子叔推薦,最近在看《TCP IP 詳解》,裡面講到了 ping,今天來聊聊 ping。如果覺得有收獲,不妨随手一個關注,每天學點技術。
ping 我相信你一定用過,剛裝完電腦,不能上網的時候,我們就會 ping 一下目标機器,如果 ping 不同,那就說明網絡不可達,如果能 ping 通但還是無法上網,可能是網絡配置問題。可是你是否想過 ping 之後,計算機背後都做了些了什麼?你可以把它作為面試題來回答。
ping 的名字源于聲納定位操作。Ping 程式由 MikeMuuss 編寫,目的是為了測試另一台主機是否可達。該程式發送一份 ICMP 回應要求封包給主機,并等待主機傳回 ICMP 應答封包。
一般來說,如果不能 Ping 到某台主機,那麼就不能 Telnet 或者 FTP 到那台主機。反過來,如果不能 Telnet 到某台主機,那麼通常可以用 Ping 程式來确定問題出在哪裡。Ping 程式還能測出到這台主機的往返時間,以表明該主機離我們有多遠。
幾年前我們還可以作出這樣沒有限定的斷言,如果不能 Ping 到某台主機,那麼就不能 Telnet 或 FTP 到那台主機。随着 Internet 安全意識的增強,出現了提供通路控制清單的路由器和防火牆(禁止 ping 的政策),那麼像這樣沒有限定的斷言就不再成立了。一台主機的可達性可能不隻取決于 IP 層是否可達,還取決于使用何種協定以及端口号。Ping 程式的運作結果可能顯示某台主機不可達,但我們可以用 Telnet 遠端登入到該台主機的 25 号端口,比如郵件伺服器。
前面提到,ping 使用的是 ICMP 協定,那要了解下什麼是 ICMP,ICMP 是 Internet 控制封包協定,位于 TCP/IP 協定族的的網絡層:

請注意,雖然 ICMP 和 IP 協定都在網絡層,但是 ICMP 在傳輸時是被封裝在 IP 封包内部的,原因也很簡單,沒有 IP 協定,怎麼知道你要把封包傳給誰呢,IP 協定就相當于一個信封。
也就是說:
不妨讓大腦牢記一下這個圖:
現在來看下 ICMP 封包的格式:
但是 ICMP 回應要求和回應答覆封包,又多了一些辨別符和序号兩個固定字段:
辨別符有什麼用呢?Unix 系統在實作 ping 程式時是把 ICMP 封包中的辨別符字段置成發送程序的 ID 号。這樣即使在同一台主機上同時運作了多個 ping 程式執行個體,ping 程式也可以識别出傳回的資訊。
序号就很簡單了,從 0 開始,每發送一次新的回應要求就加 1。ping 程式列印出傳回的每個分組的序列号,允許我們檢視是否有分組丢失、失序或重複。
從上述 ping 的結果看,處理序号,還有 ttl 和 time,ttl 就是 time to live,指的是封包在網絡中能夠存活的限制,就是當封包在網絡中轉發時,每經過一個路由點,就把預先設定的這個 ttl 數值減 1,直到最後 ttl=1 時封包就被扔掉,不向下轉發。
time 就是往返時間,ping 程式通過在 ICMP 封包資料中存放發送請求的時間值,當應答傳回時,用目前時間減去存放在 ICMP 封包中的時間值,即是往返時間。
ping 的是域名,但 ping 輸出的第一行包括目的主機的 IP 位址,說明在發送 ICMP 封包之前,還請求了 DNS 伺服器。
ping 程式還可以檢視通路目标位址時經過了哪些路由,加上
-R
選項就可以:
可以看到有經過了 9 個路由,不過,ping 最多顯示 9 個路由 ip,因為多了放不下,man 下,看看對 -R 的解釋,說的就是 ip 的頭部最多放 9 個 ip,如果想檢視路由,要用 traceroute 指令。
ping 程式是對兩個 TCP/IP 系統連通性進行測試的基本工具。它隻利用 ICMP 回應要求和回應答覆封包,而不用經過傳輸層(TCP/UDP)。ping 程式請求主機時,并不是主機上的某個使用者程序來應答的,而是作業系統的核心,也就是說作業系統核心層面就實作了對 ping 程式的響應。
最後的話
總結一下,就是用戶端 ping 之後,如果是域名會去查 DNS 伺服器找到目标 ip 位址,然後建構 ICMP 封包,将自己的程序 id 寫入辨別符,将序号寫入序号字段,發送時間寫入資料字段,将目标 ip 寫入 IP 封包首部,發送出去,等待傳回。
由于 IP 隻提供最好的資料報傳輸服務,但不保證一定成功送達,也就是說,出了問題,直接就把封包丢棄了,取決于網絡狀況。
伺服器收到 ICMP 請求封包時,會做相應的回應,但是現在的一些安全政策可以禁用 ping,也就是雖然網絡是連通的,但 ping 也沒有得到響應。
是以,如果超過一定的時間,ping 用戶端還沒有收到傳回的話,這個資料包就認為是丢了,顯示逾時。如果收到的話,就計算往返時間,然後回顯 ttl、time 等資訊。當按下 Ctrl C 時,計算統計資訊并顯示。
留言交流
如果對《TCP IP 詳解》感興趣,可以購買紙質書,也可以回複「TCPIP」擷取電子書。