1、RIP報文格式
RIP協議工作在應用層,它基於傳輸層的UDP協議實現,而UDP又基於網絡層的IP協議實現,所以RIP幀格式如下:
幀頭 | Data(IP報文) | FCS | |||
IP頭 | Data(UDP報文) | ||||
UDP頭 | Data(RIP報文) |
RIP報文:
Command | Version | Zero | AFI | Zero | IP Address | Zero | Zero | Metric |
8位 | 8位 | 16位 | 16位 | 16位 | 32位 | 32位 | 32位 | 32位 |
Command:報文類型,值爲1表示請求報文,值爲2表示響應報文。
Version:版本,RIP目前發行了兩個版本,值爲1表示RIPv1,值爲2表示RIPv2,這裏默認講的是RIPv1。
Zero:全0字段,該字段全被0填充,主要用於兼容以往或未來可能產生的路由協議,這裏不作使用。
AFI:地址標識,指出其網絡地址的地址種類,用於兼容其他類型的網絡地址,我們使用的IP地址取值爲2。
IP Address:IP地址,在不同類型的報文中根據需要放置IP地址。
Metric:路由度量值,這個值在經過路由器時被遞增,值的有效範圍在1到15之間,路由器會將度量值爲16的RIP報文丟棄,用以防止RIP報文在網絡中無限制傳播。
2、RIP運行原理
RIP是D-V算法在局域網中的實現,主要通過下面六個方法來交換路由信息並維護路由表。
相鄰交換:路由器啓動RIP後,會向相鄰的路由器發送請求報文,相鄰的RIP路由器收到請求報文後響應該請求,回送包含本地路由表信息的響應報文,路由器收到響應報文後,更新本地路由表。
觸發更新:路由器更新本地路由表後會向相鄰路由器發送觸發更新報文,通告路由更新信息。收到該報文的路由器會根據該報文的內容更新本地路由表並繼續向相鄰路由器發送觸發更新報文。一連串的觸發更新後,各路由器都能得到當前網絡完整的路由信息。
路由計算:路由器會根據收到的路由信息計算出到達每個目的路由的最佳路徑並生成路由表。
週期發送:路由器每隔30秒會週期性的向相鄰路由器發送包含本地路由表的RIP報文,收到該報文的路由器會維護自己的路由表,若有更新則觸發更新通告相鄰設備。
路由老化:默認路由表中每個條目的有效時間是180秒,即180秒內相鄰路由器週期性發送的RIP報文中沒有該路由條目的信息則認爲該路由不可達。若120秒後同一鄰居路由器發來的RIP報文中還沒有該路由條目的信息則該路由條目將從路由表中徹底刪除。
Metric遞增:爲防止RIP報文在網絡中無限制傳播,路由條目每經過一個路由器該條目的Metric值就遞增1,當該條目的Metric值大於15時,路由器就將該條目丟棄。這裏“經過”的概念是路由器A的某條目Metric值爲1,A將該條目遞交給B的時候會將Metric值加1,所以B收到的該條目Metric值就爲2了,C收到B遞交的該條目時其Metric就爲3了。
3、RIP運行實例
初始路由表:
如上圖所示的一個簡單網絡中,分別存在網絡A(192.168.0.0)、B(192.168.1.0)、C(192.168.3.0)、D(192.168.3.0),由3個路由器連接在一起,路由器上方的IP地址爲各路由器連接各網絡的端口IP。RIP啓動時各路由器只包含直連網絡的路由信息,所以各路由器的路由表如下所示,其中網絡目標指路由目的地,下一跳指要到達目標網絡需經過的路由端口IP,Metric指網絡開銷。
網絡目標 | 下一跳 | Metric | 備註 |
192.168.0.0 | none | 0 | AR1與192.168.0.0直連,所以無需經過下一個路由,開銷爲0 |
192.168.1.0 | none | 0 | AR1與192.168.1.0直連,所以無需經過下一個路由,開銷爲0 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.1.0 | none | 0 | AR2與192.168.1.0直連,所以無需經過下一個路由,開銷爲0 |
192.168.2.0 | none | 0 | AR2與192.168.2.0直連,所以無需經過下一個路由,開銷爲0 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.2.0 | none | 0 | AR3與192.168.2.0直連,所以無需經過下一個路由,開銷爲0 |
192.168.3.0 | none | 0 | AR3與192.168.3.0直連,所以無需經過下一個路由,開銷爲0 |
相鄰交換:
路由器啓動RIP後,會向相鄰的路由器發送請求報文,相鄰路由器響應該請求並將本地的路由表信息發送給請求的路由器。故AR1會收到AR2的響應報文,AR2會收到AR1和AR3的響應報文,AR3會收到AR2的響應報文。路由表應有相應變化,其中標紅部分是路由器收到的路由條目但與本地條目重複,需要清除的,不會實際存入路由表中,標藍部分是新增路由條目。
網絡目標 | 下一跳 | Metric | 備註 |
192.168.0.0 | none | 0 | |
192.168.1.0 | none | 0 | |
192.168.1.0 | 192.168.1.2 | 1 | 此條目由AR2的192.168.1.2端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目與本地重複而Metric值更大,故會被淘汰 |
192.168.2.0 | 192.168.1.2 | 1 | 此條目由AR2的192.168.1.2端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地沒有故保留 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.1.0 | none | 0 | |
192.168.2.0 | none | 0 | |
192.168.0.0 | 192.168.0.1 | 1 | 此條目由AR1的192.168.0.1端口發出,故下一跳應是該端口IP,此條目由AR1發出所以Metric值加一,此條目在本地沒有故保留 |
192.168.1.0 | 192.168.0.1 | 1 | 此條目由AR1的192.168.0.1端口發出,故下一跳應是該端口IP,此條目由AR1發出所以Metric值加一,此條目與本地重複而Metric值更大,故會被淘汰 |
192.168.2.0 | 192.168.2.2 | 1 | 此條目由AR3的192.168.2.2端口發出,故下一跳應是該端口IP,此條目由AR3發出所以Metric值加一,此條目與本地重複而Metric值更大,故會被淘汰 |
192.168.3.0 | 192.168.2.2 | 1 | 此條目由AR3的192.168.2.2端口發出,故下一跳應是該端口IP,此條目由AR3發出所以Metric值加一,此條目在本地沒有故保留 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.2.0 | none | 0 | |
192.168.3.0 | none | 0 | |
192.168.1.0 | 192.168.2.1 | 1 | 此條目由AR2的192.168.2.1端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地沒有故保留 |
192.168.2.0 | 192.168.2.1 | 1 | 此條目由AR2的192.168.2.1端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目與本地重複而Metric值更大,故會被淘汰 |
觸發更新:
路由器更新路由表後會向相鄰的設備發送觸發更新報文,報文中包含更新的路由條目,所以各路由表應做如下更新。
網絡目標 | 下一跳 | Metric | 備註 |
192.168.0.0 | none | 0 | |
192.168.1.0 | none | 0 | |
192.168.2.0 | 192.168.1.2 | 1 | |
192.168.0.0 | 192.168.1.2 | 2 | 此條目由AR2的192.168.1.2端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目與本地重複而Metric值更大,故會被淘汰 |
192.168.3.0 | 192.168.1.2 | 2 | 此條目由AR2的192.168.1.2端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地沒有故保留 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.1.0 | none | 0 | |
192.168.2.0 | none | 0 | |
192.168.0.0 | 192.168.0.1 | 1 | |
192.168.3.0 | 192.168.2.2 | 1 | |
192.168.2.0 | 192.168.1.1 | 2 | 此條目由AR1的192.168.1.1端口發出,故下一跳應是該端口IP,此條目由AR1發出所以Metric值加一,此條目在本地重複而Metric值更大,故會被淘汰 |
192.168.1.0 | 192.168.2.2 | 2 | 此條目由AR3的192.168.2.2端口發出,故下一跳應是該端口IP,此條目由AR3發出所以Metric值加一,此條目在本地重複而Metric值更大,故會被淘汰 |
網絡目標 | 下一跳 | Metric | 備註 |
192.168.2.0 | none | 0 | |
192.168.3.0 | none | 0 | |
192.168.1.0 | 192.168.2.1 | 1 | |
192.168.0.0 | 192.168.2.1 | 2 | 此提條目由AR2的192.168.2.1端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地沒有故保留 |
192.168.3.0 | 192.168.2.1 | 2 | 此提條目由AR2的192.168.2.1端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地重複而Metric值更大,故會被淘汰 |
最終路由表如下:
通過前面的相鄰交換和觸發更新,所有路由器都具備了到達網絡中任一處的路由條目,事實上前面的觸發更新產生了新的路由條目,應該會有新的觸發更新,由於該觸發更新沒有導致路由表有新的變化,所以就不再贅述。此外,路由表穩定後,各交換機每隔30秒會向相鄰交換機發送一次最新的路由條目,若有變化可能會有新的觸發更新,通過此方法及時更新各路由表。
網絡目標 | 下一跳 | Metric | 備註 | |
AR1路由表 | ||||
192.168.0.0 | none | 0 | 網絡A 直連 | |
192.168.1.0 | none | 0 | 網絡B 直連 | |
192.168.2.0 | 192.168.1.2 | 1 | 網絡C 來自AR2 | |
192.168.3.0 | 192.168.1.2 | 2 | 網絡D 來自AR3 | |
AR2路由表 | ||||
192.168.1.0 | none | 0 | 網絡B 直連 | |
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.0.0 | 192.168.0.1 | 1 | 網絡A 來自AR1 | |
192.168.3.0 | 192.168.2.2 | 1 | 網絡D 來自AR3 | |
AR3路由表 | ||||
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.3.0 | none | 0 | 網絡D 直連 | |
192.168.1.0 | 192.168.2.1 | 1 | 網絡B 來自AR2 | |
192.168.0.0 | 192.168.2.1 | 2 | 網絡A 來自AR1 |
4、RIP環路
通過前面的描述,我們可知運行RIP協議的路由器對收到的路由條目信息僅做重複性篩查而不做來源篩查,這就導致運行RIP協議的網絡非常容易產生環路。
考慮上一節所分析的網絡,若網絡D與路由器AR3斷開連接,此時僅AR3知道該鏈路已斷並將相關路由條目刪除,但AR2中仍然保留有該條目信息。路由表如下所示。(觸發更新實際上也是防止環路的一種措施,默認都會啓用該功能,所以前面的分析中包含了觸發更新功能,而這裏假設該功能沒有啓用)
網絡目標 | 下一跳 | Metric | 備註 | |
AR2路由表 | ||||
192.168.1.0 | none | 0 | 網絡B 直連 | |
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.0.0 | 192.168.0.1 | 1 | 網絡A 來自AR1 | |
192.168.3.0 | 192.168.2.2 | 1 | 網絡D 來自AR3 | |
AR3路由表 | ||||
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.1.0 | 192.168.2.1 | 1 | 網絡B 來自AR2 | |
192.168.0.0 | 192.168.2.1 | 2 | 網絡A 來自AR1 |
根據協議,AR3在30秒後會向AR2發送週期性的RIP報文,告知最新的路由信息,而在此之前可能AR2已提前向AR3發送了週期性RIP報文,該報文中包含了通向網絡D的路由。
網絡目標 | 下一跳 | Metric | 備註 | |
AR2路由表 | ||||
192.168.1.0 | none | 0 | 網絡B 直連 | |
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.0.0 | 192.168.0.1 | 1 | 網絡A 來自AR1 | |
192.168.3.0 | 192.168.2.2 | 1 | 網絡D 來自AR3 | |
AR3路由表 | ||||
192.168.2.0 | none | 0 | 網絡C 直連 | |
192.168.1.0 | 192.168.2.1 | 1 | 網絡B 來自AR2 | |
192.168.0.0 | 192.168.2.1 | 2 | 網絡A 來自AR1 | |
192.168.3.0 | 192.168.2.1 | 2 | 網絡D 此提條目由AR2的192.168.2.1端口發出,故下一跳應是該端口IP,此條目由AR2發出所以Metric值加一,此條目在本地沒有故保留 |
若此時有發往網絡D的數據,就會導致該數據在AR2和AR3之間來回傳遞,形成環路。爲防止出現上述情況,RIP協議使用以下三種方法來解決環路。(實際上將Metric值限制爲15以內也是防止環路的一種,這裏不做贅述)
水平分割:路由器從某接口學習到的路由,不會再從該接口發出去。
毒性反轉:路由器從某接口學習到的路由,從該接口發出去時將該路由條目的Metric值設爲16。
觸發更新:本地路由信息發生變化時,路由器立即發送觸發更新報文給鄰居路由器。
【互連的兩個路由如何知道對方的信息】沒查到
【RIP的優缺點】RIP優點在於配置簡單、易於維護、適合小型網絡
缺點是RIP報文最大傳播距離是15跳,限制了網絡規模;RIP協議更新的是整張路由表,當網絡增大時,開銷也增大;路由器無條件接收到路由信息,無需自身計算。路由來源不太可靠,若收到的路由本身是錯的,也無法自行修正。
【RIPv2】RIPv2對RIPv1進行了擴充,RIPv1是有類別路由協議,它只支持以廣播方式發佈協議報文。RIPv1的協議報文無法攜帶掩碼信息,它只能識別A、B、C類這樣的自然網段路由,因此RIPv1不支持不連續子網。RIPv2是一種無類別路由協議,與v1相比它有以下優勢:
支持路由標記,在路由策略中可根據路由標記對路由進行靈活的控制。
報文中攜帶掩碼信息,支持路由聚合和CIDR(Classless Inter-Domain Routing,無類域間路由)。
支持指定下一跳,在廣播網上可以選擇到最優下一跳地址。
支持組播路由發送更新報文,只有RIP-2路由器才能收到更新報文,減少資源消耗。
支持對協議報文進行驗證,並提供明文驗證和MD5驗證兩種方式,增強安全性。
RIP-2有兩種報文傳送方式:廣播方式和組播方式,缺省將採用組播方式發送報文,使用的組播地址爲224.0.0.9。當接口運行RIP-2廣播方式時,也可接收RIP-1的報文。
【路由表條目很多怎麼辦】從RIP報文中可知一個報文僅可存放一個IP地址,但路由器的路由條目一般會超過一條,所以路由條目在網絡中是一個報文一個條目。
【D-V算法】矢量距離算法的思想是網關週期性地向外廣播路徑刷新報文,主要內容是由若干(V,D)序偶組成的序偶表。其中V代表向量,標識網關可到達的網關或主機,D代表距離,指出該網關去往網關或主機的距離。距離D按驛站的個數計,其他網關收到某網關的(V,D)報文後,據此按照最短路徑原則對各自的路由表進行刷新。