Ping的實現原理
ping是定位網絡通不通的一個重要手段,是用來探測本機與網絡中另一台主機之間是否可達的命令,如果兩台主機之間ping不通,則表明這兩台主機不能建立起連接。
ping命令是基於ICMP協議來工作的,ping命令會發送一份ICMP回顯請求報文給目標主機,並等待目標主機返回ICMP回顯應達,如果源主機在一定時間內收到了目標主機的應答,則表明兩台主機間是連通的。
舉一個例子來描述ping命令工作的原理
1)假設有兩個主機,主機A(192.168.0.1)和主機B(192.168.0.2),現在我們要監測主機A和主機B之間網絡是否可達,那么我們在主機A上輸入命令:ping 192.168.0.2;
2)此時,ping命令會在主機A上構建一個 ICMP的請求數據包,然后 ICMP協議會將這個數據包以及目標IP(192.168.0.2)等信息一同交給IP層協議;
3)IP層協議得到這些信息后,將源地址(即本機IP)、目標地址(即目標IP:192.168.0.2)、再加上一些其它的控制信息,構建成一個IP數據包;
4)IP數據包構建完成后,還不夠,還需要加上MAC地址,因此,還需要通過ARP映射表找出目標IP所對應的MAC地址。當拿到了目標主機的MAC地址和本機MAC后,一並交給數據鏈路層,組裝成一個數據幀,依據以太網的介質訪問規則,將它們傳送出出去;
5)當主機B收到這個數據幀之后,會首先檢查它的目標MAC地址是不是本機,如果是就接收下來處理,接收之后會檢查這個數據幀,將數據幀中的IP數據包取出來,交給本機的IP層協議,然后IP層協議檢查完之后,再將ICMP數據包取出來交給ICMP協議處理,當這一步也處理完成之后,就會構建一個ICMP應答數據包,回發給主機A;
6)在一定的時間內,如果主機A收到了應答包,則說明它與主機B之間網絡可達,如果沒有收到,則說明網絡不可達。除了監測是否可達以外,還可以利用應答時間和發起時間之間的差值,計算出數據包的延遲耗時。
ping不需要端口號
因為ping是應用層直接使用網絡層ICMP的一個例子,而端口是運輸層的概念,ping並沒有通過運輸層的TCP和UDP等
