記錄一下學(xué)習(xí)筆記,這篇大多參考《網(wǎng)絡(luò)是怎么連接的》,感興趣的同學(xué)建議直接讀這本書,我這里做一些自己的筆記
路由器是什么
路由器是連接兩個或多個網(wǎng)絡(luò)的硬件設(shè)備,在網(wǎng)絡(luò)間起網(wǎng)關(guān)的作用。簡單來說,路由器就是用來連接兩個或多個不同的局域網(wǎng)的。即一個局域網(wǎng)里面的網(wǎng)絡(luò)請求要訪問外面,就需要路由器作為網(wǎng)關(guān),通過路由器訪問出去。
路由器就是用來連接兩個或多個不同的局域網(wǎng)的
路由器的每個端口都相當(dāng)一個網(wǎng)卡,都有IP地址,每個端口都可以連接一個局域網(wǎng),而且每個端口的IP和連接的局域網(wǎng)是同一個網(wǎng)段
路由器也是特殊的計算機(jī),可以理解為精簡的計算機(jī),專門用來處理網(wǎng)絡(luò)層,作為網(wǎng)關(guān)使用,所以我們的計算機(jī)也可以作為路由器,但是我們的計算機(jī)包含的功能更多,即計算機(jī)包含路由器。
路由器是如何工作的 路由器的基本原理
路由器的工作位于TCP/IP協(xié)議的第三層網(wǎng)絡(luò)層,前一篇博客講的交換機(jī)位于底層數(shù)據(jù)鏈路層。路由器在網(wǎng)絡(luò)層把數(shù)據(jù)鏈路層的數(shù)據(jù)包接收進(jìn)來,然后IP是否是給自己的,是的話就接收,不是則丟棄。
路由器的各個端口都具有 MAC 地址和 IP 地址
路由器轉(zhuǎn)發(fā)包和上一篇的交換機(jī)轉(zhuǎn)發(fā)包類似,路由器在轉(zhuǎn)發(fā)包時,首先會通過端口將發(fā)過來的包接收進(jìn)來,這一步的工作過程取決于端口對應(yīng)的通信技術(shù)。對于以太網(wǎng)端口來說,就是按照以太網(wǎng)規(guī)范進(jìn)行工作,而無線局域網(wǎng)端口則按照無線局域網(wǎng)的規(guī)范工作,總之就是委托端口的硬件將包接收進(jìn)來。接下來,轉(zhuǎn)發(fā)模塊會根據(jù)接收到的包的 IP 頭部中記錄的接收方 IP 地址,在路由表中進(jìn)行查詢,以此判斷轉(zhuǎn)發(fā)目標(biāo)。然后,轉(zhuǎn)發(fā)模塊將包轉(zhuǎn)移到轉(zhuǎn)發(fā)目標(biāo)對應(yīng)的端口,端口再按照硬件的規(guī)則將包發(fā)送出去,也就是轉(zhuǎn)發(fā)模塊委托端口模塊將包發(fā)送出去的意思。這就是路由器的基本原理
再做一些補(bǔ)充。剛才我們講到端口模塊會根據(jù)相應(yīng)通信技術(shù)的規(guī)范來執(zhí)行包收發(fā)的操作,這意味著端口模塊是以實(shí)際的發(fā)送方或者接收方的身份來收發(fā)網(wǎng)絡(luò)包的。以以太網(wǎng)端口為例,路由器的端口具有 MAC 地址 ,因此它就能夠成為以太網(wǎng)的發(fā)送方和接收方 。端口還具有 IP 地址,從這個意義上來說,它和計算機(jī)的網(wǎng)卡是一樣的。當(dāng)轉(zhuǎn)發(fā)包時找不到網(wǎng)頁ip,首先路由器端口會接收發(fā)給自己的以太網(wǎng)包 ,然后查詢轉(zhuǎn)發(fā)目標(biāo),再由相應(yīng)的端口作為發(fā)送方將以太網(wǎng)包發(fā)送出去。這一點(diǎn)和交換機(jī)是不同的,交換機(jī)只是將進(jìn)來的包轉(zhuǎn)發(fā)出去而已,它自己并不會成為發(fā)送方或者接收方
路由表是怎么樣的?
路由器是基于IP設(shè)計的,故路由器是根據(jù)IP來轉(zhuǎn)發(fā)數(shù)據(jù)包的,,但是交換機(jī)是根據(jù)MAC地址轉(zhuǎn)發(fā)的,里面有一張MAC地址表,所以路由器內(nèi)部也有一張路由表,根據(jù)路由表里面的IP來轉(zhuǎn)發(fā)相應(yīng)的端口。
其實(shí)我們本地的計算機(jī)也有路由表,我們可以看看在按win+R輸入cmd,打開命令函,輸入route print可以看到本機(jī)的路由表
名稱結(jié)束
目標(biāo)地址
網(wǎng)段,實(shí)際上這里的 IP 地址只包含表示子網(wǎng)的網(wǎng)絡(luò)號部分的比特值,而表示主機(jī)號部分的比特值全部為 0,路由器會將接收到的網(wǎng)絡(luò)包的接收方 IP地址與路由表中的目標(biāo)地址進(jìn)行比較,并找到相應(yīng)的記錄。交換機(jī)在地址表中只匹配完全一致的記錄,而路由器則會忽略主機(jī)號部分,只匹配網(wǎng)絡(luò)號部分
此列顯示目標(biāo)地址的子網(wǎng)掩碼,真正的網(wǎng)絡(luò)號是通過IP地址和子網(wǎng)掩碼與運(yùn)算得出,目標(biāo)地址和子網(wǎng)掩碼是用來計算目標(biāo)網(wǎng)絡(luò)號的
網(wǎng)關(guān)
根據(jù)目標(biāo)地址和子網(wǎng)掩碼匹配到某條記錄后,路由器就會將網(wǎng)絡(luò)包交給接口列中指定的網(wǎng)絡(luò)接口(即端口),并轉(zhuǎn)發(fā)到網(wǎng)關(guān)列中指定的 IP 地址,如果網(wǎng)關(guān)IP為空,則目標(biāo)地址就是實(shí)際的轉(zhuǎn)發(fā)IP地址
接口
本路由器的出口ip
躍點(diǎn)數(shù)
躍點(diǎn)計數(shù),它表示距離目標(biāo) IP 地址的距離是遠(yuǎn)還是近。這個數(shù)字越小,表示距離目的地越近;數(shù)字越大,表示距離目的地越遠(yuǎn) 。一般情況下,如果有多條到達(dá)相同目的地的路由記錄,路由器會采用值小的那條路由
注:
在鏈路上,表示數(shù)據(jù)傳輸不經(jīng)過其他網(wǎng)絡(luò)和路由器,即目標(biāo)地址和當(dāng)前路由是在同一局域網(wǎng)里面,不需要再經(jīng)過下一跳的路由器
描述目標(biāo)地址是怎么匹配目的IP地址
這里得先簡單復(fù)習(xí)一下子網(wǎng)掩碼,子網(wǎng)是用來區(qū)分我們的IP地址的網(wǎng)絡(luò)號和主機(jī)號的
例如我們查看IP地址,我們的IP地址是192.168.1.20,子網(wǎng)掩碼:255.255.255.0,即192.168.1.20/24,那么就表示192.168.1是IP段的網(wǎng)絡(luò)號,后面的20是這個IP段的主機(jī)號。
在匹配地址的過程中,路由器需要知道網(wǎng)絡(luò)號的比特數(shù),因此路由表中還有一列子網(wǎng)掩碼,通過這個值就可以判斷出網(wǎng)絡(luò)號的比特數(shù)。匹配數(shù)據(jù)包和路由器的目標(biāo)地址對上的網(wǎng)絡(luò)號的記錄即可。
為什么需要子網(wǎng)掩碼區(qū)分網(wǎng)絡(luò)號和主機(jī)號
就好比寄快遞一樣,得寫明哪個小區(qū)哪個房間號,小區(qū)就像網(wǎng)絡(luò)號,房間號就像主機(jī)號。寫明了快遞員就可以把東西寄到相應(yīng)的小區(qū),再由小區(qū)轉(zhuǎn)發(fā)到房間號,這樣分類效率大幅提高。所以我們在路由器也是這樣,找到對應(yīng)網(wǎng)絡(luò)號的就轉(zhuǎn)出去就可以了,如果沒有網(wǎng)絡(luò)號,路由器就要保存大量主機(jī)號的IP,數(shù)據(jù)量多時每次查詢效率就會很低,如果有網(wǎng)絡(luò)號路由器保存的記錄就會減少很多。
路由聚合
有一些例外,有時地址本身的子網(wǎng)掩碼和路由表中的子網(wǎng)掩碼是不一致的,這是路由聚合的結(jié)果。路由聚合會將幾個子網(wǎng)合并成一個子網(wǎng),并在路由表中只產(chǎn)生一條記錄。要搞清楚這個問題,我們還是看一個例子。如圖 3.14 所示,我們現(xiàn)在有 3 個子網(wǎng),分別為路由器會忽略主機(jī)號,只匹配網(wǎng)絡(luò)號。10.10.1.0/24、10.10.2.0/24、10.10.3.0/24,路由器 B 需要將包發(fā)往這 3 個子網(wǎng)。在這種情況下,路由器 B 的路由表中原本應(yīng)該有對應(yīng)這 3 個子網(wǎng)的 3條記錄,但在這個例子中,無論發(fā)往任何一個子網(wǎng),都是通過路由器 A 來進(jìn)行轉(zhuǎn)發(fā),因此我們可以在路由表中將這 3 個子網(wǎng)合并成 10.10.0.0/16,這樣也可以正確地進(jìn)行轉(zhuǎn)發(fā),但我們減少了路由表中的記錄數(shù)量,這就是路由聚合。經(jīng)過路由聚合,多個子網(wǎng)會被合并成一個子網(wǎng),子網(wǎng)掩碼會發(fā)生變化,同時,目標(biāo)地址列也會改成聚合后的地址。
還有一種情況,如果子網(wǎng)掩碼為 255.255.255.255,也就是說地址中的全部 32 個比特都為 1。這樣一來,主機(jī)號部分比特全部為 0 可以表示一個子網(wǎng),主機(jī)號部分比特不全部為 0 可以表示某一臺計算機(jī),這種情況表示目標(biāo)地址就是實(shí)際的主機(jī)號,和路由器在同一局域網(wǎng)上。
路由表匹配到多條記錄如何處理
如果匹配符合的記錄有多個,例如192.168.1.10匹配到路由表的目標(biāo)地址的兩行記錄:192.168.1.0/24,192.168.1.10/32,這種情況,路由器首先尋找網(wǎng)絡(luò)號比特數(shù)最長的一條記錄 。網(wǎng)絡(luò)號比特數(shù)越長,說明主機(jī)號比特數(shù)越短,也就意味著該子網(wǎng)內(nèi)可分配的主機(jī)數(shù)量越少,即子網(wǎng)中可能存在的主機(jī)數(shù)量越少,這一規(guī)則的目的是盡量縮小范圍,所以根據(jù)這條記錄判斷的轉(zhuǎn)發(fā)目標(biāo)就會更加準(zhǔn)確。
然而,有時候路由表中會存在網(wǎng)絡(luò)號長度相同的多條記錄,例如考慮到路由器或網(wǎng)線的故障而設(shè)置的備用路由就屬于這種情況。這時,需要根據(jù)躍點(diǎn)計數(shù)的值來進(jìn)行判斷。躍點(diǎn)計數(shù)越小說明該路由越近,因此應(yīng)選擇躍點(diǎn)計數(shù)較小的記錄。
找不到匹配路由時選擇默認(rèn)路由
路由器的IP如果匹配不到,就會直接丟失,不會像交換機(jī)一樣廣播。但是實(shí)際我們路由表還有一行默認(rèn)路由(發(fā)往更高層級的路由),目標(biāo)地址為0.0.0.0,子網(wǎng)掩碼為 0.0.0.0的記錄,即匹配所有IP,如果找不到其他網(wǎng)絡(luò)號更長的記錄,就會把數(shù)據(jù)包轉(zhuǎn)發(fā)到默認(rèn)的路由記錄上去。
路由表中子網(wǎng)掩碼為 0.0.0.0 的記錄表示“默認(rèn)路由”。
如果在路由表中無法找到匹配的記錄,路由器會丟棄這個包,并通過ICMPA 消息告知發(fā)送方 。這里的處理方式和交換機(jī)不同,原因在于網(wǎng)絡(luò)規(guī)模的大小。交換機(jī)連接的網(wǎng)絡(luò)最多也就是幾千臺設(shè)備的規(guī)模,這個規(guī)模并不大 。如果只有幾千臺設(shè)備,遇到不知道應(yīng)該轉(zhuǎn)發(fā)到哪里的包,交換機(jī)可以將包發(fā)送到所有的端口上,雖然這個方法很簡單粗暴,但不會引發(fā)什么問題。然而,路由器工作的網(wǎng)絡(luò)環(huán)境就是互聯(lián)網(wǎng),它的規(guī)模是遠(yuǎn)遠(yuǎn)大于以太網(wǎng)的,全世界所有的設(shè)備都連接在互聯(lián)網(wǎng)上,而且規(guī)模還在持續(xù)擴(kuò)大,未來的互聯(lián)網(wǎng)里到底會有多少設(shè)備,我們誰都說不準(zhǔn)。在如此龐大的網(wǎng)絡(luò)中,如果將不知道應(yīng)該轉(zhuǎn)發(fā)到哪里的包發(fā)送到整個網(wǎng)絡(luò)上,那就會產(chǎn)生大量的網(wǎng)絡(luò)包,造成網(wǎng)絡(luò)擁塞。因此,由器遇到不知道該轉(zhuǎn)發(fā)到哪里的包,就會直接丟棄。
為什么路由器不能找不到對應(yīng)IP,不能像交換機(jī)一樣廣播?因?yàn)槁酚善鬟B接了多個局域網(wǎng),可能還連接了互聯(lián)網(wǎng),連接的設(shè)備數(shù)量非常大,廣播會形成網(wǎng)絡(luò)擁塞,而交換機(jī)只連接了一個局域網(wǎng),里面的設(shè)備有限,所以路由器遇到找不到的IP匹配的記錄,就會丟掉。
路由表的記錄是如何維護(hù)的
但是默認(rèn)路由是怎么配置上去的?正常是通過路由協(xié)議自動發(fā)現(xiàn)路由器之間的其他路由器后自動配置的。
路由表記錄維護(hù)的方式和交換機(jī)也有所不同。交換機(jī)中對 MAC 地址表的維護(hù)是包轉(zhuǎn)發(fā)操作中的記錄MAC地址,而路由器中對路由表的維護(hù)是與包轉(zhuǎn)發(fā)操作相互獨(dú)立的,也就是說,在轉(zhuǎn)發(fā)包的過程中不需要對路由表的內(nèi)容進(jìn)行維護(hù)。對路由表進(jìn)行維護(hù)的方法有幾種,大體上可分為以下兩類。
路由器具體的工作流程
來看一看路由器的整個工作過程。
首先,路由器是工作在網(wǎng)絡(luò)層的,路由器會接收網(wǎng)絡(luò)包。路由器的端口有各種不同的類型,這里我們只介紹以太網(wǎng)端口是如何接收包的。以太網(wǎng)端口的結(jié)構(gòu)和計算機(jī)的網(wǎng)卡基本相同,接收包并存放到緩沖區(qū)中的過程也和網(wǎng)卡幾乎沒有區(qū)別。首先,信號到達(dá)網(wǎng)線接口部分,將信號轉(zhuǎn)換為數(shù)字信息,然后通過包末尾的 FCS 進(jìn)行錯誤校驗(yàn),如果沒問題則檢查 MAC 頭部中的接收方 MAC 地址,看看是不是發(fā)給自己的包,如果是就放到接收緩沖區(qū)中,否則就丟棄這個包。如果包的接收方 MAC地址不是自己,說明這個包是發(fā)給其他設(shè)備的,如果接收這個包就違反了以太網(wǎng)的規(guī)則。
路由器的端口都具有 MAC 地址,只接收與自身地址匹配的包, 遇到不匹配的包則直接丟棄。
完成包接收操作之后,路由器就會丟棄包開頭的 MAC 頭部。MAC 頭部的作用就是將包送達(dá)路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,當(dāng)包到達(dá)路由器之后,MAC 頭部的任務(wù)就完成了,于是 MAC 頭部就會被丟棄。
通過路由器轉(zhuǎn)發(fā)的網(wǎng)絡(luò)包,其接收方 MAC 地址為路由器端口的MAC 地址。
然后根據(jù)包里面發(fā)送的目的地IP地址,在路由表中進(jìn)行匹配,匹配到的記錄,如果網(wǎng)關(guān)IP不為空,則網(wǎng)關(guān)IP是發(fā)往下一個的地址,如果網(wǎng)關(guān)為空,則目標(biāo)地址的IP是發(fā)往下一個的地址。這里我們有了發(fā)往下一個地址的IP,但是在重新封裝包的時候需要寫入的下一個地址的MAC地址,這個時候我們還不知道下一個地址的MAC地址,知道對方的 IP 地址之后,接下來需要通過 ARP 根據(jù) IP 地址查詢 MAC 地址,并將查詢的結(jié)果作為接收方MAC 地址。路由器也有 ARP 緩存,因此首先會在 ARP 緩存中查詢,如果找不到則發(fā)送 ARP 查詢請求。
路由器也會使用 ARP 來查詢下一個轉(zhuǎn)發(fā)目標(biāo)的 MAC 地址。
把查詢到的MAC頭部加入數(shù)據(jù)包(上一個MAC地址包被丟掉),最后網(wǎng)絡(luò)包封裝完成后,接下來會將其轉(zhuǎn)換成電信號并通過端口發(fā)送出去。這一步的工作過程和計算機(jī)也是相同的。如果輸出端口為以太網(wǎng),則發(fā)送出去的網(wǎng)絡(luò)包會通過交換機(jī)到達(dá)下一個路由器。由于接收方 MAC 地址就是下一個路由器的地址,所以交換機(jī)會根據(jù)這一地址將包傳輸?shù)较乱粋€路由器。
接下來,下一個路由器會將包轉(zhuǎn)發(fā)給再下一個路由器,經(jīng)過層層轉(zhuǎn)發(fā)之后,網(wǎng)絡(luò)包就到達(dá)了最終的目的地。
路由器是如何連上互聯(lián)網(wǎng)的
你的電腦先在應(yīng)用層打包一個 HTTP報文找不到網(wǎng)頁ip,然后在傳輸層在打包成 TCP報文,然后再根據(jù) DNS 查到的 IP 在網(wǎng)絡(luò)層打包成 IP數(shù)據(jù)報,然后在通過鏈路層打包成以太網(wǎng)數(shù)據(jù)幀,發(fā)送給你的交換機(jī)。交換機(jī)收到后,重新包裝數(shù)據(jù)幀,再發(fā)送給路由器,路由器根據(jù)路由表查詢轉(zhuǎn)發(fā)的下一個路由IP,然后根據(jù)ARP協(xié)議獲取下一個轉(zhuǎn)發(fā)的IP的MAC地址,路由器重新封裝包發(fā)給下一個路由,經(jīng)過互聯(lián)網(wǎng)的多個路由接力,隨著這一過程反復(fù)執(zhí)行,包就會最終到達(dá) IP 的目的地,被服務(wù)器接收到,服務(wù)器程序處理完后返回這一網(wǎng)頁的HTTP報文,再傳輸回給用戶,這樣用戶的電腦就能看到服務(wù)器返回的網(wǎng)頁了。
路由器和交換機(jī)的區(qū)別
要理解兩者之間的關(guān)系,關(guān)鍵點(diǎn)在于計算機(jī)在發(fā)送網(wǎng)絡(luò)包時,或者是路由器在轉(zhuǎn)發(fā)網(wǎng)絡(luò)包時,都需要在前面加上 MAC 頭部。之前的講解都是說在開頭加上 MAC 頭部,如果看圖 3.16 大家可以發(fā)現(xiàn),準(zhǔn)確的說法應(yīng)該是將 IP 包裝進(jìn)以太網(wǎng)包的數(shù)據(jù)部分中。也就是說,給包加上 MAC 頭部并發(fā)送,從本質(zhì)上說是將 IP 包裝進(jìn)以太網(wǎng)包的數(shù)據(jù)部分中,委托以太網(wǎng)去傳輸這些數(shù)據(jù)。IP 協(xié)議本身沒有傳輸包的功能,因此包的實(shí)際傳輸要委托以太網(wǎng)來進(jìn)行。路由器是基于 IP 設(shè)計的,而交換機(jī)是基于以太網(wǎng)設(shè)計的,因 此 IP 與以太網(wǎng)的關(guān)系也就是路由器與交換機(jī)的關(guān)系。詳細(xì)的后面再總結(jié)一篇《計算機(jī)網(wǎng)絡(luò)-路由器和交換機(jī)的區(qū)別》
參考:
戶根勤《網(wǎng)絡(luò)是怎樣連接的》