網路學習之ping指令
和同學聊天的時候被問到這樣一個問題:在虛擬環境路由中主機A ping主機B的時間 加上主機B ping主機C的時間 為什麼比主機A ping主機C的時間長?
我們經常使用ping指令探測主機間是否通訊,然而細究起來還是一知半解,所以這個問題也引起了我的興趣。
1.ping指令
windows系統下開啟cmd命令列工具就可以使用ping網路診斷工具。
我們ping一個網站的效果:
我們再ping本機的效果:
ping 使用的是ICMP協議,它傳送icmp回送請求訊息給目的主機。ICMP協議規定:目的主機必須返回ICMP回送應答訊息給源主機。如果源主機在一定時間內收到應答,則認為主機可達。
PING命令是屬於ICMP協議規定的,而ICMP是內嵌於IP層的,IP協議是一種無連線的,不可靠的資料包協議。因此,可以說, PING是網路層的命令。按照預設設定,Windows上執行的Ping命令傳送4個ICMP(網間控制報文協議)回送請求,每個32位元組資料,如果一切 正常,我們應能得到4個回送應答。 Ping能夠以毫秒為單位顯示傳送回送請求到返回回送應答之間的時間量。如果應答時間短,表示資料報不必通過太多的路由器或網路連線速度比較快。
關於TTL(存活時間)我們可以推算下資料包經過了多少個路由器:源地點TTL起始值(一個2的乘方數)-返回時的TTL
例如第一個ping amazon的時候就是256-235=21跳;第二個ping本機就是128-128=0跳
2. ICMP協議
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個面向無連線子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。
ICMP的應用:ping ,traceroute
3. ping工作流程
主機A構建一個固定格式的ICMP請求資料包加ip地址->IP層協議,構建IP資料包->在ARP對映表中查找出IP地址對應的MAC地址->路由傳輸->主機B收到資料幀驗證接收->提取IP資料包交給IP層協議->提取資訊交給ICMP協議,構建ICMP應答包->傳送給主機A
4.回到問題
由於ping指令基於非面向連線的協議,所以其消耗時間主要基於路由路徑和網路傳輸速度。所以具體原因很可能是兩次的路由演算法算出的路徑不一樣導致時間差異,或者是網路傳輸途中發生的網路延遲等問題。