《計(jì)算機(jī)網(wǎng)絡(luò)》筆記-第4/5章網(wǎng)絡(luò)層


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地址是不相同的缘厢。

5.png

2.1.2. 點(diǎn)分十進(jìn)制記法

4.png

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ò)。

6.png

總共有 A摘符、B贤斜、C、D逛裤、E 五種分類(lèi)方法瘩绒。A 類(lèi)常用于大型網(wǎng)絡(luò),B 類(lèi)常用于中型带族,C 類(lèi)則用于小型锁荔,D、E 類(lèi)特殊用途炉菲。

7.png
8.png

注:網(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ù)為 2^8-2 = 254

以下是分類(lèi) IP 地址的一些示例:

10.png

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)度是可變的:

9.png

但新的問(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)肾档。

11.png

另外摹恰,子網(wǎng)掩碼是由子網(wǎng)提供的,并會(huì)記錄在路由器的路由表中:

12.png

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í)編址姆另。
13.png

補(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è)其它組織淮椰。
14.png
  • 最長(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)格式

1.png
  • 版本: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é)為單位饿自。

示例:

2.png
3.png

注意:在第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ò)程為:

  1. 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ī)還不知道它的地址)

  2. 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地址有效期等。

  3. 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ù)器(你就天選之子>.<)。

  4. DHCP ACK:DHCP 服務(wù)會(huì)對(duì) DHCP 請(qǐng)求報(bào)文進(jìn)行響應(yīng)邦危。

15.png

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)
16.png

在外界看來(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)題:

  1. 內(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.255172.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 )吻商。

  1. 內(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)穿透等方法。

  1. 路由器作為網(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 胯杭。

    19.png

2.8. IPv6

雖然 NAT 一定程度上也擴(kuò)充了互聯(lián)網(wǎng)中聯(lián)網(wǎng)設(shè)備的容量驯杜,但公網(wǎng) IP 的數(shù)量還是受 IPv4 地址的限制,IPv4 地址只有 32 位做个,總共才 4,294,967,295 \approx 4.2 \times 10^9 \approx 42億 個(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)格式如下:

17.png

其最重要的幾大新增改變如下:

  • 首先,擴(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ò)程如下:

18.png

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)文格式如下:

20.png

由圖可知戏阅,ICMP 報(bào)文類(lèi)似于 TCP昼弟、UDP ,它也是被 IP 數(shù)據(jù)報(bào)所包裹的奕筐。

根據(jù)首部類(lèi)型字段和代碼字段的不同舱痘,ICMP 報(bào)文有著不同的功能,常見(jiàn)的如下:

21.png

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)如下:

