計算機網絡:運輸層(1)

一、運輸層概述

1.進程間通信

運輸層向它上面的應用層提供通信服務,它屬於通信部份的最高層,也是用戶功能的最底層。
只有網絡邊緣部分中進行通信的主機的協議棧中才有運輸層,而路由器只有下面的三層。
網絡層已經實現了數據報從主機到主機的交付。但實際上,通信的實體是主機間的進程。嚴格來說,兩臺主機間進行通信,其實是兩臺主機的應用進程間相互通信。
運輸層需要解決進程間的通信問題。由於應用層的進程多種多樣,爲每一種應用進程設計一個運輸層協議顯然是不可行的。
因此,運輸層需要複用分用的功能,即對於不同的應用進程,都可以使用相同的運輸層協議完成交付。
總的來說,運輸層需要爲進程提供端到端的邏輯通信
運輸層的邏輯通信
從圖中也可以知道,運輸層對高層用戶屏蔽了下面網絡核心的細節,對應用進程而言,好像就是兩個端口間有一條信道。
此外,運輸層還需要對報文進行差錯檢測

2.運輸層的端口

應用層所有的進程都可以通過運輸層再傳送給網絡層;而所有網絡層上交的數據報也都要通過運輸層分發給各個應用進程,這就是運輸層的複用和分用。爲了實現複用和分用,需要爲每一個進程賦予一個明確的標誌。
雖然在計算機中,進程都有各自的進程標識符。但由於主機間操作系統的差異,直接將進程標識符作爲標誌是不可行的。爲了能夠使不同操作系統的主機相互通信,必須使用操作系統無關的方法來標誌進程。
TCP/IP協議簇使用協議端口號來解決這個問題,簡稱爲端口。這裏的端口是協議棧層間抽象的軟件端口
在通信時,只需要把報文傳送到主機的一個合適的端口,剩餘的工作由運輸層協議完成。
TCP/IP的運輸層用16位端口號來標誌一個端口。端口號只具有本地意義,只是標識本計算機的各個應用進程與運輸層交互的層間接口。不同計算機的相同端口號之間沒有關聯。
因此,兩個計算機想要互相通信,必須知道對方IP地址和端口號。在客戶端-服務器(C-S)模式中,端口號分爲兩大類:

  1. 服務器使用的端口號:該大類又分兩個小類
    熟知端口號(系統端口號):數值爲0~1023,這些端口號指派給TCP/IP中最重要的那些應用程序。
    常用熟知端口號
    登記端口號:數值爲1024~49151,爲沒有熟知端口號的應用程序使用,必須在IANA登記以避免重複。
  2. 客戶端使用的端口號
    又稱爲短暫端口號,數值爲49152~65535。這些端口號只在客戶進程運行時才動態選擇,提供給客戶進程短暫使用。C-S模式中,當服務器端接收到客戶進程報文時,就知道了客戶端的端口號,因此客戶端的短暫端口號能夠完成通信任務。

3.兩個主要協議

根據應用程序的不同要求,運輸層有兩種不同的運輸協議,分別是面向連接的TCP無連接的UDP
它們對應的運輸協議數據單元TPUD分別爲TCP報文段UDP用戶數據報
TCP/IP體系中的運輸層協議

  1. TCP協議
    TCP協議提供面向連接的服務,傳輸數據前需要先建立連接,結束後也要釋放連接。儘管使用下面的網絡是不可靠的,使用TCP協議的運輸層邏輯信道能夠根據協議控制,提供可靠的交付。其邏輯信道相當於一條可靠的全雙工信道
    也因此,TCP只提供端到端的連接,不支持廣播和多播服務
    由於提供可靠的運輸服務,TCP協議增加了許多額外開銷。不僅協議數據單元的首部大很多,還要佔用需要處理機資源。
  2. UDP協議
    UDP協議在傳送數據前不需要建立連接,目的主機接收數據報後也不需要給出任何確認。因此,UDP協議不提供可靠交付。但在某些情況下,UDP確實最有效的工作方式。

二、用戶數據報協議UDP

1.UDP的特點

