天天看點

《分布式系統:概念與設計》一3.3.4 協定

協定是指為了完成給定任務,程序間通信所要用到的一組衆所周知的規則和格式。協定的定義包括兩個重要的部分:

必須交換的消息的順序的規約。

消息中資料格式的規約。

衆所周知的協定的存在使得分布式系統的軟體元件能獨立地開發,能在代碼次序不一樣、資料表達不一樣的計算機上用不同的程式語言實作。

一個協定是由分别位于發送方計算機和接收方計算機上的一對軟體子產品實作的。例如,一個傳輸協定将任意長度的消息從一個發送程序傳遞給一個接收程序。想向另一個程序傳輸消息的程序給傳輸協定子產品發出一個調用,并按指定的格式傳遞消息。接着傳輸軟體負責将消息傳遞到目的地,它将消息分割成指定大小的資料包和格式,利用網絡協定(另一個低層的協定)将消息傳輸到目的地。接收方計算機中相應的傳輸協定子產品通過網絡級協定子產品接收這些資料包,并在傳遞給接收程序之前,進行逆向轉換,重新生成消息。

《分布式系統:概念與設計》一3.3.4 協定

協定層 網絡軟體是按層的層次結構排列的。每一層都為上面的層提供了相應的接口,并擴充了下層通信系統的性質。層由與網絡相連的每一個計算機上的一個子產品表示。圖3-2說明了這個結構和通過分層協定傳遞消息時的資料流。每一個子產品看起來都是和網絡中另一個計算機上相同層次的子產品直接通信,但事實上資料并沒有在兩個同層次的協定子產品之間直接傳輸。網絡軟體的每一層都隻通過本地過程調用與它的上一層和下一層通信。

在發送方,每一層(除了最頂層,即應用層以外)從上一層按照指定的格式接收資料項,并在将其傳送到下一層進行進一步處理之前,進行資料轉換,按下一層的格式封裝資料。圖3-3說明了這一過程,在圖中,該過程被應用于osi協定組的前四層。從圖中可以看出,資料包的頭部包含大部分與網絡相關的資料項,但為了簡潔起見,它省略了在一些資料包類型中出現的附加部分;同時該圖也假設應用層要傳遞的應用層消息的長度小于底層網絡資料包的最大長度。否則,消息就要被封裝成幾個網絡層的資料包。在接收方,下層接收到的資料項要進行一次相反的轉換,再傳遞到上一層。上層協定的類型已經包括在了每層的頭部,這使得接收方的協定棧能選擇正确的軟體元件來拆分資料包。

《分布式系統:概念與設計》一3.3.4 協定

這樣,每一層為上一層提供服務,并擴充下一層提供的服務。最下面的是實體層。它是由通信媒體(銅線、光纜、衛星通信信道或無線電傳輸)和在發送結點将信号放置在通信媒體上,在接收結點感應該信号的模拟信号電路實作的。在接收結點,接收到的資料項通過軟體子產品的層次結構向上傳送,在每一層都重新轉換直到變成可傳遞給接收程序的格式為止。

協定組 一套完整的協定層被稱為協定組或者協定棧,這也反映了分層結構。圖3-4顯示了與國際标準組織(iso)采用的開放系統互連(open system interconnection,osi)的7層參考模型[iso 1992]相一緻的協定棧。采用osi參考模型,是為了促進滿足開放系統需求的協定标準的開發。

《分布式系統:概念與設計》一3.3.4 協定

圖3-5總結了osi參考模型的每一層的目标。顧名思義,這隻是一個用于協定定義的架構,而不是特定協定組的定義。與osi模型一緻的協定組必須在模型定義的7層的每一層包括至少一個特定的協定。

《分布式系統:概念與設計》一3.3.4 協定

協定分層給簡化和概括通路網絡通信服務的軟體接口帶來了實質性的好處,同時也帶來了極大的性能開銷。通過n層協定棧傳輸一個應用級的消息,通常在協定組中要進行n次控制傳輸,才能到達相關的軟體層,其中至少有一個是作業系統的入口,資料的n份拷貝也作為了封裝機制的一部分。所有這些開銷導緻應用程序間的資料傳輸率遠低于可用的網絡帶寬。

圖3-5包括了在網際網路中使用的協定的例子,但網際網路的實作在兩方面沒有遵循osi模型。第一,在網際網路協定棧中,并沒有清楚地區分應用層、表示層、會話層。應用層和表示層或實作成單獨的中間件層或在每個應用内部單獨實作。這樣,corba就可以在每個應用程序包括的中間件庫中實作對象間調用和資料表示(corba的進一步讨論見第8章)。web浏覽器和其他的一些需要安全信道的應用也采用了類似過程庫方式使用的安全套接字層(見第11章)。

第二,會話層與傳輸層內建在一起。互連網絡協定組包括應用層、傳輸層和互連網絡層。互連網絡層是一個“虛拟的”網絡層,負責将互連網絡的資料包傳輸到目的計算機。94互連網絡資料包是在互連網絡上傳遞的資料單元。

 圖3-6 互連網絡層互連網絡協定覆寫在底層的網絡上,參見圖3-6。網絡接口層接收互連網絡資料包,并将其轉換成适合每個底層網絡的網絡層傳輸的資料包。

《分布式系統:概念與設計》一3.3.4 協定

資料包組裝 在傳輸前将消息分割成多個資料包并在接收端重新組裝各個資料包的任務通常是由傳輸層完成。