22.png
  • 輸入端口泡态。輸入端口包含物理層、鏈路層迂卢、網(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)员萍。

    23.png

    其中腾降,查表和轉(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ò)交換(縱橫式)察净,如下:

    24.png
  • 輸出端口碑幅。將隊(duì)列中的分組發(fā)送到輸出鏈路上。

    25.png
  • 路由選擇器塞绿。路由選擇算法運(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-FordFloyd等睛竣。

根據(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ò)程示例如下。其中虱疏,D(v) 表示到本次迭代惹骂,從源節(jié)點(diǎn)到 v 節(jié)點(diǎn)的最短路徑的開(kāi)銷(xiāo);p(v) 表示最短路徑中 v 的前一個(gè)節(jié)點(diǎn):

31.png
32.png

Dijkstra 算法的時(shí)間復(fù)雜度為 O(n^2)做瞪,相對(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)中糙及。

26.png

這種現(xiàn)象被稱(chēng)為振蕩详幽。有一種解決方法是:確保所有路由器不同時(shí)運(yùn)行 LS 算法。

4.2. 距離向量路由選擇算法

DV 算法是一種迭代浸锨、分布式的算法唇聘。它的本質(zhì)是 Bellman-Ford 算法,即:

d(x,y) = min\{c(x,v) + d(v,y)\}
v \in x所有的鄰接點(diǎn)柱搜,c(x,v) 是 x 到 v 邊的開(kāi)銷(xiāo)

DV 算法實(shí)際運(yùn)行過(guò)程如下

  1. 每個(gè)節(jié)點(diǎn)(節(jié)點(diǎn)=路由器) x 需要維護(hù)一些路由信息:

    • 對(duì)于每個(gè)鄰居 v迟郎,從 x 直接到鄰居 v 的開(kāi)銷(xiāo)為 c(x,v)
    • 節(jié)點(diǎn) x 的距離向量集,即 \{D_x(y) | y \in N\}聪蘸,包含 xN 中任意其它節(jié)點(diǎn) y 的最小開(kāi)銷(xiāo)估計(jì)值(最短路徑)宪肖。
    • 同時(shí)表制,會(huì)記錄選擇某條最短路徑時(shí)的下一跳節(jié)點(diǎn) v,即 c(x,v) + d(v,y) 最小時(shí)的 v 控乾。
  2. 每個(gè)節(jié)點(diǎn)還需不時(shí)地向它的每個(gè)鄰居發(fā)送它的距離向量么介。當(dāng)節(jié)點(diǎn) x 從它的任何一個(gè)鄰居 v 接收到新的距離向量時(shí),它將保持 v 的距離向量蜕衡,然后使用 d(x,y) = min\{c(x,v) + d(v,y)\} 方程更新自己的距離向量壤短。

  3. 如果節(jié)點(diǎn) x 的距離向量因步驟2而更新,那么它會(huì)向所有鄰居發(fā)送它更新后的距離向量慨仿。

示例如下:

27.png

注意在第2列中久脯,y 節(jié)點(diǎn)的距離向量沒(méi)有更新,因此節(jié)點(diǎn) y 沒(méi)有發(fā)送更新镰吆。

現(xiàn)在帘撰,我們需要考慮一些特殊情況:鏈路開(kāi)銷(xiāo)改變與鏈路故障

29.png

當(dāng)鏈路開(kāi)銷(xiāo)減小時(shí):

28.png

當(dāng)鏈路開(kāi)銷(xiāo)增加時(shí):

30.png

從上述過(guò)程万皿,我們可以看出:該循環(huán)將持續(xù)44次迭代(在 yz 之間)骡和,直到 z 算出它經(jīng)由 y 的路徑開(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è) N 是節(jié)點(diǎn)集唤衫,E 是鏈路集婆赠。比較:

  • 傳播開(kāi)銷(xiāo)。當(dāng)鏈路開(kāi)銷(xiāo)改變時(shí)佳励,LS 必須向所有節(jié)點(diǎn)廣播新的鏈路開(kāi)銷(xiāo)休里,需要發(fā)送 O(|N||E|);而 DV 只需向鄰近節(jié)點(diǎn)傳播赃承。

  • 收斂(得到正確結(jié)果)速度妙黍。LS 算法為 O(n^2) ;而 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):

33.png

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é)議有如下特性:

  1. 在 BGP 中替蔬,分組并不是路由到一個(gè)特定 IP 地址,而是路由到 CIDR 的前綴屎暇,也就是一個(gè)子網(wǎng)或子網(wǎng)的集合承桥。所以,路由器的 BGP 路由表表項(xiàng)通常為 (x, l) 的形式根悼,其中 x 是一個(gè)前綴(如138.16.68/22)凶异,l 是該路由器的輸出接口之一蜀撑。

  2. 與 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í)忽略侦厚。

34.png

接下來(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)行篩選,直到選出最好的路徑:

    35.png

    由于第二條規(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è)備侮腹。

    36.png
  • 可編程網(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ì)介紹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狸棍,一起剝皮案震驚了整個(gè)濱河市身害,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌草戈,老刑警劉巖塌鸯,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唐片,居然都是意外死亡丙猬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)费韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茧球,“玉大人,你說(shuō)我怎么就攤上這事星持∏缆瘢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)揪垄。 經(jīng)常有香客問(wèn)我穷吮,道長(zhǎng),這世上最難降的妖魔是什么饥努? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任捡鱼,我火速辦了婚禮,結(jié)果婚禮上酷愧,老公的妹妹穿的比我還像新娘堰汉。我一直安慰自己,他們只是感情好伟墙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布翘鸭。 她就那樣靜靜地躺著,像睡著了一般戳葵。 火紅的嫁衣襯著肌膚如雪就乓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天拱烁,我揣著相機(jī)與錄音生蚁,去河邊找鬼。 笑死戏自,一個(gè)胖子當(dāng)著我的面吹牛邦投,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擅笔,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼志衣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了猛们?” 一聲冷哼從身側(cè)響起念脯,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弯淘,沒(méi)想到半個(gè)月后绿店,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庐橙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年假勿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片态鳖。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡转培,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郁惜,到底是詐尸還是另有隱情堡距,我是刑警寧澤甲锡,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站羽戒,受9級(jí)特大地震影響缤沦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜易稠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一缸废、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驶社,春花似錦企量、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至份乒,卻和暖如春恕汇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背或辖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工瘾英, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颂暇。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓缺谴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親耳鸯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湿蛔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容