網(wǎng)絡(luò)之路2:初識(shí)路由表
回顧
通過(guò)前面的介紹(網(wǎng)絡(luò)之路1:初識(shí)網(wǎng)絡(luò)),我們大概掌握了如何查看電腦終端的網(wǎng)絡(luò)身份-IP地址。從操作過(guò)程中不難看出,使用桌面UI進(jìn)行配置,操作簡(jiǎn)單并且顯示比較直觀,但是步驟稍微多一些;而通過(guò)命令行進(jìn)行配置,往往需要比較簡(jiǎn)單的命令就能獲取比較全面的結(jié)果,但是相對(duì)而言的操作難度比較大。
那如果要區(qū)分UI交互操作和CLI命令行交互操作孰優(yōu)孰劣,也只能是見(jiàn)仁見(jiàn)智了,一般配置的時(shí)候也是兩者結(jié)合著來(lái)。
1.3、路由表
這里就可以提一個(gè)通過(guò)UI交互看不到的操作,那就是路由表。目前我們還沒(méi)有什么方式可以在UI交互中找到路由表的相關(guān)展示界面,最簡(jiǎn)單的方法范圍是通過(guò)命令行進(jìn)行操作。

我們可以在命令行中通過(guò)route命令來(lái)操作網(wǎng)絡(luò)路由表,最常用的命令就是print(打印路由)、add(添加路由)和delete(刪除路由),還有一個(gè)不太常用的change(修改現(xiàn)有路由)。
例如,使用命令route print -4,就可以打印IPv4的所有路由表信息。

注意,這里就能看出命令行難不難了,如果大家具備高中的英語(yǔ)水平的話,就能看出route print可以直譯成中文“路由打印”,-4代表強(qiáng)制匹配IPv4路由表。其實(shí)這也是一般系統(tǒng)的命令行配置的典型案例,比如其他的Linux操作系統(tǒng)、macOS操作系統(tǒng)等等,也都是采用這種英文單詞組合的方式。比如在CentOS系統(tǒng)中,查看路由表的命令可以是route,-v表示查看詳細(xì)信息。

也可以使用ip route。

這兩個(gè)命令其實(shí)是有差別的,分別屬于不同的模塊。route命令就是route模塊,ip route命令其實(shí)是ip命令下面的route模塊,我們可以使用Linux系統(tǒng)的幫助命令help來(lái)查看詳細(xì)信息。

ip help命令直譯為“ip幫助”,可以查看ip命令支持的配置參數(shù)。可以看到,route只是眾多配置參數(shù)中的一個(gè)。

而ip route help命令直譯為“ip路由幫助”,可以查看ip route命令支持的配置參數(shù)。

對(duì)比route help(路由幫助)所顯示的route命令所支持的配置參數(shù),我們可以看到,兩者的配置功能存在很大差異。這種情況下就要結(jié)合實(shí)際情況來(lái)進(jìn)行使用了。
然后回到Windows系統(tǒng)中,還記得tracert看到的轉(zhuǎn)發(fā)路徑嗎?

tracert的全稱是traceroute,直譯為“追蹤路由”或“追蹤路徑”,也就是檢查從電腦本機(jī)訪問(wèn)到目標(biāo)站點(diǎn)所經(jīng)過(guò)的網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備。比如說(shuō)我的電腦怎么知道第一跳要發(fā)送到192.168.1.1這臺(tái)設(shè)備,就是查的本地的路由表。
路由表是一個(gè)網(wǎng)絡(luò)設(shè)備(如路由器、交換機(jī)、網(wǎng)絡(luò)終端等)中存儲(chǔ)的表格,包含了該設(shè)備可到達(dá)其他網(wǎng)絡(luò)的信息和如何到達(dá)這些網(wǎng)絡(luò)的路徑。路由表中的每一條記錄稱為路由項(xiàng)(或路由記錄),它指示了到達(dá)某個(gè)目標(biāo)網(wǎng)絡(luò)的下一跳路由器或直接連接的接口,并指定了到達(dá)目標(biāo)網(wǎng)絡(luò)的路由協(xié)議和距離等信息。

