[toc]
問題描述
這神奇的問題源自大學(xué)同學(xué)老王遇到的一個(gè)客戶機(jī)房組網(wǎng)方案:
可以看到井上的操作機(jī)(PC)的所用ip跟其配置的默認(rèn)網(wǎng)關(guān)亦即路由器(172.16.16.1/16)不在同一個(gè)網(wǎng)段怀浆,該P(yáng)C在可以上外網(wǎng)执赡。
但把井下工控機(jī)(EPC)按照圖上配置也接在該路由器以后函筋,PC ping不通EPC了。
要搞清這個(gè)問題產(chǎn)生的原因首懈,首先得搞清楚ping協(xié)議(ICMP)是在干什么谨敛,怎么干的。這就又牽扯到ARP協(xié)議和路由相關(guān)知識最仑。
ARP協(xié)議
主要原理:
層二協(xié)議肥惭,當(dāng)本機(jī)ARP表里查不到所需要尋址的ip對應(yīng)的MAC地址時(shí),會用ip層二廣播包(層二目的地址填成全F)向網(wǎng)絡(luò)發(fā)請求蜜葱,等具有該ip的設(shè)備回復(fù)牵囤,回復(fù)包里會有該設(shè)備的MAC地址,如此便知道了哪個(gè)ip對應(yīng)的是哪個(gè)MAC地址揭鳞,該對應(yīng)關(guān)系會被發(fā)送方和被請求方放入ARP緩存表野崇。
相關(guān)機(jī)制:
ARP監(jiān)聽及處理:
每個(gè)設(shè)備都需要處理收到的ARP廣播包,如果該包的目的ip是自己,則以對應(yīng)的ARP響應(yīng)包作回復(fù)清酥,同時(shí)更新arp緩存表蕴侣;否則直接丟棄。
ARP緩存表:
即ARP緩存(ARP Cache)辱志,基本每個(gè)以太網(wǎng)設(shè)備都會維護(hù)一張ARP表狞膘,用來存放IP地址和MAC地址的關(guān)聯(lián)信息。該表通常是動態(tài)更新的旭从,每一對學(xué)習(xí)到的映射關(guān)系都有一個(gè)老化時(shí)間场仲,通常是20分鐘。
通過配置鸽素,也可以讓一些表項(xiàng)變成靜態(tài)的亦鳞。
其他特性:
ARP代理:服務(wù)器功能,可使ARP廣播跨越子網(wǎng)
免費(fèi)ARP:探測是否存在ip地址沖突
報(bào)文格式
ICMP協(xié)議
ICMP是一個(gè)網(wǎng)絡(luò)層協(xié)議遭笋,它不像ARP包一樣對于上層來說是自動進(jìn)行的徒探,而是需要在應(yīng)用里手動把它發(fā)出去。
ICMP協(xié)議的功能
ICMP協(xié)議的功能主要有:
- 確認(rèn)IP包是否成功到達(dá)目標(biāo)地址
- 通知在發(fā)送過程中IP包被丟棄的原因
- 其他診斷查詢
ping命令
功能
(1)能驗(yàn)證網(wǎng)絡(luò)的連通性
(2)會統(tǒng)計(jì)響應(yīng)時(shí)間和TTL(IP包中的Time To Live央串,生存周期)
實(shí)現(xiàn)方式
(1)ping命令會先發(fā)送一個(gè) ICMP Echo Request給對端
(2)對端接收到之后, 會返回一個(gè)ICMP Echo Reply
(3)若沒有返回碗啄,就是超時(shí)了稚字,會認(rèn)為指定的網(wǎng)絡(luò)地址不存在厦酬。
traceroute命令
功能
traceroute也是基于ICMP協(xié)議實(shí)現(xiàn)的瘫想,可以打印出可執(zhí)行程序主機(jī),一直到目標(biāo)主機(jī)之前經(jīng)歷多少路由器殿托。
實(shí)現(xiàn)方式:待補(bǔ)充
路由
直連路由
路由器接口所連接的子網(wǎng)的路由方式稱為直連路由支竹。
具體說就是一個(gè)路由器上會有一到多個(gè)接口地址鸠按,對應(yīng)不同的口不同的網(wǎng)段。路由器到每個(gè)接口地址以及對應(yīng)子網(wǎng)的路由叫直連路由馒吴,不需要學(xué)習(xí)瑟曲,開機(jī)就會有。
非直連路由
- 靜態(tài)路由:使用命令在路由器上配置的路由信息洞拨。
- 動態(tài)路由:通過路由協(xié)議從別的路由器學(xué)到的路由信息烦衣。
路由表
家用路由器
家用路由器的lan口和wan口的區(qū)別主要是二層和三層接口的區(qū)別。lan口之間的關(guān)系是層二交換機(jī)接口花吟,wan口是直接配得有IP的層三接口衅澈。
LAN-WAN級聯(lián)
常規(guī)用法,相當(dāng)于一個(gè)路由器接口之下連了幾個(gè)交換機(jī)口矾麻。
LAN-LAN級聯(lián)
路由器當(dāng)層二交換機(jī)使用险耀,所有口都在同一局域網(wǎng)內(nèi)。
局域網(wǎng)包轉(zhuǎn)發(fā)過程
1 若兩者在同一網(wǎng)段蘑志,就會直接把包發(fā)向目標(biāo)IP,這時(shí)要做:
1.1 查本地arp緩存澎媒,看看是否有IP和Mac的對應(yīng)表.
1.1.1 有波桩,直接向網(wǎng)絡(luò)上發(fā)包,包中包括原mac及目標(biāo)mac储玫。
1.1.2 若沒有萤皂,則向網(wǎng)絡(luò)發(fā)arp廣播,用來查找與目標(biāo)IP對應(yīng)的mac地址(ARP發(fā)送的是廣播數(shù)據(jù)端礼,電纜上的每個(gè)以太網(wǎng)接口都要接收廣播的數(shù)據(jù)幀)入录。
1.1.2.1 如果查到了,則向網(wǎng)絡(luò)發(fā)包纷跛。
1.1.2.2 沒查到贫奠,則不通訊。
2 若兩者不在同一網(wǎng)段唤崭,則把包發(fā)到網(wǎng)關(guān)上(前提是路由表里配了默認(rèn)網(wǎng)關(guān))谢肾,然后網(wǎng)關(guān)繼續(xù)1---2這一過程。
好了協(xié)議簡單回顧一遍了芦疏,下面開始分析問題:
局域網(wǎng)內(nèi)不同子網(wǎng)間為什么不能互相訪問
先看一個(gè)比較常見的雙子網(wǎng)局域網(wǎng)
router雖然只畫了一個(gè)酸茴,但從網(wǎng)關(guān)接口可以看出這是一個(gè)雙網(wǎng)關(guān)組網(wǎng)。
我們知道PC到網(wǎng)關(guān)之間配了默認(rèn)路由之后笼痹,PC不知道該發(fā)到哪里的包都是一律發(fā)到網(wǎng)關(guān)的;每個(gè)網(wǎng)關(guān)也知道自己所在子網(wǎng)的下的每臺PC接的是哪個(gè)口(通過網(wǎng)關(guān)ARP緩存)晴裹,所以PC和網(wǎng)關(guān)之間的路由不存在問題救赐。
pc0和pc1之間通不通的關(guān)鍵,主要看兩個(gè)網(wǎng)關(guān)上的路由表怎么配的少欺,互相之間的路由通不通。如果不通,一般加一條靜態(tài)路由就好了配乓。
- 最常見的配置情況是兩個(gè)網(wǎng)關(guān)中一個(gè)是光貓惠毁,有指向外網(wǎng)的路由;另一臺網(wǎng)關(guān)將此外網(wǎng)網(wǎng)關(guān)作為自己的默認(rèn)網(wǎng)關(guān)腰埂,這樣兩臺網(wǎng)關(guān)下的pc就都能上外網(wǎng)蜈膨。
- 我遇到的情況是外網(wǎng)網(wǎng)關(guān)上沒有針對B子網(wǎng)配什么路由,只是注意了一下子網(wǎng)范圍不要沖突驴一,B子網(wǎng)里的電腦就都能上網(wǎng)了灶壶。這可能是因?yàn)橥饩W(wǎng)網(wǎng)關(guān)上有去B子網(wǎng)的路由,知道要去B子網(wǎng)得通過網(wǎng)關(guān)B胸懈。
- 但是此時(shí)網(wǎng)關(guān)B上往往沒有到A子網(wǎng)的路由