Ping原理詳解
前言
Ping是排除設(shè)備訪問故障的常見方法。它使用Internet控制消息協(xié)議ICMP(Internet Control Message Protocol)確定以下內(nèi)容:
遠(yuǎn)程設(shè)備是否處于可訪問狀態(tài)。
訪問遠(yuǎn)程設(shè)備時是否丟失報文。
本端與遠(yuǎn)程設(shè)備之間通信的往返延遲。
Ping原理
現(xiàn)在以一個實(shí)例來說明Ping的實(shí)現(xiàn)過程。
如下圖所示,PC1想要Ping通PC2,即Ping 11.1.1.2。

PC1的Ping程序生成一個ICMP請求報文。
如果PC1沒找到下一跳,則得不到下一跳的IP,也得不到下一跳的MAC地址,以太幀頭無法進(jìn)行封裝,于是PC1就Ping不通PC2。
如果PC1找到了下一跳,得到了下一跳的IP,但此時還不知道下一跳的MAC地址,故PC1要發(fā)送ARP廣播請求。
ICMP報文沿協(xié)議棧向下傳輸?shù)絀P層,封裝IP頭,包含源地址IP與目的地址IP。
在此封裝過程中,IP層已經(jīng)根據(jù)IP地址和掩碼判斷出了源IP與目的IP不屬于同一網(wǎng)段。
ICMP報文再向下傳到鏈路層,準(zhǔn)備進(jìn)行以太幀頭的封裝,但由于無法知道目的MAC地址,暫時無法進(jìn)行封裝。
由于已經(jīng)知道了源IP與目的IP不屬于同一網(wǎng)段,故PC1要查找FIB表,找自己的下一跳。
下一跳(Switch a口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地址。
PC1此時已經(jīng)收到ARP應(yīng)答,得到了下一跳的MAC地址,進(jìn)行以太幀頭的封裝,然后將數(shù)據(jù)報發(fā)送給Switch。
當(dāng)PC1向Switch發(fā)送ARP請求時,將自己的IP地址到物理地址的映射寫入ARP請求中。當(dāng)Switch收到PC1的ARP請求后,Switch就將PC1的這一映射寫入到了自己的ARP緩存中。這是因?yàn)橐院蠛芸赡躍witch也要向PC1進(jìn)行數(shù)據(jù)傳送,為了以后彼此通信的方便,避免總是發(fā)送ARP請求及應(yīng)答,減少網(wǎng)絡(luò)上的通信。
Switch收到數(shù)據(jù)報文后,剝掉以太幀頭,上送到IP層,發(fā)現(xiàn)IP首部中的目的IP地址11.1.1.2/24不是自己,需要轉(zhuǎn)發(fā),故查找自己的路由表,重新進(jìn)行數(shù)據(jù)報文的封裝。
當(dāng)封裝到以太幀頭時,發(fā)現(xiàn)目的MAC地址(11.1.1.2/24對應(yīng)的MAC地址)未知,故Switch也要發(fā)送ARP廣播請求。
PC2收到此請求以后,發(fā)現(xiàn)請求所對應(yīng)的IP地址是自己,于是回復(fù)一個ARP單播應(yīng)答給Switch,此應(yīng)答包含了11.1.1.2/24所對應(yīng)的MAC地址。
與前面Switch學(xué)習(xí)PC1的ARP映射一樣,PC2也相應(yīng)地在自己的ARP緩存中記錄了Switch b口的IP地址到物理地址的映射。
Switch此時已經(jīng)收到ARP應(yīng)答,得到了PC2的MAC地址,進(jìn)行以太幀頭的封裝。然后將數(shù)據(jù)報發(fā)送給PC2。
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)查找得知下一跳為Switch b口11.1.1.1/24。如前所述,PC2的ARP緩存中已經(jīng)記錄了Switch b口的映射信息,故不需要再向Switch發(fā)送ARP請求,直接在ARP緩存中讀到Switch 11.1.1.1/24的MAC地址進(jìn)行封裝,將數(shù)據(jù)包發(fā)給Switch。
同理Switch也不需要向PC1發(fā)送ARP請求,直接在自己的ARP緩存中讀到PC1的MAC地址,將數(shù)據(jù)報文轉(zhuǎn)發(fā)給PC1。
PC1收到數(shù)據(jù)報文后,逐層拆封以太幀頭、IP首部,得到ICMP應(yīng)答報文,顯示Ping通。
關(guān)注「開源Linux」加星標(biāo),提升IT技能

