有很多方法可以用於教授(或理解)計算機網絡操作的基本原理。例如,一種比較傳統的方法是從檢查控制平面的所有操作開始,從構建鄰接關繫到信息傳輸,再到構建路由。另一種常見的方法是從模型開始,如開放繫統互連(Open Systems Interconnect,OSI)模型,並從模型內部描述協議的操作細節。這些方法顯然有助於指導網絡工程師和網絡工程專業的學生來理解計算機網絡,因為在過去的30年裡,這些方法確實成功地幫助了數十萬名網絡工程師。
但是,在本書作者看來,這些方法並沒有想像中那麼有效。盡管在實驗室裡花費了大量時間來閱讀技術資料,甚至配置和部署網絡設備,但仍有許多工程師不能理解計算機網絡的實際工作原理。對網絡工程師及網絡工程專業的學生而言,實際的教學效果與心理上的預期仍然存在著很大的差距。
本書旨在填補這一空白—它不僅面向現在的工程師,也面向所有試圖學習計算機網絡工作原理的學生(即使網絡工程不是他們的終職業目標)。無論你是一名計算機科學專業的學生,還是一位有著20多年工作經驗的網絡工程師,或者你隻想學習一些網絡工程知識,甚至隻是一名僅負責與“網絡”相關業務的經理,都會通過閱讀本書受益。
本書的組織結構
本書的兩位作者在網絡工程領域的工作經驗加起來有50多年,這些年來,他們從事過轉發設備、控制平面、存儲乃至計算等諸多方面的工作。在不同的場所,兩位作者(他們還是專欄評論員!)花了數千小時,以不同的形式進行了正規的和非正規的對外培訓,其中涉及網絡工程中的許多不同技藝。本書更是花費了作者大量的時間來考慮如何更好地講解計算機網絡技術中的諸多細節。計算機網絡中哪些細節是不可忽視的,尤其是哪些內容和問題的細節是無關緊要的,都需要認真仔細地進行取舍。作者認為本書的組織結構有利於幫助計算機網絡及相關領域的大多數讀者。
撰寫本書的想法源於互聯網工程任務組(Internet Engineering Task Force,IETF)的RFC 1925,也就是“網絡工程的12條軍規”(The Twelve Networking Truths),其中第11條軍規是:
每一個舊的想法都會以不同的名稱和不同的表述被再次提出,而不管它是否有效。
顯然,這很幽默,但是如果其中沒有一絲道理,幽默就不會變得那麼有趣了。就第11條軍規而言,這又遠不止“一絲道理”那麼簡單:在其中,體現了一種看待技術的完整方式,以及技術變革的步伐,它們可以徹底改變工程師學習技術的方式。如果說每個想法都會被再次提出,那麼意味著每個想法之前就被提出過。這樣一來,如果能夠理解一個想法在次提出時的本義,那麼就能理解基於相同想法的每一個新提議。
這種觀察—計算機網絡技術背後的基礎思想並沒有真正改變—是本書教學方法的驅動因素。本書沒有關注模型或協議,而是遵循了一個獨特的模式。
因此,本書的主題是:為了真正理解計算機網絡,你需要提出和回答以下三個問題:“真正的問題是什麼?”“解決方案是什麼?”“具體是如何實現的?”
真正的問題是什麼?
本書分為三個主要部分,涵蓋了數據傳輸、控制平面,以及具體設計(或者更確切地說是技術)場景。在每一部分中都有一些章從一個基本的問題開始:所面臨的真正問題是什麼?以一種有意義的方式描述問題集往往需要做很多理論工作,所以這些章一開始可能看似不那麼實用。
然而,這些章實際上非常實用。如果沒有對問題的透徹理解,就幾乎不可能真正理解真實的背景,從而不可能提出任何有效的提案或者實現方案。理解這些基本問題可以幫助我們做兩件事:
將我們當前面臨的問題(這些問題看似是新的或獨特的問題)與過去網絡工程中已解決的共性問題聯繫起來。
清楚地觀察並理解大型繫統中的組件問題,從而有機會以構建完整一致繫統的方式,對每個問題應用一繫列完整的解決方案。
實際上,提出問題纔能真正理解那些用於解決網絡工程問題的技術—這也是重要的步驟。
解決方案是什麼?
一旦問題暴露出來,本書將討論一繫列可能的解決方案。解決方案集合(必然)不會局限於常見的解決方案或已實現的解決方案。相反,所選擇的解決方案將(希望)提供一個可用解決方案類型的全面概覽。同樣,這部分將傾向於理論性介紹,特別是在描述單點問題的單點解決方案時。同樣,認為不實用的觀點將是錯誤的—每一個解決方案都是一個“工具”,可以把它添加到用來解決一繫列問題的“思想工具集”中。以這種方式將問題和解決方案結合起來,從而建立一套對任何類型的工程師都有用的思考技能。
具體是如何實現的?
後,一旦討論了問題的集合以及對應每一個問題的一繫列解決方案,問題和解決方案就能被聚合成一組實現案例。在這一部分將看到理論和實踐的結合:理論上每個協議如何解決一組常見的問題集,然後選擇一繫列解決方案來解決這些問題。作者已經努力為這部分內容篩選了大量的協議和繫統,所以讀者不僅可以漫步解決方案的空間,而且可以漫遊(盡可能在這類工作的範圍內)計算機網絡工程的歷史。
本書沒有涵蓋的內容
在這個領域寫任何一本書都可能有無窮無盡的內容,然而一本沒有邊界限制的書可能作用並不大。因此,為了管理本書的範圍和規模,作者對哪些內容應該涵蓋、哪些內容不應該涵蓋做出了選擇。
書中涵蓋了分組交換網絡,而沒有涵蓋電路交換網絡。在分組交換網絡中,信息以數據包的形式進行傳輸,每個數據包都包含了足夠的信息,以將數據包從網絡的一端路由到另一端;發送方和接收方之間沒有“固定”的通信線路;僅僅由一組底層分組轉發設備組成一個完整繫統,以的努力交付這些數據包。電路交換網絡則可以利用一種不需要每個數據包都攜帶所有必需信息的方式來分解信息,並且每個特定信息流都有約定的路徑和資源。
本書涵蓋了數據平面和控制平面,但是沒有涵蓋管理平面。通常很難確定數據平面的終點和控制平面的起點。同樣,也很難確定控制平面的終點和管理平面的起點。作者根據自己豐富的經驗,試圖隻包含那些與構建和管理轉發數據包的可用路徑相關的主題,而忽略那些看起來更關注網絡管理的主題。
這些遺漏並不是說這些主題不重要,而是作為一本書,如果要在限定的時間內編寫,就必須以某種方式限定範圍。
閱讀流程
在很多方面,理解作者的寫作意圖(希望讀者如何閱讀書籍),對於理解如何使用材料,以及理解信息的組織結構或者書中想要回答的問題等來說,都很重要。本書的目標受眾廣泛,從“普通”的網絡工程師,到那些沒有受過任何正規培訓但渴望學習網絡工程的人,再到大學課堂。
為了適應這樣的讀者範圍,作者采取了以下措施:
雖然正文中提供的材料根據具體專題的要求具有不同的深度,但都努力保持一種介紹性的感覺。正文中的主要內容將盡量少地使用“概念宏大的詞彙”和“艱澀難懂的符號”。
更多的技術材料、歷史掌故,以及作者認為對渴望學習網絡工程的人有用的其他材料都以特殊格式出現在正文中。
提供腳注的目的是致敬那些產生創意的特定工作或以產生特定創意而聞名的個人作品。
在每一章的末尾會列出更多的技術論文和資源,以供那些願意更深入地研究特定主題的人使用。這些資源將盡可能包含與其相關的特定主題的信息。
良好的開端是成功的一半
作者和編輯花費了大量時間及精力研究、寫作、編輯和制作本書,他們在網絡工程中的各個方面都擁有廣泛而深入的經驗—協議設計與規範、協議實現、網絡設計、網絡實現、故障排除等。希望本書能夠為讀者真正地理解計算機網絡的運行原理打下深入而廣泛的基礎,從而為設計、實現、管理協議和網絡奠定基礎,進而在未來的工作中解決現實世界的問題。
致謝
首先,如果沒有Radia Perlman認識到對本書的需求,就不會有本書,因此是他播下了本書逐漸成型的思想種子。然而,除了種子之外,這本書並不隻是兩位作者的作品,實際上,許多人參與了本書的創建和出版過程,使其具備了很高的質量。以下是參與創建本書內容的人員的大致名單。
Ignas Bagdonas是Equinix公司的架構師,他專注於互連Fabric和網絡自動化的大規模設計。Ignas在Routing System公司工作時就已經實現了BGP。
Chris Kane目前是Arista Networks公司的繫統工程師,從事大規模網絡的設計和部署工作,並且是俄亥俄州網絡用戶組(Ohio Networking User Group)的創始成員。Chris從事網絡行業已經超過25年,曾在各種垂直領域工作,包括服務提供商、金融、零售和咨詢。
Kim Pedersen(CCIE 29189, CCDE 2017:0021)是Lytzen IT A/S的一名網絡工程師,主要從事網絡設計和國際MPLS網絡的維護及開發工作。他熱衷於學習新技術課題,並痴迷於有關萬物互聯的讀物。他與妻子生活在丹麥,並且非常喜歡旅行。
Nick Russo(CCIE 42518, CCDE 2016:0041)是位於馬裡蘭州Aderdeen的思科公司的網絡工程師。他專注於服務提供商、大規模MPLS、移動性設計,以及網絡自動化。Nick是《CCIE服務提供商第4版筆試和實驗考試綜合指南》(CCIE Service Provider Version 4 Written and Lab Exam Comprehensive Guide)的作者,可以在LeanPub上找到他的作品。
Maria Urlea(CCDP,CCDA,CCNP,CCNA)是加拿大安大略省思科公司的繫統工程師。Maria獲得了幾項碩士獎學金和學生研究獎,並專注於幾個大型網絡運營商的網絡設計和架構設計。
Chris Cleveland是網絡工程領域秀的策劃編輯之一,自1997年以來,他與Russ在Pearson合作了13個項目。