還是以我們電腦的路由表為例,我們看到主要有5列,分別為網(wǎng)絡(luò)目標(biāo)、網(wǎng)絡(luò)掩碼、網(wǎng)關(guān)、接口和躍點(diǎn)數(shù)。接口指的就是我電腦本身的網(wǎng)卡所使用的IP地址,躍點(diǎn)數(shù)也叫距離,不過(guò)我們還是習(xí)慣稱之為“優(yōu)先級(jí)”,在網(wǎng)絡(luò)目標(biāo)和網(wǎng)絡(luò)掩碼相同時(shí)來(lái)區(qū)分幾條路由項(xiàng)的優(yōu)先級(jí),數(shù)值更小的路由項(xiàng)會(huì)被優(yōu)先選中以轉(zhuǎn)發(fā)數(shù)據(jù),下一跳就是網(wǎng)關(guān)對(duì)應(yīng)的地址。
當(dāng)終端或網(wǎng)絡(luò)設(shè)備要發(fā)送數(shù)據(jù)包時(shí),它會(huì)根據(jù)最長(zhǎng)匹配原則查找路由表,確定數(shù)據(jù)包的下一步去向。查找成功之后設(shè)備將數(shù)據(jù)包轉(zhuǎn)發(fā)到正確的下一跳路由器或直接連接的接口,最終到達(dá)目標(biāo)網(wǎng)絡(luò)。
網(wǎng)關(guān)這里我們可以看到他有3個(gè)值,網(wǎng)卡數(shù)量越多,對(duì)應(yīng)的網(wǎng)關(guān)數(shù)量也就會(huì)越多。其中“在鏈路上”表示接口的IP地址可以匹配網(wǎng)絡(luò)目標(biāo)與網(wǎng)絡(luò)掩碼所對(duì)應(yīng)的網(wǎng)絡(luò),如10.153.117.4/24可以分別對(duì)應(yīng)10.153.117.0/255.255.255.0、10.153.117.4/255.255.255.255和10.153.117.255/255.255.255.255,參考(IP和家庭)我們可以知道,這三個(gè)路由項(xiàng)可以簡(jiǎn)寫(xiě)成10.153.117.0/24、10.153.117.4/32和10.153.117.255/32,分別是網(wǎng)絡(luò)地址、主機(jī)地址和廣播地址。
1)網(wǎng)絡(luò)地址(Network Address):網(wǎng)絡(luò)地址是指一個(gè)IP地址中用來(lái)標(biāo)識(shí)網(wǎng)絡(luò)部分的位。在IPv4中,網(wǎng)絡(luò)地址通常由32位二進(jìn)制數(shù)表示,并根據(jù)子網(wǎng)掩碼將其劃分為網(wǎng)絡(luò)地址和主機(jī)地址兩部分。網(wǎng)絡(luò)地址標(biāo)識(shí)了設(shè)備所連接的網(wǎng)絡(luò)。
2)主機(jī)地址(Host Address):主機(jī)地址是指一個(gè)IP地址中用來(lái)標(biāo)識(shí)主機(jī)部分的位。主機(jī)地址標(biāo)識(shí)了設(shè)備在該網(wǎng)絡(luò)中的具體位置。
3)廣播地址(Broadcast Address):廣播地址是一個(gè)特殊的IP地址,用于向同一網(wǎng)絡(luò)中的所有設(shè)備發(fā)送數(shù)據(jù)包。在IPv4中,廣播地址的格式是將網(wǎng)絡(luò)地址部分全部設(shè)置為1,主機(jī)地址部分全部設(shè)置為0,即最后一個(gè)主機(jī)地址。廣播地址是一種廣泛使用的網(wǎng)絡(luò)通信機(jī)制,例如DHCP、ARP等都使用廣播地址。
也就是說(shuō),當(dāng)我們確定了接口的IP地址和掩碼之后,就能對(duì)應(yīng)的確認(rèn)該IP地址所對(duì)應(yīng)的網(wǎng)絡(luò)地址、主機(jī)地址和廣播地址,這幾個(gè)路由項(xiàng)所對(duì)應(yīng)的網(wǎng)關(guān)都是“在鏈路上”,去往這些網(wǎng)絡(luò)目標(biāo)的報(bào)文都會(huì)從對(duì)應(yīng)的網(wǎng)卡進(jìn)行轉(zhuǎn)發(fā),這些路由項(xiàng)也叫“直連路由”。
如果不是直連路由轉(zhuǎn)發(fā),那就要經(jīng)過(guò)“網(wǎng)關(guān)設(shè)備”了。網(wǎng)關(guān)設(shè)備是一種用于實(shí)現(xiàn)網(wǎng)絡(luò)互聯(lián)的設(shè)備,通常用于將一個(gè)網(wǎng)絡(luò)與另一個(gè)網(wǎng)絡(luò)連接起來(lái),從而實(shí)現(xiàn)網(wǎng)絡(luò)間的通信。網(wǎng)關(guān)設(shè)備可以是路由器、交換機(jī)、防火墻、代理服務(wù)器等,它們的主要功能是實(shí)現(xiàn)數(shù)據(jù)包的轉(zhuǎn)發(fā)和路由選擇,如果要訪問(wèn)的目標(biāo)IP地址不在網(wǎng)關(guān)設(shè)備上,他會(huì)繼續(xù)重復(fù)查路由表轉(zhuǎn)發(fā)這一操作,轉(zhuǎn)發(fā)到它的“下一個(gè)”網(wǎng)關(guān)設(shè)備,以確保數(shù)據(jù)能夠正確地到達(dá)目的地。
所以,就出現(xiàn)了我們使用tracert看到的一跳一跳的現(xiàn)象,除了最后一跳是目標(biāo)主機(jī)之外,中間經(jīng)過(guò)的每一跳都可以看做是一個(gè)“網(wǎng)關(guān)”。
還是之前上海的云主機(jī),我通過(guò)openVPN實(shí)現(xiàn)了我電腦直連這臺(tái)云主機(jī),現(xiàn)在這臺(tái)云主機(jī)上有兩個(gè)網(wǎng)卡,都配置了IP地址。

