對“端到端”原則的理解

對“端到端”原則的理解

前些天讀了兩篇論文,一篇是J.H.Saltzer,D.P.Read D.D.Clark 80年代初發表的《The End-TO-End Arguments in System Design》,另一篇是David D.Clark在前篇論文發表近20年後寫的《Rethinking the Design of the Internet-The end to end arguments vs. the brave new world》,這兩篇論文都是網絡設計原則方面的重要理論探討。

The End-TO-End Arguments in System Design》這篇論文提出了一個著名的“端到端原則”,文章考慮的一個重要問題是如何在功能之間進行合適的劃分,如何將功能安置到合適的層中。通訊系統設計的主要目標是要讓傳輸中各種錯誤發生的概率降低到一個可以接受的水平。對於一個通訊可靠系統,它的出錯率應該是很低的,而且只需通過簡單的多次傳輸就可以實現系統的目標。當然也可以採用端到端確認重傳來實現,這時就要考慮這些功能在系統中什麼地方實現,即層次上的考慮。設置功能時要考慮兩個因素的權衡:代價和性能。通常底層的功能可以提高系統的性能(如底層的校驗機制),但全局的代價較大(overall cost)。在文中作者通過幾個例子(傳輸保證、安全傳輸、時序控制以及實務管理)來說明將一些功能放到高層(End)是有利於系統的實現和性能提高的。同時也強調一點:任何應用對功能的需求都是有特指的,因此不可能存在一種底層的功能滿足所有的上層應用需求。任何底層功能的設定都是高全局代價的。因此,某些功能的不完全實現往往是提高系統功能的好辦法。作者認爲網絡傳輸是不可靠的,即由於錯誤的複製或緩衝,硬件處理器或記憶短暫的錯誤等各種原因會出現數據包的丟失和損壞,因此在網絡的最核心的部分應該只做數據的傳輸而不能去做一些其他的應用,而數據是否正確傳輸則應該放到應用層去檢查和判斷——由此產生了我們今天網絡應用層上的確定重傳機制。這樣一來實際上是降低了網絡的核心複雜度,同時也提高了網絡的靈活性和可維護性,因爲網絡只需要做一件事情即傳輸數據,而其他的功能可以放到應用層上去實現,這樣網絡一旦出現故障我們首先想到的就不會是網絡的核心部件了。

今天我們的網絡已經是非常龐大了,可是在當時網絡還剛剛起步,我在想作者當時爲什麼會提出這樣一種論點呢?帶着這樣一個問題反覆地拜讀了好多次,細細揣摩作者寫作的動機,隱隱明白了作者當初想要解決的一些問題。

其一,降低網絡核心複雜度,簡化複雜功能。文件從主機A傳到主機B,也就是說AB主機要通信,需要經過三個環節:首先是主機A從磁盤上讀取文件並將數據分組成一個個數據包packet,,然後數據包通過連接主機A和主機B的網絡傳輸到主機B,最後是主機B收到數據包並將數據包寫入磁盤。在這個看似簡單其實很複雜的過程中可能會由於某些原因而影響正常通信。比如:磁盤上文件讀寫錯誤、緩衝溢出、內存出錯、網絡擁擠等等這些因素都有可能導致數據包的出錯或者丟失,由此可見用於通信的網絡是不可靠的。那麼怎麼樣在不可靠的網絡上實現和確保兩個主機之間文件的可靠傳輸,即實現數據的完整而準確的傳輸成爲通信雙方信息共享的關鍵。由於實現通信只要經過上述三個環節,那麼我們就想是否在其中某個環節上增加一個檢錯糾錯機制來用於對信息進行把關呢?在通信時一旦發現數據包有問題就進行相應的處理使得到達主B的數據包都是沒有問題的或者說都是正確的數據包。連接主機AB的網絡在通信過程中起着橋樑的作用,同時它在整個網絡體系結構中也處於一個較低的層次,那麼是不是可以把數據包的糾錯任務也交給網絡呢?事實證明這是行不通的。因爲這不但會增加網絡的複雜性而且會降低網絡的可維護,從而必須要付出昂貴的開銷,這是不可取的。這時候“端系統”似乎理所當然地成爲了要完成這個任務的佼佼者。實驗證明“端系統”完全可以勝任這個工作,因爲只有“端系統”可以知道哪個地方出現了錯誤,哪個地方需要重傳。我們將確認傳輸正確的任務交給“端系統”去完成,在“端系統”沒有接收到完整的所需要的資源的同時,可以有多種機制來保證滿足傳輸的正確。如將確認重傳機制放在端系統的應用層上可以保證信息的可靠到達,這樣就最大的保證了傳輸的可靠性和完整性。但是爲了在一個原本不可靠的網絡上實現可靠傳輸,就必須要有一個獨立於網絡層的可靠傳輸協議和一個端系統的應用層的錯誤檢測功能。這樣一來,網絡的使命就很單純了,網絡只需要負責傳輸數據,而其他方面都由網絡以外的系統去實現了,從而大大地降低了網絡的複雜性,提高了網絡的通用性和靈活性,當增加新應用時也不必改變核心網絡,便於網絡的升級,提高了網絡的可靠性。

