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