一、如圖1所示,這種實(shí)驗(yàn)環(huán)境很簡(jiǎn)單,想必大家都試驗(yàn)過(guò)。它也很容易理解,處在同一網(wǎng)絡(luò)中的兩臺(tái)PC,不用配置網(wǎng)關(guān),也能夠互相通信。
(圖2 位于不同網(wǎng)絡(luò)中的兩臺(tái)主機(jī))
二、如圖2所示,兩臺(tái)PC在不同的網(wǎng)絡(luò)中,但還要讓PC1和PC2之間能互相ping通。這種網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境,可能很多人沒(méi)有深入研究過(guò),下面就通過(guò)一些實(shí)驗(yàn)截圖一步步分析:
(圖3 PC1不能ping通PC2)
1、如圖3所示,在PC1上ping主機(jī)PC2是不通的。若能保證連接兩臺(tái)PC的網(wǎng)線沒(méi)有故障,ping不通的話,問(wèn)題肯定首先出在PC1的路由上。
(圖4 主機(jī)PC1中的路由表)
2、如圖4所示,在PC1的"命令行"中,執(zhí)行"route print"命令,就能看到PC1主機(jī)上的路由表,在其中看不到,到達(dá)目的網(wǎng)絡(luò)172.16.0.0/16的路由。所以,在PC1上執(zhí)行ping 172.16.1.1命令后,PC1首先在它的路由表中查找有沒(méi)有到達(dá)網(wǎng)絡(luò)172.16.0.0/16的路由表項(xiàng),若沒(méi)有就會(huì)返回如圖3所示的結(jié)果。
3、既然路由表中沒(méi)有到網(wǎng)絡(luò)172.16.0.0/16的路由,那PC1中的二層ARP表中有沒(méi)有與172.16.1.1對(duì)應(yīng)的MAC地址表項(xiàng)呢?因?yàn)橹挥蠭P地址和MAC地址之間進(jìn)行了一一對(duì)應(yīng)的綁定,主機(jī)在封裝完三層具有源和目的IP地址的數(shù)據(jù)包后,然后在進(jìn)行二層封裝數(shù)據(jù)幀時(shí),必須找到與IP目的地址對(duì)應(yīng)的MAC地址,才能完成二層的封裝。不過(guò)如圖5所示,PC1中的ARP表中,并沒(méi)有IP地址172.16.1.1和PC2的MAC地址的對(duì)照表。
(圖5 主機(jī)PC1中的ARP表)
4、既然PC1的路由表中沒(méi)有到網(wǎng)絡(luò)172.16.0.0/16的路由,那就在PC1中添加一條靜態(tài)路由,如圖6所示。注意添加靜態(tài)路由的命令格式,必須和圖6所示的一致。只是在命令的最后還有一個(gè)"IF"參數(shù),可以省略不寫(xiě),這并不影響命令的正確執(zhí)行。
(圖6 在主機(jī)PC1中添加靜態(tài)路由)
5、執(zhí)行完添加靜態(tài)路由的命令后,在PC1中再次執(zhí)行命令"route print"后,發(fā)現(xiàn)PC1的路由表中,已經(jīng)包含了到網(wǎng)絡(luò)172.16.0.0/16的路由,如圖7所示。
(圖7 PC1路由表中包含了到PC2網(wǎng)絡(luò)的路由)
6、既然PC1中的路由表中已經(jīng)包括了到達(dá)網(wǎng)絡(luò)172.16.0.0/16的路由,那是不是在PC1上就能ping通172.16.1.1了?結(jié)果如圖8所示,這時(shí)PC1還是不能ping通PC2。
(圖8 在主機(jī)PC1上還是ping不通PC2)
這是因?yàn)?,雖然PC1路由表中包含有到PC2的路由,這樣在PC1上發(fā)送具有目的IP地址是172.16.1.1的ping包時(shí),數(shù)據(jù)包能夠到達(dá)PC2。但是當(dāng)PC2收到ping包后,PC2依據(jù)ping的性質(zhì),還要把ping包再發(fā)送回PC1,在PC1收到PC2返回的ping包后,一個(gè)完整的ping過(guò)程才結(jié)束。
但是當(dāng)PC2發(fā)送ping包前,它在自己的路由表中要查找,有沒(méi)有到達(dá)目的網(wǎng)絡(luò)地址是10.0.0.0/8的路由,但是它沒(méi)有找到這項(xiàng)路由。在這種情況下PC2就自動(dòng)丟棄了這個(gè)ping包,所以PC1也就收不到由PC2返回的ping包,自然也就有了圖8所示的結(jié)果。
7、不過(guò)這時(shí)在PC1上,也發(fā)生了一個(gè)明顯的變化。當(dāng)再次在命令行中執(zhí)行命令"arp -a"后,發(fā)現(xiàn)PC1的ARP表中多了一項(xiàng)IP地址172.16.1.1和PC2的MAC地址的綁定項(xiàng),如圖9所示。
(圖9 PC1中已有了包含PC2的ARP表項(xiàng))
這是因?yàn)?,?dāng)在PC1上執(zhí)行"ping 172.16.1.1"命令后,PC1首先在路由表中找到了到達(dá)網(wǎng)絡(luò)172.16.0.0/16的路由表項(xiàng),然后就對(duì)數(shù)據(jù)包進(jìn)行三層封裝。當(dāng)三層封裝完成后,PC1就要根據(jù)172.16.1.1對(duì)應(yīng)的MAC地址,對(duì)數(shù)據(jù)包進(jìn)行二層封裝。這是因?yàn)橹挥邪颜_的MAC地址封裝進(jìn)數(shù)據(jù)幀后,數(shù)據(jù)包才能在以太網(wǎng)中被正確的送達(dá)目的地,因?yàn)樵谝蕴W(wǎng)中只依據(jù)二層MAC地址,而不是三層IP地址傳輸數(shù)據(jù)。但這時(shí)當(dāng)PC1在ARP表中查找172.16.1.1的MAC地址時(shí),它并沒(méi)有找到。
這時(shí)PC1就會(huì)發(fā)出一個(gè)廣播包,詢問(wèn)誰(shuí)有IP地址172.16.1.1的MAC地址,當(dāng)PC2收到這個(gè)廣播包后,發(fā)現(xiàn)172.16.1.1這個(gè)IP地址和自己的IP地址一樣,就給PC1返回一個(gè)數(shù)據(jù)包,數(shù)據(jù)包中就包括有和172.16.1.1對(duì)應(yīng)的MAC地址,當(dāng)PC1收到這個(gè)數(shù)據(jù)包后,就會(huì)在自己的ARP表中添加與IP地址172.16.1.1對(duì)應(yīng)的MAC地址表項(xiàng),所以當(dāng)再次執(zhí)行"arp -a"命令后,就能看到多了這一項(xiàng)。
那為什么第一次執(zhí)行"arp -a"命令時(shí),PC1的ARP表中沒(méi)有與172.16.1.1對(duì)應(yīng)的MAC地址綁定呢?因?yàn)榈谝淮卧赑C1上執(zhí)行ping 172.16.1.1命令時(shí),PC1在路由表中沒(méi)有找到與網(wǎng)絡(luò)172.16.0.0/16對(duì)應(yīng)的路由,這時(shí)PC1就自動(dòng)放棄了封裝三層數(shù)據(jù)包的行為,既然三層數(shù)據(jù)包都沒(méi)有進(jìn)行封裝,就更談不上在PC1中進(jìn)行二層封裝了,所以PC1也就沒(méi)有必要知道與172.16.1.1對(duì)應(yīng)的MAC地址了,也就沒(méi)有再發(fā)送一個(gè)廣播包詢問(wèn)與172.16.1.1對(duì)應(yīng)的MAC地址。所以,第一次執(zhí)行"arp -a"命令時(shí),PC1的ARP表中并沒(méi)有與172.16.1.1對(duì)應(yīng)的MAC地址表項(xiàng)。
8、既然現(xiàn)在知道在PC1上ping不通PC2是因?yàn)?,在PC2上沒(méi)有到達(dá)網(wǎng)絡(luò)10.0.0.0/8的路由,那現(xiàn)在就在PC2上添加一條靜態(tài)路由,如圖10所示,格式和在PC1上添加到網(wǎng)絡(luò)172.16.0.0/16的路由格式是一樣的。
(圖10 在主機(jī)PC2上添加靜態(tài)路由)
9、在PC2上添加完靜態(tài)路由后,再在PC1上執(zhí)行ping命令后,就能ping通了,如圖11所示。因?yàn)閜ing包到達(dá)PC2后,也能在路由表中找到去往PC1網(wǎng)絡(luò)10.0.0.0/8的路由了。
(圖11 在PC1上能夠ping通PC2)
三、總結(jié)
1、ARP(Address Resolution Protocol,地址解析協(xié)議)
(1)概念:ARP工作在數(shù)據(jù)鏈路層,它和硬件接口進(jìn)行聯(lián)系,同時(shí)對(duì)上層提供服務(wù)。ARP將計(jì)算機(jī)的32位網(wǎng)絡(luò)IP地址,轉(zhuǎn)化為48位的MAC物理地址。在以太網(wǎng)中的數(shù)據(jù)幀從一個(gè)主機(jī)到達(dá)網(wǎng)內(nèi)的另一臺(tái)主機(jī)是根據(jù)48位的以太網(wǎng)地址來(lái)確定接口的,而不是根據(jù)32位的IP地址。計(jì)算機(jī)網(wǎng)卡的驅(qū)動(dòng)程序,必須知道目的端的硬件MAC地址才能發(fā)送數(shù)據(jù)。因此,必須把IP目的地址轉(zhuǎn)換成以太網(wǎng)的目的地址。
在TCP/IP協(xié)議棧中,網(wǎng)絡(luò)層和傳輸層只關(guān)心目標(biāo)主機(jī)的IP地址。這就導(dǎo)致在以太網(wǎng)中使用IP協(xié)議時(shí),數(shù)據(jù)鏈路層的以太網(wǎng)協(xié)議接到上層IP協(xié)議提供的數(shù)據(jù)中,只包含目的主機(jī)的IP地址。而地址解析(address resolution)就是主機(jī)在發(fā)送數(shù)據(jù)幀前將目標(biāo)IP地址轉(zhuǎn)換成目標(biāo)MAC地址的過(guò)程。ARP在正常情況下的通訊模式應(yīng)該是,請(qǐng)求→應(yīng)答→請(qǐng)求→應(yīng)答,也就是一問(wèn)一答的規(guī)則。
(2)ARP工作原理:首先,每臺(tái)主機(jī)都會(huì)在自己的ARP緩沖區(qū)中建立一個(gè) ARP列表,以表示IP地址和MAC地址之間的對(duì)應(yīng)關(guān)系。當(dāng)源主機(jī)需要將一個(gè)數(shù)據(jù)包要發(fā)送到目的主機(jī)時(shí),會(huì)首先檢查自己 ARP列表中是否存在該 IP地址對(duì)應(yīng)的MAC地址,如果有﹐就直接將數(shù)據(jù)包發(fā)送到這個(gè)MAC地址。如果沒(méi)有,就向本地網(wǎng)段發(fā)起一個(gè)ARP請(qǐng)求的廣播包,查詢此目的主機(jī)對(duì)應(yīng)的MAC地址。此ARP請(qǐng)求數(shù)據(jù)包里包括源主機(jī)的IP地址、硬件地址、以及目的主機(jī)的IP地址。網(wǎng)絡(luò)中所有的主機(jī)收到這個(gè)ARP請(qǐng)求后,會(huì)檢查數(shù)據(jù)包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此數(shù)據(jù)包;如果相同,該主機(jī)首先將發(fā)送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經(jīng)存在該IP的信息,則將其覆蓋,然后給源主機(jī)發(fā)送一個(gè) ARP響應(yīng)數(shù)據(jù)包,告訴對(duì)方自己是它需要查找的MAC地址。源主機(jī)收到這個(gè)ARP響應(yīng)數(shù)據(jù)包后,將得到的目的主機(jī)的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息開(kāi)始數(shù)據(jù)的傳輸。如果源主機(jī)一直沒(méi)有收到ARP響應(yīng)的數(shù)據(jù)包,就表示ARP查詢失敗。
2、理解路由的兩個(gè)關(guān)鍵知識(shí)點(diǎn)
(1)路由器對(duì)三層數(shù)據(jù)包的路由轉(zhuǎn)發(fā),是根據(jù)"網(wǎng)絡(luò)地址"轉(zhuǎn)發(fā)數(shù)據(jù)包的,而不是根據(jù)"IP地址"轉(zhuǎn)發(fā)的。例如,一臺(tái)路由器收到一個(gè)需要路由的數(shù)據(jù)包,數(shù)據(jù)包的目的IP地址是213.17.53.9,掩碼是255.255.255.0。然后路由器首先要做的是結(jié)合數(shù)據(jù)包的IP地址和掩碼,算出數(shù)據(jù)包要被路由的目的網(wǎng)絡(luò)地址是213.17.53.0/24,然后,路由器才會(huì)在其路由表中查找有沒(méi)有到網(wǎng)絡(luò)213.17.53.0/24的路由,而不是查找到IP地址213.17.53.9的路由,若有就依據(jù)路由表提供的信息,在相應(yīng)的接口上將數(shù)據(jù)包轉(zhuǎn)發(fā)出去。若沒(méi)有找到對(duì)應(yīng)的路由,則路由器就會(huì)自動(dòng)把數(shù)據(jù)包丟棄。
(2)路由器對(duì)數(shù)據(jù)包的路由,是依據(jù)三層數(shù)據(jù)包中的"目的IP地址"進(jìn)行路由轉(zhuǎn)發(fā)的,而和數(shù)據(jù)包中的"源IP地址"沒(méi)有關(guān)系。也就是路由器收到三層數(shù)據(jù)包后,只需要數(shù)據(jù)包中的目的IP地址和目的IP地址的掩碼,就可完成對(duì)數(shù)據(jù)包的路由,整個(gè)過(guò)程沒(méi)有使用到三層數(shù)據(jù)包中的源IP地址,及其掩碼。