我現(xiàn)在想從我的電腦上直接訪問(wèn)172.31.0.73/24這個(gè)IP地址,我們先看一下路由表的查表結(jié)果。

沒(méi)有命中明細(xì)的路由項(xiàng),只能匹配到0.0.0.0/0這個(gè)路由項(xiàng),轉(zhuǎn)發(fā)給192.168.1.1這個(gè)網(wǎng)關(guān)。但是實(shí)際上我們知道轉(zhuǎn)發(fā)給192.168.1.1是不能成功轉(zhuǎn)發(fā)到目的主機(jī)的,所以此時(shí)我們要修改主機(jī)的路由表,通過(guò)route add命令來(lái)增加一條路由項(xiàng)。

如果出現(xiàn)“請(qǐng)求的操作需要提升”這個(gè)提示,就說(shuō)明我們?cè)撌褂霉芾韱T權(quán)限了。

操作成功之后,我們就可以看到添加的路由項(xiàng)了。然后測(cè)試一下是否可以訪問(wèn)。

可以看到,正如我們前面所說(shuō),現(xiàn)在當(dāng)請(qǐng)求報(bào)文轉(zhuǎn)發(fā)給網(wǎng)關(guān)10.153.214.1時(shí),他發(fā)現(xiàn)請(qǐng)求的IP地址就在本地,也就是“在鏈路上”,所以直接進(jìn)行了響應(yīng)。而配置路由這個(gè)操作,我們之前也使用了自動(dòng)下發(fā)命令(),所以正常是可以直接通信的。
對(duì)應(yīng)的,如果我們想刪除這條路由,使用route delete命令就可以了。

以上只是經(jīng)過(guò)一臺(tái)網(wǎng)關(guān)設(shè)備的場(chǎng)景,如果經(jīng)過(guò)多臺(tái)網(wǎng)關(guān)設(shè)備,則在沿途的每一臺(tái)設(shè)備上都要添加對(duì)應(yīng)的路由表項(xiàng),才能保證報(bào)文正確送達(dá)。
現(xiàn)在,你知道路由表對(duì)于網(wǎng)絡(luò)通信的正確性和效率又多重要了吧?