不知道路由器工作原理?没关系,来这看看!看不懂你捶我 | 原力计划
作者 |?北海以北沒有小王
頭圖 | CSDN付費下載自視覺中國
來源 | CSDN博客
路由器概述
首先我們先大致了解一下路由器的大致結(jié)構(gòu)以及工作方式。
路由器體系結(jié)構(gòu)
路由器體系結(jié)構(gòu)如下圖:
其中四個重要組成部分依次如下:
1. 接入端口
將一條輸入的物理鏈路與路由器相連接的物理層功能
需要與位于人鏈路遠(yuǎn)端的數(shù)據(jù)鏈路層交互的數(shù)據(jù)鏈路層功能
在輸入端口還要完成查找功能
2. 交換結(jié)構(gòu)
交換結(jié)構(gòu)將路由器的輸入端口與輸出端口相連接
這種交換結(jié)構(gòu)完全包含在路由器中,即它是一個網(wǎng)絡(luò)路由器中的網(wǎng)絡(luò)!
3. 輸出端口
輸出端口存儲從交換結(jié)構(gòu)接收的分組
執(zhí)行必要的鏈路層和物理層功能在輸入鏈路上傳輸這些分組
當(dāng)一條鏈路是雙向的(即承載兩個方向的流量)時,輸出端口通常是與該鏈路的輸入端口在同 一線路卡(一個包含一個或多個輸入端口的印刷電路,它與交換結(jié)構(gòu)相連)上成對出現(xiàn)的 。
4. 路由選擇處理器
執(zhí)行路由選擇協(xié)議
維護(hù)路由選擇表以及連接的鏈路狀態(tài)信息
為路由器計算轉(zhuǎn)發(fā)表
執(zhí)行網(wǎng)絡(luò)管理功能
什么是路由器轉(zhuǎn)發(fā)平面?
一臺路由器的輸人端口、輸出端口和交換結(jié)構(gòu)共同實現(xiàn)了這種轉(zhuǎn)發(fā)功能,并且總是用硬件實現(xiàn),將這種轉(zhuǎn)發(fā)功能總稱為路由器轉(zhuǎn)發(fā)平面
如果 N 個端口結(jié)合在一塊線路卡上(因為實踐中常常這樣做) .數(shù)據(jù)報處理流水線必須以 N 倍速率運(yùn)行,這遠(yuǎn)快過軟件實現(xiàn)的速率
實現(xiàn)方式:轉(zhuǎn)發(fā)平面硬件既能夠使用廠商向己的硬件設(shè)計來實現(xiàn),也能夠使用購買的商用硅芯片(例如英特爾和 Broadcom 公司所出售的)來實現(xiàn) 。
當(dāng)轉(zhuǎn)發(fā)平面以納秒時間尺度運(yùn)行時,路由器的控制功能(即執(zhí)行路由選擇協(xié)議、對上線或下線的連接鏈路進(jìn)行響應(yīng)) 在毫秒或秒時間尺度上運(yùn)行 。
這些路由器控制平面( router conLrol plane) 通常用軟件實現(xiàn)并在路由選擇處理器上執(zhí)行(通常是一種傳統(tǒng)的 CPU) 。
輸入端口
輸入端口的詳細(xì)視圖:
輸入端口的功能:
輸入端口的線路端接功能與鏈路層處理實現(xiàn)了用于各個輸入鏈路的物理層和鏈路層
在這個地方,路由器使用轉(zhuǎn)發(fā)表來查找輸出端口.使得到達(dá)的分組將能經(jīng)過交換結(jié)構(gòu)轉(zhuǎn)發(fā)到該輸出端口 。
轉(zhuǎn)發(fā)表的更新與使用
轉(zhuǎn)發(fā)表是由路由選擇處理器計算和更新的,但轉(zhuǎn)發(fā)表的一份影子副本通常會被存放在每個輸入端口。
轉(zhuǎn)發(fā)表從路由選擇處理器經(jīng)過獨立總線(例如一個 PCI總線)復(fù)制到線路卡
影子副本
有了影子副本,轉(zhuǎn)發(fā)決策能在每個輸入端口本地做出,無須調(diào)用中央路由選擇處理器,因此避免了集中式處理的瓶頸 。
快速查找算法
在概念上查找表是簡單的,但是在實際應(yīng)用中需要在非常短(例如幾納秒)的時間內(nèi)完成查詢,因此除了硬件設(shè)計外還需要一些對大型轉(zhuǎn)發(fā)表使用的超出簡單線性搜索的技術(shù)(快速查找算法的綜述能夠在[ Gupta 2001 , Ru臥 Sanchez 2011 ]中找到)
同時也需要對內(nèi)存訪問時間尤為關(guān)注
嵌人式片上 DRAM
更快的 SRAM (用作一種 DR燦4 緩存)內(nèi)存
三態(tài)內(nèi)容可尋址存儲器 (Tenary Contenl Aclclress Memory 1 TCAM) 也經(jīng)常被用于查找
輸出端口阻塞
一旦分組經(jīng)過查詢確定了輸出端口就能夠發(fā)送進(jìn)入交換結(jié)構(gòu)
在一些設(shè)計中,如果來自其他輸入端口的分組正在使用該交換結(jié)構(gòu),則該分組被阻塞,需要在輸入端口處排隊,等待調(diào)度
輸入端口的動作
查找
通過自己的影子副本確定分組輸出端口
最重要的功能
出現(xiàn)物理層和鏈路層處理
檢查分組的版本號、檢驗和以及壽命字段 ,并且重寫后兩個字段
更新用于網(wǎng)絡(luò)管理的計數(shù)器(如接收到的 IP 數(shù)據(jù)報的數(shù)目) 。
"匹配加動作"的抽象
注意到輸入端口查找IP地址然后發(fā)送該分組進(jìn)人交換結(jié)構(gòu)( “動作” )的步驟是一種更為一般的"匹配加動作"抽象的特定情況。
這種抽象執(zhí)行在許多網(wǎng)絡(luò)設(shè)備中。
在鏈路層交換機(jī)中,除了發(fā)送幀進(jìn)入交換結(jié)構(gòu)去往輸出端口外,還要查找鏈路層目的地址,并采取幾個動作 。
在防火墻中,肯部匹配給定準(zhǔn)則(例如源/目的IP地址和運(yùn)輸層端口號的某種組合)的入分組可能被阻止轉(zhuǎn)發(fā),而防火墻是一種過濾所選擇的人分組的設(shè)備 。
在網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT )中,一個運(yùn)輸層端口號匹配某給定值的人分組,在轉(zhuǎn)發(fā)(動作)前其端口號將被重寫 。
交換結(jié)構(gòu)
交換結(jié)構(gòu)概述
交換結(jié)構(gòu)位于一臺路由器的核心部位 。
正是通過這種交換結(jié)構(gòu),分組才能實際地從一個輸入端口交換(即轉(zhuǎn)發(fā))到一個輸出端口中 。
交換可以用許多方式完成
三種交換技術(shù)
圖例
經(jīng)內(nèi)存交換
最簡單、最早的路由器是傳統(tǒng)的計算機(jī),其間交換工作由CPU完成
輸入與輸出端口的功能就像在傳統(tǒng)操作系統(tǒng)中的1/0 設(shè)備一樣 。
內(nèi)存從輸入端口接收分組并提取首部值,將其緩存到對應(yīng)的輸出端口
一次僅能執(zhí)行一個內(nèi)存讀寫所以一次只能轉(zhuǎn)發(fā)一個分組
現(xiàn)代經(jīng)由內(nèi)存交換的路由器
與早期路由器的一個主要差別是,目的地址的查找和將分組存儲(交換)進(jìn)適當(dāng)?shù)膬?nèi)存存儲位置是由輸入線路卡來處理的 。
在某些方面,經(jīng)內(nèi)存交換的路由器看起來很像共享內(nèi)存的多處理機(jī),用一個線路卡上的處理將分組交換(寫)進(jìn)適當(dāng)?shù)妮敵龆丝诘膬?nèi)存
經(jīng)總線交換
輸入端口經(jīng)一根共享總線將分組直接傳送到輸出端口,不需要路由選擇處理器的干預(yù) 。
交換方式
讓輸入端口為分組預(yù)先計劃一個交換機(jī)內(nèi)部標(biāo)簽(首部) ,指示本地輸出端口,使分組在總線上傳送和傳輸?shù)捷敵龆丝?。
該分組能由所有輸出端口收到,但只有與該標(biāo)簽匹配的端口才能保存該分組 。
然后標(biāo)簽在輸出端口被去除,因為其僅用于交換機(jī)內(nèi)部來跨越總線
在總線交換下,路由器中只能同時進(jìn)行一個分組的轉(zhuǎn)發(fā),因為每個分組都會完全占用整個總線。
但對于運(yùn)行在小型局域網(wǎng)和企業(yè)網(wǎng)巾的路由器來說,通過總線交換通常是足夠的 。
經(jīng)互聯(lián)網(wǎng)絡(luò)交換
經(jīng)互聯(lián)網(wǎng)絡(luò)交換是為了克服單一,共享式總線帶寬限制
縱橫式交換機(jī)就是一種由 2N 條總線組成的互聯(lián)網(wǎng)絡(luò),它連接 N 個輸入端口與 N 個輸出端口
每條垂直的總線在交叉點與每條水平的總線交叉,交叉點通過交換結(jié)構(gòu)控制器(其邏輯是交換結(jié)構(gòu)自身的一部分)能夠在任何時候開啟和閉合 。
當(dāng)某分組到達(dá)端口 A ,需要轉(zhuǎn)發(fā)到端口 Y ,交換機(jī)控制器閉合總線 A 和 Y 交叉部位的交叉點,然后端口 A 在其總線上發(fā)送該分組,該分組僅由總線 Y 安排接收 。
輸出端口不同的分組可以同時轉(zhuǎn)發(fā),但輸出端口相同的分組還是需要等待
輸出端口
輸出端口處理取出存放在輸出端口內(nèi)存巾的分組并將其發(fā)送到輸出鏈路上。
何處出現(xiàn)排隊
什么是排隊?
在輸入端口和輸出端口只要進(jìn)入速度大于處理速度都可能出現(xiàn)排隊的情況。
排隊的位置和程度(或者在輸人端口排隊,或者在輸出端口排隊)將取決于流量負(fù)載、交換結(jié)構(gòu)的相對速率和線路速率。
什么是丟包?
當(dāng)輸出端口出現(xiàn)排隊狀況是,排隊的分組就會進(jìn)入路由器的緩存空間,當(dāng)緩存空間耗盡就會發(fā)生丟包
路由器緩存?
該設(shè)置多少緩存空間?
緩存數(shù)量 ( B ) 應(yīng)當(dāng)?shù)扔谄骄禃r延 (RTI ,比如說 250ms) 乘以鏈路的容量( C) 。
因此,一條具有 250ms RTT 的 10Gbps 鏈路將需要的緩存量等于 B =RTT * C =2. 5Gb 。
緩存滿了怎么辦?
如果沒有足夠的內(nèi)存來緩存一個人分組,那么必須做出決定:要么丟棄到達(dá)的分組(一種稱為棄尾 (drop- tail)的策略) ,要么刪除一個或多個己排隊的分組來為新到的分組騰出空間;
這些統(tǒng)稱為AQM主動隊列管理算法;
隨機(jī)早期檢測。
隨機(jī)旱期檢測 (Random Early Detection , RED) 算法是一種得到最廣泛研究和實現(xiàn)的 AQM 算法 。
當(dāng)平均隊列長度小于最小閾值min,新來的分組就被接納進(jìn)隊列
當(dāng)平均隊列長度大于最大閾值max,新來的分組就會被標(biāo)記或者丟棄
當(dāng)長度在最大與最小中間時,就會以某種概率進(jìn)行接納或者接納
分組調(diào)度程序
輸出端口排隊的后果就是,在輸出端口上的一個分組調(diào)度程序 (packet scheduler) 必須在這些排隊的分組中選出一個來發(fā)送
最簡單的原則:先來先服務(wù)
更復(fù)雜的原則:加權(quán)公平排隊(WFQ)
路由選擇控制平面
前面我們已經(jīng)隱含地假設(shè)路由選擇控制平面全部駐留并運(yùn)行在路由器中的路由選擇處理器上 。
網(wǎng)絡(luò)范圍的路由選擇控制平面因此是分布式的,即不同部分(例如路由選擇算法)執(zhí)行在不同的路由器上并且通過彼此發(fā)送控制報文進(jìn)行交互 。
新型路由器控制平面體系結(jié)構(gòu)其中數(shù)據(jù)平面連同部分控制平面(例如,鏈路狀態(tài)的本地測量/報告,轉(zhuǎn)發(fā)表的安裝和維護(hù))在路由器中實現(xiàn),部分控制平面能夠在路由器外部實現(xiàn)(例如,在能夠執(zhí)行路由計算的集中式服務(wù)器中實現(xiàn)) 。
一個定義良好的 API 規(guī)定了這兩個部分彼此交互和通信的方式 。
這些研究人員爭辯說將軟件控制平面與硬件數(shù)據(jù)平面(具有最少的路由器駐留控制平面)分離,能夠以集中式路由選擇計算代替分布式路由選擇計算,從而簡化路由選擇,通過允許不同的用戶定制的控制平面在快速的硬件數(shù)據(jù)平面上運(yùn)行,能夠進(jìn)行網(wǎng)絡(luò)創(chuàng)新.
版權(quán)聲明:本文為CSDN博主「北海以北沒有小王」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_45761327/article/details/106087563
推薦閱讀大數(shù)據(jù)Spark:利用電影觀看記錄數(shù)據(jù),進(jìn)行電影推薦| 原力計劃
我!程序猿!被銀行套路了!
數(shù)據(jù)科學(xué)產(chǎn)業(yè)中哪些架構(gòu)最熱門?本文為你盤點了 5 款!
陸奇:疫情下的創(chuàng)業(yè)者,最不能缺這兩大能力
滴滴技術(shù)總監(jiān)受賄 1000 萬,列入招聘黑名單,互聯(lián)網(wǎng)大廠反腐有多強(qiáng)?
用 Python 訓(xùn)練自己的語音識別系統(tǒng),這波操作穩(wěn)了!
區(qū)塊鏈如何解決食品安全問題?
真香,朕在看了!
總結(jié)
以上是生活随笔為你收集整理的不知道路由器工作原理?没关系,来这看看!看不懂你捶我 | 原力计划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三探云原生全景图,这次聊聊运行时层
- 下一篇: 出道50年+!乘风破浪的编程语言们,能二