計算機網絡問題與解決方案:
一種建構彈性現代網絡的創新方法
Computer Networking Problems and Solutions:
An Innovative Approach to Building Resilient, Modern Networks

魯斯·懷特(Russ White)
伊桑·班克斯(Ethan Banks)
曹洪偉 石濤聲 譯
第1章
Computer Networking Problems and Solutions: An Innovative Approach to Building Resilient, Modern Networks
基 本 概 念
學習目标
- 閱讀完本章,讀者應該能夠:
- 了解業務驅動和網絡工程的關系
- 了解電路交換和分組交換的差別
- 了解電路交換和分組交換的優缺點
- 了解網絡複雜性和複雜性權衡的基本概念
網絡通常被用來做這樣一件事,即在連接配接的系統之間傳輸資訊。這個任務看起來簡單,但是關于其最佳方法的讨論(或者争論)卻長期存在,有時來得比陽光還要熱烈,而且經常與一些相當絕對的人和觀點糾纏在一起。這個争論曆史可以分成多個互相重疊的階段,每個階段對應一個不同的問題:
- 網絡應該是電路交換還是分組交換?
- 分組交換網絡使用固定長度幀還是可變長度幀?
- 計算網絡中最短路徑集的最佳方法是什麼?
- 分組交換網絡如何與服務品質(QoS)互相作用?
- 控制平面應該是中心化的還是去中心化的?
其中一些問題早已得到了解答,最常見的方法是将每個問題的極端方案混合成一個解決方案,這些方案有時顯得混亂但通常總是有用的。另一些問題仍然很活躍,尤其是最後一個問題,也許在20年後讀者才可能看到這個問題的答案。
本章介紹了網絡工程領域的發展曆史或各個階段,并在這個架構下介紹了本書所使用的基本術語和概念。本章是第一部分和第二部分的基礎:轉發(資料)平面和控制平面。第三部分是網絡設計概述,也是建立在第一部分和第二部分的基礎之上。本書的最後一部分着眼于一些可能塑造未來的具體技術和趨勢—不僅僅是網絡工程,而是資訊生産和處理的整個過程。
1.1 是藝術還是工程
首先要問的一個問題是:網絡工程是一門藝術,還是一項真正的工程呢?許多工程領域在初始時更像是一門藝術。例如,在20世紀70年代早期,關于電子管、線圈和變壓器等電子裝置的工作,在很大程度上被認為是一門藝術。到20世紀80年代中期,電子産品已經變得無處不在,這開始了一個比任何标準化更嚴酷的商品化過程。那時,電子學被認為是工程而不是藝術。到21世紀頭10年,電子産品“僅僅是構成計算機的元件”。在電子産品的設計和故障排除方面仍有一些藝術,但總體來說,這些創作更加專注在工程原理上。問題從“如何做電子産品”轉換到“做電子産品的最廉價方式是什麼”,或者“如何把它們做到最小”,或者其他一些在早期被認為是次要的問題。或許可以用一種比例的方式來勾勒電子學的發展軌迹:也許(非常粗略的估計),電子學已從80%的藝術和20%的工程發展到現在80%的工程和20%的藝術。
網絡工程又是怎樣的呢?它也會經過相同的階段,最終進入80%的工程和20%的藝術的範圍嗎?似乎并非如此,有以下幾個原因。網絡工程運作在一個很大的虛拟空間中,盡管存線上纜、裝置,但協定、資料和功能特性都建構在實體基礎設施之上,并非有形的實體設施。不像電子産品,你可以指着一個實體對象說“這是産品”,但網絡并非實體存在。換句話說,網絡是一種概念性存在—通過協定和資料模型把各種獨立元件連接配接在一起,進而形成網絡。這意味着設計選擇幾乎是無限可變的,而且是可延展的。每一個問題都可以被處理、評估和設計得比電子産品更具體。隻要有新的問題需要解決,就會有新的解決方案被開發、部署,并最終從網絡中删除。或許一種可行的類比是對比軟體應用程式和各種計算裝置之間的關系,無論計算裝置變得多麼标準化,在上面運作的軟體應用程式仍然有幾乎無限的選擇。
圖1-1從一種視角闡述了網絡與業務之間的适用關系。
圖1-1 網絡和業務之間的适用關系,第一個視角
在圖1-1中,實灰色曲線表示業務的增長。垂直和水準運作的黑折虛線表示網絡容量。很多時候網絡是超配的,消耗了業務資金來維持閑置的網絡容量;這些超配顯示在灰線标示的陰影區域中。還有一些時候,網絡處于資源緊張的狀态;在這些深灰色填充的陰影區域中,業務可能增長得很快,但網絡正在阻礙它的發展。網絡架構和設計的諸多目标之一(這更多是一個架構問題,而不是嚴格的設計問題;請參見《網絡架構的藝術》一書)是将這些線更緊密地聯系在一起,使得它們盡量靠近乃至重合。完成這項工作需要創造性和前瞻性思維以及解決問題的能力。工程師必須提出這樣的問題:“如何建構網絡,使其能夠根據業務需求而彈性擴充?”這不僅僅涉及網絡的規模和大小;而且,業務的本質甚至可能随着時間的推移而發生變化,進而導緻應用程式、運維的過程和步調随之變化。網絡必須有一個能夠按需而變的架構,而不是引入僵化或固化的系統和過程,那樣将最終導緻網絡以災難性方式失敗。關于網絡的這部分工作通常被認為是藝術而不是工程,在整個商業世界以某種方式發生變化之前,它不太可能改變。
圖1-2描述了業務将網絡工程作為藝術來驅動的另一種視角。
圖1-2 網絡産品的功能與使用對比,第二個視角
在圖1-2中,時間從左向右增加,網絡功能的數量從下向上增加。該圖解釋了随着時間的推移向網絡産品添加的附加功能。網絡營運商A一開始隻需要一個小功能集,但所需的功能集将随着時間的推移而增加;其他三個網絡類似。運作在這些網絡上的所需功能集在一定程度上是重疊的,然而在某種程度上又總是不同的。如果供應商希望能夠銷售單一産品(或産品線),并面向所有的四個網絡,就需要實作每一個網絡所需的每一個獨特功能。網絡功能的完整集合由圖右邊的頂點描繪。每個網絡都有一些對網絡産品來說不必要的功能,這些不必要的功能也稱為代碼膨脹(code bloat)。
盡管沒有使用這些功能,但每一個功能仍可能存在安全漏洞、必須測試的代碼、與正在使用的功能進行互動的代碼等。換句話說,每一個未使用的功能實際上都由網絡營運商擔責。理想的解決方案可能是為每個網絡定制裝置,隻包含必需的功能,但這通常不是供應商或網絡營運商能夠選擇的。相反,網絡工程師必須在必需的功能和可用功能之間取得某種平衡,而這個過程絕對是一門藝術,而不是工程。
隻要是網絡的建構方式和業務使用網絡的方式存在不比對的地方,就存在着藝術和工程之間的互相拉鋸。當然,在網絡工程領域中,藝術和工程的所占比例會根據網絡、工具和時間的不同而有所不同,但與電子工程等領域相比,藝術成分在網絡領域的占比可能更多。
注意:有些人可能反對在本節中使用“藝術”(art)這個詞。當然,如果能夠使本節中的概念更容易了解,那麼用匠藝(craft)來代替藝術也是可以的。
1.2 電路交換
計算機網絡世界的第一次大讨論是“網絡應該是電路交換還是分組交換”。這兩者之間的根本差別是關于電路的概念—從發送方和接收方來“看”,網絡是作為一個單一的電路或者連接配接,在它們開始通信前需要預先配置(或設定)一組特定的屬性,還是将網絡視為共享資源,在這裡,資訊隻是“随意”生成和傳輸?前者被認為是電路交換,而後者則是分組交換。電路交換傾向于提供更多的流量和傳遞保證,而分組交換傾向于以更低的成本傳遞資料,這是網絡工程諸多權衡的第一個。圖1-3以時分多路複用(Time Division Multiplexing,TDM)為例解釋了電路交換。
圖1-3 基于電路交換的時分多路複用
在圖1-3中,任何兩個裝置之間的鍊路帶寬被分成8個相等的部分(時隙time slot);A發往E的資料使用時隙A1,發往F的資料使用時隙A2;B發往E的資料使用時隙B1,發往F的資料使用時隙B2。每一條資訊都是固定長度,是以每一條資訊都可以放在正在行進的資料流的單個時隙裡(是以,每一資料塊代表了線路上的一段固定時間或時隙)。假設某個地方有一個控制器,在流量要經過的每個段上配置設定一個時隙。
-
對于[A,E]的流量:
對C而言:來自A的時隙1被交換到指向D的時隙1。
對D而言:來自C的時隙1被交換到指向E的時隙1。
-
對于[A,F]的流量:
對C而言:來自A的時隙4被交換到指向D的時隙4。
對D而言:來自C的時隙4被交換到指向F的時隙3。
-
對于[B,E]的流量:
對C而言:來自B的時隙4被交換到指向D的時隙7。
對D而言:來自C的時隙7被交換到指向E的時隙4。
-
對于[B,F]的流量:
對C而言:來自B的時隙2被交換到指向D的時隙2。
對D而言:來自C的時隙2被交換到指向F的時隙1。
網絡中的資料包處理裝置無須知道資料包中的比特流去向;C隻需在每一時間幀獲得資料流A中時隙1的所有内容,并将其複制到出口D的時隙1,并且D把入口C的時隙1複制到出口E的時隙1,就完成了A向E的通信傳輸。關于這種流量處理有一點值得注意:轉發流量時,網絡中的任何裝置實際上都不需要知道源位址或目的位址是什麼。通過網絡傳輸的資料塊不需要包含源位址或目的位址;它們去往何處,它們來自何方,這些決策都基于控制器對每個鍊路中開放時隙的知識。配置設定給任何特定裝置到裝置的通信時隙稱為電路,因為它是用于一對裝置之間通信的帶寬和網絡資源。
電路交換有兩個主要優點:
- 裝置不需要讀報頭資訊或者不需要做任何複雜的處理就可以交換資料包。這在網絡發展的早期非常重要,當時的硬體隻有少量的半導體和門電路,線路速度較低,并且在裝置中處理一個資料包的時間會在整個網絡的資料包延遲中占很大比例。
- 控制器知道網絡中所有邊緣裝置的可用帶寬和流量。假設有足夠的可用帶寬,規劃流量以建立通過網絡的最優路徑就簡單多了。
電路交換也有缺點,包括:
- 控制器的複雜性随着網絡和所提供服務規模的擴大而顯著增加。控制器上的負載可能會變得非常大,事實上,這會導緻網絡中斷。
- 每個鍊路上的帶寬沒有得到最佳使用。在圖1-3中,包含“*”的時間塊(或單元)本質上是浪費的帶寬。時隙被提前配置設定到一個特定的電路:即使A沒有向E發送資料,用于[A,E]流量的時隙也不能被“借用”到[A,F]的流量中。
- 從網絡角度來說,響應拓撲變化所需的時間可能相當長,本地裝置必須發現變化,将其報告給控制器,控制器必須沿着每個受影響的流量路徑重新配置每個網絡裝置。
TDM系統為今天所用網絡的發展做出了貢獻。特别是,TDM系統促進了許多關于将資料分解成分組以便網絡傳輸的早期讨論,并為以後在QoS和流量控制方面的工作奠定了基礎。這些早期的TDM系統給大型網絡世界饋贈了一個相當重要的思想,那就是把網絡劃分為多個平面。
注意:本章後面簡要地介紹了服務品質(QoS),第8章對此做了更深入的讨論。
具體地說,TDM系統被劃分為3個平面:
- 控制平面是一組協定和流程,用于建構網絡裝置轉發流量所需的資訊。在電路交換網絡中,控制平面是完全獨立的平面;在控制器和單個裝置之間通常有一個單獨的網絡(盡管并不總是如此,特别是在較新的電路交換系統中)。
- 資料平面(也稱為轉發平面)是網絡中傳遞資訊的路徑。這包括将線纜上接收到的信号解碼成幀,處理它們,并根據實體傳輸系統将它們進行編碼,然後推回到線纜上。
- 管理平面側重于網絡裝置的管理,包括監控可用記憶體和隊列深度、監控裝置何時将網絡傳輸的資訊丢棄等。很難區分網絡中的管理平面和控制平面。例如,如果裝置被手動配置為以特定的方式轉發流量,那麼這是管理平面的功能(因為裝置正在配置)還是控制平面的功能(因為這是關于如何轉發資訊的資訊)呢?
注意:這個問題沒有明确的答案。然而在本書中,任何影響網絡轉發流量的方式都被認為是控制平面的一部分,而任何影響裝置實體或邏輯狀态(如接口狀态)的行為都被認為屬于管理平面功能。但不要期望這些定義在現實世界中總是成立。
注意:幀中繼、SONET、ISDN和X.25是電路交換技術的例子,在本書寫作過程中,其中的一些技術仍在使用。參見“拓展閱讀”部分可以了解這些技術。
1.3 分組交換
在20世紀60年代早期到中期,分組交換尚未流行。在此之前,很多人都在重新思考網絡的建構方式,并在考慮電路交換模式的替代方案。蘭德公司的保羅·巴蘭(Paul Baran)提出了将分組交換網絡作為網絡生存性的解決方案;與此同時,英國的唐納德·戴維斯(Donald Davies)也提出了類似的系統。這些想法進入勞倫斯利弗莫爾實驗室,促使第一個分組交換網絡(稱為Octopus)在1968年投入使用。ARPANET—一個實驗性的分組交換網絡,也在不久後的1970年開始運作。
1.3.1 分組交換操作
注意:第7章将更詳細地讨論分組交換的實際過程。
電路交換和分組交換的本質差別在于單個網絡裝置在流量轉發中所扮演的角色,如圖1-4所示。
在圖1-4中,A生成兩個資料塊。每一個資料塊都包含一個報頭描述,至少會描述目的位址(在每個資料塊中以H表示)。這個完整的資訊包—原始資料塊和報頭稱為一個資料包。報頭還可以描述資料包中的内容,包括在處理資料包時應采取的一些特殊處理指令。這些資料有時被稱為中繼資料,或“描述資料包中資料的資料”。
圖1-4 分組交換網絡
這裡A産生兩個資料包:A1的目的位址是E,A2的目的位址是F。B也發送兩個資料包:B1的目的位址是F,B2的目的位址是E。當C收到這些包的時候,讀取資料包報頭的一小部分資訊(通常叫作一個字段)來判定目的位址。然後,C查詢一個本地表來判定向哪個出站接口發送這個資料包,D也是如此,通過合适的出站接口向目的位址轉發資料包。
這種流量轉發的方式稱為逐跳轉發,因為網絡中的每個裝置都對每個資料包的轉發位置做出完全獨立的判定。每個裝置查詢的本地表稱為轉發表;轉發表通常不隻是一個表,而是許多個表,可能包括路由資訊庫(RIB)和轉發資訊庫(FIB)。
注意:關于如何建構以及如何使用這些表,第7章中有更詳細的解釋。
在原有的電路交換系統中,控制平面與資料包轉發完全分離。随着電路交換向分組交換變遷,相應地控制器的集中決策開始向網絡自身運作的分布式協定轉移。對于後者,每個節點都能夠在本地做出自己的轉發決策。網絡中的每個裝置都運作分布式協定,以擷取建構這些本地表所需的資訊。這種模型被稱為分布式控制平面,是以,盡管模型的意義并不相同,但控制平面的概念隻是簡單地從一個模型轉移到了另一個模型上。
注意:分組交換網絡可以采用集中式控制平面,電路交換網絡也可以采用分布式控制平面。在最初設計和部署分組交換網絡時,它們通常使用分布式控制平面。軟體定義網絡(SDN)将集中式控制平面的概念帶回到了分組交換網絡的世界。
分組交換網絡相對于電路交換網絡的第一個優勢是逐跳轉發模式。由于每個裝置都可以做出完全獨立的轉發決策,是以可以根據網絡拓撲的變化動态地轉發資料包,進而消除了與控制器通信并等待決策的需要。隻要源位址和目的位址之間至少有兩條路徑(網絡是雙向連接配接的),源位址傳遞給網絡的資料包最終将由網絡傳遞給目的位址。
分組交換網絡相對于電路交換網絡的第二個優勢是分組交換網絡使用帶寬的方式。在電路交換網絡中,如果特定的電路沒有使用(實際上即TDM示例中的一個時隙),那麼這個時隙就會被浪費掉。在逐跳轉發中,每個裝置都可以最好地利用每個出站鍊路上可用的帶寬來承載必要的流量負載。雖然這在本地裝置上更複雜,但在全局上更簡單,并且可更好地利用網絡資源。
分組交換網絡的主要缺點是增加了額外的複雜性,特别是在轉發的過程中。每個裝置必須能夠讀取資料包報頭,在本地表中查找目的位址,然後根據表中的查詢結果轉發資訊。在早期的硬體中,這是困難而耗時的任務;此時電路交換一般會比分組交換快。但随着硬體的不斷改進,可變長度分組的交換速度通常與固定長度分組的交換速度非常接近,進而使得分組交換與電路交換的差距并不大。
1.3.2 分組交換網絡中的流量控制
在電路交換網絡中,控制器通過配置設定從源位址到目的位址的時隙來配置設定每個電路的特定帶寬。如果發送方要發送的流量比時隙所支援的要多,會發生什麼情況呢?答案很簡單—它做不到。是以,在某種意義上,控制資料包流量的能力是建立在電路交換網絡上的,其發送的流量不能超過網絡的轉發量,因為發送方可以用來發送資訊的“空間”是預先配置設定的。
那麼在分組交換網絡中是怎樣的情形呢?如果在如圖1-4所示的網絡中所有連接配接具有相同的鍊路速度,那麼,如果A和B都想使用整個C的鍊路容量會發生什麼呢?如果CD之間鍊路的容量大小是需要處理流量的一半,對于将流量全部發送到D,C将如何決定?這就是流量控制技術的用武之地。通常,它們是作為一個單獨的協定/規則集實作的,依賴于底層網絡,通過在兩個通信裝置之間建立一個虛拟電路來“組織”資料包的傳輸。
注意:第2章詳細讨論了流量控制和差錯控制。
傳輸控制協定(TCP)為基于分組交換的網絡協定(IP)提供了流量控制。該協定是在1973年由Vint Cerf和Bob Kahn首先提出的。
協定戰争
在分組交換網絡的發展過程中,開發了許多不同的協定(或協定棧)。随着時間的推移,所有這些協定都被放棄了,轉而支援IP協定棧。例如,Banyan Vines有自己基于IP的協定棧,稱為VIP(Vines Internet Protocol),而Novell NetWare也有自己的基于IPX的協定棧。其他标準化組織同樣建立了各自的标準協定族,如國際電信聯盟(ITU)就建構了無連接配接模式網絡服務(Connectionless Mode Network Service,CLNS)的協定族。
為什麼這些協定族會半途而廢呢?因為其中一些協定是私有的,許多政府和大型組織出于各種原因拒絕了分組交換網絡中具有私有性質的解決方案。私有協定通常由少數人群開發和維護,缺乏深思熟慮。基于标準的協定可能更複雜,但它們也往往由更多經驗豐富的工程師開發和維護。基于CLNS的協定族在過去的一段時間裡一直是有力的競争者,但它從未真正在全球網際網路上流行起來,而全球網際網路在當時正成為一股重要的經濟力量。主要存在一些具體的技術原因,例如,CLNS不對線路編号,而是對主機編号。可達性資訊的聚合(在本書後面會更詳細地介紹此概念)由此受到了許多方面的限制。
關于CLNS和IP協定族之間的讨論有一個有趣的參考文獻,即《The Elements of Networking Style》。
1.4 固定與可變長度資料幀
在20世紀80年代後期,一個新的話題讨論席卷了網絡工程界—異步傳輸模式(Asyn-chronous Transfer Mode,ATM)。由于對高速電路的需求一直存在,而且當時基于目的位址的資料包交換技術進展緩慢,導緻新傳輸方式ATM的興起,後者最終重新配置了用于現代網絡的整套協定(或者協定棧,因為每個協定都形成了一個層,像一個“多層蛋糕”)。ATM結合了電路交換中的固定長度信元(或資料包)與分組交換的報頭(盡管大大簡化了),産生了一個介于兩者之間的技術解決方案。ATM有兩個關鍵點:标簽交換和固定呼叫單元;圖1-5展示了标簽交換。
圖1-5 标簽交換
在圖1-5中,G給H發了一個資料包。在接收這個包的過程中,A檢查本地表,發現指向H的下一跳是C。A的本地表還指定了一個标簽(顯示為L),而不“僅僅”是關于将資料包轉發到何處的資訊。A将此标簽插入資料標頭部的專用字段中,并将其轉發給C。當C接收到資料包時,它不需要讀取報頭中的目的位址。相反,它隻是讀取标簽,這是一個短的、固定長度的字段。在本地表中查找這個标簽,C可獲知轉發流量給D就能夠到達目的位址H。這個标簽非常小,很容易被轉發裝置處理,進而使交換速度更快。
從某種意義上說,标簽還可以“包含”處理資料包的資訊。例如,如果G和H之間實際上有兩個流,則可以通過網絡為每個流配置設定不同的标簽(或一組标簽)。攜帶一個标簽的資料包可以優先于攜帶另一個标簽的資料包,是以網絡裝置不需要檢視報頭中的任何字段來确定如何處理特定的資料包。
這可以看作分組交換和電路交換之間的權衡。第一點,雖然每個資料包仍然是逐跳轉發的,但虛拟電路也可以通過網絡的路徑标簽來定義。第二點是ATM也是基于一個固定大小的信元:每個資料包僅限于53個八位組的資訊。固定大小信元看似不起眼,但固定大小的資料包可能會造成巨大的性能差異。圖1-6說明了在固定信元大小中涉及的一些因素。
在圖1-6中,資料包1(A1)從網絡複制到線路卡或接口的記憶體LC1;然後它通過B内部的Fabric結構(位于記憶體插槽之間)傳播到LC2,最終從B的出站接口傳送回網絡。從圖上來看可能顯得微不足道,但對于交換/處理資料包的速度而言,其最重要的因素就是—在記憶體不同插槽間的内部路徑上複制資料包所需的時間。将資訊從記憶體中的一個插槽複制到另一個插槽是裝置完成的最慢操作之一,特别是在古老的處理器上。而使每個資料包的大小相同(固定信元大小)就允許在複制過程中進行代碼優化,進而大大提高了交換速度。
圖1-6 固定信元大小
注意:第7章讨論通過内部Fabric結構交換資料包的過程。
從性能角度來看,資料包2通過B的路徑更糟糕;它首先從網絡複制到本地記憶體中。當通過檢視本地轉發表來确定目标端口時,處理該資料包的代碼意識到資料包必須被分段才能适應出站鍊路[B,C]上允許的最大資料包大小。入站線卡LC1将資料包分段成A1和A2,建立第二個報頭并根據需要調整報頭中的一些值。資料包被分成兩個資料包,即A1和A2。這兩個資料包在通過Fabric結構時,經過兩次操作,最終複制到出站線卡LC2上。通過使用固定大小的信元,ATM避免了幾乎其他所有分組交換系統中由于資料包分段而造成的性能成本(在提出ATM時)。
事實上,ATM的設計不是從網絡核心開始,再擴充到網絡邊緣的。為什麼這樣呢?第一個原因是信元大小的奇怪選擇。為什麼是53個八位組呢?答案很簡單,也許還有點令人吃驚。ATM不僅試圖取代分組交換網絡,而且試圖取代當時基于電路交換技術的話音網絡。在統一這兩種技術時,服務提供者可以在一套單一的電路和裝置上提供這兩種服務。
對于傳輸語音流量而言,多大的資訊量或資料包大小是理想的呢?大約48個八位組。那麼對于資料傳輸而言,最小的資訊量或資料包大小是多少?大約64個八位組。選擇53個八位組作為這兩種大小的權衡,這對于語音傳輸來說并不完美,因為每個攜帶語音的信元中有5個八位組将被浪費。這對于資料流量來說也并不完美,因為最常見的資料包大小(64個八位組)需要分成兩個單元才能傳送到ATM網絡。在進行這些審議時,一種普遍的想法是,資料傳輸協定能夠調整到較小的信元大小,進而使得53個八位組成為支援各種流量的最佳大小。然而,資料傳輸協定沒有調整。為了傳輸一個64個八位組的資料塊,一個信元将包含53個八位組,而第二個單元則包含9個八位組的有用空間和42個八位組的無用空間。服務提供者發現ATM鍊路上50%或更多的可用帶寬被空閑信元占用—這實際上是浪費帶寬。是以,資料服務提供商停止部署ATM,語音服務提供商也從未真正開始部署ATM,ATM自此凋零。
有趣的是,像ATM這樣的項目“遺産”是如何在其他協定和想法中繼續生存的?标簽交換概念由雅科夫·雷科特(Yakov Rekhter)和其他工程師提出,并發展成為标簽交換技術。該技術保留了ATM在轉發路徑中快速查找的許多基礎優勢,并将有關資料包處理的中繼資料綁定到标簽本身。标簽交換最終發展為多協定标簽交換(Multiprotocol Label Switching,MPLS),後者不僅提供了更快的查找能力,而且提供了标簽棧和虛拟化技術。是以,這一基本思想被采納和擴充,在很大程度上影響了現代網絡協定和設計。
注意:MPLS将在第9章讨論。
ATM的第二個“遺産”是固定信元大小。多年來,基于TCP和IP的主流網絡傳輸協定族允許網絡裝置在轉發資料包的同時對資料包進行分段。然而,衆所周知,這是一種降低網絡性能的方式。一個不分段位辨別添加在IP報頭中,告訴網絡裝置将資料包丢棄而不是将其分段,并且需要投入大量精力來發現任何一對裝置之間可以傳輸的最大資料包。新一代IP協定—IPv6,從協定規範中删除了網絡裝置對資料包的分段。
1.5 無環路徑計算
在網絡工程領域中,過去經常讨論的一個問題是,在分組交換網絡中如何計算無環路徑?這個問題常常使判斷分組交換或電路交換哪個解決方案更好變得更加困難。
在整個網絡工程的曆史中,正如分組交換網絡一直與分布式控制平面相聯系,電路交換網絡與集中式控制平面相聯系,有效地計算無環路徑的問題對判定分組交換網絡是否可行産生了重大影響。
注意:無環路徑将在第二部分詳細讨論。
在網絡工程的早期階段,可用的處理能力、記憶體和帶寬往往非常有限,見表1-1。
表1-1 計算能力、記憶體和帶寬的曆史
在1984年,發生了許多這樣的讨論,對于兩種計算雙向無環路徑的方法,處理器和記憶體數量上的任何差異都會對建構網絡的成本産生重大影響。當帶寬非常昂貴時,減少控制平面傳輸所需的比特數(用來計算一組無環路徑所需的資訊),對網絡能夠處理的使用者流量有很大影響。減少控制操作所需的比特數也對低帶寬下網絡的穩定性有很大影響。
例如,使用類型長度向量(Type Length Vector,TLV)的格式來描述網絡傳輸的控制平面資訊,會在整個資料包上添加幾個八位組的資訊—但在2Mbit/s鍊路的情況下,随着控制平面的負載加劇,其成本遠遠超出協定可擴充性所帶來的長期優勢。
注意:TLV将在第2章介紹。
協定戰争在某些方面非常激烈;他們實施了整個研究項目,撰寫了論文,讨論了為什麼和如何使一種方案優于另一種方案。作為這些争論的一個例子,在網際網路工程工作組(IETF)開發OSPF協定期間一件襯衫上寫着:IS-IS=0。這裡的“IS-IS”指的是中間系統到中間系統(Intermediate System-to-Intermediate System),它是一種最初由國際标準化組織(ISO)開發的控制平面(路由協定)。
多種機制可用來解決網絡中無環路徑計算的問題。最終,有三種常見的解決方案被廣泛地部署和采用:
- 距離向量協定,根據逐跳的路徑代價來計算無環路徑。
- 鍊路狀态協定,通過一個跨網絡裝置的同步資料庫來計算無環路徑。
- 路徑向量協定,根據先前的跳轉記錄來計算逐跳的無環路徑。
關于哪種協定最适合某個特定的網絡,以及出于什麼特殊原因,仍在讨論中。這可能是一場永無止境的讨論,因為這個問題(可能)沒有最終答案。相反,就像将一個網絡與一個企業相比對一樣,使一個特定的控制平面在一個特定的網絡上工作可能總是會涉及某種程度的藝術(或匠藝)。然而,随着網絡速度的提高—在處理能力、記憶體和帶寬方面,問題的緊迫性在很大程度上已經顯現出來。
1.6 服務品質
随着實時流量開始通過分組交換網絡進行傳輸,QoS成為一個主要的問題。語音和視訊都依賴于網絡能夠在主機之間快速傳輸流量(具有低延遲),并且資料包廂隔(抖動)的變化越少越好。關于QoS的讨論實際上是在分組交換網絡的早期階段開始的,在考慮ATM的時期達到了高峰。實際上,ATM的主要優點之一是能夠嚴格地控制資料包在分組交換網絡上的傳輸方式。随着ATM在市場上的失敗,對于需要對抖動和延遲進行嚴格控制的應用程式,出現了兩種截然不同的思路:
這些應用程式永遠不會在分組交換網絡上運作;這些類型的應用程式總是需要在單獨的網絡上運作。
隻要找到一組正确的QoS控制集就可以讓這些應用程式在分組交換網絡上運作。
注意:第8章将詳細讨論服務品質。
大多數供應商和工程師關注的主要應用是語音服務,而最根本的問題是:是否有可能在網絡中提供高品質語音的同時,還能進行大量檔案傳輸和其他非實時通信?鑒于此,他們發明了一些複雜的方案,允許對資料包進行分類和标記(稱為QoS标記),這樣網絡裝置就知道如何正确地處理它們了。為了将這些QoS标記從一種網絡傳輸到另一種網絡,他們開發了映射系統,并投入大量時間和精力來研究排隊機制—在接口發送資料包的順序。圖1-7顯示了一個QoS系統的示例圖,應用程式和QoS标記之間的映射足以說明這些系統的複雜性。
圖1-7 QoS規劃與映射關系
如表1-1所示,鍊路速度的增加對圍繞QoS的讨論産生了兩方面的影響:
- 更快的鍊路顯然可以傳輸更多的資料。由于語音和視訊流在整個帶寬使用中所占的比例越來越小,是以在不同應用程式之間大力平衡帶寬使用的必要性變得不那麼重要了。
- 通過實體晶片将資料包從記憶體轉移到電線上所需的時間随着帶寬的增加而減少。
随着可用帶寬的增加,通過複雜的排隊政策來抵消網絡抖動變得不那麼重要了。新型排隊系統可以更有效地管理不同類型的流量,減少了以細粒度方式标記和處理流量的必要性,進而提高了速度。
這些帶寬的增加通常是将銅纜改為光纖來實作的。光纖不僅可以提供更大的帶寬,而且可以更可靠地傳輸資料。建立實體鍊路的方式也得到了發展,使得它們更能抵抗破損和其他實體問題。帶寬可用性增加的第二個因素是網際網路的發展。随着網絡變得越來越普遍,連接配接越來越緊密,單鍊路故障對可用帶寬的數量和網絡流量的影響越來越小。
随着處理器速度的提高,開發出丢棄和延遲資料包對實時流品質影響較小的系統成為可能。處理器速度的提高也使得采用高效壓縮算法成為可能,減少了每個流的大小。在網絡方面,更快的處理器意味着控制平面可以更快地計算一組無環路徑,減少鍊路和裝置故障的直接和間接影響。
最終,盡管QoS仍然很重要,但可以更加簡化。即使是最難以處理的應用程式,4~6個隊列也足以能夠支撐了。如果需要更多隊列的話,現在的一些系統則可以使用流量工程或主動隊列管理,以便在隊列管理的複雜性和應用程式支援之間進行平衡。
1.7 集中式控制平面的反擊
在20世紀90年代,為了解決分組交換網絡的許多問題,如複雜的控制平面和QoS管理,研究人員開始研究一種叫作主動網絡(Active Networking)的概念。主動網絡的總體想法是,分組交換網絡的控制平面可以并且應該與轉發裝置分離,以便網絡能夠與運作在其上的應用程式互動。
在IETF的轉發和控制單元分離(ForCES)工作組的形成過程中,再次讨論了在分組交換網絡中更清晰地分離控制和資料平面的基本概念。這個工作組主要負責建立一個接口應用程式,該應用程式可用于将轉發資訊安裝到網絡裝置上。該工作組最終于2015年關閉,其标準從未得到廣泛實施。
2006年,研究人員開始尋找一種在分組交換網絡中進行控制平面實驗的方法,而不需要對裝置本身進行代碼修改—這也是一個難題,因為這些裝置中的大多數都被供應商以不可修改的裝置(或黑盒)出售。最終的結果是OpenFlow,即一個允許應用程式直接在轉發表(而不是路由表;在本書第一部分的多處對此做了更充分的解釋)中安裝條目的标準接口。該研究項目作為一個特性被一些供應商采用,許多控制器由供應商和開源項目建立。許多工程師認為,OpenFlow将通過集中式控制平面徹底改變網絡工程。
現實情況可能會大不相同,可能發生的事情是資料網絡世界中一直發生的事情:集中式控制平面中較好的部分将被使用到現有系統中,而完全集中式模型将被丢棄到一邊,進而改變了關于控制平面如何與應用程式及整個網絡互動的想法。
1.8 複雜性
到目前為止所描述的技術(電路和分組交換、控制平面和QoS)都非常複雜。事實上,網絡複雜性的增加似乎沒有盡頭,尤其是在應用程式和企業的需求越來越高的情況下。本節将讨論關于複雜性和網絡的兩個具體問題:
- 什麼是網絡複雜性?
- 網絡複雜性可以“解決”嗎?
本節的最後一部分将考慮一種将複雜性看作一組權衡的方法。
1.8.1 為什麼如此複雜
雖然最顯然的起點可能是複雜性的定義,但從更廣義的角度來看,實際上更有效的思考是為什麼需要複雜性。簡單地說,“解決”複雜性有可能嗎?為什麼不設計更簡單的網絡和協定呢?從長遠來看,為什麼在網絡世界中所有讓事情變得更簡單的嘗試最終都似乎使事情變得更複雜呢?
例如,通過在IP之上(或通過IP)進行隧道傳輸,控制平面的複雜性就會降低,整個網絡就會變得更簡單。那麼,為什麼隧道覆寫最終又會包含如此多的複雜性呢?
這個問題有兩個答案。第一個答案是,人的本性就是如此,工程師們總是會發明數十種不同的方法來解決同樣的問題。在虛拟世界中尤其如此,新的解決方案(相對)易于部署,也相對容易找到前面一組解決方案中的問題,并且(相對)容易稍作變換以創造一種“比舊方案更好的解決方案”。從供應商的角度來看也是如此。當建構新的産品時,通常意味着能夠銷售全新的産品和技術—即使這些技術看起來在很多方面與原來的技術類似。換句話說,虛拟空間非常混亂,因為在那裡建構新事物非常容易。
然而,第二個答案依賴于一個更根本的問題:複雜性對于處理疑難問題的不确定性是必要的。如圖1-8所示。
圖1-8 複雜性、有效性和健壯性
增加複雜性似乎使網絡能夠更容易地處理未來的需求和意外事件,并通過更少的基本功能集提供更多的服務。如果是這樣,為什麼不簡單地在單個網絡上建構一個運作的協定,以處理可能抛出的所有需求,并且能夠處理可以想象的任何事件序列呢?這樣肯定會減少網絡工程師需要處理的可移動元件的數量,讓我們的生活更簡單,對吧?事實上,有許多不同的方法來管理複雜性,例如:
1)将複雜性抽象出來,在系統的每個部分的周圍建構一個黑盒,這樣每個部分和這些部分之間的互動就更容易了解。
2)把複雜性扔到隔壁—将問題從網絡領域轉移到應用領域、編碼領域或協定領域。正如RFC1925所說:“轉移問題比解決問題更容易(例如,将問題轉移到整個網絡體系結構中的不同部分)。”
3)在上面添加另一層,通過添加另一個協定或隧道,将所有的複雜性視為一個黑盒。回到RFC1925:“總是有可能添加另一個中間層。”
4)在複雜性面前不知所措,将它們貼上“遺産”的标簽,并追求一些新鮮事物,後者被認為能夠以一種不那麼複雜的方式解決所有問題。
5)忽視問題并希望它會消失。為異常争辯:“就這一次”,這樣在一個非常緊湊的時間表内,一個特定的業務目标就可以實作,或者解決了一些問題,并且承諾複雜性問題将在“以後”得到處理。
然而,這些解決方案中的每一個都有一組需要考慮和管理的權衡。此外,在某一時刻,任何複雜的系統都會變得健壯而脆弱。當一個系統能夠對預期的環境做出彈性反應時,它是健壯的,但也是脆弱的,一組意想不到的事件會導緻它失敗。下面用現實世界的例子來說明,刀刃需要有一些獨有的特征組合。它們必須有足夠的硬度來支撐邊緣和切割,同時還必須有足夠的柔韌性以在使用過程中微微彎曲,在沒有任何損壞迹象的情況下恢複到原來的形狀,并且在掉落時不被打碎。經過多年的研究和經驗積累,人們終于找到了一種可以用來制作刀刃的合适的金屬。然而,對于哪種材料适合于特定的性能,以及在什麼條件下适合等問題,人們仍在進行長期而深入的技術讨論。
“試圖證明網絡對可預見問題的健壯性,往往會使它在處理不可預見問題時變得脆弱(就是所謂的僵化效應)。賦予同一個網絡以最強大的能力來抵禦不可預測的問題,這必然意味着它不能對可預測的問題處理過于強大。不能對可預測的問題進行太健壯的處理對于避免僵化問題是必要的,但并不一定意味着可以提供處理不可預測的網絡問題的健壯能力。”
—Tony Przygienda
複雜性是必要的,它就不能被“解決”。
1.8.2 定義複雜性
鑒于複雜性是必要的,工程師們需要發現或構模組化型或架構,來學習如何對複雜性進行管理。建構這種模型的最佳起點是一個最根本的問題:從網絡的角度來說,複雜性意味着什麼?你能把一個網絡放在秤上,然後将指針指向“複雜”嗎?是否有一個數學模型,可以輸入一組網絡裝置的配置和拓撲結構,以産生一個“複雜性指數”?尺度、彈性、脆性和優雅的概念與複雜性有什麼關系?建立模型的最好起點就是一個實際例子。
1.控制平面狀态與延展
什麼是網絡延展(stretch)?盡可能以最簡單的術語來說,就是網絡中兩點之間的最短路徑與實際流量路徑的差距。圖1-9說明了這個概念。
圖1-9 以一個小網絡來說明網絡狀态和網絡延展
假設此網絡中每條鍊路的成本為1,則路由器A和C之間的最短實體路徑,也即最短邏輯路徑為[A, B, C]。但是,如果[A, B]鍊路上的度量成本更改為3,會發生什麼情況呢?最短的實體路徑仍然是[A, B, C],但最短的邏輯路徑是[A, D, E, C]。最短實體路徑和最短邏輯路徑之間的內插補點是在路由器A和C之間轉發資料包必須傳輸的距離—在該例中,可以按照(4 [A, D, E, C])-(3 [A, B, C])來計算,其延展為1。
2.如何測量網絡延展
網絡延展的測量方式取決于在任何給定情況下什麼是最重要的,最常用的方法是比較網絡中的跳數,如示例中所用到的方式。在某些情況下,考慮兩條路徑上的度量名額、兩條路徑上的延遲條件或其他度量名額可能更重要,但重要的一點是要保證在每條可能路徑上的測量一緻性,以便對路徑進行精準比較。
有時很難區分實體拓撲和邏輯拓撲。在上面的例子中,鍊路的度量名額是否由于[A, B]鍊路實際上是一個較慢的鍊路而增加呢?如果是這樣的話,這是延展的一個例子,還是一個使邏輯拓撲與實體拓撲一緻的例子就值得商榷了。
根據這一觀察結果,從延展的角度來定義政策比其他任何方式都要容易得多。政策即增加網絡延展的任何配置。例如,使用基于政策的路由或流量工程,将流量從最短的實體路徑推到更長的邏輯路徑,以減少特定鍊路上的擁塞,這就是一種政策—它增加了網絡延展。
增加網絡延展并不總是一件壞事。了解延展的概念可簡單地幫助我們了解各種其他概念,并圍繞複雜性和優化權衡建立一個架構。從實體上講,最短路徑并不總是最佳路徑。
在這個例子中,網絡延展非常簡單—它影響每個目的位址,并且影響每個流經網絡的資料包。在現實世界中,事情要複雜得多。網絡延展實際上是每對源位址/目的位址,這使得在整個網絡範圍内測量非常困難。
3.定義複雜性:一個模型
幾乎在每個網絡或協定設計決策中都有三個元件—狀态、優化和表面。可以把這些元件看作一組權衡,如圖1-10所示,并在下面的清單條目中進行描述。
圖1-10 可能存在的平面
- 增加優化總是朝着更多狀态或更多互動表面方向移動。
- 減少狀态總是朝着更少的優化或更多互動表面方向移動。
- 減少互動表面始終朝着更少的優化或更多狀态方向移動。
當然,這些都不是嚴格的規則;取決于特定的網絡、協定和需求,但是它們通常是正确的,足以使這個模型成為了解複雜性權衡的有用模型。
4.互動表面
雖然狀态和優化相當直覺,但是在互動表面多花一點時間是值得的。互動表面的概念很難了解,主要是因為它涵蓋了非常廣泛的思想。也許舉個例子會有幫助。假設一個函數:
- 接受兩個數字作為輸入;
- 然後做加法;
- 将得到的和再乘以100;
- 傳回最終結果。
在一些較大的系統中,這個單一的函數可以看作一個子系統。假設把這個函數分解成兩個函數,一個做加法,另一個做乘法。現在已經建立了兩個更簡單的函數(每個函數隻做一件事),但是還要在這兩個函數之間建立一個互動表面—你已經在系統中建立了兩個互相作用的子系統,而在此之前隻有一個子系統。
作為另一個例子,假設有兩個控制平面在單個網絡上運作。這兩個控制平面中的一個攜帶了關于網絡外部可達的目的位址(外部路由)的資訊,而另一個攜帶網絡内部可達的目的位址(内部路由)。雖然這兩個控制平面是不同的系統,但它們仍将以許多有趣而複雜的方式進行互動。例如,外部目的位址的可達性必然取決于網絡邊緣之間内部目的位址的可達性。這兩個控制平面現在必須一起工作,以建構一個完整的資訊表,用于在網絡中轉發資料包。
甚至在一個控制平面内通信的兩個路由器也可以被視為互動表面。這種定義的廣度使我們很難定義什麼是互動表面。
引入互動表面并不是一件壞事:它們可以幫助工程師和設計師在任何給定的問題空間中,從模組化到實作,分拆問題并解決問題。與此同時,互動表面可以在不用深思熟慮的情況下輕松引入。
1.8.3 通過細腰模型管理複雜性
細腰模型很像黃蜂的腰部,在自然界中廣泛使用,在工程界也有着廣泛的應用。雖然工程師們并不經常有意識地應用這個模型,但它實際上一直都在被使用。圖1-11描述了IP協定族在四層國防部(DoD)模型背景下的細腰模型。
圖1-11 DoD模型與細腰模型
在底層的實體傳輸系統中有大量的協定,從以太網到衛星通信。在頂層,資訊被編組并呈現給應用程式,也有大量的協定,從超文本傳輸協定(HTTP)到TELNET(以及其他數千個協定)等。然而,當移動到協定棧的中間時,會發現一件有趣的事情:協定的數量減少了,進而形成一個細腰。為什麼這樣能控制複雜性?回到複雜性的三個組成部分—狀态、表面和優化,可揭示細腰模型和複雜性之間的關系。
- 狀态被細腰模型劃分為兩種不同類型:有關網絡的資訊和有關傳輸的資料資訊。上層應用關心的是列集的可用方式和資訊呈現,下層關心的是發現是否存在連接配接以及連接配接屬性。下層不需要知道如何格式化一個FTP幀,上層也不需要知道如何通過以太網傳輸資料包—模型兩端的狀态都減少了。
- 通過将各個元件之間的互動點精确地減少到一個,即IP協定,可以控制互動表面。通過标準流程可以很好地定義這個單一互動點,對一個互動點的變化進行嚴格管理可防止大規模的快速變化對上下層協定棧的影響。
-
通過允許一層到達另一層,并對應用程式隐藏網絡狀态可實作優化的權衡取舍。例如,除了從本地收集的資訊外,TCP實際上并不知道網絡的狀态。如果TCP希望在使用網絡資源方面的效率更高,就隻能以層次違規為代價,這就打開了難以控制的互動表面。
于是,網絡模型的協定棧分層是控制網絡中各種互動元件複雜性的直接嘗試。
複雜性與權衡取舍
複雜性的一個非常基本的法則可以這樣表述:在任何複雜的系統中,都會存在三方面權衡的集合。這裡描述的狀态/優化/表面(SOS)模型就是這樣一組權衡。另一組權衡是從事資料庫工作的工程師所熟悉的一緻性/可通路性/分區(CAP)定理。還有一組是經常在更廣泛的語境中出現的快速/成本/品質(QSQ)權衡。這些不是複雜性的組成部分,而是複雜性的結果。工程師們需要善于發現這些類型的權衡三角形,準确地了解三角形的“角”,确定可能的最優解決方案所在的平面位置,并能夠清楚地說明為什麼有些解決方案根本不可能或不可取。
如果沒有找到權衡點,說明你沒有足夠努力去尋找—在所有工程工作中,這是一個很好的經驗法則。
1.9 總結思考
本章并不打算提供細節,而是對計算機網絡技術曆史範圍内的關鍵術語進行概述。計算機網絡世界的曆史并不長(例如,人類曆史至少可以追溯到6000年前,也可能會是數百萬年前,這取決于你的觀點),但這段曆史仍然包含了一系列往複而崎岖的道路,一般人往往難以了解事情的原因和經過。
有了這篇介紹,現在是時候轉向第一個感興趣的話題了,即了解網絡是如何工作的—資料平面。
1.10 拓展閱讀
1.11 複習題
1.對于一個可以清楚地看到不同業務假設的特定領域,是選擇使用少量大型網絡裝置(例如支援多個線卡的機架式路由器),還是使用大量較小的裝置(所謂披薩盒子(pizza box)或一個機架單元,具有固定數量可用接口的路由器),來建構校園網絡或資料中心網絡?列出一些可能使一個選擇比另一個選擇成本更高的不同因素,然後解釋什麼樣的業務條件可能決定使用其中的一個而不是另一個。
2.軟體應用程式中代碼膨脹的一種“外部表現”是傻瓜式旋鈕;雖然有很多關于傻瓜式旋鈕的定義,但它們通常被認為是一種配置指令,即可以修改協定或裝置操作方式中一些小的、特定的操作點。實際上有一些研究論文和網上的讨論是圍繞着傻瓜式旋鈕的危害性展開的;還可以在發行多年的多個軟體版本中查找到來自各種網絡裝置的指令集。為了觀察網絡裝置複雜性的增長,追蹤這些可用指令的數量,并試圖判斷這些指令中有多少可以被視為傻瓜式旋鈕或者主要功能。你能從這些資訊中收集到什麼嗎?
3.TDM并不是唯一可用的多路複用方式,還有頻分多路複用(FDM)。對于FDM,像TDM那樣劃分信道有用嗎?為什麼?
4.簡述什麼是反向複用器,以及它的用途。
5.閱讀本章“拓展閱讀”部分中有關ATM區域網路仿真(LANE)的兩個參考資料。以複雜性模型來描述此解決方案的複雜性;在哪裡添加了狀态和表面,以及每次添加會獲得哪種優化?你是否認為ATM LANE的解決方案在提供預設服務類型與共享以太網之類之間,提供了一系列不錯的權衡方案?
6.從人類的角度來描述為什麼延遲和抖動在實時(互動式)語音及視訊通信中是不好的。這些問題是否也适用于錄制的聲音和視訊(它們會在稍後的時間進行存儲和回放)?為什麼?
7.實時(互動式)語音和視訊使用網絡與大檔案傳輸有何不同?是否有特定的點可以比較這兩種流量?描述網絡可能需要如何對每種流量類型做出不同的反應。
8.書中稱“細腰模型”是自然界中用來管理複雜性的一種常見政策。請在自然界中找到幾個例子。除了TCP/IP,至少研究一組其他協定(協定棧),如Banyan Vines、Novell的IPX或OSI系統。這些協定中是否也有細腰模型?請具體描述。
9.在其他計算領域,如在個人計算機中使用的作業系統或移動計算裝置(如平闆電腦和行動電話),是否也存在細腰模型?你能夠識别出它們嗎?
10.研究一些關于在IPv6中去除IP協定分段的争論,總結各方提出的觀點。你是否同意去除分段的最終決定?