作者:范桂颶,AWS Community Builder,EdgeGallery 開源社區成員。
自 2006 年以來,SDN 技術發展了近二十年,從狹義的OpenFlow SDN,到廣義的SDN,再到現如今的P4 完全可編程網絡,期間的紛紛擾擾亂入迷人眼,偶爾讓人感到迷茫徘徊:網絡何以至此?網絡到底要如何發展?不妨讓我們從網絡的起源開始回顧歷史,撥開云霧看清網絡的初心與未來。
01
從冷戰背景說起
第二次世界大戰以后,當時的美國和蘇聯同為世界上的 “超級大國”,為了爭奪世界霸權,一道鐵幕在歐洲大陸落下,兩國及其盟國展開了數十年的斗爭。在這段時期,雖然雙方分歧和沖突嚴重,但都盡力避免新一輪的世界范圍戰爭(第三次世界大戰),其對抗通常通過局部代理戰爭、科技和軍備競賽、太空競賽、外交競爭等 “冷”方式進行,即“相互遏制,不動武力”,因此稱之為 “冷戰”。
02
APRA 成立
1957 年 10 月 4 日,蘇聯發射了人類第一顆人造衛星,斯普特尼克一號。這顆衛星的升空,轟動了整個世界,也讓當時的美國政府震驚不已。他們恐懼,在日趨激烈的冷戰對抗中,自己已經全面落后于蘇聯。?
為了扭轉這一局面,美國總統艾森豪威爾(Dwight D. Eisenhower)授權美國國防部于 1958 年 2 月組建了 APRA(Advanced Research Project Agency,美國國防部高級研究計劃局)科研部門。ARPA 的主要工作,就是研究如何將那些具有潛在軍事價值的 “黑科技”,應用于軍事領域,包括彈道導彈防御、衛星導航、核試驗檢測等等。
1961 年 10 月,蘇聯成功發射 R-16 洲際導彈,結合 1949 年 8 月成功爆破的原子彈,這意味著美國本土正面臨遠程核導彈打擊的威脅。為了保證自己能在蘇聯的第一輪核打擊下具備一定的生存和反擊能力,美國國防部授權 APRA 研究一種 “分布式“ 的指揮系統。它由無數的節點組成,當若干節點被摧毀后,其它節點仍能相互通信。
從此,ARPA 的核心項目之一就是建立一個可經受敵軍打擊的軍用通信系統。
03
ARPANET 項目啟動
這個任務最早交到 ARPA IPTO(Information Processing Techniques Office,信息處理技術辦公室)負責。
1966 年,來自 NASA(美國航空航天局)的羅伯特·泰勒(Robert Taylor),成為 ARPA IPTO 的第三任主管。羅伯特·泰勒在上任后考察了 IPTO 當時構建的一個小型通信網絡之后(由三個電傳打字機和三臺計算機組成),認為不兼容的計算機通信沒有任何意義,應該建立一個兼容的協議,允許所有終端之間互相通信。并很快就完成了新型通信網絡項目的內部立項,ARPA 將其命名為 ARPANET(阿帕網)。
為了完成 ARPANET 項目,羅伯特·泰勒到處搜羅人才,其中包括:
??麻省理工學院(MIT)林肯實驗室的拉里·羅伯茨(Lawrence G. Roberts);
??提出 “分布式通信理論” 的蘭德公司科學家保羅.巴蘭(P.Baran);
??美國加州大學洛杉磯分校(UCLA)的分組交換理論專家倫納德.克蘭羅克(L.Kleinrock);
其中,保羅.巴蘭的 “分布式通信理論” 提出了 2 個重要思想:
??網絡的控制權應該完全分散;
??網絡應該采用分組交換(Packet switching)替代電路交換(Circuit Switching)。
分布式通信理論的思想讓每個節點在進行數據路由時都具備同等地位,這成為未來互聯網的最根本特征。
另外,拉里·羅伯茨(Larry Roberts)則被任命為 ARPANET 項目的項目經理和首席架構師。
1967 年 4 月,在美國密歇根州安娜堡召開的 ARPA IPTO PI 會議上,拉里·羅伯茨組織了有關 ARPANET 設計方案的討論。不久后就發表第一篇關于 ARPANET 設計的論文《Multiple Computer Networks and Intercomputer Communication》(多計算機網絡和計算機之間的通信)。
在羅伯茨的設計中,主機不應該處理數據路由的任務,這個任務應該由一個小型的廉價計算機來承擔,命名為 IMP(Interface Message Processor,接口信號處理機)。
IMP 的作用是連接、調度和管理。主機把數據包發給 IMP,IMP 查看目標地址,或者把它傳遞到本地連接的主機,或者傳遞給另外一個 IMP。有了它,大型主機就不必 “親自” 參與聯網,從根本上解決了計算機系統不兼容的問題。后來,人們普遍將 IMP 視為路由器的雛形。
為了防止數據包丟失,Sender IMP 會暫存數據包,直到獲得 Receiver IMP 的 ACK 確認為止,如果沒能收到確認,它就重新發送。在那時,ACK 重傳機制還是由中間路由節點來完成的,后面才逐步演進到由主機 TCP/IP 協議棧來完成。
1968 年,拉里·羅伯茨在研究報告《資源共享的計算機網絡》中,著力闡述了讓 ARPA 的計算機互相連接,從而使大家分享彼此的研究成果。同年夏天,美國國防部正式啟動了 ARPANET 項目的商業招標。
04
ARPANET 的誕生
1969 年 1 月,來自馬薩諸塞州坎布里奇市的 BBN(Bolt Beranek and Newman Inc.)公司贏得了這個價值 100 萬美元的合同。同年,ARPA 建立了 IMP 的研發測試中心,IMP 的基礎硬件是配有 12K Memory 的 Honeywell DDP-516 小型計算機。
??IMP 設備內部
??IMP 設備面板
項目的第一階段,拉里·羅伯茨計劃在美國西南部建立一個四節點的網絡。節點分別是加州大學洛杉磯分校、斯坦福大學研究學院、加州大學圣巴巴拉分校和猶他州大學的 4 臺大型計算機。
這 4 個節點之間,采用分組交換技術,通過專門的 IMP 設備和由 AT&T 公司提供的、速率為 50kbps 的通信線路進行連接。
1969 年 8 月 30 日,來自 BBN 公司的第一臺 IMP 運抵加州大學洛杉磯分校。校內的倫納德.克蘭羅克教授帶著 40 多名工程技術人員和研究生進行安裝和調試。
此后不久,被公認對 ARPANET 建成作出了巨大貢獻的,來自 BBN 公司的鮑伯·卡恩(Bob Kahn,也稱為:羅伯特·卡恩,Robert Elliot Kahn)也來到了加州大學洛杉磯分校,加入到 ARPANET 項目中。
??加州大學洛杉磯分校現場機房
1969 年 10 月,第二臺 IMP 運抵斯坦福大學研究院。
10 月 29 日晚,倫納德.克蘭羅克教授安排他的助理、UCLA 大學本科生查理·克萊恩(Charley Kline)坐在 IMP 終端前,與 SRI 終端操作員進行對接。當時,查理·克萊恩戴著頭戴式耳機和麥克風,以便通過長途電話隨時與對方聯系。
據查理·克萊恩回憶,倫納德.克蘭羅克教授那天讓他首先傳輸 LOGIN(登錄)這 5 個英文字母 ,以確認分組交換技術的傳輸效果。根據事前約定,他只需要鍵入 LOG 這 3 個字母傳送出去,然后斯坦福那邊的主機就會自動產生 IN 這兩個字母,合成為 LOGIN。以此驗證 2 個節點之間的通信成功。?
隨后,1969 年 11 月,第三臺 IMP 抵達加州大學圣巴巴拉分校。
1969 年 12 月,最后一臺 IMP 在第四節點猶他大學安裝成功。
至此,第一個 ARPANET 就在 1969 年誕生了,將加利福尼亞州大學洛杉磯分校、加州大學圣巴巴拉分校、斯坦福大學、猶他州大學四所大學的 4 臺大型計算機進行了互聯。人類社會開始進入 “網絡時代”。?
05
TCP/IP 協議與 Internet 的誕生
在運行 ARPANET 不久后,大家才發現各個 IMP 在進行連接的時候,需要考慮使用一種 4 臺 IMP 都能夠統一識別的信號來作為開發和關閉通信管道,否則這些 IMP 不會知道什么時候應該接收信號,什么時候該結束。
對于這個問題,實際上在 1968 年 ARPANET 項目剛啟動的時候,拉里·羅伯茨就成立了一個專門的研究小組,名為 NWG(Network Working Group),由 史蒂夫·克羅克(Steve Crocker)擔任組長。這個小組試圖通過編寫主機與主機之間的通信軟件來解決這個問題。
1970 年 12 月,NWG 通過軟件的方式實現了最初的 ARPANET 通信協議,稱為 NCP(網絡控制協議)。
1972 年,鮑伯·卡恩在國際計算機通信大會(ICCC)上成功演示了 ARPANET 網絡,那是 ARPANET 的首次公開亮相。經過幾年的發展,在當年 ARPANET 已經擁有了 40 個節點,E-mail、FTP 和 Telnet 是當時最主要的網絡應用。尤其是 E-mail,占據了 75% 的流量。
在 ARPANET 成功的激勵下,計算機網絡領域開始漸漸出現了其他的一些網絡類型,例如:夏威夷建立了無線電網絡,硅谷發明了以太網絡,太空衛星也組建了衛星網絡等等。
1973 年,ARPANET 通過衛星通信實現了與夏威夷、英國倫敦大學和挪威皇家雷達機構的聯網。ARPANET 從美國本地互聯網絡逐漸進化成為了一張國際性的互聯網絡。
隨著 ARPANET 的發展和用戶對網絡需求的不斷提高,人們開始發現 NCP 協議存在著很多的缺點,比如 NCP 只能在同構環境中運行(指網絡上的所有計算機都運行著相同的操作系統),又比如 NCP 支持的主機數量有限。對于一個分布廣泛的網絡而言,這些缺陷就必然成為了發展路上最大障礙。
1973 年,針對 NCP 協議存在的問題,鮑伯·卡恩認識到只有在深入理解了各種操作系統細節的基礎上,才能建立一種對各種操作系統都使用的協議。于是鮑伯·卡恩提出了 “開放的網絡架構” 思想。同年,來自斯坦福大學的溫頓.瑟夫(Vinton G. Cerf)加入 ARPA,并負責領導基于 NWG 改建的 INWG 工作組。順理成章的,鮑伯·卡恩邀請溫頓.瑟夫一起研究新協議的各個細節,并在不久就共同提出了 TCP 傳輸協議。
為了驗證 TCP 協議的可用性,INWG 開始試驗基于 TCP 協議 Client 軟件將一個數據發送到距離 10 萬公里外的 Server。結果觀察數據在傳輸過程中沒有任何丟失,TCP 協議的可行性得到了驗證,也一度引起相關領域的廣泛關注。
1977 年,APRA 改建的 DARPA(美國國防部高級研究計劃署)與 BBN 公司、斯坦福大學和倫敦大學學院簽訂商業合同,正式開始在不同的 CPU 硬件平臺上開發 TCP 協議的驗證版本:TCPv1 和 TCPv2。
隨后 1977 年 11 月,鮑伯·卡恩和溫頓.瑟夫給予 TCPv2 完成了一個具有里程碑意義的實驗。數據包從一輛載有無線傳輸器的箱式貨車發出,進入 APRANET,然后通過專用衛星鏈路到達倫敦,再通過衛星傳輸網絡,到達 APRANET, 最后傳回南加州大學信息科學研究所,行程 9.4 萬英里,沒有丟失一個比特的數據信息。
同時這也讓很多組織機構見識到了計算機聯網的重要性,紛紛開展研究。全球涌現了大量的新型網絡,例如:計算機科學研究網絡 CSNET、加拿大網絡 CDnet、因時網 BITNET 等。
1978 年,溫頓·瑟夫、鮑伯·卡恩、丹尼·科恩(Danny Cohen)和約翰·普斯特爾(Jon Postel)合力將 TCP 協議從分層思想的角度劃分為 2 個協議,即:
1、傳輸層的 TCP 協議,負責可靠傳輸。
2、網絡層的 IP 協議,負責在不同的網絡之間進行互聯。
它們合稱 TCP/IPv3,并在不久的將來演進為穩定版本 TCP/IPv4。
??溫頓.瑟夫
? TCP/IP,現代 Internet 的基石。
1980 年,DARPA 開始研究如何將不同的網絡類型連接起來,并啟動了 The Interneting Project(互聯網技術)項目。這個項目讓剛剛嶄露頭角的 TCP/IPv4 協議獲得了施展空間。
1981 年,DARPA 資助 BBN 公司和加州大學伯克利分校,把 TCP/IP 協議實現到 UNIX 操作系統。值得一提的是,當時還在上研究生的天才程序員 Bill Joy 對 TCP/IP 協議深感興趣,但卻對 BBN 提供的代碼深痛欲絕。于是 Bill Joy 另起爐灶,只用了幾天時間就在 BSD UNIX 發行版中實現了一個高性能的 TCP/IP 協議棧。當然那時的 TCP/IP 協議很很簡單,但 BSD Socket 直到今天還在發揮著余熱。
1982 年,ARPANET 開始采用 TCP/IP 協議替代 NCP 協議。
1983 年,美國國防部將 ARPANET 劃分為軍用和民用兩部分。
1984 年, TCP/IP 協議得到美國國防部的肯定,成為計算機領域共同遵守的一個主流標準。
至此,基于 IP(Internet Protocol)協議標準的 Internet 誕生了。鮑伯·卡恩和溫頓·瑟夫也因此被譽為 “互聯網之父”。
實際上,TCP/IP 協議的發展也并非一帆風順,其中最大的競爭對手就是國際標準化組織(ISO)。ISO 在制定國際化標準上經驗十足,很快就提出了 OSI 七層模型,并大力推廣。
面對挑戰,那時溫頓.瑟夫努力勸說讓 IBM、DEC、HP 等主機大廠支持 TCP/IP 協議,但都遭到了拒絕。因為在他們看來 TCP/IP 只是一屆研究項目,無力與在商業社會中獲得過巨大成功的 ISO 抗衡。
而美國國防部的應對策略則是將 TCP/IP 協議與 UNIX 系統、C 語言捆綁在一起,并由 AT&T 向美國各個大學發放非商業許可證。這樣才迫使這些跟 UNIX 系統有緊密聯系的企業轉向 TCP/IP 的懷抱。這為 UNIX 系統、C 語言、TCP/IP 協議的發展拉開了序幕,它們分別在操作系統、編程語言、網絡協議這 3 個關鍵領域影響至今。
1985 年,TCP/IP 協議棧成為 UNIX 操作系統密不可分的組成部分。UNIX 的廣泛傳播也極大助力了 TCP/IP 的發展。后來,幾乎所有的操作系統都開始支持 TCP/IP 協議。經典的 TCP/IP 五層模型已成氣候。
后來,美國國家科學基金會(NSF)自己出資,基于 TCP/IP 協議,建立完全屬于自己的 NSFnet 廣域網。
NSFnet 的發展非常迅速,很快將全美各地的大學、政府和私人科研機構連接起來。同時,NSFnet 的網絡速度也很快,比當時民用的 ARPANET 要快 25 倍以上。漸漸地,NSFnet 開始取代 ARPANET,成為 Internet 的主干網。
80 年代末,連接到 NSFnet 的計算機數量遠遠超過了 ARPANET 用戶的數量。
直至 1990 年 6 月 1 日,ARPANET 正式退出歷史舞臺。
1990 年 9 月,由 Merit、IBM 和 MCI 公司聯合建立了一個非盈利的組織 ANS(Advanced Network&Science Inc.,先進網絡科學公司)。ANS 的目的是建立一個全美范圍的 T3 級主干網,能以 45Mbps 的速率傳送數據。
1991 年底,NSFnet 主干網與 ANS T3 級主干網進行互聯互通,并宣布開始對全社會進行商業運營。
后來大家都知道,網絡連接數量開始指數級增長。Internet 真正變成了全球互聯網,開始走進人們的生活。
1994 年,舉辦互聯網大會。
??前排從左到右:Dave Walden, Barry Wessler, Truett Thach, Larry Roberts, Len Kleinrock, Bob Taylor, Roland Bryan, Bob Kahn.
??后排從左到右:Marty Thrope, Ben Barker, Vint Cerf, Severo Ornstein, Frank Heart, Jon Postel, Doug Englebart, and Steve Crocker.
1998 年,美國成立非營利性民間組織 ICANN(Internet Corporation for Assigned Names and Numbers,互聯網名稱與數字地址分配機構),它由商務部的國家電信和信息管理局監督,負責全球互聯網域名系統、根服務器系統、IP 地址資源的協調、管理和分配。由 ICANN 的下屬機構 IANA(Internet Assigned Numbers Authority,互聯網號碼分配機構)負責管理全球互聯網域名的根服務器。
2014 年,ICANN決定將監管權移交給一個由多方利益相關者管理的獨立機構。
2016 年 10 月 1 日,ICANN 表示,正式將互聯網的控制權移交給一個非盈利的全球互聯網多方利益相關者組織。這標志著美國結束對這一互聯網核心資源近 20 年的單邊壟斷,對于每一個網民來說都是一大喜事。
06
HTTP 協議與 Web 世界的誕生
再回到 1989 年,當時在瑞士日內瓦 CERN(核子研究中心)工作的 Tim Berners-Lee(蒂姆·伯納斯·李)在論文中提出了一種可以在 Internet 上構建超鏈接文檔的技術,即 HTTP/Web 技術,并提出了 3 點基本要素:
1、URI(Uniform Resource Identifier,統一資源標識符):Internel 中的統一資源標識符,用于唯一標識一個 Internet 上的資源。
2、HTML(Hyper Text Markup Language,超文本標記語言):使用 HTML 標簽來構建超文本文檔,HTML 標簽將文字,圖形、動畫、聲音、表格、鏈接等內容格式進行了統一。
3、HTTP(Hyper Text Transfer Protocol,超文本傳輸協議):最初設計來用于傳輸 HTML 的協議,處于 TCP/IP 應用層,傳輸的數據主體稱為 Message(消息),基于 TCP 傳輸協議。
Tim Berners-Lee 所定義的 Resource,指的是 Internet 上的一個實體,它可以是一段文本、一張圖片、一首歌曲、一種服務等。URI 就是在 Internet 中標識一個 Resource 的唯一 ID,包含了 URL 和 URN 這 2 種形式。
? URL(Uniform Resource Loader,統一資源定位符):側重于 “定位”,類似一個地址,XX省XX市XX區XX單元XX室。
? URN(Uniform Resource Name,統一資源名稱):側重于 “命名”,類似身份證號。
由于 URL 更具有空間層次設計,所以如今已經成為了主流,但開發者仍應該清晰區分兩者。?
1990 年 12 月 25 日,Tim Berners-Lee 和羅伯特·卡里奧一起實現了基于 HTTP 協議的 Web Server,并通過 Internet 成功完成了 HTTP Client 和 Web Server 的第一次通信。
1991 年 8 月 6 日,Tim Berners-Lee 基于 HTTP 和 HTML 設計并開發了第一個網頁瀏覽器,并發布了世界上第一個 Web 網站。它被稱為 The First Website(第一個網站)或 InfoMesh(信息管理系統項目),運行在 CERN 的服務器上,旨在幫助研究人員共享信息和文獻。基于 HTML,該網站可以提供一些鏈接,讓用戶通過單擊超鏈接跳轉到其他頁面或文檔,這種超鏈接的設計 Web 技術最重要的創新之一。
同年,Tim Berners-Lee 正式提出了 WWW(World Wide Web,萬維網)的概念。
1992 年,幾個 Internet 組織合并成立統一的 ISOC(因特網協會),此時的 Internet 已經注冊了超過 100 萬臺主機,并持續指數級瘋狂增長。
1994 年 10 月 1 日,Tim Berners-Lee 創建了非營利性的 W3C(World Wide Web Consortium,萬維網聯盟),邀集 Microsoft、 Netscape、 Sun、Apple、IBM 等共 155 家互聯網上的著名公司。由 Tim Berners-Lee 擔任 W3C 的主席,致力推動 WWW 協議的標準化,并進一步推動 Web 技術的發展。
在當時的瀏覽器熱潮下,Tim Berners-Lee 也曾考慮過成立一家叫做 Websoft 的公司做網頁瀏覽器。但很快他就放棄了,他擔心這么做會導致激烈的市場競爭,開發出技術上互不兼容的瀏覽器、最終把 WWW 割裂成一個個利益集團。
??Tim Berners-Lee,萬維網之父
最初,由于那時候網絡資源匱乏,HTTP/0.9 版本相對簡單,采用純文本格式,且設置為只讀,所以當時整個 HTTP Request Message 只有一行,比如:GET www.leautolink.com。只能使用 GET 的方式從 Web 服務器獲得 HTML 文檔,響應以后則關閉。響應中也只包含了文檔本身,無響應頭,無錯誤碼,無狀態碼。
1995 年,由 Brian Behlendorf 發布了基于 HTTP/0.9 的 Apache HTTP Server 開源項目。同年,網景和微軟開啟瀏覽器大戰,但好在 Tim Berners-Lee 擔心的 “撕裂“ 并未發生,HTTP 協議已經逐成氣候。
隨著 Apache HTTP Server 的誕生,以及同時期其他的多媒體等技術發展迅速,都進一步促使 HTTP 協議的演進。緊跟著 1996 年,HTTP/1.0 發布,更好的支持采用圖文網頁形式。具體而言增加了以下幾個特性:
增加 HTTP Header 格式。
增加協議版本號。
增加 POST 方法。
增加 HEAD 方法。
增加文件處理類型。
增加響應狀態碼。
提供國際化支持。
經過幾年的發展,1999 年,HTTP/1.1 發布并成為標準,寫入 RFC。至此,HTTP 協議已然成為了 Web 世界的奠基石。
增加 PUT 等方法。
增加緩存處理機制:在 Header 增加了如:Entity tag,If-Unmodified-Since,If-Match,If-None-Match 等可供選擇的 Request Body 來控制緩存策略。
增加帶寬優化機制:在 Header 增加了 Range 字段,它允許只請求資源的某個部分,而不是一攬子返回,得以更充分地利用帶寬和網絡連接。
增加錯誤通知的管理:新增了 24 個錯誤狀態響應碼。
增加 Host 虛擬主機:支持 HTTP Server 虛擬主機技術??梢栽谝慌_物理服務器上存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個 IP 地址,通過不同 Hostname 區分。
增加長連接機制:默認使用長連接,應對日益復雜的網頁(網頁內的圖片、腳本越來越多了)。
等等。
隨著 HTTP/1.1 被納入 RFC 標準,同在 1992 年,由 HTTP/1.0 和 1.1 的主要設計者 Roy Thomas Fielding 宣布成立了 Apache 軟件基金會,并作為 Apache 基金會的第一任主席,從此,Apache Web Server 和 HTTP 協議攜手共生共榮。 除了 HTTP 協議,Apache 軟件基金會旨在促進各種開源軟件項目的開發和使用,其中 Apache HTTP Server 作為首個核心項目。這為 Apache HTTP Server 的長期發展奠定了良好的基礎,同時也締造了繁榮的開源生態系統,孵化了包括:Tomcat、Hadoop、Lucene、OpenOffice 等開源項目。 ? 至今而至,Apache 軟件基金會已成為了全球最大的開源組織之一。
07
REST 系統架構的誕生與 API 經濟的騰飛
2000 年,Apache 基金會的第一任主席 Roy Thomas Fielding 在博士論文《Architectural Styles and the Design of Network-based Software Architectures(架構風格和基于網絡的軟件架構設計)》中提出了 REST(Representational State Transfer,表現層狀態轉移)的理念。
顧名思義,Roy Thomas Fielding 在這篇論文中主要討論的是:如何在符合架構原理的前提下,理解和評估以網絡為基礎的應用軟件的架構設計,得到一個功能強、性能好、適宜通信的架構。
可見,REST、HTTP 協議、Web 服務器,這 3 者之間天生關系緊密。所以,開發者要清晰理解 Representational State Transfer 含義,應該先對 HTTP 協議有一個清晰的認識。
通過拆詞法,嘗試對 Representational State Transfer 的含義進行以下解構:
??Representational(表現層):即 Resources 的表現層。上述我們知道 Resource 是一種抽象,它具有多種表現形式,而最終把 Resource 具體呈現出來的形式,就叫做它的 “表現層”。例如:一個文本資源可以使用 TEXT 格式表現,也可以使用 HTML、XML、JSON 等格式表現。在 HTTP/1.0 中,Roy Thomas Fielding 為 HTTP Header 設計了 Accept/Content-Type 字段來描述這個 Resource 的 Representational。
所以,需要注意的是:URI 僅用于標識一個 Resource,而不應該在 URI 中描述表現層的內容,一個優雅的 RESTful API 應該使用 Accept/Content-Type 字段來描述 Resource 的表現層。
Accept:?Application/json
Content-Type:?Application/json
??State Transfer(狀態轉移):Resource 作為 C/S 交互的實體,必然存在著狀態的變化,然而 HTTP 是一種 Stateless(無狀態)的協議(不傳輸資源狀態的描述)。這意味著:Resource 的狀態都保存在 Server,而 Client 想要操作某個 Resource(改變其狀態)就必須通過某種手段讓 Resource 在 Server 上發生狀態的 “轉移”,而且這種 “轉移” 必然是建立在 Resource 的 “表現層” 之上的,例如:創建一個圖片資源、刪除一個圖片資源;啟動一個服務,關閉一個服務。故稱之為 "表現層狀態轉移"。
Client 可以使用的手段就是 Roy Thomas Fielding 在 HTTP 請求行中設計的 Request Methods(HTTP/0.9 引入 GET,HTTP/1.0 引入 POST、HEAD,HTTP/1.1 引入 PUT 等)。
# Client
GET?/resource
Accept:?text/html
# Server
Content-Type:?text/html;charset=utf-8
Response code: 200
至此,我們回頭再看,REST 討論的其實是一個:如何將軟件和網絡兩個領域進行交叉融合,繼而得到一個功能強、性能好、適宜通信的互聯網軟件架構的問題。
2006 年,正值 AWS 孵化的初期,時任 Amazon CTO Werner Vogels 在一封郵件中強調:
1、AWS 必須是一種 Resilient software architecture(具有韌性/彈性的軟件架構)。
2、不使用 RESTful API 的員工將被辭退。(注:RESTful API 就是符合 REST 架構設計思想的軟件 API 風格,*-ful 在西文語境中常用于表示一種風格)
直到 2013 年筆者接觸 OpenStack(OpenStack 初期常被認為是 AWS 的開源對標版本)之后才更深刻地體會到了其內涵和精髓。大型分布式軟件的各個組件之間必須具備解耦和擴展的能力,而網絡(Network-base)就是組件之間通信的唯一依賴,且對資源的操作具有唯一的確定性。
我們可以選取一個角度來比較一下 RESTful 與另外兩種常見的分布式架構風格的區別:
? RESTful 抽象的是資源:資源的抽象不需要依賴開發平臺或編程語言,C/S 架構完全松耦合。
? DO(Distributed Objects,分布式對象)抽象的是對象:不同的編程語言對對象的定義有很大差別,所以 DO 架構通常會與某種編程語言(.NET)綁定,若跨語言交互,實現則會非常復雜。典型有 RMI、EJB/DCOM、.NET Remoting 等。
? RPC(Remote Procedure Call,遠程過程調用)抽象的是過程:這要求 C/S 之間具有很強的 RPC 通信模型耦合度,否則雙方無法理解對方的意圖。典型有 SOAP、XML-RPC、Flash AMF 等。
AWS 在后面很長的時間內一直都奉行著 RESTful API 的鐵律,使其得以在幾年間飛速擴展至上百個核心組件,成為了極具韌性/彈性和良好生態的公有云架構。現在的軟件公司基本都會采用 RESTful API 風格,讓產品可以通過 API 的方式融入到行業生態中,形成 APIs 經濟效益。
08
Future Internet(未來互聯網)思想萌芽
21 世紀初,隨著 Internet 的全球普及,隨之也逐漸暴露出了在可擴展性、安全性、可管理性、帶寬性能等多方面的問題。
以安全性為例子,傳統 Internet 的網絡設計源自 ARPANET,認為所有的用戶都是可信的、自律的,并沒有內生考慮在基礎網絡結構上確保網元不受攻擊。更具體地說,TCP/IP 是一套開放的協議和標準,Sender 和 Receiver 之間不存在固定的互聯電路和信令系統,網絡中的 Sender 可以向其它任何 Receiver 發送任何內容,而 Receiver 卻無法拒絕接收。這也意味著網絡上的任何人都可以使用這些協議和標準來攻擊其他人或組織,而且很難防止這種攻擊。
1、第一代科研型互聯網:軍事與科研網。
2、第二代消費型互聯網:萬維網(突發性,盡力而為、不安全、難管理、不強調 QoS)。
3、第三代生產型互聯網:未來互聯網(確定性、差異性、安全、易于管理、強調 QoS,與實體經濟深度融合)。
可見,傳統 Internet 的發展早已經走到了十條路口,Future Internet(未來互聯網)的演進成為了業界關注的焦點。
并且長期以來,計算機網絡領域對 Future Internet 的發展都存在著 2 種不同觀點:
1、演進派:認為 Internet 應像過去那樣繼續存在,遇到什么樣的問題,就打什么樣的補丁,安全性此類問題并不是由網絡基礎架構本身引起的。應該采用網絡重疊的方式來提供所需安全性和性能,而不觸動現有的基礎設施。2008 年 12 月,互聯網創建人之一 Bob Kahn 在印度海德拉巴舉辦的 “互聯網治理論壇”上發言,提出了 “數字對象架構” 的新標準,旨在使信息能在互聯網上更順暢地傳輸。他堅持認為這樣就能解決問題,而又不損害基本的架構。
2、革命派:則認為 Internet 應該被 “重新發明“,不斷打補丁的方式,會增加 Internet 的復雜性,使其變得更難以管理、對突破性的新型應用更不友好,且使 Internet 的技術體系逐步僵化,現有體系可能已快走到盡頭,還能修補的余地已經不大。2005 年,作為 Internet 協議的總設計師之一的 Dave Clark 教授發表了一篇題為《互聯網不再聯》的文章,指出:“Internet 的本質缺陷讓商家花費了幾十億成本,但卻阻礙了新發明,威脅到了國家安全。現在到了從頭再來的時候了?!?革命派倡導新路線有可能孵化更多種類的網絡體系,并創造持續創新的環境。在走革命路線的過程中,也會為演進路線提供更多的改進機會。
顯然的,演進派的擁躉主要來自商業社會,而革命派則得到了學術界和國家機構的支持。
2005 年 8 月,NSF(美國國家科學基金會)投資了 GENI(Global Environment for Networking Innovations,全球網絡創新研究環境)和 FIND(Future Internet Network Design,未來的互聯網設計)兩個項目。
GENI 項目是一個開放的、大規模的、真實的、分布式的,用于研究未來互聯網技術(Future Internet technologies)的全國性網絡創新試驗床基礎設施。通過為研究者提供一個可自定義的、可重復實現的虛擬網絡試驗床基礎設施的協作方式,加速 Future Internet 的研究,繼而改變傳統網絡體系研究所遵循的 “打補丁” 的演進方式,借此從根本上思考 Future Internet 的體系和功能,并以此指導未來網絡體系的演化。
GENI 希望網絡的新體系結構具有以下 4 個基本特征:
良好的安全性與可管理性。
允許各種計算設備,包括 PC、手機、傳感器、嵌入式處理器與此網絡連接,以實現普適計算。
能實現對其他重要基礎設施必要的控制與管理。
引入一些使網絡變得更有彈性、更容易管理的技術,便于業務提供商能更好地開展新業務。
在技術層面,GENI 通過虛擬化技術和分布式技術,從物理空間和時間兩個方面,將資源以虛擬化切片的形式進行交付,為不同網絡實驗者提供他們所需求的試驗床資源(如:計算、存儲、帶寬、網絡拓撲等),并提供試驗床資源的可操作性、可測性和安全性。
2007 年 3 月,NSF 通過 GENI 和 FIND 項目資助幾項大學研究,斯坦福大學的一個跨學科研究項目 Clean Slate Program(意為:白手起家,或從頭再來)就是其中之一。Clean Slate 項目的最終目的是要重新發明 Internet,旨在改變設計已略顯不合時宜,且難以革命性進化發展的傳統網絡基礎架構。該課題除了得到 NSF 的支持外,后來還逐漸得到了 Cisco、德國電信、NTT DoCoMo、NEC 和 Xilinx 等商業伙伴的支持。
09
OpenFlow 與 SDN 的誕生
2006 年,斯坦福教授 Nick McKeown(時任 Clean Slate 項目主任)的博士學生 Martin Casado,在 RCP 和 4D 論文的基礎上提出了一種邏輯上集中控制的企業安全解決方案 SANE,希望通過集中控制的方式來解決安全問題。集中控制思想是對保羅.巴蘭最初在 “分布式通信理論” 中提出的分散控制思想的一種顛覆。
2007 年,Martin Casado 在 SANE 基礎上開始領導面向企業網絡安全與管理的 Ethane 項目。該項目試圖通過一個集中式的 Controller(控制器),讓網絡管理員方便地定義基于網絡流的安全控制策略,并將這些安全策略應用到各種網絡設備中,從而實現對整個網絡通訊的安全控制。
后來,受 Ethane 項目的啟發,Martin Casado 和他的導師 Nick McKeown 教授發現,如果將 Ethane 的設計更簡化,將傳統網絡設備的數據轉發(Data Plane)和路由控制(Control Plane)兩個功能模塊相分離,并通過集中式的 Controller 以標準化的接口對各種網絡設備進行管理和配置,那么這將為網絡資源的設計、管理和使用提供更多的可能性,從而更容易推動網絡的革新與發展。
同年,Nick Mckeown 教授、Scott Shenker 教授和 Martin Casado 博士在硅谷一起創辦了 Nicira(后被 VMware 收購),這是 SDN 歷史上第一個初創公司。
??控制面、數據面統一的傳統路由器設備:
??控制面、數據面分離的 SDN 網絡架構:
2008 年,Nick McKeown 教授等人在 ACM SIGCOMM 發表了題為《OpenFlow: Enabling Innovation in Campus Networks》(OpenFlow:校園網的創新使能)的論文,首次詳細地介紹了 OpenFlow 和 OpenFlow Switch 的概念。
該篇論文首次詳細地介紹了 OpenFlow 的概念、工作原理,列舉了 OpenFlow 的幾大應用場景。包括:
校園網絡中對實驗性通訊協議的支持;
網絡管理和訪問控制;
網絡隔離和 VLAN;
基于 Wi-Fi 的移動網絡;
非 IP 網絡;
基于網絡包的處理。
OpenFlow Switch 相較于傳統 Switch 有著本質不同。OpenFlow Switch 將控制權上交給集中控制器,以此解決了 “難管理" 的問題,也讓網絡基礎設施具備了內生的安全性。OpenFlow 很久就在 GENI 項目中得到了應用。
同年,Nick McKeown 教授帶領的斯坦福大學研究團隊發布了首個開源 SDN Controller NOX。緊接著,2009 年又發布了 Python 版的 SDN Controller POX,以及 OpenFlow1.0 協議和開源網絡虛擬化軟件 FlowVisor。2010 年,Nick McKeown 的團隊又發布了 Mininet。迄今為止,Nick McKeown 團隊發布的這些軟件依然被業界廣泛使用。
OpenFlow/SDN 可以說是 “革命派” 在未來互聯網技術研究上的關鍵成果。
集中式的 Controller 通過 OpenFlow 協議對 OpenFlow Switch 中的 Flow Table 進行控制。Controller 會為特定的工作負載計算最佳路徑,從而對 Switch 的數據轉發定義路徑??刂妻D發分離的架構由 Controller 對網絡中的各種 Switch 設備進行綜合管理,這種行為就像對網絡進行整體 “編程” 一樣。
2009 年,基于 OpenFlow 為網絡帶來的可編程特性,Nick McKeown 教授團隊與加州大學伯克利分校的 Scott Shenker 教授進一步提出了 SDN(Software Defined Network,軟件定義網絡)的概念。
2010 年,Google 開始將數據中心與數據中心之間的網路連線(G-scale),轉換成 SDN 架構。
2011 年 5 月,NEC 面向虛擬化數據中心和云服務市場,推出了第一臺可商用的 OpenFlow 交換機。
2011 年 10 月,Cisco 在數據中心官方 Blog 上宣布會在 Nexus 交換機上提供對 OpenFlow 的支持。
2011 年 10 月,Juniper 開始在 Junos 操作系統 SDK 中添加 OpenFlow 代碼。
由 OpenFlow 帶來了兩項革命性的網絡創新成就:“控制轉發分離架構” 和 “可編程性”,也成為了 SDN 思想的核心理論。
10
SDN 蠻荒混戰
Open Networking Foundation 成立
2011 年,在 Nick McKeown 教授等研究學者的推動下,成立了開放網絡基金會(ONF,Open Networking Foundation)。
ONF 最初的主要發起成員包括德國電信、Facebook、Google、Yahoo、Microsoft 等公司。這些公司要么是網絡服務提供商,要么是電信運營商,唯獨沒有一家網絡設備提供商。
ONF 成立的目的,是為了推動 SDN 和 OpenFlow 協議的發展,由非網絡設備提供商組成的 “軟件定義網元” 戰線聯盟。他們希望以此擺脫網絡設備提供商長久以來的枷鎖,獲得更加靈活且契合自身需求的、更加低耗高效的網絡基礎設施。ONF 的成立標志著 OpenFlow 從散兵游勇的野蠻狀態正式過渡到產業化發展的軌道中。
同年,ONF 召開了第一屆開放網絡峰會(Open Networking Summit),并發表了 SDN 白皮書《Software Defined Networking:The New Norm forNetworks》,為 OpenFlow 和 SDN 在學術界和工業界都做了很好的介紹和推廣。
Nick McKeown 教授還與 Scott Shenker、Guru Parulkar、Larry Peterson 教授等人創建了 ON.Lab(開放網絡實驗室)。ONF 和 ON.Lab 兩大組織的成立,主要致力于推動 SDN 架構、OpenFlow 標準和規范的維護和發展,成功地將 SDN 推到前臺,并獲得業界的廣泛關注,為推動 SDN 被業界廣泛采用奠定了基礎。
2012 年召開的第二屆 Open Networking Summit 上,Google 宣布已經在其全球各地的數據中心骨干網絡中大規模地使用 OpenFlow。完成 SDN 改造之后,Google B4 網絡將全面運行在 OpenFlow 上,并且通過 10G 網絡鏈接分布在全球各地的 12 個數據中心,使廣域線路的利用率從 30% 提升到 90% 以上,接近 100%。
Google B4 是世界上首個跳出數據中心網絡,而在骨干網絡上取得巨大成功的 SDN 案例,這標志著 OpenFlow 技術 SDN 完成了從實驗技術向網絡部署的重大跨越,這樣的結果毫無疑問是令人震撼的,也堅定了行業對 SDN 的信心,從而開啟了 SDN 網絡新時代。
同年 8 月,VMware 以 12.6 億美金收購了 Nick Mckeown 教授的 SDN 創業公司 Nicira,其核心產品是基于 OpenFlow 協議創建了網絡虛擬平臺(NVP)。VMware 宣稱會將 Open vSwitch 等核心技術合并到自己的虛擬網絡軟件產品組合中。
2013 年,Google 在 SIGCOMM 上發表了論文《B4: Experience with a Globally-Deployed Software Defined WAN》,詳細介紹了 Google 的 WAN 加速 SDN 方案。論文中提及,Google 使用的控制器名叫 ONIX。
2013 年,AT&T 發布了 Domain2.0 計劃,并發布 Domain2.0 白皮書,通過 SDN/NFV 技術將網絡基礎設施從 “以硬件為中心” 轉向 “以軟件為中心”,實現基于云架構的開放網絡,率先打造 ECOMP 網絡編排系統,首次將 SDN 技術用于電信運營商大網的編排管理。
OpenDayLight 成立
面對 SDN 和 ONF 提出的網元軟件化,作為傳統的網絡設備廠商當然不能無動于衷,他們組建了 “軟件定義網管” 捍衛同盟,開始向 OpenFlow 的致命弱點發起了攻擊。
以 Cicso、Juniper、HUAWEI 為代表的設備廠商,認為純粹 OpenFlow 網元有很大的問題。比如,OpenFlow 不支持 IPv6、MAC-in-MAC 運營商骨干橋接、Q-in-Q 虛擬局域網棧、QoS 服務質量、流量整形能力、容錯和彈性等功能,這些缺陷限制了 OpenFlow 協議和 SDN 在電信網絡中的應用。所以他們提出了:轉發層面仍然基于現有協議體系,但設備應該開放更多的北向 API 供調用,即:通過網管來實現 Controller 的功能。
2013 年 4 月 8 日,在 Linux 基金會的支持下,作為網絡設備商中的領導者,Cisco、Juniper、博通、IBM 等網絡設備廠商聯合成立了 OpenDayLight(打開天窗說亮話)開源項目。
OpenDaylight 強調,SDN 不等于 OpenFlow,SDN 需要重新被定義。也就是說,OpenDaylight 強調 SDN Controller 不僅僅局限于 OpenFlow,而是應該支持多種南向協議。同時,OpenDaylight 還強調,應該采用分布式的 Controller 來取代集中式的 Controller。這樣可以管理更大的網絡,提供更強勁的性能,還能增強系統的安全性和可靠性。
OpenDaylight 對 SDN 的定義進行了更高層次的抽象,模糊了 OpenFlow 的存在:
控制與轉發分離。
邏輯上的集中控制。
控制平面與轉發平面之間提供可編程接口。
但是,由于商業社會殘酷的競爭,OpenDaylight 在成立之初就留下了矛盾的隱患。軟件防火墻與 VPN 供應商 Vyatta 的 CEO Kelly Herrell 就曾公開指出:Cisco 依賴于大量昂貴硬件的銷售,這與 SDN 的未來是 “矛盾的”。
但無論如何,激烈的商業競爭也同樣意味著產業的發展勢頭欣欣向榮,大量的 SDN 項目破土而出,例如:Cisco OpFlex、Juniper Tungsten Fabric、BigSwitch Floodlight 等等。
New Open Networking Foundation 改建
2014 年 12 月 5 日,為了向 ODL 予以還擊,ON.Lab 推出了一款創新性的網絡操作系統 ONOS(Open Network Operating System)。
ON.Lab 還一度嚴格要求加入的成員不得為任何網絡設備廠商工作,以此防范引入設備商們的利益糾葛。后來由于 ON.Lab 的組織者和職能都與 ONF 重疊。所以,在 2016 年 10 月 19 日,兩個組織宣布正式合并,改建了新的 ONF。
就這樣,圍繞 SDN 控制器和協議,各大流派及廠商進行了十多年的明爭暗斗,至今仍在發生著。
11
狹義 SDN 已死,廣義 SDN 永生
Overlay 虛擬網絡
在經歷了 ODL 的陣痛之后,網絡設備商們也紛紛開始押注走向另外一條更熟悉的道路,即:面向數據中心網絡的、基于標準協議(VxLAN、GRE、MPLSoGRE/UDP)的 Overlay 虛擬網絡。
2011 年 8 月,IETF 發布了 RFC 7348 草案《Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks》,主要由 VMware 與 Cisco 公司草擬。該技術利用 L2 over UDP 機制傳輸原始報文、利用 VxLAN 頭中 24bits 的 VNI 信息將傳統 VLAN 標記擴展至 16MB。
2011 年 9 月,IETF 發布了 RFC 7637 草案《NVGRE: Network Virtualization Using Generic Routing Encapsulation》,主要由 Microsoft 公司草擬。該技術利用 L2 Over GRE 機制傳輸原始報文、利用 GRE Key 字段中的高 24bits 將 VLAN 數據擴展至 16MB。
2012 年 2 月,IETF 發布了 RFC 7665 草案《A Stateless Transport Tunneling Protocol for Network Virtualization (STT) 》,主要由 Nicira 草擬。該技術利用 L2 Over Stateless TCP 機制在傳輸原始報文、利用 STT 頭中的 64bits Context ID 標識二層網絡分段。
當然,Overlay 網絡誕生的誘因并不完全是因為 SDN 領域激烈的競爭,更多是由云計算/數據中心快速發展所帶來的業務驅動。但 Overlay 網絡確實很好地繼承了來自 “狹義 SDN“ 的良好思想,在傳統網絡設備架構不需要進行大規模修改的前提下,疊加了 “中央管控“ 和 “可編程接口“ 機制,實現了應用和網絡的感知與協同。目前 Overlay 已經大規模被部署到各個云計算數據中心網絡中。
P4 可編程網絡
同樣的,Nick McKeown 教授等人也深刻領會到 OpenFlow 從純軟件方向切入的無力感,于是繼續從更本質的硬件層面探索 SDN 的可能性。
2014 年,Nick McKeown 教授聯合普林斯頓大學的 Jennifer Rexford 教授等人發布了成果論文《P4: Programming Protocol-Independent Packet Processors》。
論文中介紹了一種具有協議無關性、目標無關性、以及現場可重配置能力的 P4 DSL(專用芯片編程語言)編程語言。不久后,Nick McKeown 教授又聯合創立了數據平面可編程芯片公司 Barefoot Networks,并推出了 Barefoot Tofino DSA(專用芯片架構)可編程網絡芯片。
從 Nick McKeown 教授的表述中,可以將 P4 誕生的需求背景歸納為以下幾點:
一方面,可編程 CPU 無法滿足日益增長的網絡流量處理需求:目前最好的 ASIC 交換芯片可以處理大約 12.8Tbps,而目前最先進的 CPU 的網絡處理能力僅略高于 100Gbps;一個 ASIC 交換機以 10Tbps 的速度處理 40 種協議需要 400W 功耗,而一顆 CPU “等效的” 以 10Tbps 速度僅處理 4 個協議就需要 25KW 功耗;在可預見的未來,高性能交換機將完全基于 ASIC 芯片。
但另一方面,ASIC 的開發者并不是來自最終用戶:ASIC 無法讓最終用戶根據自己的需要編寫代碼,真正編寫代碼的還是設備商。但是,設備商并不運營大型網絡,所以他們傾向于簡單地實施現有的標準。他們永遠不會主動成為創新的人,所有這些都使得引入新想法變得困難,因此一切都趨于停滯。當用戶希望在 ASIC 中添加一個新的協議時,其開發周期可能是 4 年。
在這樣的背景下,用戶越來越強烈地需求一款新的針對特定領域的處理器芯片。并且與 CPU 上的通用計算一樣,所有特定領域的處理器都有相應的高級編程語言和編譯器。而網絡領域的 DSL 和 DSA 就是 P4 編程語言(軟件)和 Barefoot Tofino 可編程交換芯片(硬件)。
在 OpenFlow 時代,傳統交換機結合 OpenFlow 協議,通過 Control Plane 正確設置 ASIC 芯片的各種 Flow Table Entries 來控制 Data Plane 的轉發行為。但前提是,不能超出 ASIC 芯片原本沒有支持的功能范圍??梢?,OpenFlow 只是從軟件層面提供了一種 Control Plane 和 Data Plane 交互的協議,其功能完全受制于硬件的特性。
而 P4 可以說是 OpenFlow 的接棒者,以期解決 OpenFlow 編程能力不足和可拓展性差等問題。Tofino 可編程芯片的本身并不具備任何網絡協議功能,而是根據開發者編寫的 P4 程序來自定義轉發芯片的功能。P4 將網絡功能和協議設計交給了廣大開發者而不是傳統的網絡設備廠商,從而實現:
??最大化地加速網絡創新;
??縮短協議部署周期;
??開發者自頂向下網絡設計,擁有完整的創新實驗平臺;
12
未來:基于軟硬件融合的完全可編程網絡
2019 年 6 月,Intel 收購 Barefoot Networks 公司,并由 Nick McKeown 教授出任 Intel SVP,繼續領導網絡研發團隊(現已退居二線)。在同年的 ONF Connect 2019 演講中,Nick McKeown 教授第一次定義了 SDN 發展的 3 個階段:
2010–2020 年:通過 OpenFlow 將控制面和數據面分離,用戶可以通過集中的控制端去控制每個交換機的行為;
2015–2025 年:通過 P4 編程語言以及可編程 FPGA 或 ASIC 實現數據面可編程,這樣,在包處理流水線加入一個新協議的支持,開發周期從數年降低到數周;
2020–2030 年:展望未來,網卡、交換機以及協議棧均可編程,整個網絡成為一個可編程平臺。
這預示著,未來互聯網技術的發展還將繼續,這場從 21 世紀初開始直至今天的 “革命“ 仍未結束。
正如計算機體系結構領域的權威、圖靈獎得主 David A. Patterson 和 John L. Hennessy 在 2018 年聯合發布的論文《A New Golden Age for Computer Architecture》(計算機體系結構的新黃金時代)中所提到的 —— 未來將是計算機體系結構的黃金十年。
希望這也會是未來互聯網技術實現徹底革新的十年。
編輯:黃飛
?
評論
查看更多