RIPv1收發資料包詳解
本文將詳解RIPv1收發路由更新的機制, 先來複習一下RIPv1,距離向量路由,廣播更新,不支援VLSM,CIDR,不支援認證,不支援手工彙總,不支援下一跳,不支援Tag欄位,所以可以看出,RIPv1非常的不方便且不安全,因為他無法手工彙總與認證
那麼我們上面說到了一點,不支援VLSM,RIPv1在更新包中,不攜帶子網掩碼,這就引出了一個問題,接收方是怎麼賦予這個網段掩碼的,這便是這章我們需要討論的問題
以下是拓撲環境,以及三臺路由器的路由表狀態,我們逐一對其進行分析
從這張拓撲可以看出兩個問題,我們逐一解釋
- R2,R3接收不到12.3.1/25的路由條目
- R3接收到11.2.0/23的條目,是錯誤的
R2,R3收不到12.1.3.1/25的路由,這是因為,RIPv1會在傳送該條目之前,會進行比對,如果該網路與自己的出介面地址,為一個主類,那麼必須掩碼一致,如果掩碼不一致,則放棄傳送,如果與自己的出介面不為一個主類,那麼將傳送他的彙總網路號,拓撲中,12.1.3.1/25,與該更新包的出介面的12.1.1.1/24,為同一主類,但是掩碼不一致,所以R1不會發送這條路由條目
R3接收到的錯誤條目,其原因並不是傳送端的問題,而是自身產生的原因,當一臺執行RIP的路由器收到一條RIP的更新包之後,發現更新包中的地址與接收該資料包的介面地址屬於一個主類時,程序會決定為這條條目賦予入介面的掩碼,也就是說這條不攜帶掩碼的條目,將會被接收端自行附加掩碼,這個機制便導致了R3學習錯誤的問題,R3認為12.1.3.1與自己的12.1.1.3是一個主類,那麼R3就會將自己的23位掩碼附加給12.1.3.1,從而導致條目變成了12.1.3.0/23,這是RIPv1收發機制帶來的一個問題,那麼解決的方法便是,在F0/0上啟用一個secondary地址,掩碼為24,因為RIP優先使用secondary地址的掩碼來計算路由,也可以在RIP程序中宣告secondary地址,但是這裡要注意的是,RIP並不會將secondary釋出出去,而是用secondary當做更新源來使用
下面我們再來看一張實驗拓撲
這裡可以看出一個問題,也就是R2沒有正確的學到1.1.1.0/24,而是被一條1.0.0.0/8的路由頂掉了,這裡說明了R1傳送的條目是1.1.1.1,但是R2處理時,發現1.1.1.1與自己入介面的地址不是同一主類,所以在本地計算之後會生成一條R 1.0.0.0/8的路由,但是R2本地也有一條C 1.0.0.0/8的直連路由,這時R2發現C>R,隨後用C路由頂替掉R路由
接下來再說一張拓撲
這裡發現一個很大的問題,R2學習到了一條12.1.3.0/32,這很明顯是一條錯誤路由,造成這個現象的原因是在於,R1始終認為對方的掩碼,網段與自己一致,所以做好本地驗證之後就直接傳送出更新,這個更新包的內容為12.1.3.0,metric 1,R2收到之後會為這個網路號附加掩碼,但是附加之後產生了一個問題,也就是/23掩碼覆蓋在12.1.3.0上的話,主機位會多出一位,RIP認為,主機位如果不全為0,那麼這就是一條主機路由,所以便產生了12.1.3.0/32這條路由,那麼解決的方法便是新增secondary地址,掩碼為/24,那麼就可以糾正錯誤的路由了
總結一下,RIPv1會產生四種問題
- 傳送更新時,本地掩碼教研
- 收更新時,使用入介面地址覆蓋,導致路由錯誤學習
- 本地直連網段覆蓋RIP路由
- 主機位不為0時,產生主機路由