1. 程式人生 > >運輸層:面向連線的服務和無連線的服務

運輸層:面向連線的服務和無連線的服務

無連線的服務和麵向連線的服務:

像網路層一樣,運輸層也可以提供兩種型別的服務:無連線的服務和麵向連線的服務.不過這兩種服務在本質桑與網路層不同.在網路層,無連線非服務意味著同一報文的多個數據採取了不同的路徑(並且是失序抵達的),而面向連線的服務意味著屬於同一報文的多個數據報採取相同的路徑(並且是順序抵達的).而在運輸層,我們並不關心分組採取什麼樣的物理路徑(我們假設在兩個運輸層之間有一條邏輯連線).運輸層的無連線服務表示分組和分組之間是互相獨立的,而面向連線的服務則意味著 它們之間有聯絡.

無連線的服務

在使用無連線的服務時,源程序需要將它的報文分割成可被運輸層接受的資料塊,並將這些資料塊逐個交付到運輸層

.運輸層視這些資料塊為獨立的資料單元,塊和塊之間沒有聯絡.當來自運輸層的一個數據塊到達之後,運輸層就把它封裝到一個分組中,然後傳送這個分組.為了說明分組之間的獨立性,假設客戶京城有三個資料塊要發給服務程序.這些資料塊按順序遞交給無連線的運輸協議.但是,因為在運輸層這些分組之間是沒有哦聯絡的,所以分組就可能失序到達終點,並且同樣失序地交付給服務程序(假設從程序到運輸層的交付以及從運輸層到程序的交付是及時的).


如圖所示, 在客戶端有三個報文塊被按順序(1,2,3)遞交給了客戶端運輸層.因為第二個分組在傳輸時有額外的時延,所以在伺服器端,這些報文並沒有按順序交付(1,3,2),如果這三個資料塊屬於同一個報文,那麼這個伺服器接收到的就有可能是一個奇怪的報文.如果其中一個報文丟失了,那麼情況會更糟.因為分組沒有編號,接收方運輸層無法知道一個分組已經丟失.它只能向伺服器程序交付兩個資料塊.

之所以出現以上問題,是因為這兩個運輸層之間沒有協調一致.接收方的運輸層既不知道什麼時候第一個分組到達,也不知道什麼時候所有的分組全部到達.

在無連線的服務中,沒有哪一種流量控制,差錯控制或者擁塞控制策略能夠有效實施.

面向連線的服務

在使用面向連線的服務時,客戶和伺服器首先要在他們之間建立一條連線.資料的交換隻能是在連線建立之後發生.在資料交換完之後,該連線被拆除.運輸層的面向連線的服務和網路層的面向連線的服務有所不同.在網路層,面向連線的服務意味著兩端的主機機器中間的路由器之間的協調一致.而在運輸層,面向連線的服務僅涉及兩個主機,也就是說服務是端對端的.這就意味著,不管是無連線的網路協議,還是面向連線的網路協議,我們都能夠在上面使用面向連線的運輸層協議.