現(xiàn)在路由器的組成
現(xiàn)在路由器跟計算機網(wǎng)絡(luò)中的路由其實不太一樣娄周,因為現(xiàn)在大家家里常用的路由器一般是集成了交換機功能的路由器箕憾,即既有路由器轉(zhuǎn)發(fā) ip 數(shù)據(jù)包的功能泥技,又有交換機以橋接的方式連接內(nèi)網(wǎng)里設(shè)備的功能(這里說的外網(wǎng)不是指 Google鞋仍,Youtube 這些相對中國大型局域網(wǎng)的外網(wǎng),而是指包括 Google 在內(nèi)也包括 Baidu 在內(nèi)的我們每天在用的 Internet磕洪。內(nèi)網(wǎng)簡單來說在自己家里可以看作是同一個路由器下面連接的所有設(shè)備吭练、在公司里可以看作是 kwai-staff 下連接的所有設(shè)備所處的網(wǎng)絡(luò)環(huán)境)。
如圖所示析显,位于中間的 ADSL Router 左右兩側(cè)的防火墻以及下面的所有 PC鲫咽、Network Server 同處在一個內(nèi)網(wǎng)以下,而對于這些設(shè)備來說谷异,上面的 WAN 和 Cable Router 就屬于外網(wǎng)分尸。
路由器的路由功能:
先明確一下計算機中對路由器的定義
節(jié)點(Node):任何一個實現(xiàn)了 ip 協(xié)議(能夠處理網(wǎng)絡(luò)數(shù)據(jù)報文)的設(shè)備。
路由器(Router):擁有處理不是給自己的報文的設(shè)備歹嘹。
主機(Host):除了 Router 以外的 Node(手機箩绍、電腦、switch(指任天堂的 switch尺上,不是交換機)材蛛、掃地機器人等等)。
從上面可以看出怎抛,路由器的定義就是除了可以處理給自己的包以外卑吭,還可以處理經(jīng)過自己但是不是給自己的包。所以哪天你在自己的電腦上更新了 iptables 規(guī)則马绝,實現(xiàn)包的自定義轉(zhuǎn)發(fā)陨簇,那此時你的電腦在網(wǎng)絡(luò)拓撲中承擔的角色就是路由器而并非只是一個主機了。
在同一個路由器下的設(shè)備中迹淌,都會被分配一個內(nèi)網(wǎng) ip河绽,而這些設(shè)備想要上網(wǎng)則需要跟外網(wǎng)的 ip 進行數(shù)據(jù)包的雙向傳輸。路由器起到的作用就是對內(nèi)網(wǎng)提供一個 ip唉窃,對外網(wǎng)提供另一個 ip耙饰。內(nèi)網(wǎng)設(shè)備發(fā)起的網(wǎng)絡(luò)請求,可以大致被分為兩個過程
- 內(nèi)網(wǎng) ip 把數(shù)據(jù)包傳給路由器纹份,路由器通過接受方的 ip 將數(shù)據(jù)包轉(zhuǎn)發(fā)出去儿普,被 A 接受;
- A 通過路由器外網(wǎng)側(cè)的 ip 傳回給路由器尘应,路由器再通過內(nèi)網(wǎng)的 ip 轉(zhuǎn)發(fā)給對應(yīng)的內(nèi)網(wǎng)設(shè)備。
問得好,在這里一個繞不過去的原因其實是 ipv4 的地址不夠用铜秆,常見的 ip 地址格式是 114.51.4.3淹真,分成 4 個數(shù)字的部分,每個部分的取值范圍是 0-255连茧,因此可以算出 ip 地址其實是有數(shù)量上限的核蘸,從 0.0.0.0 到 255.255.255.255,粗略來算大概是 40 億個 ip 地址啸驯,如果跟設(shè)備一一對應(yīng)的話...比如我自己就有 1 臺臺式機客扎、2 個筆記本、1 個樹莓派坯汤、若干個手機、一臺服務(wù)器等搀愧《枘簦總之需要分配 ip 地址上網(wǎng)的設(shè)備不下 10 個,40 億個 ip 地址是肯定不夠全世界人口用的咱筛,加上大量的地址都在一些較早接入互聯(lián)網(wǎng)的發(fā)達國家手里搓幌,帝國主義亡我之心不死,再有其他的原因就是出于安全或者速度等其他方面的考量了迅箩。
這里自然而然帶出了兩個概念:公網(wǎng)ip 和 內(nèi)網(wǎng)ip溉愁,前者是指在 Internet 上正常情況下可以訪問到的唯一的 ip 地址,而路由器起到的功能就是對外提供唯一的一個公網(wǎng) ip饲趋,后者是指路由器給機器分配的 ip拐揭,內(nèi)網(wǎng) ip 的格式一般是 10.x.x.x、172.x.x.x奕塑、192.x.x.x堂污,而且在同一個內(nèi)網(wǎng)里的設(shè)備之間互相通訊不需要經(jīng)過路由器。
由于路由器下設(shè)備都共用一個公網(wǎng) ip龄砰,數(shù)據(jù)包在傳回的時候根據(jù)公網(wǎng) ip 能找到的設(shè)備只有路由器盟猖,所以需要路由器接受到數(shù)據(jù)包之后根據(jù)自己的記錄來決定數(shù)據(jù)包轉(zhuǎn)發(fā)給哪個設(shè)備讨衣。
路由功能的核心--NAT(Network Address Translation)
NAT 是一種通過包含路由功能的設(shè)備時對 ip 報文頭部的信息進行更新(更改 Source Address 或者 Destnation Address)的方式。 說到 NAT式镐,就需要從 ipv4 的報文結(jié)構(gòu)開始說起反镇。
表中展示的就是一個 ipv4 報文的結(jié)構(gòu),在這個場景下需要關(guān)心的只有 4 個 源地址(Source Address)娘汞、目的地址(Destination Address)歹茶、首部校驗和(CheckSum) 和 TTL(Time To Live)。
源地址:發(fā)出報文的 ip 地址
目的地址:接受報文的 ip 地址
首部校驗和:用于防止數(shù)據(jù)包內(nèi)容出錯進行校驗价说,每次經(jīng)過一個路由器更新的報文頭部的信息之后會重新計算一次辆亏。
TTL:是一個整數(shù),因為數(shù)據(jù)包在傳遞的時候需要經(jīng)過多次路由選擇鳖目,每經(jīng)過一次路由 TTL 都會減 1扮叨,減到 0 如果還沒有到達目的地址,該數(shù)據(jù)包會被丟棄领迈。
注:數(shù)據(jù)包從一個路由傳到下一個路由被稱作一跳(Hop)彻磁,這是一個無狀態(tài)的過程。這里的無狀態(tài)是指數(shù)據(jù)包的每一跳都由當前路由進行選擇狸捅,而且彼此之間獨立衷蜓,所以可能會出現(xiàn)同一個數(shù)據(jù)包在兩個路由之間來回傳遞的情況,該設(shè)計是為了防止數(shù)據(jù)包在兩個路由之間來回傳尘喝,導(dǎo)致耗盡兩個路由之間的資源磁浇。
前面說到公網(wǎng) ip 是唯一的,與之對應(yīng)的內(nèi)網(wǎng) ip 則不是唯一的(但是這里的不唯一是指在不同的內(nèi)網(wǎng)下不唯一朽褪,在同一個路由器下的所有設(shè)備里置吓,每個設(shè)備的內(nèi)網(wǎng) ip 也是唯一的)。
假設(shè)手機的 ip 是 192.168.1.30缔赠,路由器內(nèi)網(wǎng)側(cè)(LAN 側(cè))的 ip 是 192.168.1.1衍锚,外網(wǎng)側(cè)(WAN 側(cè))的 ip 是 125.23.3.2,想要跟 ip 為 123.1.13.3 的機器進行通訊嗤堰,那數(shù)據(jù)包經(jīng)過 NAT 進行傳輸?shù)倪^程可以簡化為下圖!從圖中可以很容易看出 NAT 的作用戴质,
- 在往外傳輸經(jīng)過路由的時候?qū)⒃吹刂愤M行更換
- 在數(shù)據(jù)往回傳輸經(jīng)過路由的時候,對目的地址進行更換
往返的這兩個過程分別稱為 SNAT 和 DNAT踢匣,其實就是對源地址的 NAT 和對目的地址的 NAT告匠。
路由器的交換機功能
路由器背后一般會有 1-N 個網(wǎng)線接口,一般會有其中一個顏色與其他的不同离唬。如果有 1 個網(wǎng)線接口凫海,那這個網(wǎng)線接口是 WAN 口(連接路由器和 Internet 的接口),其他的網(wǎng)線接口則是對內(nèi)提供交換機功能的 LAN 口(連接路由器和路由器下內(nèi)網(wǎng)的接口)男娄。
路由器的 LAN 和 WAN 之間是獨立的行贪,也就是說在 WAN 口不能用(無法訪問外網(wǎng))的情況下漾稀,仍然不會影響 LAN 口下各個設(shè)備之間的互相通訊。
如果家里有機器需要用路由器后面的網(wǎng)線接口建瘫,一定要確認自己插入的接口是百兆網(wǎng)口還是千兆網(wǎng)口崭捍,因為后面的接口可能速率有差。舉個例子來說啰脚,我家里用的聯(lián)通的光貓 + 路由器 + 交換機的一體機背后的 4 個 LAN 口只有第一個 LAN 口是千兆網(wǎng)口幸好我有千兆交換機殷蛇,其余全是百兆,使用的時候一定要看一下說明