路由器IP轉發的最長匹配原則
IP轉發,基於路由,例如OSPF、ISIS、BGP、RIP系列等,是從鄰居那裡通過SPF或D-V演算法計算出最短路徑的一種方式,在這種傳輸方式中,每臺路由器維護一張路由轉發表,簡稱路由表指導報文的轉發。及在路由器的眼裡,是可以看到所有的Topo的,從中選擇一條最優的路徑。生成路由轉發表後,使命基本可以完成了,報文進入路由器後,查詢這個轉發表,注意,IP轉發是要求最長匹配的,即一條IP命中了一個路由條目後並不是立即退出就按照這個條目指定的轉發方式進行轉發了,而是繼續查詢,直到全部路由表搜尋一遍後,再按照指定的方式轉發,如果在後面發現了更優的路由項,則覆蓋原來的結果。IP認為後面可能有更好的查詢結果。如何判別更優呢,就是按照最長匹配原則。例如目的IP(DIP)為110.1.1.1的這個報文,查詢路由表,一個是110.0.0.0/8 出介面為S1,一個是110.1.0.0/16,出介面為S2,則後面的查詢結果會覆蓋前面的查詢結果,按照S2介面轉發出去。
為什麼需要最長匹配呢?
一臺路由器可能執行多個路由協議,例如同時執行OSPF和RIP,兩個路由協議都發現了110.0.0.0這條路由,只是出介面不一樣(一般路由器的一個介面只執行一種協議,除非是多點到多點的組網或點到多點的組網),那麼那條路由下發到實際知道轉發的路由表呢?這時是按照協議優先順序來定,OSPF使用的是更高階的SPF演算法(最短路徑演算法),而RIP是使用的D-V演算法(距離向量演算法),前者的可靠性更高,所以就是用OSPF所發現的路由項指導轉發。但如果RIP發現的是110.1.0.0/16,這時,和110.0.0.0/8是不同的路由項,會下發兩條路由的,及同時下發110.0.0.0/8 和110.1.0.0/16,誰先發現的,誰先下發,此時無任何關係。所以,IP轉發時,必須全部查詢完畢路由轉發表後才能決定任何轉發報文。如果查詢完畢後仍然沒有可用的資訊,則此報文就會被丟棄。在使能ICMP故障反饋功能時,此路由器會反饋“路由不可達”的ICMP報文。
=========================================
本人4年資料通訊研發經驗,目前在國內知名通訊公司擔任測試經理和高階測試工程師,今後會逐漸新增資料通訊類的技術討論,由淺至深,歡迎交流。
相關推薦
路由器IP轉發的最長匹配原則
IP轉發,基於路由,例如OSPF、ISIS、BGP、RIP系列等,是從鄰居那裡通過SPF或D-V演算法計算出最短路徑的一種方式,在這種傳輸方式中,每臺路由器維護一張路由轉發表,簡稱路由表指導報文的轉發。及在路由器的眼裡,是可以看到所有的Topo的,從中選擇一條最優
IP路由查詢的“最長匹配原則”
最長匹配原則是CISCO IOS路由器預設的路由查詢方式。當路由器收到一個IP資料包時,會將資料包的目的IP地址與自己本地路由表中的表項進行bit by bit的逐位查詢,直到找到匹配度最長的條目,這叫最長匹配原則。 這裡有幾個概念要先搞清楚: 看上
Mysql聯合索引最左匹配原則
前言 之前在網上看到過很多關於mysql聯合索引最左字首匹配的文章,自以為就瞭解了其原理,最近面試時和麵試官交流,發現遺漏了些東西,這裡自己整理一下這方面的內容。 最左字首匹配原則 在mysql建立聯合索引時會遵循最左字首匹配的原則,即最左優先,在檢索資料時從聯合索引的最左邊開始匹配,示
Mysql最左匹配原則實踐(原創)
mysql最左匹配原則 什麼叫最左匹配原則 最左匹配原則的誤區 實戰 結論: 1 條件查詢中條件順序沒有關係 2 在最左匹配原則中,有如下說明: 最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1
mysql索引最左匹配原則的理解
這是你的表結構,有三個欄位,分別是id,name,cid CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11
python3 尋找目標名稱中字串最長匹配實踐
專案目標: 已有本地登記資料local-data.xlsx,需從網頁填報資料web-data.xls中篩查出未填報的本地資料 資料特徵: web-data.xls包含目標列“尾礦庫名稱”和“企業名稱”,local-data.xlsx包含目標列“尾礦
工作量證明的最長鏈原則到底說的是什麼?
前幾天的一篇關於比特幣的標準的文章引起了很多人的關注。在這篇文章中介紹了比特幣的標準是什麼以及Bitcoin Core(BCE)和Bitcoin Cash(BCH)符合哪些標準不符合哪些標準。最終經過對比,BCH只在白皮書中的工作量證明的最長鏈原則這一標準中輸給了BCE,這也
聯合索引最左匹配原則
如果有一個2列的索引(col1,col2),則已經對(col1)、(col1,col2)上建立了索引; 如果有一個3列索引(col1,col2,col3),則已經對(col1)、(col1,col2)、(col1,col2,col3)上建立了索引; 例如: 組合索引(a,b) e
java實現最長匹配括號的長度
下面是leetcode的Longest Valid Parentheses的一個解法 時間複雜度為O(n) 空間複雜度為O(1) /* * 找出最長的配對括號的長度 例如 “)()()(”的長度為4 採用左右兩遍掃描的辦法 */ public int lon
javascript正則表示式之最長匹配(貪婪匹配)和最短匹配(懶惰匹配)
最近在閱讀RequireJS 2.1.15原始碼,原始碼開始處定義了一系列的變數,有4個正則表示式: var commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)
mysql索引最左匹配原則的理解?
作者:沈傑 連結:https://www.zhihu.com/question/36996520/answer/93256153 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。這是你的表結構,有三個欄位,分別是id,name,cid CR
【Python】最長括號匹配問題:給定字串,僅包含左括號‘(’和右括號‘)’,它可能不是括號匹配的,設計演算法,找出最長匹配的括號子串
最長括號匹配 示例: 給定字串,僅包含左括號‘(’和右括號‘)’,它可能不是括號匹配的,設計演算法,找出最長匹配的括號子串。 演算法分析 只有在右括號和左括號發生匹配時,才有可能更新最終解。 計算s[0…i]中左括號數目與右括號數目的差
索引最左前綴匹配原則
大量 獲得 最好 排列 不能 索引 使用 如果 查詢 如果索引字符串的前面n個字符都不相同,那麽最好不要索引整個數據列,二十索引前n個字符,這樣可以節省大量空間。 如果在數據列a,b,c上建立了復合索引,索引中的數據行按照a/b/c次序排列,因此數據表會自動的按照a/b和a
【日常刷題】最長括號匹配DP
最長括號匹配 這道題目看似可以使用棧來做,實則用DP可以更加簡單。 我們設 f [ i
leetcode 524.通過刪除字母匹配到字典裡最長單詞
給定一個字串和一個字串字典,找到字典裡面最長的字串,該字串可以通過刪除給定字串的某些字元來得到。如果答案不止一個,返回長度最長且字典順序最小的字串。如果答案不存在,則返回空字串。 示例 1: 輸入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,
哈爾濱理工大學軟體與微電子學院第八屆程式設計競賽同步賽(高年級) E 小樂樂匹配字串 【最長公共子序列】
傳送門:https://ac.nowcoder.com/acm/contest/301/E 求最長公共子序列。 立個 flag 搞dp。 AC code: #include <cstdio> #include <iostream> #inc
小樂樂匹配字串 (最長公共子序列)
連結:https://ac.nowcoder.com/acm/contest/301/E 來源:牛客網 小樂樂匹配字串 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld 題目描述
Luogu_1944 最長括號匹配
題目連結 動態規劃的方式: 1. 上一個括號或者上一段合法序列的前一個括號和當前位置形成 (A),[A] 型合法序列; 2. 該位置所在的當前合法序列和之前的某一段與其相鄰的序列組成 AB 型合法序列。 轉移方程 dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] - 2
LeetCode:32. Longest Valid Parentheses(最長的有效匹配串)
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
基於詞典的正向最大匹配演算法(最長詞優先匹配)
public Set<String> matchChinese(String text, Set<String> dictionary, int maxLength) { //text:待匹配文字 dictiona:詞典