天天看點

Ping與TraceroutePing與Traceroute

Ping與Traceroute

Ping

Ping用于測試目的主機是否可達。如果目的主機設定了防火牆,會導緻ping失敗。

ping是基于ICMP協定實作的,不是基于TCP也不是基于UDP,曾經面試被忽悠過

Ping發送一份ICMP回應要求封包給目的主機,并等待傳回ICMP回應答覆封包

Ping與TraceroutePing與Traceroute

Unix系統在實作ping程式時會把辨別符設定成發送程序的ID号,為了同一台主機可以運作多個ping程式

ping程式在ICMP封包資料中存放發送請求的時間,收到應答封包時即可得到往返時間

如果我們ping一個url,比如“ping www.baidu.com”傳回的資訊中會有IP位址,說明在ping之前先做了一次dns

ping後加上參數 - R 可以檢視路由(即通路目的主機的路徑)這會導緻ICMP回應要求封包所在的IP資料報的首部中記錄了沿途的IP,具體記錄在IP首部的選項字段中,最多隻有40個位元組

Ping與TraceroutePing與Traceroute

RFC 791[Postel 1981a]指定路由器記錄出口IP位址。

一個例子

Ping與TraceroutePing與Traceroute
Ping與TraceroutePing與Traceroute

Traceroute

traceroute用于檢視IP資料報從一台主機到另一台主機的路由

為什麼不用ping -R 而是用traceroute檢視路由的原因:

  • 并非所有的路由器都支援ping的記錄路由選項
  • ping -R時目的主機必須從收到的IP資料報中提取所有沿路IP資訊并複制到ICMP回顯響應封包中,traceroute的目的主機不需要這種複雜操作
  • IP首部選項字段空間有限,隻能存放九個IP位址,無法滿足愈加複雜的網絡

Traceroute原理

traceroute使用ICMP封包和IP首部中的TTL來實作記錄路由功能

TTL一般初始化為255,每經過一個路由器或主機,TTL就會減一,當TTL為0時,所在路由器或主機會丢棄該IP資料報,并發送一個 ICMP逾時封包 給發送端。而ICMP逾時封包所在的IP資料報則給發送端提供了所在路由器或主機的IP。

traceroute發送一個UDP資料報給目的主機,并設定UDP端口為一個不可能使用的值(大于30000),一開始traceroute發送一個TTL=1的資料報,如果無法到達目的主機,傳回一個ICMP逾時封包,發送端拿到了網絡中“第一個換乘點”的IP。接着發送一個TTL=2的資料報,如果還是無法到達目的主機,“第二個換乘點”發送ICMP逾時封包給發送端。接着TTL=3 TTL=4。。。直到到達目的主機,UDP資料報到達目的主機後會發現端口不可用,會給發送端發送一個 ICMP端口不可用封包 。此時發送端到目的主機的整個路由已經清晰了,tarceroute停止增加TTL

Traceroute的例子

發送端經過路由器ABC到達目的主機,雙向箭頭表示兩台裝置之間直連,單向箭頭表示IP資料報的傳輸,線條上面的文字開頭數字表示資料報的發送順序

Ping與TraceroutePing與Traceroute

繼續閱讀