如果你想了解PING的原理,就看我的文章,不要去網(wǎng)上找,找不到什么好的內(nèi)容。看了我文章,也許你會從對網(wǎng)絡(luò)一竅不通,到豁然開朗。
先看拓樸圖:
我在這里講拼的兩情況,一種是同一網(wǎng)段內(nèi),一種是跨網(wǎng)段的ping ….
首先,如果主機(jī)A,要去拼主機(jī)B,那么主機(jī)A,就要封裝二層報(bào)文,他會先查自己的MAC地址表,如果沒有B的MAC地址,就會向外發(fā)送一個(gè)ARP廣播包,如圖:
其中ARP報(bào)文格式如下:
其中OP
1 :表示ARP請求
2:表示ARP應(yīng)答
3:表示RARP請求
4:表示RARP應(yīng)答
首先,交換機(jī)會收到這個(gè)報(bào)文后,交換機(jī)有學(xué)習(xí)MAC地址的功能,所以他會檢索自己有沒有保存主機(jī)B有MAC,如果有,就返回給主機(jī)A,如果沒有,就會向所有端口發(fā)送ARP廣播,其它主機(jī)收到后,發(fā)現(xiàn)不是在找自己,就紛紛丟棄了該報(bào)文,不去理會。。直到主機(jī)B收到了報(bào)文后,就立即相應(yīng),我的MAC地址是多少,同時(shí)學(xué)到主機(jī)A的MAC地址,并按同樣的ARP報(bào)文格式返回給主機(jī)A,如圖:
ARP報(bào)文格式:
這時(shí)候主機(jī)A學(xué)到了主機(jī)B的MAC,就把這個(gè)MAC封裝到ICMP協(xié)議的二層報(bào)文中向主機(jī)B發(fā)送,報(bào)文格式如下:
當(dāng)主機(jī)B收到了這個(gè)報(bào)文后,發(fā)現(xiàn)是主機(jī)A 的ICPM回顯請求,就按同樣的格式,返回一個(gè)值給主機(jī)A,這樣就完成了同一網(wǎng)段內(nèi)的ping過程…
在這里 我講了這么久的局域網(wǎng)內(nèi)的PING,實(shí)際過程的發(fā)生不到1毫秒….
再繼續(xù)…
如果主機(jī)A要ping主機(jī)C,那么主機(jī)A發(fā)現(xiàn)主機(jī)C的IP和自己不是同一網(wǎng)段,他就去找網(wǎng)關(guān)轉(zhuǎn)發(fā),但是他也不知道網(wǎng)關(guān)的MAC情況下呢?他就會向之前那個(gè)步驟一樣先發(fā)送一個(gè)ARP廣播,學(xué)到網(wǎng)關(guān)的MAC,再發(fā)封裝ICMP報(bào)文給網(wǎng)關(guān)路由器.
報(bào)文格式如下:
當(dāng)路由器收到主機(jī)A發(fā)過來的ICMP報(bào)文,發(fā)現(xiàn)自己的目的地址是其本身MAC地址,根據(jù)目的的IP2.1.1.1,查路由表,發(fā)現(xiàn)2.1.1.1/24的路由表項(xiàng),得到一個(gè)出口指針,去掉原來的MAC頭部.加上自己的MAC地址向主機(jī)C轉(zhuǎn)發(fā)…(如果網(wǎng)關(guān)也沒有主機(jī)C的MAC地址,還是要向前面一個(gè)步驟一樣,ARP廣播一下即可相互學(xué)到….路由器2端口能學(xué)到主機(jī)D的MAC,主機(jī)D也能學(xué)到路由器2端口的MAC..),報(bào)文格式如下:
最后,在主機(jī)C已學(xué)到路由器2端口MAC,路由器2端口轉(zhuǎn)發(fā)給路由器1端口,路由1端口學(xué)到主機(jī)A的MAC的情況下,他們就不需要再做ARP解析,就將ICMP的回顯請求回復(fù)過來..報(bào)文格式大致如下:
|
|