title: 《計(jì)算機(jī)網(wǎng)絡(luò)》筆記-第4/5章網(wǎng)絡(luò)層
date: 2020-06-18 20:58:25
[TOC]
0. 前言
綜合第4章與第5章的網(wǎng)絡(luò)層钱烟,以及課上老師所講內(nèi)容蒂秘,與書(shū)本有較大不同。
在上一章中,曾提到運(yùn)輸層解決了進(jìn)程間的通信問(wèn)題傻昙。那么石挂,網(wǎng)絡(luò)層則解決了主機(jī)間的通信問(wèn)題。
在偌大的互聯(lián)網(wǎng)上蚓庭,網(wǎng)絡(luò)層會(huì)選擇一條最短路徑,將源主機(jī)的數(shù)據(jù)仅仆,經(jīng)過(guò)一步步的轉(zhuǎn)發(fā)器赞,交付給目的主機(jī)。
而這個(gè)過(guò)程墓拜,就像現(xiàn)在的物流寄件港柜,我們要如何將一份郵件或物品從發(fā)件地址郵寄到收件地址。
1. 網(wǎng)絡(luò)層概述
網(wǎng)絡(luò)層的主要協(xié)議為:IP協(xié)議。
網(wǎng)絡(luò)層傳輸單元為:數(shù)據(jù)報(bào)夏醉。
網(wǎng)絡(luò)層主要有兩種功能:
-
轉(zhuǎn)發(fā):
- 屬于網(wǎng)絡(luò)層數(shù)據(jù)平面爽锥。
- 將分組從一個(gè)數(shù)據(jù)報(bào)從輸入鏈路轉(zhuǎn)發(fā)到輸出鏈路,由路由器完成畔柔,時(shí)間尺度短氯夷,通常用硬件實(shí)現(xiàn)。
- 類(lèi)似于通過(guò)一個(gè)物流站點(diǎn)靶擦。
- 傳統(tǒng)的方法:基于目的地轉(zhuǎn)發(fā)(IP轉(zhuǎn)發(fā))腮考;現(xiàn)代的方法:通用轉(zhuǎn)發(fā)。
-
路由選擇:
- 屬于網(wǎng)絡(luò)層控制平面玄捕。
- 決定端到端的路徑踩蔚,時(shí)間尺度長(zhǎng),通常用軟件實(shí)現(xiàn)桩盲。
- 類(lèi)似于郵件從深圳到北京的行程規(guī)劃寂纪。
- 傳統(tǒng)的方法:路由選擇算法;現(xiàn)代的方法:SDN(軟件定義網(wǎng)絡(luò))赌结。
2. 網(wǎng)際協(xié)議 IP 及其相關(guān)
在進(jìn)行轉(zhuǎn)發(fā)和路由選擇之前捞蛋,我們必須解決一個(gè)重要問(wèn)題:如何標(biāo)識(shí)一臺(tái)主機(jī)?
主機(jī)的標(biāo)識(shí)就像郵寄單上的收件地址一樣柬姚。只有當(dāng)每個(gè)主機(jī)的標(biāo)識(shí)唯一時(shí)拟杉,才能將數(shù)據(jù)準(zhǔn)確地交付到目的地。
而這量承,就是IP協(xié)議中IP地址的作用搬设。
2.1. IPv4 編址
2.1.1. 接口
主機(jī)與物理鏈路之間的邊界叫做網(wǎng)絡(luò)接口(Interface,也叫網(wǎng)卡)撕捍。
主機(jī)通常只有一個(gè)網(wǎng)絡(luò)接口(也可能是兩個(gè):有線網(wǎng)接口和無(wú)線網(wǎng)接口)拿穴;而路由器由于是不同網(wǎng)絡(luò)間的交接中心,所以路由器至少需要與兩條網(wǎng)絡(luò)鏈路相連忧风,因此路由器擁有多個(gè)網(wǎng)絡(luò)接口默色。
從技術(shù)上講,一個(gè)IP地址與一個(gè)網(wǎng)絡(luò)接口(網(wǎng)卡)相關(guān)聯(lián)狮腿,而不是主機(jī)或路由器(可能是方便網(wǎng)絡(luò)管理)腿宰。比如:路由器通常有內(nèi)網(wǎng)接口和公網(wǎng)接口,而內(nèi)網(wǎng)接口和公網(wǎng)接口的IP地址是不相同的缘厢。
2.1.2. 點(diǎn)分十進(jìn)制記法
2.2. 劃分網(wǎng)絡(luò)
為了方便IP地址分類(lèi)管理吃度,我們通常將一定數(shù)量的主機(jī)組成一個(gè)子網(wǎng) / 網(wǎng)絡(luò)。
其好處是:
方便子網(wǎng)內(nèi)部管理贴硫。每個(gè)子網(wǎng)可以自由決定所使用的鏈路層網(wǎng)絡(luò)椿每、路由算法等。
網(wǎng)絡(luò)一般通過(guò)一個(gè)路由器與其它網(wǎng)絡(luò)相連,當(dāng)路由器要轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)時(shí)间护,只要將數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)到所屬的網(wǎng)絡(luò)即可删壮,再由所屬的網(wǎng)絡(luò)進(jìn)行分發(fā),使得路由器的轉(zhuǎn)發(fā)工作更加簡(jiǎn)單兑牡。我們可以類(lèi)比 郵編地址:南京市每個(gè)區(qū)都有特定的郵編地址,組成起來(lái)税灌,就是南京市郵編地址的“網(wǎng)絡(luò)”均函。若要轉(zhuǎn)發(fā) 目的地為南京市江寧區(qū) 的郵件,我們可以先將它轉(zhuǎn)發(fā)給南京市菱涤,再由南京市內(nèi)部進(jìn)行分發(fā)苞也。
那么如何來(lái)劃分網(wǎng)絡(luò)呢?從古至今粘秆,經(jīng)過(guò)了三步發(fā)展:
- 分類(lèi)的 IP 地址如迟。
- 子網(wǎng)的劃分。
- 無(wú)分類(lèi)編址方法 CIDR攻走。
2.2.1. 分類(lèi)的 IP 地址
將IP地址劃分為網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)殷勘。網(wǎng)絡(luò)號(hào)用于標(biāo)識(shí)網(wǎng)絡(luò),主機(jī)號(hào)用于標(biāo)識(shí)網(wǎng)絡(luò)中的主機(jī)昔搂。
如果兩個(gè)IP地址的網(wǎng)絡(luò)號(hào)部分相同玲销,則說(shuō)明它們都屬于同一個(gè)網(wǎng)絡(luò)。
總共有 A摘符、B贤斜、C、D逛裤、E 五種分類(lèi)方法瘩绒。A 類(lèi)常用于大型網(wǎng)絡(luò),B 類(lèi)常用于中型带族,C 類(lèi)則用于小型锁荔,D、E 類(lèi)特殊用途炉菲。
注:網(wǎng)絡(luò)號(hào)不能全為0堕战,所以A類(lèi)網(wǎng)絡(luò)的網(wǎng)絡(luò)數(shù)需要減多一個(gè) 1 ;主機(jī)號(hào)不能全為0拍霜,也不能全為1嘱丢,所以C類(lèi)網(wǎng)絡(luò)中主機(jī)數(shù)為 。
以下是分類(lèi) IP 地址的一些示例:
2.2.2. 劃分子網(wǎng)
由于分類(lèi)的 IP 地址中祠饺,某類(lèi)網(wǎng)絡(luò)所擁有的主機(jī)數(shù)是固定的越驻,所以有時(shí)候會(huì)覺(jué)得C類(lèi)地址中主機(jī)數(shù)太少,有時(shí)候又會(huì)覺(jué)得B類(lèi)地址中主機(jī)數(shù)太多。
為此缀旁,又提出從主機(jī)號(hào)中劃分出子網(wǎng)號(hào)记劈,使得兩級(jí) IP 地址變成了三級(jí) IP 地址。而且并巍,子網(wǎng)號(hào)的長(zhǎng)度是可變的:
但新的問(wèn)題出現(xiàn)了目木,由于子網(wǎng)號(hào)可變,那如何從一個(gè)IP地址中區(qū)分出子網(wǎng)號(hào)呢懊渡?
子網(wǎng)掩碼刽射!子網(wǎng)掩碼長(zhǎng)度為32位,左邊連續(xù)且全為 1 的部分對(duì)應(yīng)網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)剃执,右邊連續(xù)且全為 0 的部分對(duì)應(yīng)主機(jī)號(hào)誓禁。當(dāng)用子網(wǎng)掩碼與 IP 地址進(jìn)行 與運(yùn)算 后,便可以得到子網(wǎng)號(hào)肾档。
另外摹恰,子網(wǎng)掩碼是由子網(wǎng)提供的,并會(huì)記錄在路由器的路由表中:
2.2.3. 無(wú)分類(lèi)編址 CIDR
隨著時(shí)代的發(fā)展怒见,人們發(fā)現(xiàn)了更好的 無(wú)分類(lèi)域間路由選擇 CIDR 方法俗慈。
- 它消除了傳統(tǒng)的A、B速种、C類(lèi)地址和劃分子網(wǎng)的概念姜盈;
- 采用變長(zhǎng)的子網(wǎng)掩碼,可以靈活地分配網(wǎng)絡(luò)號(hào)配阵;
- 并且網(wǎng)絡(luò)可以進(jìn)行嵌套馏颂;
- IP 地址也從三級(jí)編址回到了兩級(jí)編址姆另。
補(bǔ)充說(shuō)明:
- CIDR 中享钞,網(wǎng)絡(luò)前綴相當(dāng)于此前的網(wǎng)絡(luò)號(hào)建车,只是現(xiàn)在的網(wǎng)絡(luò)號(hào)是變長(zhǎng)的闻镶;
- CIDR 采用 a.b.c.d/x 的記法來(lái)表示 IP 地址即寡,斜杠
/
之后的x
表示子網(wǎng)掩碼中 1 的個(gè)數(shù)陕赃,用來(lái)指明網(wǎng)絡(luò)前綴的長(zhǎng)度鼠锈。
CIDR 實(shí)踐:
-
路由聚合(route aggregation)岭粤。如下圖麸拄,
Fly-By-Night-ISP
內(nèi)部有 8 個(gè)自組織派昧,每個(gè)組織都有自己的子網(wǎng)。通過(guò) CIDR 編址拢切,外界只需要將所有 IP 地址前 20 比特與200.23.16.0/20
相符的數(shù)據(jù)報(bào)蒂萎,發(fā)送到該 ISP 即可,而不需要知道該 ISP 內(nèi)還存在 8 個(gè)其它組織淮椰。
- 最長(zhǎng)前綴匹配五慈。使用 CIDR 時(shí)纳寂,路由器路由表的每一項(xiàng)由網(wǎng)絡(luò)前綴和對(duì)應(yīng)的輸出鏈路組成。當(dāng)根據(jù) IP 地址查找路由表時(shí)泻拦,可能會(huì)匹配多個(gè)網(wǎng)絡(luò)前綴毙芜,則應(yīng)當(dāng)從匹配結(jié)果中選出最長(zhǎng)的網(wǎng)絡(luò)前綴。
2.3. IPv4 數(shù)據(jù)報(bào)格式
- 版本:IP協(xié)議版本争拐。
- 首部長(zhǎng)度:大多數(shù)IP數(shù)據(jù)報(bào)的首部不包含可變部分腋粥,所以一般的IP數(shù)據(jù)報(bào)首部長(zhǎng)度為20字節(jié)。
- 服務(wù)類(lèi)型(區(qū)分服務(wù)):將用于不同服務(wù)的IP數(shù)據(jù)報(bào)區(qū)分開(kāi)來(lái)架曹。例如灯抛,將實(shí)時(shí)數(shù)據(jù)報(bào)(IP電話(huà)應(yīng)用)和非實(shí)時(shí)數(shù)據(jù)報(bào)(FTP)區(qū)分。
- 數(shù)據(jù)報(bào)長(zhǎng)度(總長(zhǎng)度):整個(gè)IP數(shù)據(jù)報(bào)長(zhǎng)度音瓷,以字節(jié)為單位。16位夹抗,理論上最大長(zhǎng)度為65535字節(jié)绳慎,但受限于鏈路層最大幀長(zhǎng)度MTU,一般不超過(guò)1500字節(jié)漠烧。
- 標(biāo)識(shí)杏愤、標(biāo)志、片偏移:這三個(gè)字段與IP分片有關(guān)已脓,將馬上討論珊楼。
- 壽命(TTL,生存時(shí)間):用來(lái)保證數(shù)據(jù)報(bào)不會(huì)永遠(yuǎn)在網(wǎng)絡(luò)中死循環(huán)度液,每經(jīng)過(guò)一臺(tái)路由器時(shí)厕宗,該字段的值減1,若減為0堕担,則該數(shù)據(jù)報(bào)必須丟棄已慢。
- 協(xié)議:指定交給哪個(gè)運(yùn)輸層協(xié)議。
- 首部校驗(yàn)和:用于檢測(cè)數(shù)據(jù)報(bào)首部是否出現(xiàn)比特差錯(cuò)霹购。
- 源和目的IP地址:用于標(biāo)識(shí)源主機(jī)IP佑惠,和目的主機(jī)IP。
- 可變部分:通常沒(méi)被使用齐疙。
- 數(shù)據(jù):可以是要交付給目的地的運(yùn)輸層報(bào)文段膜楷,也可以是其它類(lèi)型數(shù)據(jù),比如ICMP報(bào)文贞奋。
2.4. IPv4 數(shù)據(jù)報(bào)分片
受限于 鏈路層最大幀長(zhǎng)度 MTU 影響(以太網(wǎng)幀不能超過(guò)1500字節(jié)赌厅、某些廣域網(wǎng)鏈路不能超過(guò)576字節(jié)),IP 數(shù)據(jù)報(bào)過(guò)大時(shí)忆矛,需要對(duì) IP 數(shù)據(jù)報(bào)進(jìn)行分片:將原數(shù)據(jù)報(bào)中的數(shù)據(jù)部分分成恰好的幾部分察蹲,對(duì)每一部分?jǐn)?shù)據(jù)都加上 IP 首部请垛,組成幾個(gè)新的 IP 數(shù)據(jù)報(bào)。
IP 數(shù)據(jù)報(bào)分片依托于首部的標(biāo)識(shí)洽议、標(biāo)志宗收、片偏移字段:
- 標(biāo)識(shí):產(chǎn)生 IP 數(shù)據(jù)報(bào)的標(biāo)識(shí),用于區(qū)分不同的分片數(shù)據(jù)報(bào)亚兄,是屬于哪個(gè)原始數(shù)據(jù)報(bào)混稽。
-
標(biāo)志:3字節(jié),目前只有后兩位有意義审胚,最低位是MF(More Fragment)匈勋,中間位是DF(Don't Fragment)。
MF = 1
表示后面還有分片膳叨,MF = 0
表示最后一個(gè)分片洽洁,DF = 0
表示允許分片。 - 片偏移:表示這個(gè)分片在原始數(shù)據(jù)報(bào)中的位置菲嘴,以8字節(jié)為單位饿自。
示例:
注意:在第3章中提到,TCP為了防止IP分片龄坪,會(huì)先一步進(jìn)行分段昭雌。
2.5. DHCP
我們知道,劃分網(wǎng)絡(luò)是為了各種各樣的組織更好地管理網(wǎng)絡(luò)健田。當(dāng)某個(gè)組織(比如學(xué)校烛卧、公司等)申請(qǐng)入網(wǎng)后,相關(guān)機(jī)構(gòu)會(huì)給組織分配一個(gè)子網(wǎng)絡(luò)(也就是一系列IP地址)妓局,組織可以自由地分配這一些列IP地址总放。
從前,這項(xiàng)工作通常由組織的管理員手動(dòng)為每臺(tái)主機(jī)和路由器配置好爬。但如今间聊,更多的是使用 動(dòng)態(tài)主機(jī)配置協(xié)議(Dynamic Host Configuration Protocol,DHCP) 來(lái)完成:
- DHCP 允許主機(jī)自動(dòng)獲取IP地址抵拘;
- 可以通過(guò)配置哎榴,使得同一臺(tái)主機(jī)每次聯(lián)網(wǎng)時(shí),既能得到一個(gè)相同的IP地址僵蛛,也可以被分配到一個(gè)臨時(shí)的IP地址尚蝌;
- 除了主機(jī)IP地址分配外,DHCP還會(huì)告知主機(jī) 子網(wǎng)掩碼充尉、默認(rèn)網(wǎng)關(guān)飘言、默認(rèn)DNS 等信息。
它也常常被稱(chēng)為即插即用協(xié)議或零配置協(xié)議驼侠。
DHCP 為聯(lián)網(wǎng)主機(jī)分配IP地址的過(guò)程為:
DHCP 服務(wù)器發(fā)現(xiàn):一臺(tái)剛聯(lián)網(wǎng)的主機(jī)姿鸿,會(huì)向網(wǎng)絡(luò)中發(fā)送一個(gè) DHCP 發(fā)現(xiàn)報(bào)文(DHCP discover message)谆吴,這是一個(gè)由 67 號(hào)端口發(fā)送的 UDP 報(bào)文。該報(bào)文的 目的地址 為 255.255.255.255(IP 地址全 1 表示廣播地址苛预,會(huì)發(fā)送給當(dāng)前子網(wǎng)絡(luò)中的所有主機(jī))句狼,源地址 為 0.0.0.0(主機(jī)還不知道它的地址) 。
DHCP 服務(wù)器提供:網(wǎng)絡(luò)中的 DHCP 服務(wù)器收到一個(gè) DHCP 發(fā)現(xiàn)報(bào)文后热某,會(huì)用 DHCP 提供報(bào)文(DHCP offer message) 進(jìn)行響應(yīng)腻菇。報(bào)文的目的地址依然是 255.255.255.255,但同時(shí)報(bào)文中包含對(duì)應(yīng) DHCP 發(fā)現(xiàn)報(bào)文的事務(wù)ID昔馋、向用戶(hù)推薦的IP地址筹吐、網(wǎng)絡(luò)掩碼和IP地址有效期等。
DHCP 請(qǐng)求:由于一個(gè)網(wǎng)絡(luò)中可能存在多個(gè) DHCP 服務(wù)器秘遏,用戶(hù)會(huì)從多個(gè) DHCP 提供報(bào)文中選擇一個(gè)丘薛,并發(fā)送 DHCP 請(qǐng)求報(bào)文(DHCP request message) 響應(yīng)對(duì)應(yīng)的 DHCP 服務(wù)器(你就天選之子>.<)。
DHCP ACK:DHCP 服務(wù)會(huì)對(duì) DHCP 請(qǐng)求報(bào)文進(jìn)行響應(yīng)邦危。
2.6. NAT
從前面的介紹中榔袋,我們知道:每個(gè)聯(lián)網(wǎng)設(shè)備都會(huì)分配一個(gè)唯一的IP地址。但是铡俐,隨著互聯(lián)網(wǎng)的爆發(fā),入網(wǎng)設(shè)備激增妥粟,剩余 IP 地址越來(lái)越少审丘。
同時(shí),越來(lái)越多的小型子網(wǎng)(家庭網(wǎng)絡(luò)勾给、小型辦公室)涌現(xiàn)滩报。如果這些子網(wǎng)想要聯(lián)網(wǎng),ISP 則需要分配一組地址給該子網(wǎng)的所有聯(lián)網(wǎng)設(shè)備播急。如果某天這個(gè)子網(wǎng)變大了脓钾,ISP 可能得分配一塊較大的連續(xù)地址,但這組地址后的連續(xù)地址都被占有了桩警,這該怎么辦呢可训?ISP 管理這些子網(wǎng)顯得十分繁瑣。而且捶枢,家庭的主人還需要知道 IP 地址管理經(jīng)典方法握截。
幸運(yùn)的是,一個(gè)簡(jiǎn)單的方法被用來(lái)解決這個(gè)問(wèn)題烂叔,那就是 網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation, NAT) ——它將這些子網(wǎng)指定為專(zhuān)用網(wǎng)絡(luò)谨胞,專(zhuān)用網(wǎng)絡(luò)中可以自主分配專(zhuān)用地址。
在介紹 NAT 之前蒜鸡,不知道細(xì)心的同學(xué)們有沒(méi)有發(fā)現(xiàn)一個(gè)現(xiàn)象:不管你電腦連接的是家庭網(wǎng)絡(luò)胯努、學(xué)校網(wǎng)絡(luò)牢裳、還是手機(jī)熱點(diǎn),電腦的 IP 地址經(jīng)常都是 192.168.x.x
叶沛,甚至有時(shí)候還是相同的蒲讯。
為什么會(huì)這么巧呢?這就是 NAT 在背后作祟恬汁。
以家庭網(wǎng)絡(luò)為例:
- 每個(gè)家庭都會(huì)有至少一個(gè)路由器伶椿,與路由器相連的家庭設(shè)備都處于同一個(gè)子網(wǎng)中,這個(gè)子網(wǎng)就是私有網(wǎng)絡(luò)(也可以稱(chēng)作內(nèi)網(wǎng)/LAN)氓侧。
- 而路由器另一端所連接的互聯(lián)網(wǎng)脊另,通常稱(chēng)為公網(wǎng)/WAN。
- 因此约巷,路由器擁有兩個(gè) IP 地址(一個(gè)網(wǎng)絡(luò)接口對(duì)應(yīng)一個(gè) IP 地址)偎痛,內(nèi)網(wǎng) IP 和公網(wǎng) IP 。
- NAT 則被設(shè)置在這臺(tái)路由器上独郎。當(dāng)內(nèi)網(wǎng)設(shè)備訪問(wèn)公網(wǎng)的數(shù)據(jù)報(bào)經(jīng)過(guò)這臺(tái) NAT 路由器時(shí)踩麦,NAT 路由器會(huì)將數(shù)據(jù)報(bào)中的源 IP 地址改成自己的公網(wǎng) IP 地址,以及將源端口號(hào)更改為自己的端口號(hào)氓癌,并把映射關(guān)系記錄在 NAT 轉(zhuǎn)換表 上谓谦。
- 當(dāng)收到公網(wǎng)的響應(yīng)數(shù)據(jù)報(bào)時(shí),NAT 路由器會(huì)從 NAT 轉(zhuǎn)換表上找映射關(guān)系贪婉,這次則將數(shù)據(jù)報(bào)中的目的 IP 地址和目的端口號(hào)反粥,改為對(duì)應(yīng)內(nèi)網(wǎng)主機(jī)的 IP 地址和端口號(hào)。
在外界看來(lái)疲迂,NAT 路由器就像一個(gè)具有單一 IP 地址的單一設(shè)備才顿,它隱藏了家庭網(wǎng)絡(luò)的細(xì)節(jié)。所有離開(kāi)家庭網(wǎng)絡(luò)流向公網(wǎng)的報(bào)文都擁有同一個(gè)源 IP 地址尤蒿,而所有進(jìn)入家庭網(wǎng)絡(luò)的報(bào)文都擁有同一個(gè)目的 IP 地址郑气。
憑借著 NAT 協(xié)議,N 個(gè)主機(jī)可以擁有任意內(nèi)網(wǎng) IP 腰池,而在外界看來(lái)就只有一個(gè)公網(wǎng) IP 地址(由于端口號(hào)字段為 16 比特尾组,所以 NAT 路由器可支持超過(guò) 60000 個(gè)的連接)。如此往后示弓,ISP 再也不用操心子網(wǎng) IP 地址分配的問(wèn)題演怎,家庭子網(wǎng)的主人也不需要掌握管理子網(wǎng)的方法了,這都可以由家庭路由器統(tǒng)一自動(dòng)分配管理避乏。
雖然 NAT 既簡(jiǎn)單又好用爷耀,但也存在著幾個(gè)問(wèn)題:
- 內(nèi)網(wǎng) IP 與公網(wǎng) IP 沖突問(wèn)題。
由于內(nèi)網(wǎng)中所有的 IP 地址經(jīng)過(guò) NAT 路由器后拍皮,都會(huì)變成 NAT 路由器的公網(wǎng) IP 地址歹叮,所以?xún)?nèi)網(wǎng)中的 IP 地址可以任意分配跑杭。但是,如果一個(gè) IP 地址即存在于內(nèi)網(wǎng)又存在于公網(wǎng)咆耿,NAT 路由器要如何轉(zhuǎn)發(fā)呢德谅?
為了避免這個(gè)矛盾的出現(xiàn),互聯(lián)網(wǎng)規(guī)定三類(lèi) IP 地址塊(地址范圍)為專(zhuān)用地址萨螺,只能用于專(zhuān)用網(wǎng)絡(luò)(也就是內(nèi)網(wǎng))不能出現(xiàn)在公網(wǎng)上窄做,分別是:10.0.0.0 ~ 10.255.255.255
、172.16.0.0 ~ 172.31.255.255
慰技、192.168.0.0 ~ 192.168.255.255
(所以椭盏,我們經(jīng)常見(jiàn)到電腦的 IP 地址為 192.168.x.x
,其實(shí)這就是一個(gè)內(nèi)網(wǎng) IP )吻商。
- 內(nèi)網(wǎng)IP無(wú)法被外部主機(jī)訪問(wèn)掏颊。
由于 NAT 路由器把內(nèi)網(wǎng)隱藏了,而且內(nèi)網(wǎng) IP 也不會(huì)出現(xiàn)在公網(wǎng)上艾帐。如果一臺(tái)主機(jī)想要被外部主機(jī)訪問(wèn)乌叶,則需要申請(qǐng)公網(wǎng) IP,而這只能向相關(guān)運(yùn)營(yíng)商購(gòu)買(mǎi)柒爸。如果實(shí)在想訪問(wèn)內(nèi)網(wǎng)主機(jī)准浴,可以采用內(nèi)網(wǎng)穿透等方法。
- 路由器作為網(wǎng)絡(luò)層設(shè)備捎稚,卻修改應(yīng)用層的端口號(hào)乐横,不符合體系結(jié)構(gòu)。
但隨著 NAT 的流行阳藻,這種反對(duì)的聲音也漸漸變小。
2.7. VPN
上文提到谈撒,NAT 協(xié)議能夠方便地管理專(zhuān)用網(wǎng)絡(luò)腥泥,但其中一個(gè)問(wèn)題就是專(zhuān)用網(wǎng)絡(luò)(內(nèi)網(wǎng))中的主機(jī)是不可訪問(wèn)的。有些機(jī)構(gòu)在使用 NAT 的同時(shí)啃匿,又想從外部訪問(wèn)內(nèi)網(wǎng)的主機(jī)蛔外,那要怎么辦呢?
申請(qǐng)公網(wǎng) IP 溯乒?但問(wèn)題是夹厌,機(jī)構(gòu)申請(qǐng)到的公網(wǎng) IP 數(shù)量往往是有限;而且由于互聯(lián)網(wǎng)的不安全性裆悄,一個(gè)機(jī)構(gòu)也不想把部分主機(jī)接入互聯(lián)網(wǎng)矛纹。
為了解決從外部網(wǎng)絡(luò)訪問(wèn)內(nèi)網(wǎng)主機(jī)的問(wèn)題,虛擬專(zhuān)用網(wǎng)絡(luò)(Virtual Private Network光稼,VPN) 被提出來(lái)了或南。說(shuō)到 VPN 孩等,很多老司機(jī)們應(yīng)該再清楚不過(guò)了:) 科學(xué)上網(wǎng)的必備工具,此刻我們就來(lái)見(jiàn)識(shí)一下 VPN 奧妙采够。
VPN 可以將相隔著公網(wǎng)的兩個(gè)專(zhuān)用網(wǎng)絡(luò)連接起來(lái)肄方,就好像一個(gè)專(zhuān)用網(wǎng)絡(luò)一樣(實(shí)際上并不是),所以稱(chēng)為虛擬專(zhuān)用網(wǎng)絡(luò)蹬癌。那它是如何實(shí)現(xiàn)的呢权她?
首先,購(gòu)買(mǎi) VPN 的機(jī)構(gòu)逝薪,必須在通信的兩端進(jìn)行相關(guān)配置隅要,相互之間必須知道對(duì)方的地址。
其次翼闽,專(zhuān)用網(wǎng)絡(luò)之間的通信必須經(jīng)過(guò)公網(wǎng)拾徙,為了保密要求,VPN 還必須對(duì)所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密感局。
-
最后尼啡,利用 隧道 技術(shù)進(jìn)行傳輸。隧道技術(shù)其實(shí)就一個(gè)包裝询微、拆包的過(guò)程:內(nèi)網(wǎng) A 中主機(jī) X 發(fā)送給內(nèi)網(wǎng) B 中主機(jī) Y 的數(shù)據(jù)報(bào)崖瞭,到達(dá)出口路由器后,會(huì)將數(shù)據(jù)報(bào)進(jìn)行加密撑毛,并再套上一個(gè) IP 首部书聚,以?xún)?nèi)網(wǎng) B 中入口路由器的公網(wǎng) IP 地址為目的地址;到達(dá)內(nèi)網(wǎng) B 的入口路由器后藻雌,會(huì)取出數(shù)據(jù)部分進(jìn)行解密雌续,并轉(zhuǎn)發(fā)到內(nèi)網(wǎng),最終到達(dá)主機(jī) Y 胯杭。
2.8. IPv6
雖然 NAT 一定程度上也擴(kuò)充了互聯(lián)網(wǎng)中聯(lián)網(wǎng)設(shè)備的容量驯杜,但公網(wǎng) IP 的數(shù)量還是受 IPv4 地址的限制,IPv4 地址只有 32 位做个,總共才 個(gè)鸽心。隨著互聯(lián)網(wǎng)驚人的增長(zhǎng),公網(wǎng) IP 也即將耗盡居暖。
為了避免耗盡情況的出現(xiàn)顽频,一種新的 IP 協(xié)議被提出——IPv6。
IPv6 將 IP 地址長(zhǎng)度從 32 比特增加到了 128 比特√耄現(xiàn)在糯景,地球上的每個(gè)沙礫都可以用 IP 地址尋址了。
IPv6 數(shù)據(jù)報(bào)格式如下:
其最重要的幾大新增改變如下:
- 首先,擴(kuò)大的地址容量莺奸,IP 地址從32位比特增加到128比特丑孩。
- 其次,首部簡(jiǎn)化為40字節(jié)灭贷。
- 同時(shí)温学,提供流服務(wù),流是提供某些特殊服務(wù)所使用的甚疟,比如音頻視頻等仗岖。
但幾個(gè) IPv4 中的字段和功能在 IPv6 數(shù)據(jù)報(bào)中也不復(fù)存在了:
- 取消分片。IPv6 不允許在中間路由器上進(jìn)行分片與重新組裝览妖,這種操作只能在源和目的地執(zhí)行轧拄。如果路由器收到的 IPv6 數(shù)據(jù)報(bào)因太大而不能轉(zhuǎn)發(fā)到輸出鏈路上的話(huà),路由器會(huì)丟棄該數(shù)據(jù)報(bào)讽膏,并向發(fā)送方發(fā)送一個(gè)“分組太大”的 ICMP 差錯(cuò)報(bào)文檩电。于是,發(fā)送方將使用較小長(zhǎng)度的 IP 數(shù)據(jù)報(bào)重發(fā)府树。
- 刪除首部校驗(yàn)和字段俐末。由于運(yùn)輸層和數(shù)據(jù)鏈路層協(xié)議中都包含了校驗(yàn)操作,所以 IP 設(shè)計(jì)者覺(jué)得網(wǎng)絡(luò)層再具有該功能實(shí)屬多余奄侠。
- 刪除選項(xiàng)字段卓箫。IPv6 首部中,選項(xiàng)字段已經(jīng)不復(fù)存在了垄潮。但它并沒(méi)有消失烹卒,而是可能出現(xiàn)在 IPv6 首部的“下一個(gè)首部”字段所指出的位置上。當(dāng)然弯洗,通常情況下旅急,“下一個(gè)首部”字段指的是 TCP 或 UDP 首部。
雖然 IPv6 被設(shè)計(jì)出來(lái)牡整,但已部署 IPv4 的系統(tǒng)卻不能夠處理 IPv6 數(shù)據(jù)報(bào)藐吮,如何從 IPv4 遷移到 IPv6 是當(dāng)下的大問(wèn)題。
其中一個(gè)遷移方法便是 建隧道(tunneling):
假設(shè)兩個(gè) IPv6 節(jié)點(diǎn)使用 IPv6 數(shù)據(jù)報(bào)進(jìn)行交互果正,中間經(jīng)過(guò) IPv4 路由器炎码,那么我們可以把中間 IPv4 路由器的集合稱(chēng)為一個(gè) 隧道盟迟。當(dāng) IPv6 數(shù)據(jù)報(bào)要進(jìn)入隧道時(shí)秋泳,可以用 IPv4 數(shù)據(jù)報(bào)包裹起來(lái),出隧道時(shí)攒菠,再取出迫皱。其過(guò)程如下:
2.9. ICMP
在上文中提到,ICMP 報(bào)文可以被 IPv6 用來(lái)告知發(fā)送方數(shù)據(jù)報(bào)過(guò)大,但I(xiàn)CMP的作用不止于此卓起。
因特網(wǎng)控制報(bào)文協(xié)議 ICMP [RFC 792]和敬,被主機(jī)和路由器用來(lái)彼此溝通網(wǎng)絡(luò)層信息的協(xié)議。
其報(bào)文格式如下:
由圖可知戏阅,ICMP 報(bào)文類(lèi)似于 TCP昼弟、UDP ,它也是被 IP 數(shù)據(jù)報(bào)所包裹的奕筐。
根據(jù)首部類(lèi)型字段和代碼字段的不同舱痘,ICMP 報(bào)文有著不同的功能,常見(jiàn)的如下:
ICMP 最貼近我們的應(yīng)用离赫,便是 ping 程序和 Traceroute 程序了芭逝。眾所周知的 ping 程序便是發(fā)送一個(gè)類(lèi)型 8 編碼 0 的 ICMP 報(bào)文,目的主機(jī)返回一個(gè)類(lèi)型 0 編碼 0 的 ICMP 響應(yīng)報(bào)文渊胸。
Windows 下實(shí)驗(yàn) traceroute旬盯,打開(kāi) cmd ,輸入指令:
> tracert baidu.com
3. 路由器結(jié)構(gòu)與轉(zhuǎn)發(fā)
路由器是網(wǎng)絡(luò)層中重要的設(shè)備翎猛。它用于連接不同的網(wǎng)絡(luò)胖翰,并在不同網(wǎng)絡(luò)間轉(zhuǎn)發(fā)分組,同時(shí)也具備路由選擇的功能办成。
路由器結(jié)構(gòu)如下:
-
輸入端口泡态。輸入端口包含物理層、鏈路層迂卢、網(wǎng)絡(luò)層處理模塊某弦。物理層模塊負(fù)責(zé)接收處理物理信號(hào);鏈路層模塊負(fù)責(zé)去掉幀首部和尾部而克;網(wǎng)絡(luò)層模塊負(fù)責(zé)進(jìn)行查表靶壮、轉(zhuǎn)發(fā)、排隊(duì)進(jìn)入交換結(jié)構(gòu)员萍。
其中腾降,查表和轉(zhuǎn)發(fā)是輸入端口的核心功能。
- 以傳統(tǒng)的基于目的地轉(zhuǎn)發(fā)為例:查表主要是根據(jù)分組目的地址的前綴碎绎,在轉(zhuǎn)發(fā)表(由路由選擇處理器提供螃壤,可以看作路由表)中查找匹配項(xiàng)(此處會(huì)用到前面提到的最長(zhǎng)前綴匹配規(guī)則);轉(zhuǎn)發(fā)則是根據(jù)查表結(jié)果筋帖,將分組送入交換結(jié)構(gòu)中奸晴,轉(zhuǎn)發(fā)到對(duì)應(yīng)輸出鏈路;如果交換結(jié)構(gòu)正繁忙日麸,分組還需要排隊(duì)等候寄啼。
- 而更高級(jí)的通用轉(zhuǎn)發(fā),則采用“匹配加動(dòng)作”的抽象方式。
-
交換結(jié)構(gòu)墩划。經(jīng)過(guò)交換結(jié)構(gòu)涕刚,分組才能從一個(gè)輸入端口交換到一個(gè)輸出端口。交換結(jié)構(gòu)可以用多種形式乙帮,分別是 經(jīng)內(nèi)存交換杜漠、經(jīng)總線交換、經(jīng)互聯(lián)網(wǎng)絡(luò)交換(縱橫式)察净,如下:
-
輸出端口碑幅。將隊(duì)列中的分組發(fā)送到輸出鏈路上。
路由選擇器塞绿。路由選擇算法運(yùn)行之處(后面會(huì)詳細(xì)講解路由選擇算法)沟涨。
4. 路由選擇算法
路由選擇算法,其目的是從發(fā)送方到接收方的網(wǎng)絡(luò)中异吻,選擇一條最短路徑(即網(wǎng)絡(luò)最好最快的一條路)裹赴。
究其本質(zhì),就是圖的最短路徑問(wèn)題诀浪。而解決該問(wèn)題的經(jīng)典算法棋返,想必讀者在數(shù)據(jù)結(jié)構(gòu)或算法課上都學(xué)過(guò),即Dijkstra雷猪、Bellman-Ford和Floyd等睛竣。
根據(jù)路由選擇算法的差異,有不同的分類(lèi)求摇。接下來(lái)將介紹幾種分類(lèi)射沟,第一種常用分類(lèi):
- 集中式路由選擇算法(centralized routing algorithm),用完整的与境、全局性的網(wǎng)絡(luò)信息計(jì)算出最短路徑验夯,也常被稱(chēng)作鏈路狀態(tài)( link-state,LS)算法摔刁。
- 分散式路由選擇算法(decentralized routing algorithm)挥转,以迭代、分布式的方式計(jì)算出最短路徑共屈,也常被稱(chēng)作距離向量(distance-vector绑谣,DV)算法。
第二種廣義分類(lèi):靜態(tài)路由選擇算法拗引;動(dòng)態(tài)路由選擇算法借宵。第三種分類(lèi):負(fù)載敏感算法;負(fù)載遲鈍算法寺擂。
4.1. 鏈路狀態(tài)路由選擇算法
鏈路狀態(tài)路由選擇算法中暇务,網(wǎng)絡(luò)拓?fù)浜退墟溌烽_(kāi)銷(xiāo)情況都是已知的,都作為 LS 算法的輸入僵控。實(shí)踐中窖梁,這些信息是讓每個(gè)節(jié)點(diǎn)向網(wǎng)絡(luò)中其它節(jié)點(diǎn)廣播鏈路狀態(tài)分組來(lái)完成的浅碾,分組中包含它所連接鏈路的標(biāo)識(shí)和開(kāi)銷(xiāo)等信息。
LS 算法的本質(zhì)其實(shí)是大名鼎鼎的 Dijkstra 算法括改。在我另一篇文章 圖的最短路徑算法 中,我已經(jīng)詳細(xì)介紹了 Dijkstra 算法的過(guò)程家坎,在此就不再贅述了嘱能。
LS 算法運(yùn)行過(guò)程示例如下。其中虱疏, 表示到本次迭代惹骂,從源節(jié)點(diǎn)到 節(jié)點(diǎn)的最短路徑的開(kāi)銷(xiāo); 表示最短路徑中 的前一個(gè)節(jié)點(diǎn):
Dijkstra 算法的時(shí)間復(fù)雜度為 做瞪,相對(duì)較優(yōu)对粪,但也存在著一些問(wèn)題:實(shí)踐中,鏈路開(kāi)銷(xiāo)是非對(duì)稱(chēng)的装蓬,也就是 u 點(diǎn)到 v 點(diǎn)的開(kāi)銷(xiāo)與 v 點(diǎn) u 點(diǎn)的開(kāi)銷(xiāo)是不相同的著拭。同時(shí),鏈路開(kāi)銷(xiāo)也是會(huì)變化的牍帚。當(dāng)多個(gè)路由選擇同一個(gè)時(shí)針?lè)较驎r(shí)儡遮,該方向上的開(kāi)銷(xiāo)就會(huì)非常大,但反方向的開(kāi)銷(xiāo)相對(duì)較邪蹈稀鄙币;此時(shí),多個(gè)路由可能同時(shí)改成反方向蹂随,而如此反方向開(kāi)銷(xiāo)劇增爱榔,正方向劇降;并進(jìn)入反復(fù)橫跳的循環(huán)中糙及。
這種現(xiàn)象被稱(chēng)為振蕩详幽。有一種解決方法是:確保所有路由器不同時(shí)運(yùn)行 LS 算法。
4.2. 距離向量路由選擇算法
DV 算法是一種迭代浸锨、分布式的算法唇聘。它的本質(zhì)是 Bellman-Ford 算法,即:
DV 算法實(shí)際運(yùn)行過(guò)程如下:
-
每個(gè)節(jié)點(diǎn)(節(jié)點(diǎn)=路由器) 需要維護(hù)一些路由信息:
- 對(duì)于每個(gè)鄰居 迟郎,從 直接到鄰居 的開(kāi)銷(xiāo)為
- 節(jié)點(diǎn) 的距離向量集,即 聪蘸,包含 到 中任意其它節(jié)點(diǎn) 的最小開(kāi)銷(xiāo)估計(jì)值(最短路徑)宪肖。
- 同時(shí)表制,會(huì)記錄選擇某條最短路徑時(shí)的下一跳節(jié)點(diǎn) ,即 最小時(shí)的 控乾。
每個(gè)節(jié)點(diǎn)還需不時(shí)地向它的每個(gè)鄰居發(fā)送它的距離向量么介。當(dāng)節(jié)點(diǎn) 從它的任何一個(gè)鄰居 接收到新的距離向量時(shí),它將保持 的距離向量蜕衡,然后使用 方程更新自己的距離向量壤短。
如果節(jié)點(diǎn) 的距離向量因步驟2而更新,那么它會(huì)向所有鄰居發(fā)送它更新后的距離向量慨仿。
示例如下:
注意在第2列中久脯, 節(jié)點(diǎn)的距離向量沒(méi)有更新,因此節(jié)點(diǎn) 沒(méi)有發(fā)送更新镰吆。
現(xiàn)在帘撰,我們需要考慮一些特殊情況:鏈路開(kāi)銷(xiāo)改變與鏈路故障。
當(dāng)鏈路開(kāi)銷(xiāo)減小時(shí):
當(dāng)鏈路開(kāi)銷(xiāo)增加時(shí):
從上述過(guò)程万皿,我們可以看出:該循環(huán)將持續(xù)44次迭代(在 與 之間)骡和,直到 算出它經(jīng)由 的路徑開(kāi)銷(xiāo)大于50。這個(gè)問(wèn)題被稱(chēng)為無(wú)窮計(jì)數(shù)問(wèn)題相寇。
一種毒性逆轉(zhuǎn)的方法可用于解決該問(wèn)題慰于,但并不具有一般性。
4.3. LS 與 DV 的比較與應(yīng)用
設(shè) 是節(jié)點(diǎn)集唤衫, 是鏈路集婆赠。比較:
傳播開(kāi)銷(xiāo)。當(dāng)鏈路開(kāi)銷(xiāo)改變時(shí)佳励,LS 必須向所有節(jié)點(diǎn)廣播新的鏈路開(kāi)銷(xiāo)休里,需要發(fā)送 ;而 DV 只需向鄰近節(jié)點(diǎn)傳播赃承。
收斂(得到正確結(jié)果)速度妙黍。LS 算法為 ;而 DV 算法收斂較慢瞧剖,且會(huì)遇到路由選擇環(huán)路等問(wèn)題拭嫁。
健壯性。如果遇到出現(xiàn)故障的鏈路抓于,LS 能夠向所有節(jié)點(diǎn)廣播不正常的開(kāi)銷(xiāo)做粤;而 DV 可能把不正常的計(jì)算值擴(kuò)散到整個(gè)網(wǎng)絡(luò)。
LS 算法的應(yīng)用:OSPF等捉撮。
DV 算法的應(yīng)用:RIP怕品、BGP等。
4.4. 自治系統(tǒng)內(nèi)部的路由選擇:OSPF
到目前為止的路由選擇算法中巾遭,我們都將網(wǎng)絡(luò)看作一個(gè)互聯(lián)網(wǎng)路由器的集合肉康,從所有路由器上執(zhí)行相同的路由選擇算法以計(jì)算穿過(guò)整個(gè)網(wǎng)絡(luò)的最短路徑闯估。但是,實(shí)踐中卻并非如此簡(jiǎn)單吼和,有如下原因:
- 規(guī)模涨薪。當(dāng)今互聯(lián)網(wǎng)由數(shù)億臺(tái)路由器和主機(jī)組成,在如此大的網(wǎng)絡(luò)中運(yùn)行路由選擇算法纹安,可能永遠(yuǎn)都無(wú)法收斂。而且儲(chǔ)存網(wǎng)絡(luò)信息將需要巨大容量砂豌。
- 管理自治厢岂。第一章提到,互聯(lián)網(wǎng)是 ISP 的網(wǎng)絡(luò)阳距,每個(gè) ISP 都有自己的路由器網(wǎng)絡(luò)塔粒,它們希望按照自己意愿運(yùn)行路由器,也希望對(duì)外部隱藏其網(wǎng)絡(luò)的內(nèi)部細(xì)節(jié)筐摘。
于是乎卒茬,出現(xiàn)了 自治系統(tǒng)(autonomous system, AS)。每個(gè) AS 是一個(gè)路由器集合咖熟,并對(duì)所屬路由器使用相同的方法進(jìn)行管理控制圃酵。ISP 通常將他們的網(wǎng)絡(luò)劃分成一到多個(gè) AS。而在一個(gè) AS 中運(yùn)行的路由選擇算法叫作自治系統(tǒng)內(nèi)部路由選擇協(xié)議(intra-autonomous system routing protocol)馍管。
自治系統(tǒng)內(nèi)部路由選擇協(xié)議有很多郭赐,如:基于 LS 算法的 OSPF 協(xié)議、基于 DV 算法的 RIP 協(xié)議等确沸。其中捌锭,開(kāi)放最短路優(yōu)先 OSPF [RFC 2328] 更為常用。
除了擁有 LS 算法的特性罗捎,OSPF 協(xié)議還有以下優(yōu)點(diǎn):
4.5. 自治系統(tǒng)間的路由選擇:BGP
OSPF 可以解決自治系統(tǒng)內(nèi)部的路由問(wèn)題观谦,但當(dāng)一個(gè)分組需要跨越多個(gè) AS 時(shí),我們則需要 自治系統(tǒng)間路由選擇協(xié)議(inter-autonomous system routing protocol)桨菜。
由于 AS 間路由選擇協(xié)議涉及多個(gè) AS 之間的協(xié)調(diào)豁状,所以 AS 間必須運(yùn)行相同的協(xié)議,即 邊界網(wǎng)關(guān)協(xié)議 BGP [RFC 4271]倒得。
BGP 協(xié)議有如下特性:
在 BGP 中替蔬,分組并不是路由到一個(gè)特定 IP 地址,而是路由到 CIDR 的前綴屎暇,也就是一個(gè)子網(wǎng)或子網(wǎng)的集合承桥。所以,路由器的 BGP 路由表表項(xiàng)通常為
(x, l)
的形式根悼,其中x
是一個(gè)前綴(如138.16.68/22)凶异,l
是該路由器的輸出接口之一蜀撑。與 DV 算法類(lèi)似,在 BGP 中剩彬,路由器會(huì)向臨近路由器傳遞路由信息酷麦。但不同的是,BGP 路由算法并不一定選擇開(kāi)銷(xiāo)最小的路徑喉恋,而是會(huì)選擇“最佳”的路徑沃饶。
在介紹 BGP 獨(dú)特的路由選擇算法之前,我們還需要了解一些 BGP 相關(guān)內(nèi)容:
網(wǎng)關(guān)路由器轻黑。位于 AS 邊緣糊肤,并連接到其它 AS 的路由器,被稱(chēng)為網(wǎng)關(guān)路由器氓鄙。反之馆揉,則被稱(chēng)為內(nèi)部路由器。如下圖的 AS1 中抖拦,1c升酣、1d 是網(wǎng)關(guān)路由器,1a态罪、1b 則是內(nèi)部路由器噩茄。
BGP 屬性。在 BGP 中复颈,當(dāng)路由器向臨近路由器傳遞信息時(shí)巢墅,除了包含前綴,還包括一些 BGP 屬性券膀。其中君纫,兩個(gè)比較重要的屬性是 AS-PATH(表示到達(dá)目的前綴/子網(wǎng)所經(jīng)過(guò)的 AS 路徑,如下圖中芹彬,從
AS1
到子網(wǎng)x
有兩條路蓄髓,AS-PATH 分別是 “AS2 AS3”、“AS3”)和 NEXT-HOP(表示 AS-PATH 中第一個(gè)路由器的輸入接口 IP 地址舒帮,如下圖中会喝,對(duì)于從AS1
到子網(wǎng)x
的路徑 “AS2 AS3”,其 NEXT-HOP 值為路由器 2a 左邊接口的 IP 地址)玩郊。BGP 路由肢执。包含前綴及其屬性的路由信息,被稱(chēng)為 BGP 路由译红。實(shí)踐中预茄,一條 BGP 路由還包括其他屬性,此處我們暫時(shí)忽略侦厚。
接下來(lái)耻陕,將介紹 BGP 的路由選擇算法拙徽。考慮的情況是:從路由器 1b
路由到子網(wǎng) x
诗宣,顯然有兩條路徑:經(jīng)過(guò)網(wǎng)關(guān)路由器 1c 到達(dá) AS2 再到達(dá) AS3膘怕、經(jīng)過(guò)網(wǎng)關(guān)路由器 1d 直接到達(dá) AS3。
熱土豆路由選擇算法召庞。假設(shè)開(kāi)銷(xiāo)為經(jīng)過(guò)的鏈路數(shù)岛心,第一條路徑的總開(kāi)銷(xiāo)肯定大于第二條路徑。但根據(jù)熱土豆算法篮灼,由于 1b 到 1c 的開(kāi)銷(xiāo)小于 1b 到 1d 的開(kāi)銷(xiāo)忘古,算法會(huì)選擇第一條路徑。熱土豆算法的思想是:盡可能地將分組送出其 AS 穿稳,而不擔(dān)心送出來(lái)后的剩余開(kāi)銷(xiāo)存皂∩卫ぃ可以說(shuō)逢艘,這是一個(gè)自私的算法。
-
真實(shí)的 BGP 路由選擇算法骤菠。如果有多條路徑它改,則按照如下規(guī)則順序進(jìn)行篩選,直到選出最好的路徑:
由于第二條規(guī)則在第三條規(guī)則之前商乎,所以 BGP 路由選擇算法并不是一個(gè)自私的算法央拖。
有關(guān)第一條規(guī)則中的 BGP 策略問(wèn)題,書(shū)中也未作詳細(xì)講解鹉戚,可以自行了解鲜戒。
除了用于 AS 間的路由選擇,BGP 還常用于實(shí)現(xiàn) IP 任播 [RFC 1546, RFC 7094]抹凳。從 BGP 路由選擇算法中遏餐,我們得知:當(dāng)目的地相同時(shí),算法會(huì)從多條路徑中選擇“最佳”的(比如 AS-PATH 最短)赢底。
BGP 任播應(yīng)用:
CDN 內(nèi)容分發(fā)網(wǎng)絡(luò)失都。CDN 公司會(huì)為它的多臺(tái)服務(wù)器配置相同的 IP 地址,當(dāng)客戶(hù)訪問(wèn)視頻等內(nèi)容時(shí)幸冻,利用 BGP 路由選擇算法的特點(diǎn)粹庞,算法會(huì)向“最近的”服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求,從而讓用戶(hù)得到更好的體驗(yàn)洽损。但實(shí)踐中 CDN 通常不使用 IP 任播庞溜,因?yàn)?BGP 路由選擇算法可能會(huì)導(dǎo)致同一個(gè) TCP 連接的不同分組到達(dá)不同的服務(wù)器。
DNS 系統(tǒng)碑定。IP 任播被廣泛地用于 DNS 系統(tǒng)强缘,它會(huì)將 DNS 請(qǐng)求指向最近的 DNS 服務(wù)器(比如13個(gè)根服務(wù)器中的一個(gè))督惰。
BGP 在因特網(wǎng)中起著重要作用,以上只是 BGP 的簡(jiǎn)要介紹旅掂。
4.6. AS 內(nèi)部和 AS 間路由選擇協(xié)議的比較
AS 間路由選擇是面向策略的赏胚。不同 AS 可能是由不同的 ISP 管理的,而它們之間可能是競(jìng)爭(zhēng)關(guān)系商虐,或者說(shuō) ISP 都是自私的觉阅,比如:一個(gè) AS 產(chǎn)生的流量不能經(jīng)過(guò)另一個(gè)特定的 AS 、一個(gè) AS 并不想承載其它 AS 的流量秘车。
而典勇,AS 內(nèi)部路由選擇是面向性能。AS 內(nèi)部是由同一個(gè) ISP 統(tǒng)一管理的叮趴,所以上述策略相對(duì)不重要割笙,而性能才是關(guān)鍵。
5. 軟件定義網(wǎng)絡(luò) SDN
軟件定義網(wǎng)絡(luò)(Software Defined Network眯亦,SDN)伤溉,是近年來(lái)(201x)興起的一種網(wǎng)絡(luò)管理方法。它的提出類(lèi)似于操作系統(tǒng)的思想妻率,將底層網(wǎng)絡(luò)設(shè)備進(jìn)行抽象乱顾,屏蔽其具體細(xì)節(jié),同時(shí)為上層提供相關(guān)接口宫静。用戶(hù)通過(guò)這些接口走净,可以開(kāi)發(fā)各種軟件,對(duì)網(wǎng)絡(luò)進(jìn)行集中式管理孤里、靈活配置伏伯、自動(dòng)化監(jiān)控、訪問(wèn)控制捌袜、負(fù)載均衡等等操作说搅。
書(shū)上提到,SDN 體系具有4個(gè)特征:
基于流的轉(zhuǎn)發(fā)琢蛤。SDN 控制的分組轉(zhuǎn)發(fā)蜓堕,能夠基于運(yùn)輸層、網(wǎng)絡(luò)層博其、鏈路層首部中的任意字段套才;而傳統(tǒng)轉(zhuǎn)發(fā)僅依據(jù)數(shù)據(jù)報(bào)的目的 IP 地址進(jìn)行。
數(shù)據(jù)平面與控制平面分離慕淡。數(shù)據(jù)平面由路由器等網(wǎng)絡(luò)設(shè)備組成背伴,它們會(huì)根據(jù)流表執(zhí)行“匹配加動(dòng)作”的規(guī)則;控制平面由服務(wù)器、以及決定和管理流表的軟件組成傻寂。
-
網(wǎng)絡(luò)控制功能息尺。與傳統(tǒng)的路由器不同,算法軟件在服務(wù)器上執(zhí)行疾掰,服務(wù)器與網(wǎng)絡(luò)設(shè)備截然分開(kāi)并與之遠(yuǎn)離搂誉。如下圖所示,控制平面由兩部分組成:SDN 控制器 和 若干網(wǎng)絡(luò)控制程序静檬。SDN 控制器負(fù)責(zé)維護(hù)獲取網(wǎng)絡(luò)狀態(tài)信息炭懊,并向上層提供;網(wǎng)絡(luò)控制程序則以此監(jiān)視拂檩、控制網(wǎng)絡(luò)設(shè)備侮腹。
可編程網(wǎng)絡(luò)。通過(guò)控制平面中的網(wǎng)絡(luò)控制應(yīng)用程序稻励,SDN 控制平面即擁有了“智力”父阻,例如:它可以決定源與目的間的路徑、可以對(duì)特定分組進(jìn)行阻擋望抽、可以根據(jù)負(fù)載均衡對(duì)分組進(jìn)行轉(zhuǎn)發(fā)加矛、甚至可以運(yùn)行 AI 算法。
SDN 是當(dāng)下的一股熱潮糠聪。其中荒椭,相對(duì)突出的是 OpenFlow 協(xié)議谐鼎,它運(yùn)行在 SDN 控制器和網(wǎng)絡(luò)設(shè)備上舰蟆。但在此不做詳細(xì)介紹。