談到互聯(lián)網(wǎng),很多人腦海中會(huì)出現(xiàn)各種各樣的術(shù)語和服務(wù),但是互聯(lián)網(wǎng)是如何設(shè)計(jì)并構(gòu)建的呢?作為一個(gè)網(wǎng)絡(luò),互聯(lián)網(wǎng)的架構(gòu)本質(zhì)是什么? 石頭兄弟和我曾經(jīng)一起譯過一本《計(jì)算機(jī)網(wǎng)絡(luò)問題與解決方案》的巨著,但真正仔細(xì)閱讀并從中有所收獲的朋友并不多。最近,石頭兄弟推薦了另一篇文章https://cacm.acm.org/magazines/2023/2/268956-extracting-the-essential-simplicity-of-the-internet/fulltext ,內(nèi)容精煉簡(jiǎn)潔,不敢私藏,編譯分享給大家。
如今,互聯(lián)網(wǎng)提供了人們所依賴的無處不在的連接。許多人也都知道,互聯(lián)網(wǎng)的基本設(shè)計(jì)是在20世紀(jì)70年代發(fā)明的,以允許計(jì)算機(jī)交換數(shù)據(jù)。自1983年陸續(xù)采用以來,它基本上保持不變 ,同時(shí)優(yōu)雅地適應(yīng)應(yīng)用程序,技術(shù),規(guī)模,范圍和容量的根本變化,成為了人們不可或缺的一部分。
作為如此出色的IT基礎(chǔ)設(shè)施,其系統(tǒng)架構(gòu)也是怎樣的呢?
1. 本質(zhì)需求:互聯(lián)網(wǎng)的服務(wù)模型
在進(jìn)行通信時(shí),所有主機(jī)上的軟件都必須依賴基礎(chǔ)設(shè)施的服務(wù)模型。因此,服務(wù)模型的設(shè)計(jì)需要在最適合主機(jī)軟件的內(nèi)容和基礎(chǔ)設(shè)施可以支持的內(nèi)容之間進(jìn)行折衷。在設(shè)計(jì)數(shù)據(jù)傳輸服務(wù)模型時(shí),必須選擇其傳輸單元并確保性能。鑒于計(jì)算機(jī)通信的突發(fā)性,一個(gè)小的傳輸單元是必要的,以實(shí)現(xiàn)有效的資源利用。互聯(lián)網(wǎng)使用一組比特的數(shù)據(jù)包,當(dāng)前的數(shù)據(jù)包大小通常不超過1.5 kb。
互聯(lián)網(wǎng)應(yīng)用程序有著各種各樣的網(wǎng)絡(luò)性能要求,從低延遲(交互式視頻或閉環(huán)控制)到高帶寬(傳輸大數(shù)據(jù)集)和可靠傳輸(文件傳輸)。工程化的本能是支持將這些需求與網(wǎng)絡(luò)基礎(chǔ)設(shè)施結(jié)合起來,以保證延遲、帶寬和可靠性方面的特定界限。然而,互聯(lián)網(wǎng)必須與各種各樣的本地分組網(wǎng)絡(luò)互聯(lián),例如無線和有線、共享接入以及點(diǎn)對(duì)點(diǎn),其中許多網(wǎng)絡(luò)不能保證性能。這些網(wǎng)絡(luò)能夠支持的最小公分母是“盡最大努力”的數(shù)據(jù)包傳輸,網(wǎng)絡(luò)試圖傳輸所有的數(shù)據(jù)包,但是不能保證數(shù)據(jù)包是否、什么時(shí)候或以什么速率傳輸。
因此,關(guān)于服務(wù)模式的根本問題是,是更好的技術(shù)和支持所有應(yīng)用需求或容納所有的數(shù)據(jù)分組網(wǎng)絡(luò),只提供一個(gè)適度的最小公分母和“盡力而為”的服務(wù)模式。互聯(lián)網(wǎng)的設(shè)計(jì)選擇了質(zhì)樸的方式,即采用盡力而為的服務(wù)模式。
現(xiàn)在看來,這是一個(gè)更好的選擇。首先,較松散的服務(wù)模式對(duì)基礎(chǔ)設(shè)施施加了最低限度的要求,從而使互聯(lián)網(wǎng)得以極其迅速地發(fā)展。簡(jiǎn)而言之,由于對(duì)性能的要求不高,互聯(lián)網(wǎng)的部署速度和范圍都很大。其次,應(yīng)用程序有嚴(yán)格的網(wǎng)絡(luò)要求是電話網(wǎng)絡(luò)的延續(xù),電話網(wǎng)絡(luò)的智能終端系統(tǒng)與智能網(wǎng)絡(luò)相連,完全負(fù)責(zé)滿足電話的嚴(yán)格性能要求,即固定速率傳輸和可靠傳輸。隨著越來越強(qiáng)大的計(jì)算機(jī)作為終端,通過對(duì)互聯(lián)網(wǎng)應(yīng)用程序的設(shè)計(jì)來適應(yīng)不同級(jí)別的性能,從而放松了它們的需求。在大多數(shù)情況下,網(wǎng)絡(luò)運(yùn)營商還可以通過提供足夠的帶寬來確保合理的性能,也就是說,通過部署更多和更快的鏈路,使網(wǎng)絡(luò)很少擁塞。
2. 體系抽象:互聯(lián)網(wǎng)的架構(gòu)
體系結(jié)構(gòu)是關(guān)于功能的組織,而不是它的實(shí)現(xiàn)。模塊化是體系結(jié)構(gòu)的指導(dǎo)原則,要求將系統(tǒng)的目標(biāo)分解為具有干凈接口的更小的任務(wù)。互聯(lián)網(wǎng)的目標(biāo)是允許兩臺(tái)不同計(jì)算機(jī)上的應(yīng)用程序進(jìn)行通信,因此可以分解為兩個(gè)組成部分:
(i)網(wǎng)絡(luò)基礎(chǔ)設(shè)施的作用(主機(jī)之間盡最大努力傳輸數(shù)據(jù)包)
(ii)主機(jī)上的網(wǎng)絡(luò)支持軟件的作用(使應(yīng)用程序更容易使用這種盡力而為的傳輸)。
2.1 網(wǎng)絡(luò)基礎(chǔ)設(shè)施
基礎(chǔ)設(shè)施實(shí)現(xiàn)的主機(jī)到主機(jī)交付任務(wù)可以分解為三個(gè)不同的任務(wù),這些任務(wù)被分層設(shè)計(jì),高層具有更廣泛的空間范圍,低層處理更多的本地任務(wù)。因此,從發(fā)送主機(jī)向接收主機(jī)發(fā)送數(shù)據(jù)包的過程涉及到將這些本地發(fā)送任務(wù)集合在一起。提供最佳數(shù)據(jù)包傳輸?shù)谋镜睾偷图?jí)的任務(wù)是通過鏈路或廣播進(jìn)行傳輸,這需要數(shù)模轉(zhuǎn)換和糾錯(cuò),這兩者都不是互聯(lián)網(wǎng)所特有的。這個(gè)本地傳遞任務(wù)由所謂的物理層(L1)處理。
鑒于 L1能夠通過鏈路發(fā)送比特流,下一個(gè)任務(wù)是在本地分組網(wǎng)絡(luò)中實(shí)現(xiàn)通信(如以太網(wǎng)或無線網(wǎng)絡(luò))。這包括兩個(gè)步驟:
(i)用一組比特位組成數(shù)據(jù)包,前面有一個(gè)數(shù)據(jù)包頭,描述這些位應(yīng)該傳送到哪里;
(ii)將這些數(shù)據(jù)包傳送到本地網(wǎng)絡(luò)中的適當(dāng)目的地。將第二步限制為本地(而非全局)傳輸,可以使用不可伸縮的技術(shù),如廣播(介質(zhì)本身確保廣播數(shù)據(jù)包到達(dá)所有主機(jī)(如無線))和洪泛(網(wǎng)絡(luò)確保洪泛數(shù)據(jù)包到達(dá)所有主機(jī))。這個(gè)任務(wù)是由傳統(tǒng)上稱為鏈路層或 L2來處理的。在非廣播網(wǎng)絡(luò)中,這項(xiàng)任務(wù)是由本地網(wǎng)絡(luò)中的交換機(jī)實(shí)現(xiàn)的,這些交換機(jī)將數(shù)據(jù)包轉(zhuǎn)發(fā)到它們的目的地。
最后一項(xiàng)任務(wù)是將數(shù)據(jù)包從發(fā)送方的網(wǎng)絡(luò)傳送到目的地的網(wǎng)絡(luò),利用 L2的能力將這些網(wǎng)絡(luò)中的數(shù)據(jù)包傳送到各個(gè)主機(jī)。這種網(wǎng)絡(luò)的互連由網(wǎng)絡(luò)互連層(L3)處理,并由在 L2連接到兩個(gè)或多個(gè)網(wǎng)絡(luò)的路由器實(shí)現(xiàn)。數(shù)據(jù)包通過一系列的路由器進(jìn)行轉(zhuǎn)發(fā)(路由器到路由器的交付由兩個(gè)路由器所連接的網(wǎng)絡(luò)中的 L2支持) ,直到它們到達(dá)目的網(wǎng)絡(luò)。這一層連接網(wǎng)絡(luò)還定義了 互聯(lián)網(wǎng)的服務(wù)模型,即 L3將數(shù)據(jù)傳送到更高層的主機(jī)軟件。
因此,互聯(lián)網(wǎng)提供的無處不在的連接能力始于一個(gè)概念上簡(jiǎn)單而大膽的設(shè)計(jì)。
2.2 主機(jī)軟件中的網(wǎng)絡(luò)支持
網(wǎng)絡(luò)基礎(chǔ)設(shè)施中主機(jī)對(duì)主機(jī)服務(wù)模型沒有指定數(shù)據(jù)包應(yīng)該傳遞到哪個(gè)主機(jī)的應(yīng)用程序,而且如果沒有額外的幫助,應(yīng)用程序很難達(dá)到最佳性能。為了糾正這些問題,主機(jī)操作系統(tǒng)除了提供其他網(wǎng)絡(luò)支持外,還提供了傳輸層(L4)。基于稱為“端口”的數(shù)據(jù)包頭中的元數(shù)據(jù),L4將數(shù)據(jù)包傳遞給主機(jī)上的各個(gè)應(yīng)用程序?yàn)榱耸箲?yīng)用程序更容易使用盡力而為的服務(wù),一些公共傳輸協(xié)議提供了三種功能。
- 字節(jié)流 API,應(yīng)用程序可以使用類似文件的簡(jiǎn)單接口來寫入和讀取數(shù)據(jù),而不必顯式地發(fā)送和接收單個(gè)數(shù)據(jù)包。
- 控制主機(jī)的數(shù)據(jù)包傳輸速率,以防止網(wǎng)絡(luò)過載,這種方法被稱為擁塞控制傳輸,涉及控制回路,在這個(gè)回路中,如果傳輸協(xié)議檢測(cè)到網(wǎng)絡(luò)擁塞(例如,通過丟失數(shù)據(jù)包或增加延遲) ,它們的發(fā)送速率就會(huì)降低。有許多擁塞控制算法,不同的是它們?nèi)绾螜z測(cè)和響應(yīng)擁塞。
- 最基本的是可靠的數(shù)據(jù)包傳輸,應(yīng)用程序不需要處理數(shù)據(jù)包丟失。這種丟失是最佳服務(wù)模型的自然組成部分,但是對(duì)于許多應(yīng)用程序來說是不可接受的。盡管可靠性可以在應(yīng)用程序本身或其他支持庫中實(shí)現(xiàn),但為了清晰起見,這種可靠性是在 L4中實(shí)現(xiàn)的。
四層互聯(lián)網(wǎng)架構(gòu)是模塊化的自然結(jié)果。每一層只與正上方和正下方的層相互作用。由于數(shù)據(jù)包總是通過 L1的物理媒體到達(dá),所以主機(jī)必須實(shí)現(xiàn)所有四個(gè)層; 路由器實(shí)現(xiàn)前三個(gè)層,而交換機(jī)只實(shí)現(xiàn)前兩個(gè)層。因此,這里有四個(gè)問題需要解答。
問題 # 1: 這種分層架構(gòu)支持哪種多樣性,如何管理它?
只要一個(gè)層的兩個(gè)實(shí)現(xiàn)提供相同的向上和向下接口,它們?cè)诩軜?gòu)上是可互換的。此外,互聯(lián)網(wǎng)架構(gòu)的模塊化允許在 L4處共存多個(gè)傳輸協(xié)議,在 L2處共存多個(gè)本地網(wǎng)絡(luò)設(shè)計(jì),在 L1處共存多個(gè)物理技術(shù),每個(gè)都提供自己獨(dú)特的接口。L1和 L2技術(shù)由網(wǎng)絡(luò)提供商選擇,網(wǎng)絡(luò)提供商可以確保它們的接口兼容,也就是說,本地網(wǎng)絡(luò)設(shè)計(jì)可以使用一組鏈路技術(shù)。應(yīng)用程序在調(diào)用操作系統(tǒng)的網(wǎng)絡(luò) API 時(shí)選擇它所需的 L4協(xié)議。應(yīng)用程序和網(wǎng)絡(luò)提供商獨(dú)立作出選擇,也就是說,應(yīng)用程序不知道它目前所在的網(wǎng)絡(luò),網(wǎng)絡(luò)提供商也不知道其網(wǎng)絡(luò)上將使用哪些應(yīng)用程序。當(dāng)且僅當(dāng) L3上有一組所有 L2設(shè)計(jì)和 L4協(xié)議都兼容的接口時(shí),這種方法才能無縫地工作。因此,我們必須在 L3有一個(gè)單一的協(xié)議,即互聯(lián)網(wǎng)協(xié)議(IP) ,目前是 IPv4及IPv6。IP 作為互聯(lián)網(wǎng)架構(gòu)的“蜂腰”,其獨(dú)特性使所有其他層次的多元化創(chuàng)新成為可能。
問題 # 2: Internet 使用什么標(biāo)識(shí)符?
互聯(lián)網(wǎng)必須使 L2和 L3數(shù)據(jù)包頭能夠識(shí)別路由的目的地,并允許用戶和應(yīng)用程序識(shí)別他們想要訪問的服務(wù)。這導(dǎo)致了三種地址,通常,主機(jī)上每個(gè)可連接的硬件網(wǎng)絡(luò)接口(如 Wi-Fi、蜂窩網(wǎng)卡或以太網(wǎng)卡)都有一個(gè)稱為 MAC 地址的永久唯一地址,L2使用該地址來識(shí)別目的地。L3使用 IP 地址,它指定互聯(lián)網(wǎng)中的一個(gè)唯一網(wǎng)絡(luò),以及當(dāng)前使用該網(wǎng)絡(luò)中的地址的特定主機(jī)接口(這種地址分配可以隨時(shí)間變化)。用戶和應(yīng)用程序使用應(yīng)用程序級(jí)別的名稱來引用基于主機(jī)的服務(wù)。為了使這些名稱具有某種程度的持久性,它們獨(dú)立于服務(wù)所基于的機(jī)器以及這些主機(jī)可能放置在網(wǎng)絡(luò)中的位置。在這三個(gè)標(biāo)識(shí)符(應(yīng)用程序級(jí)別的名稱、 IP 地址和 MAC 地址)中,前兩個(gè)必須解析為次低級(jí)別的標(biāo)識(shí)符。因此,當(dāng)一臺(tái)主機(jī)上的應(yīng)用程序試圖向另一臺(tái)主機(jī)上的應(yīng)用程序發(fā)送數(shù)據(jù)包時(shí),它必須將應(yīng)用程序級(jí)別的名稱解析為 IP 地址。當(dāng)數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)時(shí),它通過 L2發(fā)送到目的地主機(jī)或下一跳的路由器。在這兩種情況下,IP 地址都必須解析為 MAC 地址。
問題3: 如何組織互聯(lián)網(wǎng)基礎(chǔ)設(shè)施?
互聯(lián)網(wǎng)不僅僅是一個(gè)由路由器連接的非結(jié)構(gòu)化的 L2網(wǎng)絡(luò)集合。相反,它是自治系統(tǒng)(AS)的集合,也稱為域,每個(gè)域包含一組由單個(gè)實(shí)體管理的 L2網(wǎng)絡(luò)。AS的例子包括企業(yè)、大學(xué)和商業(yè)互聯(lián)網(wǎng)服務(wù)提供商(ISP)。這些系統(tǒng)控制它們自己的內(nèi)部 L3路由,并且必須與其他系統(tǒng)建立路由協(xié)議,以便在系統(tǒng)之間提供主機(jī)到主機(jī)的傳輸。因此,L3涉及兩個(gè)路由任務(wù):
(i)在 AS 內(nèi)的網(wǎng)絡(luò)之間進(jìn)行路由(域內(nèi)路由) ,由該 AS 中的路由器處理;
(ii)在 AS 之間進(jìn)行路由(域間路由) ,由連接兩個(gè)或更多個(gè) AS 的所謂邊界路由器處理。
這兩個(gè)路由任務(wù)有不同的需求,因此需要不同的路由范例和協(xié)議。
問題4: 這些部分是如何組合在一起的?
通過互聯(lián)網(wǎng)傳送數(shù)據(jù)包的過程始于應(yīng)用程序?qū)?yīng)用程序級(jí)別的名稱解析為一個(gè) IP 地址,然后調(diào)用主機(jī)的網(wǎng)絡(luò)支持將數(shù)據(jù)發(fā)送到該目標(biāo) IP 地址。這將導(dǎo)致對(duì) L4的調(diào)用,該調(diào)用將數(shù)據(jù)打包并調(diào)用 L3來傳遞這些數(shù)據(jù)包。在 L3,數(shù)據(jù)包通過一系列路由器被轉(zhuǎn)發(fā),直到它到達(dá)它的目的網(wǎng)絡(luò)(由數(shù)據(jù)包報(bào)頭中的目的 IP 地址標(biāo)識(shí))。每個(gè)路由器都有一個(gè)轉(zhuǎn)發(fā)表,它將目標(biāo) IP 地址映射到下一跳路由器的 IP 地址。在接收到數(shù)據(jù)包后,路由器在轉(zhuǎn)發(fā)表中查找合適的下一跳路由器,然后通過調(diào)用 L2將數(shù)據(jù)包發(fā)送到該下一跳節(jié)點(diǎn)。L2必須首先將下一跳路由器的 IP 地址解析為一個(gè) MAC 地址,然后將數(shù)據(jù)包傳送到下一跳路由器(通過廣播或通過一系列交換機(jī)轉(zhuǎn)發(fā)數(shù)據(jù)包,如下一節(jié)所述) ,然后由下一跳路由器將數(shù)據(jù)包返回給 L3。這個(gè)過程中的關(guān)鍵技術(shù)挑戰(zhàn)是設(shè)置 L3轉(zhuǎn)發(fā)表,以便下一跳的集合總是導(dǎo)致數(shù)據(jù)包到達(dá)適當(dāng)?shù)哪康牡亍?/p>
3. 互聯(lián)網(wǎng)的三個(gè)核心機(jī)制
互聯(lián)網(wǎng)架構(gòu)確定了實(shí)現(xiàn)互聯(lián)網(wǎng)體系結(jié)構(gòu)所必需的三個(gè)重要機(jī)制ーー路由、可靠性和名稱解析方案。
3.1 路由
術(shù)語“路由”是指通過互聯(lián)網(wǎng)將數(shù)據(jù)包轉(zhuǎn)發(fā)到目的地主機(jī)的一般問題,這種問題發(fā)生在 L3并由路由器實(shí)現(xiàn),或者在 L2由交換機(jī)實(shí)現(xiàn),而L2上的實(shí)現(xiàn)稱為交換而不是路由。從考慮 L3域內(nèi)路由開始,假設(shè):
- 每個(gè) L3包頭包含一個(gè)目的 IP 地址,
- 每個(gè)路由器有一組相鄰的路由器,它在 L2連接
- 每個(gè)路由器有一個(gè)轉(zhuǎn)發(fā)表,正確地指示路由器是否連接(在 L2)到數(shù)據(jù)包的目的地網(wǎng)絡(luò),如果沒有,確定性地將到達(dá)數(shù)據(jù)包的目的地映射到數(shù)據(jù)包應(yīng)該轉(zhuǎn)發(fā)到的相鄰下一跳路由器。
簡(jiǎn)化問題,重點(diǎn)先放在一組靜態(tài)轉(zhuǎn)發(fā)表成功引導(dǎo)數(shù)據(jù)包到達(dá)其目的地的情況。路由器之間的互連集稱為網(wǎng)絡(luò)拓?fù)鋱D,假設(shè)它們是連接的; 將轉(zhuǎn)發(fā)表集稱為轉(zhuǎn)發(fā)狀態(tài); 將這些表的并集稱為路由狀態(tài)。給定的路由狀態(tài)實(shí)例是有效的,如果它總是將數(shù)據(jù)包指向它們的目的地; 如果存在一個(gè)環(huán)(即,一個(gè)起始位置和一個(gè)目的地址) ,數(shù)據(jù)包可以返回到它已經(jīng)訪問過的路由器。因此,當(dāng)且僅當(dāng)沒有環(huán)時(shí),路由狀態(tài)實(shí)例才有效。
假設(shè)沒有循環(huán); 因?yàn)榫W(wǎng)絡(luò)是連接的和有限的,所以任何數(shù)據(jù)包最終都必須到達(dá)連接(在 L2)到其目的地的路由器。假設(shè)存在一個(gè)給定目的地的循環(huán); 任何尋址到該目的地的包進(jìn)入循環(huán)將永遠(yuǎn)不會(huì)到達(dá)目的地。
為什么要關(guān)心這個(gè)明顯的結(jié)果?因?yàn)榛ヂ?lián)網(wǎng)使用各種路由算法來計(jì)算轉(zhuǎn)發(fā)狀態(tài),這些路由算法之間的關(guān)鍵概念差異在于它們?cè)诜€(wěn)態(tài)下避免循環(huán)的方式。路由協(xié)議是一種復(fù)雜的分布式系統(tǒng),它解決了由于網(wǎng)絡(luò)鏈路失效和恢復(fù)而導(dǎo)致網(wǎng)絡(luò)拓?fù)鋱D發(fā)生變化時(shí),如何快速自動(dòng)地重新計(jì)算轉(zhuǎn)發(fā)狀態(tài)的問題。這里,避免了這些分布式協(xié)議的復(fù)雜性,只關(guān)注算法在靜態(tài)網(wǎng)絡(luò)上收斂到一個(gè)穩(wěn)定狀態(tài)時(shí)所產(chǎn)生的轉(zhuǎn)發(fā)狀態(tài)。在這些算法中,避免穩(wěn)態(tài)循環(huán)的方法主要取決于路由器之間共享什么樣的信息。
例如,一個(gè)路由器知道它的鄰近路由器,并且可以使用洪泛算法與其他路由器共享這個(gè)本地信息。在穩(wěn)定狀態(tài)下,每個(gè)路由器都可以利用這些信息來組裝整個(gè)網(wǎng)絡(luò)拓?fù)鋱D。如果所有路由器在這個(gè)共享網(wǎng)絡(luò)拓?fù)鋱D上使用相同的無環(huán)路徑查找算法來計(jì)算它們的轉(zhuǎn)發(fā)表,那么得到的路由狀態(tài)總是有效的。這種方法稱為“鏈路狀態(tài)”路由。
許多計(jì)算機(jī)科學(xué)界人士認(rèn)為,互聯(lián)網(wǎng)僅僅是一個(gè)復(fù)雜協(xié)議的集合,而不是一個(gè)概念上簡(jiǎn)單而大膽的設(shè)計(jì)。
另一種情況是,每個(gè)路由器根據(jù)一些度量(如延遲)通知它的鄰近路由器它自己的距離所有其他網(wǎng)絡(luò)。路由器 α 可以計(jì)算其到每個(gè)目的地網(wǎng)絡(luò) n 的距離為 dα (n) = minβ [ dβ (n) + d (α,β)] ,其中 dβ (n)是從每個(gè)相鄰路由器 β 到網(wǎng)絡(luò) n 的距離,d (α,β)是兩個(gè)路由器之間的距離 α,β。這種分布式計(jì)算的穩(wěn)定狀態(tài)產(chǎn)生到每個(gè)目的地的最短路徑路由,這不能有環(huán)。這就是所謂的“距離矢量”路由。
當(dāng)網(wǎng)絡(luò)拓?fù)鋱D發(fā)生變化時(shí),在距離向量路由和鏈路狀態(tài)路由的重新計(jì)算路由過程中(即協(xié)議尚未收斂到穩(wěn)定狀態(tài)時(shí))都可能出現(xiàn)路由狀態(tài)的臨時(shí)環(huán)路。如果不加以檢查,數(shù)據(jù)包在這樣的循環(huán)中無休止地循環(huán)可能會(huì)導(dǎo)致嚴(yán)重的擁塞控制。為了防止這種情況,IP 協(xié)議明智地在數(shù)據(jù)包頭中加入了一個(gè)字段,該字段從發(fā)送主機(jī)設(shè)置的初始數(shù)字開始,然后每當(dāng)數(shù)據(jù)包到達(dá)一個(gè)新的路由器時(shí),該數(shù)字就遞減。如果該字段達(dá)到零,則丟棄數(shù)據(jù)包,從而限制數(shù)據(jù)包可以穿越臨時(shí)環(huán)路的次數(shù),從而確保臨時(shí)環(huán)路不會(huì)發(fā)生災(zāi)難性的情況。如果沒有這種簡(jiǎn)單的機(jī)制,所有的路由協(xié)議都需要排除臨時(shí)環(huán)路,這種程度的關(guān)注可能會(huì)使路由協(xié)議復(fù)雜化。
考慮 L3域間路由。AS顯然必須攜帶它們作為源或目的地的所有數(shù)據(jù)包; 所有其他數(shù)據(jù)包都被視為傳輸通信,在從源 AS 到目的 AS 的路上通過其他 AS。AS 希望能夠自由選擇他們所攜帶的傳輸流量,以及他們用來將傳輸流量轉(zhuǎn)移到目的地的路線。對(duì)于互聯(lián)網(wǎng)服務(wù)提供商來說,這兩種策略選擇在很大程度上取決于它們與鄰近的自主網(wǎng)絡(luò)服務(wù)提供商的經(jīng)濟(jì)性考量,因此它們希望將這些選擇保密,以避免泄露有助于競(jìng)爭(zhēng)對(duì)手的信息。
雖然域間路由選擇實(shí)際上是由邊界路由器實(shí)現(xiàn)的,這涉及到它們之間一些復(fù)雜的域內(nèi)協(xié)調(diào),但是可以簡(jiǎn)單地建立域間路由模型,將互連的 AS 集合形成一個(gè)圖,并由 AS 自己做出路由決策。域間路由必須:
- 允許 AS 做出任意的策略選擇,所以不能使用距離向量
- 保持這些策略選擇的私有性,所以不能使用鏈路狀態(tài)路由
這將需要 AS 使他們的策略明確,以便每個(gè)其他 AS 可以計(jì)算使用這些策略的路由。另一種方法是允許AS系統(tǒng)通過選擇向誰宣傳他們的路由(通過向鄰近的AS系統(tǒng)發(fā)送消息說,“你可以使用我的路徑到達(dá)這個(gè)目的地”) ,以及當(dāng)幾個(gè)鄰居已經(jīng)向他們發(fā)送到給定目的地的路由時(shí),選擇這些路由來實(shí)現(xiàn)他們的策略。這些都是在距離向量路由中使用的相同消息和選擇,但距離向量不允許策略靈活性: 路由向所有鄰居公布,只選擇最短路徑。這種局部自由提供了政策靈活性和隱私,但是如何防止在計(jì)算路由時(shí)出現(xiàn)穩(wěn)態(tài)環(huán)路?互聯(lián)網(wǎng)的解決方案是交換路徑信息。當(dāng) AS“ A”公布到相鄰 AS“ B”的路徑(針對(duì)特定目的地)時(shí),它指定該流量到目的地的整個(gè) AS 級(jí)路徑。如果 AS“ B”看到它已經(jīng)在那條路徑上,它就不會(huì)使用那條路徑。如果所有的 AS都遵守這個(gè)明顯的約束,那么無論 AS做出什么策略選擇,我們稱之為“路徑向量”路由的穩(wěn)定狀態(tài)都將是無環(huán)的。路徑向量路由在目前的域間路由協(xié)議 BGP 中使用,因此,BGP 是將互聯(lián)網(wǎng)上的許多自動(dòng)化系統(tǒng)粘合在一起的粘合劑。
由于對(duì)性能要求不高,互聯(lián)網(wǎng)的部署速度和范圍都很大。
這種路徑矢量方法確保在任何穩(wěn)態(tài)下都沒有回路。然而,這并不能確保路由協(xié)議收斂到一個(gè)穩(wěn)定狀態(tài), 例如,策略振蕩就是路徑向量算法不收斂的情況。它也不能確保所有產(chǎn)生的穩(wěn)定狀態(tài)提供所有端點(diǎn)之間的連接,因?yàn)樗?AS 都可以拒絕向給定 AS 提供過境連接。令人感到困惑的是,為什么這些異常沒有在互聯(lián)網(wǎng)上觀察到,理論分析表明,典型的運(yùn)營實(shí)踐(路由選擇最大化收入和最小化成本)產(chǎn)生路由策略,將總是收斂到穩(wěn)定的狀態(tài),提供端到端連接之間的所有端點(diǎn)。
在非廣播網(wǎng)絡(luò)中,避免環(huán)路也起到了一定的作用,在非廣播網(wǎng)絡(luò)中,洪泛通常用于到達(dá)目的地。生成樹協(xié)議(spanning-tree protocol,STP)通過選擇不使用某些鏈接在網(wǎng)絡(luò)之外來創(chuàng)建一棵樹,也就是說,從網(wǎng)絡(luò)拓?fù)鋱D中消除所有環(huán)。一旦網(wǎng)絡(luò)成為生成樹,就可以通過讓每個(gè)交換機(jī)在生成樹的所有相鄰鏈路上轉(zhuǎn)發(fā)數(shù)據(jù)包(數(shù)據(jù)包到達(dá)的鏈路除外) ,將數(shù)據(jù)包洪泛給所有主機(jī)。這種洪泛允許主機(jī)和路由器通過一個(gè)“地址解析協(xié)議”(ARP)消息來解析 IP 地址到 MAC 地址,該消息詢問,“哪個(gè)主機(jī)或路由器有這個(gè) IP 地址?”; 所有者然后響應(yīng)其 MAC 地址。在這個(gè) ARP 交換期間(實(shí)際上每當(dāng)主機(jī)發(fā)送數(shù)據(jù)包時(shí)) ,交換機(jī)可以通過記住它們最近從該主機(jī)收到數(shù)據(jù)包的鏈路來學(xué)習(xí)如何在不發(fā)生洪泛的情況下到達(dá)特定主機(jī)。生成樹上的任意兩個(gè)節(jié)點(diǎn)之間只有一條路徑,因此可以通過發(fā)送來自該主機(jī)的數(shù)據(jù)包到達(dá)的鏈路來到達(dá)該主機(jī)。因此,使用這樣的“學(xué)習(xí)式交換機(jī)”,將 IP 地址解析為 MAC 地址的行為確定了發(fā)送和接收主機(jī)之間的轉(zhuǎn)發(fā)狀態(tài)。當(dāng)向 MAC 地址已經(jīng)解析的主機(jī)發(fā)送數(shù)據(jù)包時(shí),網(wǎng)絡(luò)不需要使用洪泛,而是可以直接發(fā)送數(shù)據(jù)包。
總而言之,所有的路由算法都必須有一種機(jī)制來避免處于穩(wěn)定狀態(tài)(即協(xié)議收斂之后)的環(huán)路形成,而穩(wěn)定狀態(tài)又依賴于交換的信息。為了限制 AS 中與相鄰路由器之間的信息交換,需要使用距離向量來保證無環(huán),從而產(chǎn)生最短路徑。為了提高域內(nèi)路由的路由靈活性,一個(gè)更好的選擇是鏈路狀態(tài),它需要洪泛的鄰居信息,但允許使用任意的無環(huán)路徑計(jì)算。為了允許 AS 在域間路由中實(shí)施單獨(dú)的策略控制,它們可以交換顯式的路徑信息以避免環(huán)路。為了在 L2中實(shí)現(xiàn)動(dòng)態(tài)洪泛和路由學(xué)習(xí),有必要將網(wǎng)絡(luò)拓?fù)鋱D轉(zhuǎn)換為生成樹,因?yàn)樗鼈儽旧硎菬o環(huán)的。在路由中可能會(huì)考慮其他問題,例如,如何從失敗中恢復(fù)而不必重新計(jì)算路由,以及如何使用集中控制來簡(jiǎn)化路由協(xié)議(如 SDN) ,但是這里的重點(diǎn)是闡明在常用的路由范例中避免環(huán)路的作用。
3.2 可靠傳輸
在討論的路由分析時(shí),即使有效的路由狀態(tài),由于過載鏈路或故障路由器仍然會(huì)導(dǎo)致數(shù)據(jù)包的丟棄。互聯(lián)網(wǎng)架構(gòu)并不能保證前三層的可靠性,而是明智地將這個(gè)任務(wù)留給傳輸層或應(yīng)用程序本身,丟失的數(shù)據(jù)包只有在被發(fā)送主機(jī)重新傳輸時(shí)才會(huì)被傳輸。
可靠的傳輸是由傳輸協(xié)議確保的,該協(xié)議建立了從一個(gè)應(yīng)用程序獲取數(shù)據(jù)并將其傳輸?shù)竭h(yuǎn)程應(yīng)用程序的連接。一些重要的傳輸協(xié)議,例如廣泛使用的 TCP,提供了一個(gè)可靠的字節(jié)流抽象,其中字節(jié)流中的數(shù)據(jù)被分成數(shù)據(jù)包并按順序傳輸,所有數(shù)據(jù)包丟失由傳輸協(xié)議本身來恢復(fù)。可靠的字節(jié)流抽象可以完全由主機(jī)軟件實(shí)現(xiàn),可以區(qū)分一個(gè)字節(jié)流中的數(shù)據(jù)包和另一個(gè)字節(jié)流中的數(shù)據(jù)包,在數(shù)據(jù)包上有序號(hào),這樣它們就可以在任何數(shù)據(jù)傳遞到接收應(yīng)用程序之前被正確地重新排序,并且重新傳輸數(shù)據(jù)包直到它們成功地傳遞。
非正式情況下,可靠的傳輸協(xié)議從應(yīng)用程序獲取數(shù)據(jù),以數(shù)據(jù)包的形式將其傳輸?shù)侥康牡兀罱K通知應(yīng)用程序傳輸已成功完成或失敗終止,在這兩種情況下都停止進(jìn)一步的傳輸。假設(shè)底層網(wǎng)絡(luò)最終傳遞一個(gè)重復(fù)發(fā)送的數(shù)據(jù)包,因此持久協(xié)議總是能夠成功。對(duì)于這種情況,在發(fā)送方和接收方之間需要什么通信來確保協(xié)議可以通知應(yīng)用程序它已經(jīng)成功了,當(dāng)且僅當(dāng)所有數(shù)據(jù)包已經(jīng)被接收么?有兩種常見的方法: 接收方可以在接收到數(shù)據(jù)包時(shí)向發(fā)送方發(fā)送確認(rèn)(ACK) ,或者在懷疑數(shù)據(jù)包丟失時(shí)向發(fā)送方發(fā)送非確認(rèn)(NACK)。
ACK 對(duì)于可靠的傳輸是必要的和充分的,而 NACK 既不是必要的也不是充分的。一個(gè)可靠的傳輸協(xié)議只有當(dāng)它知道所有的數(shù)據(jù)包都已經(jīng)發(fā)送完畢時(shí)才能宣布成功,這只能通過每個(gè)數(shù)據(jù)包接收到一個(gè) ACK 來推測(cè)。沒有 NACK (它本身可以被刪除)并不意味著已經(jīng)接收到了數(shù)據(jù)包。但是,NACK 可能很有用,因?yàn)樗鼈兛梢蕴峁╆P(guān)于發(fā)送方應(yīng)該何時(shí)重新傳輸?shù)募皶r(shí)信息。例如,TCP 使用顯式 ACK 來提高可靠性,并根據(jù)超時(shí)和隱式 NACK (當(dāng)預(yù)期的 ACK 未到達(dá)時(shí))發(fā)起重新傳輸。
3.3 名稱解析
除了通過 ARP 將 IP 地址解析為 MAC 地址之外,互聯(lián)網(wǎng)還必須將應(yīng)用級(jí)別的名稱解析為一個(gè)或多個(gè) IP 地址。這些名稱非正式地稱為主機(jī)名,正式的名稱被稱為完備的域名。可以使用非標(biāo)準(zhǔn)術(shù)語應(yīng)用程序級(jí)別的名稱,既不指特定的物理機(jī)器(而 MAC 地址指的是) ,也不直接關(guān)系到域間路由中使用的域概念。
任何應(yīng)用程序級(jí)的命名系統(tǒng)必須:
- 將每個(gè)名稱的管理控制分配給一個(gè)獨(dú)特的權(quán)限,該權(quán)限決定該名稱將解析到哪個(gè) IP 地址;
- 處理高解析請(qǐng)求;
- 以數(shù)十億應(yīng)用程序級(jí)名稱的規(guī)模提供這兩個(gè)屬性。
為了應(yīng)對(duì)這些挑戰(zhàn),互聯(lián)網(wǎng)采用了一種稱為域名系統(tǒng)(DNS)的分層命名結(jié)構(gòu)。命名空間被劃分為稱為域的區(qū)域,這些區(qū)域被遞歸地細(xì)分為較小的域,并且解析和管理控制都是分層完成的。每個(gè)命名域都有一個(gè)或多個(gè)命名服務(wù)器,可以在其域內(nèi)創(chuàng)建新的子域并解析名稱。名稱可以完備的解析為一個(gè)或多個(gè) IP 地址),也可以將解析指向一個(gè)或多個(gè)可以進(jìn)一步解析此類名稱的子域名服務(wù)器。此層次結(jié)構(gòu)從一組頂級(jí)域(TLD)開始,商業(yè)注冊(cè)允許客戶在這些 TLD 下注冊(cè)子域。TLD 到其名稱服務(wù)器的解析由一組 DNS 根服務(wù)器(其地址為所有主機(jī)所知)處理,解析從那里沿著命名層次結(jié)構(gòu)進(jìn)行。例如, www.myschool.edu 首先由根服務(wù)器解析,該根服務(wù)器指向edu域名服務(wù)器,再指向 myschool. edu 的一個(gè)名稱服務(wù)器,然后將 www.myschool.edu 解析為一個(gè) IP 地址。這種層次結(jié)構(gòu)允許高度并行的名稱解析和完全分布式管理控制,這兩者對(duì)于處理 互聯(lián)網(wǎng)命名的規(guī)模至關(guān)重要。
4. 互聯(lián)網(wǎng)成功的秘密
本文試圖將互聯(lián)網(wǎng)難以理解的復(fù)雜性降低為一小組設(shè)計(jì)選擇:
- 服務(wù)模型
- 四層架構(gòu)
- 三個(gè)關(guān)鍵機(jī)制(路由,可靠性和分辨率)
理解這些決定背后的原因不足以理解當(dāng)今互聯(lián)網(wǎng)的復(fù)雜性,但足以設(shè)計(jì)一個(gè)具有大致相同屬性的新互聯(lián)網(wǎng)。不幸的是,這種簡(jiǎn)單性并不足以解釋互聯(lián)網(wǎng)的長壽,為什么互聯(lián)網(wǎng)的設(shè)計(jì)在處理速度、規(guī)模、范圍、技術(shù)和使用方面的巨大變化方面如此成功呢?
4.1 質(zhì)樸
互聯(lián)網(wǎng)沒有設(shè)法滿足所有可能的應(yīng)用要求,而是采用了一種非常有限但非常普遍的服務(wù)模式,這種模式?jīng)]有任何保障。于是再對(duì)智能設(shè)備和非智能網(wǎng)絡(luò)上:
- 允許新的應(yīng)用程序蓬勃發(fā)展,因?yàn)榛ヂ?lián)網(wǎng)沒有被定制到任何具體的應(yīng)用需求;
- 利用主機(jī)的能力,以各種方式適應(yīng)變化無常的最佳互聯(lián)網(wǎng)服務(wù)(例如,通過速率適應(yīng),緩沖和重傳) ;
- 能夠快速提高網(wǎng)絡(luò)速度,服務(wù)模式是相對(duì)簡(jiǎn)單的。
如果因特網(wǎng)采用了一種更為復(fù)雜的服務(wù)模式,它可能會(huì)將自己局限于創(chuàng)建時(shí)存在的應(yīng)用程序要求,可以用當(dāng)時(shí)可用的技術(shù)實(shí)現(xiàn)。這將導(dǎo)致一種針對(duì)少數(shù)應(yīng)用程序的復(fù)雜設(shè)計(jì)和迅速過時(shí)的技術(shù),這是短期成功但長期失敗的根源。
4.2 模塊化
四層互聯(lián)網(wǎng)架構(gòu)的模塊化導(dǎo)致了清晰的責(zé)任劃分: 網(wǎng)絡(luò)基礎(chǔ)設(shè)施(L1/L2/L3)支持更好的數(shù)據(jù)包傳遞(在容量、覆蓋范圍和彈性方面) ,而應(yīng)用程序(由 L4協(xié)助)為用戶創(chuàng)建基于這種數(shù)據(jù)包傳遞服務(wù)模型的新功能。因此,這種架構(gòu)使得兩種截然不同的生態(tài)系統(tǒng),即網(wǎng)絡(luò)基礎(chǔ)設(shè)施和互聯(lián)網(wǎng)應(yīng)用得以獨(dú)立地繁榮發(fā)展。
然而,互聯(lián)網(wǎng)的模塊化超越了其正式的體系結(jié)構(gòu),在其標(biāo)準(zhǔn)驅(qū)動(dòng)的基礎(chǔ)設(shè)施范圍內(nèi),最大限度地實(shí)現(xiàn)了自治的更一般方法,這與電話網(wǎng)絡(luò)更嚴(yán)格的一致性形成了鮮明的對(duì)比。例如,對(duì) AS 的唯一要求是其路由器支持 IP 并參與域間路由協(xié)議 BGP。否則,每個(gè)系統(tǒng)都可以部署任何 L1和 L2技術(shù)以及任何域內(nèi)路由協(xié)議,而無需與其他系統(tǒng)協(xié)調(diào)。類似地,各個(gè)命名域必須支持 DNS 協(xié)議,否則可以采用它們選擇的任何名稱管理策略和名稱解析基礎(chǔ)結(jié)構(gòu)。這種基礎(chǔ)結(jié)構(gòu)的自主性允許出現(xiàn)不同的操作實(shí)踐。例如,一個(gè)大學(xué)校園網(wǎng)絡(luò)、一個(gè)超大規(guī)模的數(shù)據(jù)中心網(wǎng)絡(luò)和一個(gè) ISP 骨干網(wǎng)絡(luò)有著非常不同的運(yùn)營需求; 互聯(lián)網(wǎng)固有的自主性使得它們能夠以自己的方式滿足自己的需求,并且隨著時(shí)間的推移不斷發(fā)展。
4.3 失敗是常見情形
隨著系統(tǒng)規(guī)模的擴(kuò)大,在任何時(shí)候,系統(tǒng)的某些組件發(fā)生故障的可能性越來越大。因此,通常會(huì)認(rèn)為按照算法復(fù)雜性或狀態(tài)爆炸來擴(kuò)展,而有效地處理故障也是一個(gè)關(guān)鍵的可擴(kuò)展性要求。與期望正常運(yùn)行并進(jìn)入特殊模式以從故障中恢復(fù)的系統(tǒng)不同,幾乎所有的互聯(lián)網(wǎng)機(jī)制都將故障視為常見事件。
例如,在基本的路由算法中,無論是由于鏈路故障還是由于環(huán)路的重新計(jì)算,路由的計(jì)算都以相同的方式進(jìn)行。類似地,當(dāng)一個(gè)數(shù)據(jù)包丟失時(shí),它必須被重新傳輸,但是這種重新傳輸預(yù)計(jì)會(huì)頻繁發(fā)生,而且在傳輸協(xié)議中并不是特殊情況。這種將失敗視為常見案例的設(shè)計(jì)風(fēng)格,是谷歌等構(gòu)建超大規(guī)模基礎(chǔ)設(shè)施的基礎(chǔ),這種風(fēng)格最初是在互聯(lián)網(wǎng)上開創(chuàng)的。
4.4 粗略共識(shí)和可運(yùn)行代碼
互聯(lián)網(wǎng)發(fā)明者沒有采用當(dāng)時(shí)電信世界中流行的正式設(shè)計(jì)委員會(huì),而是明確地選擇了另一條道路: 鼓勵(lì)較小的團(tuán)體構(gòu)建可行的設(shè)計(jì),然后由一個(gè)社區(qū)選擇采用哪種設(shè)計(jì)。大衛(wèi) · 克拉克是互聯(lián)網(wǎng)架構(gòu)的領(lǐng)袖之一,他在一次演講中說: “我們拒絕國王、總統(tǒng)和投票。我們相信粗略的共識(shí)和可運(yùn)行的代碼。”這種平等主義精神延伸到互聯(lián)網(wǎng)作為連接所有用戶的統(tǒng)一交流平臺(tái)的共同愿景。因此,互聯(lián)網(wǎng)的發(fā)展不僅受到純技術(shù)決策的影響,而且受到早期互聯(lián)網(wǎng)社區(qū)對(duì)連接世界的共同平臺(tái)價(jià)值以及他們對(duì)實(shí)現(xiàn)這一愿景的共同所有權(quán)的信念影響。
5. 沒有完美
有許多領(lǐng)域的互聯(lián)網(wǎng)的設(shè)計(jì)是次優(yōu)解,但其中大多數(shù)是低層次的細(xì)節(jié),不會(huì)改變高層次的表示。互聯(lián)網(wǎng)設(shè)計(jì)中有三個(gè)領(lǐng)域存在著更多的基本問題。
5.1 安全性
許多人將互聯(lián)網(wǎng)安全的糟糕狀況歸咎于安全性,認(rèn)為安全性并不是其設(shè)計(jì)的首要考慮因素,盡管面對(duì)失敗時(shí)的處理能力確實(shí)是一個(gè)重要的考慮因素。這種批評(píng)是錯(cuò)誤的,原因有兩個(gè):
(1)在一個(gè)相互聯(lián)系的世界中,安全性是一個(gè)比網(wǎng)絡(luò)安全更復(fù)雜和難以捉摸的目標(biāo),而互聯(lián)網(wǎng)只能確保后者;
(2)雖然互聯(lián)網(wǎng)架構(gòu)本身并不提供網(wǎng)絡(luò)安全,但有一些協(xié)議和技術(shù),其中一些正在廣泛使用,可以在很大程度上實(shí)現(xiàn)了這些安全性。
更準(zhǔn)確地說,如果能確保下列屬性是傳輸兩個(gè)主機(jī)之間的數(shù)據(jù):,那么就可以說網(wǎng)絡(luò)是安全的:
- 主機(jī)之間的連接是合理可靠的(可用性) ;
- 接收方可以告訴知道數(shù)據(jù)的來源;
- 數(shù)據(jù)在傳輸中沒有被篡改完整性) ;
- 數(shù)據(jù)沒有被任何中間人讀取,沒有人窺探一個(gè)鏈接并清楚哪個(gè)主機(jī)正在交換數(shù)據(jù)包(隱私)。
后三種一般可以通過加密協(xié)議來保證。互聯(lián)網(wǎng)的可用性容易受到分布式拒絕服務(wù)(DDoS)攻擊,其中許多主機(jī)被當(dāng)作了機(jī)器人使目標(biāo)的流量過載。有一些技術(shù)可以過濾掉這種攻擊性流量,但它們只是部分有效。可用性還受到 BGP 易受攻擊的威脅,因?yàn)?AS的路由存在漏洞; 加密解決方案是可用的,但它們沒有得到廣泛部署。因此,有一些加密協(xié)議和緩解方法可以使因特網(wǎng)在很大程度上滿足安全網(wǎng)絡(luò)的定義。
然而,未能使互聯(lián)網(wǎng)成為一個(gè)固有的安全網(wǎng)絡(luò)絕對(duì)不是當(dāng)前安全問題的主要原因,安全網(wǎng)絡(luò)不能防止主機(jī)軟件的不安全性。例如,如果一個(gè)應(yīng)用程序被設(shè)計(jì)為泄露其用戶的信息,或者冒充其用戶執(zhí)行不必要的金融交易,那么網(wǎng)絡(luò)幾乎無法阻止這種惡意行為。如果用戶無意中下載了惡意應(yīng)用程序,或者某些攻擊(如緩沖區(qū)溢出)將一個(gè)良性應(yīng)用程序變成了惡意應(yīng)用程序,那么主機(jī)就可能被感染。關(guān)于互聯(lián)網(wǎng)安全性的指責(zé)通常指的是在主機(jī)上放置惡意軟件的容易性,但這主要不是一個(gè)網(wǎng)絡(luò)安全問題。
5.2 網(wǎng)絡(luò)內(nèi)分組處理
早期的互聯(lián)網(wǎng)設(shè)計(jì)者認(rèn)為,網(wǎng)絡(luò)基礎(chǔ)設(shè)施應(yīng)該通常集中于數(shù)據(jù)包傳輸,避免更高層次的功能,但是目前幾乎每個(gè)運(yùn)營的網(wǎng)絡(luò)都違反了所謂的網(wǎng)絡(luò)內(nèi)數(shù)據(jù)包處理的規(guī)則。現(xiàn)代網(wǎng)絡(luò)有許多中間地帶,它們提供了不只是傳輸?shù)墓δ埽绶阑饓?控制哪些數(shù)據(jù)包可以進(jìn)入網(wǎng)絡(luò))、廣域網(wǎng)優(yōu)化(通過緩存以前的數(shù)據(jù)來提高網(wǎng)絡(luò)效率)和負(fù)載均衡(將請(qǐng)求導(dǎo)向負(fù)載不足的主機(jī))。
2012年的一項(xiàng)調(diào)查顯示,大約三分之一的網(wǎng)絡(luò)組件是中間件,三分之一是路由器,三分之一是交換機(jī)。其中一些網(wǎng)內(nèi)處理功能部署在單個(gè)企業(yè)內(nèi)部,以提高其內(nèi)部效率; 這種行為只在企業(yè)網(wǎng)內(nèi)產(chǎn)生影響,因此被廣泛視為一種可接受的現(xiàn)實(shí)。此外,正如下面所討論的,一些云和內(nèi)容提供商已經(jīng)部署了大型專用網(wǎng)絡(luò),部署網(wǎng)內(nèi)功能(特別是斷流、緩存和負(fù)載均衡) ,降低了延遲,提高客戶可見的可靠性。
5.3 缺乏進(jìn)化能力
由于每個(gè)路由器都實(shí)現(xiàn)了 IP 協(xié)議,因此很難改變互聯(lián)網(wǎng)的服務(wù)模式。最近由于 IPv4地址短缺而加速過渡到 IPv6的過程,也保留了相同的服務(wù)模式。幾十年來,互聯(lián)網(wǎng)一直沒有重大的架構(gòu)變化,沒有可行的方案替代互聯(lián)網(wǎng)。然而,中央控制的數(shù)據(jù)中心部署的大型專用網(wǎng)絡(luò)通過其網(wǎng)內(nèi)處理為客戶提供優(yōu)越的服務(wù),今天的大多數(shù)客戶端流量要么通過本地控制中心緩存其原始 AS 服務(wù),要么直接使用從源 AS 到具有其專用網(wǎng)內(nèi)處理中心的大型專用網(wǎng)絡(luò)。中央控制中心的大型專用網(wǎng)絡(luò)與云和內(nèi)容服務(wù)垂直整合,這些服務(wù)是現(xiàn)在比 ISP 更占主導(dǎo)地位的經(jīng)濟(jì)力量。
因此,已經(jīng)開始看到了一個(gè)新的全球基礎(chǔ)設(shè)施的過渡,這些私有網(wǎng)絡(luò)已經(jīng)取代了當(dāng)前互聯(lián)網(wǎng)的幾乎所有流量的最后一公里,這將標(biāo)志著互聯(lián)網(wǎng)經(jīng)濟(jì)時(shí)代的結(jié)束,當(dāng)時(shí)它沒有真正的競(jìng)爭(zhēng)對(duì)手,雖然互聯(lián)網(wǎng)面臨著許多挑戰(zhàn),但是,對(duì)于互聯(lián)網(wǎng)的未來,沒有一個(gè)挑戰(zhàn)比解決兩種愿景的分歧更為重要: 一種愿景是使早期互聯(lián)網(wǎng)社區(qū)活躍起來的,即一個(gè)統(tǒng)一的互聯(lián)網(wǎng)將所有用戶連接起來,基本上與端點(diǎn)提供的服務(wù)脫節(jié); 另一種愿景是以新興的大型私有網(wǎng)絡(luò)為代表,在這種網(wǎng)絡(luò)中使用網(wǎng)內(nèi)處理提供了更好的性能。
6. 一句話小結(jié)
互聯(lián)網(wǎng)是一個(gè)工程奇跡,體現(xiàn)了非常大膽且有預(yù)見的設(shè)計(jì)決策。不要讓互聯(lián)網(wǎng)的復(fù)雜性掩蓋了其核心設(shè)計(jì)的簡(jiǎn)單性和所取得的成就,不要忘記導(dǎo)致互聯(lián)網(wǎng)誕生的勇氣、社區(qū)精神和高瞻遠(yuǎn)矚,這或許是互聯(lián)網(wǎng)更有價(jià)值的一個(gè)方面。