ping是我們在Linux中測試網絡連接的常用指令。首先ping是應用程序,而不是協議,它利用ICMP【Internet control message protocol 因特網控制報文協議】報文檢測網絡連接。
首先假設A ping B
1.ping通知系統建立一個固定格式的ICMP請求數據包。
2.ICMP協議打包這個數據包和B的IP地址轉交給IP協議層
3.IP層協議將機器B的IP地址為目的地址,本機的IP地址為源地址,加上一些頭部必要的控制信息,構建一個IP數據包
4.獲取B的MAC地址,做這個操作首先機器A會判斷B是否在同一網段內,若IP層協議通過B的IP地址和自己的子網掩碼,發現它跟自己屬於同一網絡,就直接在本網絡查找這台機器的MAC,否則則通過路由器進行類似查找。
接下來是ARP協議根據IP地址查找MAC地址的過程:
若兩台機器之前有過通信,在機器A的ARP緩存表里應該存有B的IP與其MAC地址的映射關系。
若沒有,則通過發送ARP請求廣播,得到回應的B機器MAC地址,並交給數據鏈路層
5.數據鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址是本機的MAC地址,再附加一些必要的控制信息,依據以太網的介質訪問規則將他們傳送出去
6.機器B收到這個數據幀后,先檢查目的地址,和本機MAC地址對比:
符合,接受。接收后檢查該數據幀。將IP數據包從幀中提取出來,交給本機的的IP地址協議層協議,IP協議層檢查之后,將有用的信息提取給ICMP協議,后者處理,馬上構建一個ICMP應答包,發送給A,其過程和主機A發送ICMP請求包到B的過程類似,但不用ARP廣播收取A的信息,因為請求包中已經有足夠的信息用於B回應A。
若不符合,丟棄。
可以知道PING的過程即一段發送報文和接受確認報文的過程,在來回直接可以計算時延。其過程簡單,但其中還包括了一步ARP協議請求,廣播請求,單播回應的過程。其他都是正常IP數據包的發送和接受