網(wǎng)絡(luò)環(huán)境如圖1所示。PC1基本配置:IP為 172.16.20.8,掩碼為255.255.255.0,網(wǎng)關(guān)為172.16.20.254;PC2基本配置:IP為172.16.20.58掩碼為255.255.255.0,網(wǎng)關(guān)為172.16.20.254。下面進(jìn)行兩個(gè)實(shí)驗(yàn)說(shuō)明。
實(shí)驗(yàn)1:默認(rèn)路由配置下PC1與PC2的通信。
在PC1上PING 172.16.20.58。PC1根據(jù)自己的子網(wǎng)掩碼判斷PC2跟自己同一網(wǎng)段,ARP請(qǐng)求172.16.20.58的MAC地址。三層封裝IP地址 172.16.20.58,二層封裝172.16.20.58的MAC地址,發(fā)送相關(guān)數(shù)據(jù)。
圖1 網(wǎng)絡(luò)拓?fù)鋱D
圖2 封裝對(duì)應(yīng)IP的真實(shí)MAC
圖3 路由配置
圖4 封裝對(duì)應(yīng)網(wǎng)關(guān)IP的MAC
分析:PC1跟PC2通信的時(shí)候二層的MAC地址封裝的是 PC2( 172.16.20.58),對(duì)應(yīng)的 MAC(真實(shí) MAC);這個(gè)通過(guò)抓包可以得到驗(yàn)證,如圖2。任何一個(gè)主機(jī)(或三層網(wǎng)卡)跟目的IP通信的時(shí)候,網(wǎng)絡(luò)層的IP已定,那就是目的IP地址,但是二層(數(shù)據(jù)鏈路層)的地址是未知的,需要用ARP協(xié)議去獲取。通常情況下二層的地址有兩種可能性:目的IP對(duì)應(yīng)的真實(shí)MAC或自己網(wǎng)關(guān)的MAC。
在上述實(shí)驗(yàn)的默認(rèn)路由配 置 下,172.16.20.0目 標(biāo)網(wǎng)絡(luò)的下一跳(網(wǎng)關(guān))是在鏈路上,即出接口,因?yàn)樵赪indows XP及之前的操作系統(tǒng)下路由表顯示的網(wǎng)關(guān)就是接口地址172.16.20.8。這種情況下就是封裝真實(shí)IP對(duì)應(yīng)的MAC。
實(shí)驗(yàn)2:用戶路由配置下PC1與PC2的通信。
先來(lái)增加一條路由配置:
route add 172.16.20.58 mask 255.255.255.255172.16.20.254。
如圖3所示,這里增加了一條路由配置,當(dāng)PC1與PC2通信時(shí),發(fā)現(xiàn)目的IP為172.16.20.58的 下一跳并不是在鏈路上,而是直接指向了網(wǎng)關(guān)的地址172.16.20.254,這樣二層MAC地址封裝的就是網(wǎng)關(guān)的MAC,如圖4所示。
網(wǎng)絡(luò)環(huán)境及配置如圖5所示。PC1基 本 配 置IP為172.16.20.8,掩 碼 為255.255.255.0,網(wǎng) 關(guān)為 172.16.20.254;PC2基本配置 IP為 172.16.12.1,掩碼 為 255.255.255.0,網(wǎng) 關(guān)為 172.16.12.254;PC3基本配置 IP為 172.16.10.3,掩碼為255.255.255.0,網(wǎng)關(guān)為172.16.10.254。
實(shí)驗(yàn)1:默認(rèn)路由配置下PC1與PC3的通信。
PC1根據(jù)自己的子網(wǎng)掩碼判斷PC3跟自己不在同一網(wǎng)段(實(shí)質(zhì)上是默認(rèn)路由里沒(méi)有下一跳IP地址), ARP請(qǐng)求網(wǎng)關(guān)172.16.20.254 的mac地址。三層封裝IP地址172.16.10.3,二層封裝172.16.20.254的mac地址,發(fā)送相關(guān)數(shù)據(jù),如圖6所示。
實(shí)驗(yàn)2:用戶路由配置下PC1與PC2的通信。
在默認(rèn)情況下,PC1與PC2肯定是不通的,因?yàn)閺乃鼈兊木W(wǎng)絡(luò)配置來(lái)看分別屬于不同的網(wǎng)段,PC1會(huì)將到PC2的數(shù)據(jù)發(fā)送到自己的網(wǎng)關(guān)172.16.20.254,而在網(wǎng)關(guān)設(shè)備上沒(méi)有172.16.12.0的路由接口,所以最后無(wú)法完成連通。按照以往的觀點(diǎn)在沒(méi)有路由設(shè)備的情況下是無(wú)法連通的。
下面我們通過(guò)改變默認(rèn)的路由配置來(lái)顛覆由來(lái)以久的觀點(diǎn)。
在 PC1上 配 置route add 172.16.12.0 mask 255.255.255.255172.16.20.8。
圖5 網(wǎng)絡(luò)拓?fù)鋱D
圖6 封裝網(wǎng)關(guān)的IP
圖7 封裝IP真實(shí)的MAC
在 PC2上 配 置route add 172.16.20.0 mask 255.255.255.255172.16.12.1。
通過(guò)以上的路由配置是將到特定網(wǎng)絡(luò)地址的數(shù)據(jù)直接發(fā)送到自己接口上,不通過(guò)自己的網(wǎng)關(guān)接口。
在PC1上 運(yùn) 行PING為172.16.12.1竟然連通了。
從抓包數(shù)據(jù)來(lái)看,二層封裝的MAC是PC2真實(shí)的MAC,三層封裝IP是172.16.12.1,如圖7所示,而且中間沒(méi)有經(jīng)過(guò)任何路由設(shè)備了。
結(jié)語(yǔ):從以上四個(gè)實(shí)驗(yàn)對(duì)比來(lái)看,最終選用哪個(gè)MAC地址進(jìn)行二層封裝,并不是靠判斷目的IP是否跟自己同一網(wǎng)段,而是靠查看路由表:如果目的IP對(duì)應(yīng)的路由的下一跳(網(wǎng)關(guān))是出接口(僅有出接口,Windows XP顯示的就是自己的IP地址,Windows 7及以上系統(tǒng)顯示的是在鏈路上),則ARP請(qǐng)求目的IP的MAC;如果目的IP對(duì)應(yīng)路由的下一跳是一個(gè)IP地址,則ARP請(qǐng)求下一跳IP的MAC。