用戶數據報協議UDP只在IP協議的數據報服務上增加了複用和分用以及差錯檢測的功能。主要特點有:
UDP是無連接的:發送數據前不需要建立連接,減小了開銷和發送數據的時延。
UDP盡最大努力交付:不保證可靠交付,主機不需要維持複雜的連接狀態表。
UDP是面向報文的:UDP對應用層的報文,不合並也不拆分,添加首部保留邊界就下放給網絡層,也即UDP一次交付一個完整的報文。因此,過長的報文會導致網絡層分片的消耗增大;過小的報文會導致通信的效率降低。UDP必須選擇大小合適的報文。
UDP面向報文
UDP沒有擁塞控制。網絡的擁塞不會使源主機發送的速率降低,這對某些實時應用相當重要,但也可能導致嚴重的擁塞問題。
UDP支持一對一、一對多、多對一、多對多的交互通信
UDP的首部開銷小。其首部只有8字節。

2.UDP報文的首部

UDP用戶數據報分爲首部字段和數據字段。首部字段只有八個字節,由四個字段組成,分別爲:
源端口:源端口號,需要對方回信時選用,不需要可置0;
目的端口:目的端口號,是交付報文時必要的。
長度:UDP用戶數據報的長度,單位爲字節,最小爲8。
檢驗和:檢測UDP用戶數據報是否出錯,有錯就丟棄。
UDP用戶數據報
當運輸層收到網絡層上交的UDP數據報時,UDP根據首部中的目的端口,上交給各個應用進程。當端口號不正確時,網絡層的ICMP就會發送端口不可達的差錯報文給發送方。
UDP的分用
在UDP用戶數據報的圖中,可以看到UDP首部的前部分還有一個12字節的僞首部部分。這部分僞首部並不真正添加在UDP用戶數據報中,只是在計算校驗和時使用。
UDP用戶數據報的校驗和與IP數據報校驗和方法類似,不同處在於UDP把首部和數據部分一起都檢驗。在發送端,將包括僞首部在內的整個UDP用戶數據報劃分爲2字節一組(若數據部分的字節數不是偶數,需要補0),每組得到其16位二進制碼(此時校驗和字段爲全0),並按二進制反碼運算求和。求和得到的結果再取反,得到校驗和字段的數據。接收端也同樣對各組求和,若數據無差錯,得到的結果應該爲16位全1。
計算UDP校驗和

三、傳輸控制協議TCP概述

1.TCP的特點

TCP協議是TCP/IP體系中非常複雜的一個協議。下面是TCP協議的最主要特點:

  1. TCP是面向連接的運輸層協議:使用TCP協議前必須建立連接,傳輸完畢後也需要釋放連接。
  2. TCP連接只能有兩個端點:TCP連接只能是點對點的。
  3. TCP提供可靠交付的服務:TCP傳送的數據無差錯、不丟失、不重複、按序到達。
  4. TCP提供全雙工通信:允許進程在任何時候都能發送數據,TCP連接兩端都設有發送和接收緩存。發送時,進程只需要將數據傳給TCP緩存;接收時,TCP將數據放入緩存,進程可以隨時讀取緩存中的數據。
  5. TCP是面向字節流的:TCP把應用進程下放的數據僅看成一串無結構的字節流,而不知道數據的含義。因此,TCP並不保證源進程發送的數據塊和目的進程接收的數據塊是大小對應的。識別字節流由應用進程完成。不過,雖然不保證大小對應,但進程接收的字節流和發送的字節流是完全一樣的。

TCP面向字節流
TCP面向字節流的特性導致它和UDP報文的發送方式完全不同:TCP不關心進程一次給出多長的報文,只根據窗口值網絡擁塞程度來決定報文的大小。

2.TCP的連接

TCP把連接作爲最基本的抽象。TCP的特性都與面向連接這一基本特性相關。
每一條TCP連接都有兩個端點。其端點並不是運輸層的協議端口,而叫做套接字(socket)或稱插口
套接字的定義是:端口號拼接到IP地址即構成套接字。因此套接字表示爲IP地址後加上端口號,即:
套接字socket = (IP地址:端口號)
而每一條TCP連接唯一地被通信兩端的兩個端點所確定,即:
TCP連接:: = {socket1 , socket2} = {IP1:port1 , IP2:port2}
例如從IP地址爲192.3.4.5的主機的端口80,與IP地址爲127.0.5.8的端口21建立TCP連接,可以表示爲:
TCP連接:: = {192.3.4.5:80 , 127.0.5.8:21}

總之,TCP連接是協議軟件提供的一種抽象,而TCP連接的端點是也很抽象的套接字。有時爲了方便,也稱應用進程之間建立TCP連接。

注:名詞socket在網絡中有許多不同的含義,應注意加以區分。

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