Ping程序的實質是利用了ICMP請求回顯和回顯應答報文,但ARP請求和應答報文也在其中起了非常重要的作用。 Ping的邏輯過程以從PC1 ping PC2(命令:ping 11.1.1.2 -I 10.1.1.1)為例說明Ping的邏輯過程。
1、ping程序生成一個ICMP請求回顯報文。
ICMP報文沿協(xié)議棧向下傳輸?shù)絠p層,封裝ip頭,包含源地址IP與目的地址IP。在此封裝過程中,IP層已經根據IP地址和掩碼判斷出了源IP與目的IP不屬于同一網段(網段判斷的規(guī)則為:把IP地址的高XX位保留,其余位置0,IP地址共有四段,每段8位,共32位,順序為左高右低。比如PC1的IP:10.1.1.1,掩碼24,IP所屬的網段為10.1.1.0-10.1.1.255),如圖1所示。
2、ICMP報文再向下傳到鏈路層,準備進行以太幀頭的封裝,但由于無法知道目的mac地址,暫時無法進行封裝,如圖2所示。
3、由于已經知道了源IP與目的IP不屬于同一網段,故主機要查找FIB表,找自己的下一跳,分以下兩種情況: 如果沒找到下一跳,則得不到下一跳的ip,自然也得不到下一跳的mac地址,以太幀頭無法進行封裝,于是就ping不通。 如果找到了下一跳,得到了下一跳的ip,但此時還不知道下一跳的mac,故要發(fā)送ARP廣播請求。ARP的請求或應答分組格式如圖3所示,參數(shù)如表1所示。
說明:
以太首部中的以太網目的地址與ARP請求中的目的以太網地址是不一樣的,前者為全1,表示廣播,這樣才能被所有直連設備接收到。
后者是下一跳的mac地址,因為未知,所以填充為全0。但以太首部中的以太網源地址和ARP請求中的發(fā)送端以太網地址是一樣的,為重復信息。
FIB(Forward Information Base)表:即路由表。
3、下一跳(RTA b口 10.1.1.2/24)收到此請求以后,發(fā)現(xiàn)請求所對應的IP地址是自己,于是回復一個ARP單播應答給PC1,此應答包含了10.1.1.2/24所對應的mac地址,按圖3所示對應的ARP參數(shù)如表2所示。
說明:
在ARP應答中,以太首部中的源地址和目的地址與ARP應答報文中的發(fā)送端地址和目的地址完全相同。 以ARP Request為例說明ARP分組格式的參數(shù)填寫,界面如圖4所示。
00 01為硬件類型,值為1表示以太網地址。
08 00為協(xié)議類型,值為8表示IP地址。
06表示硬件地址長度為6字節(jié)。
04表示協(xié)議地址長度為4字節(jié)。
00 01表示OP,值為1表示是ARP請求。
00 e0 fc 01 a5 03表示發(fā)送端以太網地址。
c0 a8 62 01表示發(fā)送端IP地址。
00 00 00 00 00 00表示目的以太網地址為未知。
c0 a8 62 02表示目的IP地址。
5、PC1此時已經收到ARP應答,得到了下一跳的mac地址,進行以太幀頭的封裝。然后將數(shù)據報發(fā)送給RTA。
說明:
以后很可能RTA也要向PC1進行數(shù)據傳送,為避免總是發(fā)送ARP請求及應答,減少網絡上的通信量采取以下做法:
當PC1向RTA發(fā)送ARP請求時,就已經將自己的IP地址到物理地址的映射寫入ARP請求中。
當RTA收到PC1的ARP請求后,RTA就將PC1的這一映射寫入到了自己的ARP緩存中。
6、RTA收到數(shù)據報后,拆掉以太幀頭,上送到IP層,發(fā)現(xiàn)IP首部中的目的IP地址11.1.1.2/24不是自己,需要轉發(fā),故查找自己的路由表,重新進行數(shù)據報的封裝。
7、當封裝到以太幀頭時,發(fā)現(xiàn)目的mac地址(11.1.1.2/24對應的mac地址)未知,故也要發(fā)ARP廣播請求。在此ARP請求中:
以太網源地址為RTA to PC2的mac地址,即11.1.1.1/24對應的mac地址。
OP為1,表示ARP請求。
發(fā)送端以太網地址為RTA to PC2的mac地址,即11.1.1.1/24對應的mac地址。
發(fā)送端IP地址為RTA to PC2的IP地址,即11.1.1.1/24。
目的以太網地址為未知,以全0填充。
目的IP地址為PC2的IP地址11.1.1.2/24。
8、PC2收到此請求以后,發(fā)現(xiàn)請求所對應的IP地址是自己,于是回復一個ARP單播應答給RTA,此應答包含了11.1.1.2/24所對應的mac地址。在此ARP應答中:
以太網目的地址為RTA to PC2的mac地址,即11.1.1.1/24對應的mac地址。
以太網源地址為PC2的mac地址,即11.1.1.2/24對應的mac地址。
OP為2,表示ARP應答。
發(fā)送端以太網地址為PC2的mac地址,即11.1.1.2/24對應的mac地址。
發(fā)送端IP地址為PC2的IP地址,即11.1.1.2/24。
目的以太網地址為RTA to PC2的mac地址,即11.1.1.1/24對應的mac地址。
目的IP地址為RTA to PC2的IP地址,即11.1.1.1/24。
說明:
與前面RTA學習PC1的ARP映射一樣,PC2也相應地在自己的ARP緩存中記錄了RTAc口的IP地址到物理地址的映射。
9、RTA此時已經收到ARP應答,得到了PC2的mac地址,進行以太幀頭的封裝。然后將數(shù)據報發(fā)送給PC2。
10、PC2回應PC1的ICMP包。
11、PC2收到此數(shù)據報后,拆封以太幀頭,拆封IP首部后發(fā)現(xiàn)是個ICMP請求回顯報文,于是會回復一個ICMP回顯應答報文給PC1。此時的源IP地址變成了PC2的IP地址11.1.1.2/24,目的IP地址變成了PC1的IP地址10.1.1.1/24。由于目的IP與源IP不在同一網段,所以PC2也要查找FIB表,經查找得知下一跳為RTA c口 11.1.1.1/24。如前所述,PC2的ARP緩存中已經記錄了RTA c口的映射信息,故不需要再向RTA發(fā)送ARP請求,直接在ARP緩存中讀到RTA 11.1.1.1/24的mac地址進行封裝,將數(shù)據報發(fā)給RTA。同理RTA也不用向PC1發(fā)送ARP請求,直接在自己的ARP緩存中讀到PC1的mac地址,將數(shù)據報轉發(fā)給PC1。
12、PC1收到數(shù)據報后,逐層拆封以太幀頭、IP首部,得到ICMP回顯應答,顯示ping通
Ping的用途:
就是用來檢測網絡的連通情況和分析網絡速度。