網絡層協定的資料包包括頭部和資料域。在大部分網絡技術中,資料域是長度可變的,其最大長度稱為最大傳輸單元(maximum transfer unit,mtu)。如果消息的長度超過底層網絡層的mtu,就将其分割為多個大小适當的塊,并标上序列号以便其重新裝配,再用多個資料包進行傳輸。例如,以太網的mtu是1500位元組,如果消息不超過這個資料量,就能在一個以太網資料包中進行傳輸。

盡管在網際網路協定組中,ip協定處于網絡層協定的位置,但它的mtu卻很大,有64kb(實際通常使用8kb,因為一些結點無法處理這麼大的資料包)。無論ip資料包采用哪一個mtu值,比以太網mtu值大的資料包必須經過分割才能在以太網上傳輸。

端口 傳輸層的任務是在一對網絡端口間提供與網絡無關的消息傳送服務。端口是主機中可由軟體定義的目的點。它隸屬于程序,使得資料能傳輸到位于目的結點的指定程序。這裡我們将詳細講述端口在網際網路和大部分其他網絡中實作的端口尋址過程。第4章将讨論端口的程式設計。

尋址 傳輸層負責将消息傳遞到目的位址,其使用的傳輸位址由主機的網絡位址和一個端口号組成。網絡位址是能唯一辨別主機的一個數字辨別符,可以讓負責将資料路由到該主機的結點準确地定位它。在網際網路中,為每台主機都配置設定了一個ip位址,用于辨別該主機和它連入的子網,使得從其他結點都能路由到該主機(下一節将介紹這一内容)。以太網中沒有路由結點,由每台主機負責辨識資料包的位址,并接收發給自己的資料包。

衆所周知的網際網路服務(如http或ftp)已經被配置設定了關聯的端口号。它們都在權威機構(即網際網路編号管理局,簡稱iana)進行了登記[www.iana.org]。要通路指定主機上的某個服務,隻要将請求發給該主機上相關的端口就可以了。有些服務,如ftp(關聯端口為21),會被配置設定一個新的端口号(私有号碼),并将新的端口号發送到用戶端。用戶端使用新的端口号完成交易或會話的剩餘部分。其他服務,如http(關聯端口為80),通過關聯端口處理所有的業務活動。

編号小于1023的端口被定義為公共端口。在大多數作業系統中,它們的使用被限制在特權程序中。1024~49151之間的端口是iana擁有的服務描述的已注冊端口,其他直到65535的端口可用于個人目的。實際上,大于1023的所有端口都可用于個人目的,隻是為個人目的而使用這些端口的計算機不能同時通路相應的已注冊服務。

在開發經常包括許多動态配置設定的伺服器的分布式系統中,配置設定固定端口号并不恰當。這個問題的解決方案涉及為服務動态配置設定端口以及提供綁定機制,使得客戶能用符号化名字定位服務和相應的端口。這些将在第5章做進一步讨論。

資料包傳遞 網絡層采用兩種方法傳遞資料包。

資料報包傳遞:術語“資料報”指出了這種傳輸模式與信件、電報的傳輸模式的相似性。資料報網絡的本質特征是每個包的傳遞都是一個“一次性”的過程;不需要計劃,一旦包被傳遞,網絡就不再儲存它的相關資訊。在資料報網絡中,從一個源位址到一個目的位址的資料包序列可以按照不同的路由來傳遞(這樣,網絡就有能力處理故障,或緩解局部擁塞帶來的影響),在這種情況下,資料包序列可能不按照原來的順序到達。

每個資料報包都包括完整的源主機和目的地主機的網絡位址,後者是路由過程的基本參數,我們将在下一節加以讨論。資料報傳遞是資料包網絡最初所基于的概念,可以在目前使用的大多數計算機網絡中找到它。網際網路的網絡層(ip)、以太網以及大部分有線或無線的區域網路技術都是基于資料報傳遞的。

虛電路包傳遞:一些網絡級的服務利用類似于電話網絡中傳遞的方式實作包傳輸。必須在經源主機a到目的主機b傳遞包之前建立虛電路。要建立虛電路,涉及确定從源位址到目的位址的路由,這可能會經過一些中間結點。在路由中的每個結點上都會有一個表格項,訓示路由下一步該使用哪一個連結。

一旦建立起虛電路,就可以用它傳輸任意數量的資料包了。每個網絡層的資料包隻包括一個虛電路号,而不是源位址和目的位址。此時已不需要位址資訊,因為在中間結點,通過引用虛電路号來路由資料包。資料包到達目的位址後,根據虛電路号就可以決定其源位址。

虛電路與電話網絡的類比不能這樣從表面上看。在pots中,進行一次電話呼叫就要建立從主叫者到被叫者的實體電路,而這一音頻連結也将作為專用連接配接而被保留。在虛電路的包傳遞中,電路隻是由一些在路由結點上的表格項來表示,而資料包所路經的連結也隻在傳遞一個資料包時使用,在其餘時間這些連結是空閑的,可供它用。97是以,一個連結可以被多個獨立的虛電路使用。目前使用的最重要的虛電路網絡技術是atm。我們已經提到過(見3.3.3節),它傳送單個資料包的延遲較短,這是使用虛電路的直接結果。但無論怎麼說,資料包傳送到一個新目的位址前要求有一個準備階段,這确實造成了短時間的延遲。

不要将網絡層的資料報傳遞和虛電路包傳遞之間的差別與傳輸層中名字相似的一對機制(即無連接配接傳輸和面向連接配接傳輸)相混淆。我們将在3.4.6節有關網際網路傳輸協定——udp(無連接配接的)和tcp(面向連接配接的)的内容中描述這些技術。這裡我們隻是讓大家注意,在任何一種類型的網絡層上都可以實作這些傳輸模式。

繼續閱讀