其二,儘可能好的數據傳輸服務。對於數據的傳輸來說,網絡層的最主要目的是增大數據傳輸的速率,網絡層不需要考慮數據的完整性,數據的完整性和正確性交給端系統去檢測就行了,因此在數據傳輸中,對於網絡層只能要求其提供儘可能好的數據傳輸服務,而不可能寄希望於網絡層提供數據完整性的服務。這種設計原則可以使得傳輸的速率最大化,同時也爲多種服務的實現提供了數據傳輸方面的保證。現在廣泛使用的TCP協議也只能夠用確定重傳的機制來保證數據的一致性和完整性,因此這對於端系統的檢測數據完整性和保證數據的正確性提出了更高的要求。

其三,“End-To-End”地址透明性和全球唯一地址。“端到端”設計原則需要給Internet上的主機分配全球唯一的地址以用於標識不同的主機,這樣在傳輸的過程中不需要中間的節點或者轉發節點對於包的內容進行修改。在數據包中包括了來源和目的地的完整的信息,中間的路由等轉發節點也不需要去知道該數據包的信息。在這個意義上,數據在端系統之間的傳輸好像是有唯一的通路直接相連。這樣,端系統上的應用程序也不需要知道實際傳輸的具體的線路,爲實際應用也帶來了方便。

Rethinking the Design of the Internet-The end to end arguments vs. the brave new world》這篇論文是MIT教授David Clark2001年發表在ACM上的另一篇關於重新思考Internet設計原則的重要論文。20多年前他提出的“End-to-End Argument”表述爲:一種應用功能只有當其知識和幫助置於通信系統的邊緣才能完全和正確地實現,因此將提出這種應用功能作爲通信系統本身的性質是不可能的。當時提出這種論斷的依據是網絡是不可靠的,網絡只做最通用的數據傳輸,而最終檢查是否正確執行只能在處於傳輸終端的應用層。這樣一種設計原則的優點很多,解決了當時很多難題,這在前面已有論述。可是到了今天,這樣一種設計原則是否仍然適用呢?“端到端”原則是絕對可靠的嗎?這正是作者在這篇文章中思考的問題。

當今的網絡已是今非昔比,不但網絡的規模是當時無法想象的,就是網絡的應用環境也大大地改變了。一方面由於端系統原則要求每臺主機都要有一個全球唯一的地址,這樣20年前的IPV4已經不可以保證每一臺端系統都有唯一的地址,這樣就產生了ABC類地址,產生了子網、網關等等也產生了IPV6技術來面對地址空間不足的挑戰。另一方面Internet初期的用戶基本上都屬於技術型的科研人員,而現今已普及到一般老百姓,所以事實上許多複雜的軟件都放在服務器而不再是“end”,這是與當初“端系統”原則不相符合的。由於用戶急劇增加而互不瞭解,Internet已變成沒有信用的世界,必須在網絡的核心部分增加認證、授權等機制使網絡更可信。盡力服務不能保證服務質量,特別是流媒體服務質量,需要在網絡中間增加存儲節點。ISP服務的多樣化,要求基於中間服務器的應用。出於信息安全等方面的考慮,政府與中介組織參與網絡內容與服務的監督管理,網絡核心不可能再是“Dumb”網。所有這些變化都要求增加核心網絡的功能,這對“端系統”原則提出了重大挑戰。

我想今後網絡的發展不可能完全侷限於“端到端”原則的架構思想,但也不可能完全拋棄這樣一種理論的指導,“端到端”原則所提倡的靈活性和開放性對今後網絡的發展仍將具有重要指導意義。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章