1. 程式人生 > >考研筆記-運輸層服務和工作原理

考研筆記-運輸層服務和工作原理

方差 最重要的 col 16bit 不重復 支持 網絡 有效 字節數

5.運輸層服務和工作原理

  5.1.1傳輸層提供的服務

    從通信和信息處理的角度來看,傳輸層向上面的應用層提供通信服務,屬於面向通信的最高層,同時也是用戶功能的最低層。傳輸 層位於網絡層之上,為運行在不同主機上的進程間提供邏輯通信,而網絡層提供不同主機間的邏輯通信。即使網絡層不能提供可靠的傳 輸協議,運輸層同樣能為應用程序提供可靠服務。

    傳輸層的功能:

    1)傳輸層提供應用進程之間的邏輯通信(即端到端通信)。與網絡層的區別是,網絡層提供的是主機間的邏輯通信。

    2)復用和分用。復用是指發送方不同的應用程序都可以采用同一個傳輸層協議傳送數據;分用是指接收方的傳輸層在去除報文首部 後能把這些數據正確交付到目的應用程序。

    註:傳輸層的復用分用與網絡層的不同,網絡層的復用是指發送方不同的協議數據都可以封裝成IP數據報發送出去,分用是指接收 方的網絡層在去除首部後把數據交付給相應的協議。

    3)傳輸層還要對收到的報文進行差錯檢驗(首部和數據部分)。而網絡層只檢查IP數據報的首部,不檢查數據。

    4)提供兩種協議,即面向連接的TCP和無連接的UDP。而網絡層無法同時實現兩種協議(即在網絡層要麽只提供面向連接的服務,如 虛電路,要麽只提供無連接的服務,如數據報,不可能在網絡層同時出現這兩種方式)。

    5)接收進程收到的報文順序應與發送順序一致,發送進程發送一次報文,接收方應收到且只收到一次。對應用層報文長度沒有限 制,發送進程和接收進程間保持報文同步。由接收進程控制發送進程的發送速率,提供流量控制。

    傳輸層向高層用戶屏蔽了底層網絡核心的細節,他使應用程序看起來是在兩個對等實體間有一條端到端的邏輯通信信道,這條邏輯 信道會因為傳輸層協議不同會有很大的差別。當傳輸層采用TCP協議時,這條信道就相當於一條可靠的全雙工信道。當采用采用無連接 的UDP時,這種邏輯通信信道仍然是一條不可靠信道。

  5.1.2 傳輸層的尋址與端口

    1.端口的作用

      端口能讓各種應用進程將其數據通過端口向下交付給傳輸層,以及讓傳輸層知道應該將其報文段的數據向上通過端口交付給相 應的應用進程。端口就是傳輸層的服務訪問點TSAP,在傳輸層的作用類似於網絡層的IP地址或者是數據鏈路層的MAC地址,只是IP地 址與MAC地址標識的是主機,而端口標識的是進程。

    2.端口號

      端口號長度16bit,能表示65536個不同的端口號,端口號只具有本地意義,不同計算機之間的端口號沒有聯系。

      根據端口號範圍可分為兩類:

      1)服務端使用端口。這裏又分為兩類,最重要的一類是熟知端口號,數值為0~1023,IANA把這些端口指派給了TCP/IP最重要的 一些應用程序。另一類叫做登記端口號,數值為1024~49151。這些為不是熟知應用程序所使用,必須在IANA登記,防止重復。

    常用的熟知端口號:

技術分享圖片

      2)客戶端常用的端口號,數值為49152~65535,由於這類端口僅在客戶程序運行時才動態選擇,因此又叫短暫端口號(也稱臨 時端口)。通信結束後,剛才使用過的客戶端口號就不復存在了,這個端口號可以供其他程序使用。

    3.套接字

      在網絡中通過IP地址來標識不同的主機,通過端口號來標識不同應用進程。在網絡中采用發送方和接收方的套接字組合來識別 端點,所謂的套接字實際上是一個通信端點,即:

          套接字 = (主機IP地址,端口號)

      他唯一的標識了網絡中一個主機上的一個進程。

  5.2 UDP協議

    5.2.1 UDP數據報

      1.UDP概述

      UDP是一個無連接的非可靠的傳輸層協議。他在IP之上只提供兩個附加服務:多路復用和對數據的錯誤檢查。UDP在傳輸前不需 要建立連接,遠程主機傳輸層收到UDP報文後不用給出確認。

      UDP的優點:

      1)無需建立連接,所以沒有建立連接時的時延。

      2)無狀態連接,TCP需要在端系統中維護連接狀態,而UDP不需要,因此,某些專用服務器采用UDP時,一般能支持更多的活動 客戶機。

      3)分組首部開銷小,TCP首部有20字節的開銷,UDP只有8個字節。

      4)應用層能更好的控制要發送的數據和發送時間。UDP沒有擁塞控制,因此網絡中的擁塞不會影響其發送效率。

      UDP提供盡最大努力的交付,即不保證可靠交付,,但並不意味著應用對數據的要求是不可靠的,因此維護可靠性的工作在應用 層完成。

      UDP是面向報文的。發送方UDP對應應用層交下來的報文,再添加首部後交付給IP層,既不合並也不拆分,而是保留這些報文的 邊界;接收方UDP對IP層上交的用戶數據報,去除首部後原封不動的交付給應用層,一次交付一個完整的報文。所以報文不可分割, 是UDP的最小單位。

      2.UDP的首部格式

      UDP數據報包含兩部分:UDP首部和用戶數據。整個UDP數據報作為數據部分封裝在IP數據報中。UDP首部有8個字節,由4個字段 組成,每個字段長度都是兩個字節。各字段意義如下:

      1)源端口 源端口號,需要對方回信時選用,不需要時可置零。

      2)目的端口 目的端口號,這個在終點交付報文時必須使用到。

      3)長度 UDP數據報的長度(包括首部和數據),最小值為8,即僅包含首部。

      4)校驗和 檢測UDP數據報在傳輸中是否有錯,有錯就丟棄。該字段可選,當源主機不想計算校驗和,則令該字段全為0。

技術分享圖片

      如果接收方UDP發現收到的報文中的目的端口號不正確時,就丟去該報文,並由ICMP發送“端口不可達”差錯報文給發送方。

    5.2.2 UDP校驗

      在計算校驗和時,要在UDP數據報前加上12個字節的偽首部,偽首部並不是UDP真正的首部,只是在計算校驗和時,臨時添加在 UDP數據報前面,得到一個臨時數據報,校驗和是根據這個臨時數據報計算的。偽首部不向下傳遞也不向上遞交,僅僅是為了計算校 驗和。

      UDP校驗和的計算方法和IP數據報首部校驗和的計算方法類似,都使用二進制反碼運算求和再取反。不同的是,IP數據報的校驗 和只校驗首部,而UDP的校驗是把首部和數據放一塊校驗的。

      在發送方,首先把全零放入校驗和字段,並添加偽首部。然後,把UDP數據報看成是由許多16位字串連接起來。若UDP數據報的 數據部分不是偶數個字節,則要在數據部分末尾增加一個全零字節。接下來就按二進制反碼計算出這些16位字的和。將此和的二進 制反碼寫入校驗和字段。在接收方,把收到UDP數據報加上偽首部後,按二進制反碼計算出這些16位字的和。當無差錯時,結果應該 為1。否則就表明有差錯,接收方應該丟棄這個數據報。

技術分享圖片

  5.3 TCP協議

    5.3.1 TCP協議的特點

      TCP是在不可靠的IP層之上實現的可靠數據傳輸協議,主要解決傳輸的可靠、有序、無丟失、不重復的問題。

      TCP的特點:

      1)TCP是面向連接的傳輸層協議。

      2)每條TCP連接只能是點對點的。

      3)TCP提供可靠的交付服務,保證雙方傳輸的數據無差錯、不丟失、有序、不重復。

      4)TCP提供全雙工通信,TCP允許雙方應用進程在任何時候都能收發數據,因此在兩端都設有接收緩存跟發送緩存。

        發送緩存用來存儲以下數據:(1)準備發送的數據 (2)TCP已發出但尚未收到確認的數據。

        接收緩存用來存儲以下數據:(1)按序到達但尚未被接收應用程序接收的數據 (2)不按序到達的數據。

      5)TCP是面向字節流的,雖然應用程序和TCP交互的是一次一個數據塊,但TCP把應用程序交下來的數據看成僅僅是一連串無結 構的字節流。

    

    5.3.2 TCP報文段

      TCP傳輸的數據單位稱為報文段,一個TCP報文段分為首部和數據部分,整個TCP報文段作為數據部分封裝在IP數據報中。首部的 前20個字節是固定的,後面有4N個字節是根據需要而增加的選項。TCP報文段既可以用來傳輸數據,也可以用來建立連接,釋放連接 和應答。

技術分享圖片

      各字段意義如下:

      1)源端口和目的端口 各占兩個字節,端口是運輸層與應用層的服務接口,復用很分用功能都要通過端口實現。  

      2)序號字段 占四個字節,TCP是面向字節流的,因此TCP連接中傳輸的數據流中的每個字節都會編上一個序號。序號字段指 的是本報文段發送數據的第一個字節的序號。 

      3)確認號字段 占4個字節,是期望收到對方下一個報文段的數據的第一個字節的序號,若確認號為N,說明序號為N-1之前的 數據都已收到。

      4)數據偏移(即首部長度) 占4位,表示首部長度,單位為4字節,當此字段數值為15時,達到TCP首部最大長度60字節。

      5)保留字段 占6位,置零,可忽略不計。

      6)緊急位URG 當URG=1時,表名緊急指針有效。他告訴系統此報文段中有緊急數據,應盡快傳送。單URG應與緊急指針配合使 用,也就是說數據從第一個字節到緊急指針所指的字節就是緊急數據。

      7)確認位ACK 只有當ACK=1時,確認號字段才生效。TCP規定,在連接後建立的所有傳送報文都必須把ACK置1。

      8)推送位PSH 接收TCP收到PSH=1的報文時,就應該盡快交付給應用進程,而不是等到整個緩存都填滿了才上交。

      9)復位位RST 當RST=1時,表明TCP連接中出現嚴重差錯,必須釋放鏈接,然後再重新建立連接。

      10)同步位SYN 同步SYN=1表示這是個連接請求或連接接收報文。

      11)終止位FIN 用來釋放一個連接,FIN=1表示此報文段的發送方數據已發送完畢,並要求釋放傳輸連接。

      12)窗口字段 占2個字節,指出允許對方發送的數據量,接收方的數據緩存空間是有限的,因此用窗口值作為接收方讓發送 方設置發送窗口的依據,單位為字節。

      13)檢驗和 占2個字節,檢驗的範圍包括首部和數據,在計算檢驗和時,跟UDP一樣,在TCP報文段前加上12字節的偽首部 (只需要將UDP偽首部的第四個字段,即協議字段的17改為6,其他跟UDP一樣)。

      14)緊急指針字段 占16位,指出在報文段中緊急數據一共多少個字節。

      15)選項字段 長度可變,TCP最初只規定了一種選項,即最大報文長度(MSS),MSS是報文段中數據字段的最大長度。

      16)填充字段 為了使整個首部長度試4的整數倍。

    5.3.3  TCP連接管理

      TCP是面向連接的協議,因此每個TCP都有三個階段:建立連接、數據傳輸、釋放連接。

      TCP建立過程中要解決以下問題:

      1)要使每一方都確知另一方的存在。

      2)允許雙方協商一些參數。

      3)能對運輸實體資源進行分配。

      TCP把連接作為最基本的對象,每條TCP連接有兩個端點。TCP連接的端口叫套接字或插口,端口拼接到IP地址構成了套接字。

      1.TCP連接的建立

      連接的建立經歷三個步驟,通常稱為“三次握手”:

      第一步,客戶機的TCP首先向服務器的TCP發送一個連接請求報文段,這個報文段不含應用層數據,SYN=1,另外,客戶機會隨機 選擇一個起始序號seq=x。

      第二步,服務器的TCP收到請求報文後,如同意建立連接,就向客戶機發回確認,並為該TCP連接分配TCP緩存和變量。在確認報 文段中,SYN=1,ACK=1,確認號字段的值為x+1,並且服務器隨機產生一個隨機起始號seq=y,確認報文同樣不包含數據。

      第三步,當客戶機收到確認報文段後,還要向服務器給出確認,並且也要給連接分配緩存和變量。這個報文段ACK=1,序號為 x+1,確認號字段為ack=y+1。該報文段可攜帶數據,若不攜帶就不消耗序號。

技術分享圖片

      2. TCP連接的釋放

      TCP連接釋放的過程通常稱為“四次揮手”

      第一步,客戶機打算關閉連接,就向TCP發送一個釋放連接的報文,並停止再發送數據,主動關閉TCP連接,該報文段的FIN=1, seq=u,它等於前面已傳輸的字節數加一。當發送FIN報文時,發送FIN的一方就不能再發送數據,也就是關閉了其中一條數據通路, 但對方還能繼續發送數據。

      第二步,服務器收到釋放連接報文段後即發出確認,確認號為ack=u+1,這個報文段自己的序號為v,等於他之前傳送過的數據 的最後一個字節加一。這時,從客戶機到服務器的連接就釋放了,TCP處於半關閉狀態。但服務器繼續發送數據,客戶機仍要接收, 因為服務器到客戶機方向的連接並未關閉。

      第三步,若服務器已經沒有要發送的數據,就通知TCP釋放鏈接,發送FIN=1的連接釋放報文。

      第四步,客戶機收到連接釋放報文後必須發出確認,在確認報文中,ACK=1,確認號為ack=w+1,序號為seq=u+1。此時TCP連接 還沒有釋放掉,必須經過時間等待計時器設置的時間2MSL後,客戶機才進入連接關閉狀態。

技術分享圖片

      對上述TCP連接的建立和釋放總結:

      (1)建立連接

        三步:(1)SYN=1,seq=x。

          (2)ACK=1,SYN=1,seq=y,ack=x+1。

          (3)ACK=1,seq=x+1,ack=y+1

      (2)釋放連接

        四步:(1)FIN=1,seq=u。

         (2)ACK=1,seq=v,ack=u+1。

          (3)FIN=1,ACK=1,seq=w,ack=u+1。

         (4)ACK=1,seq=u+1,ack=w+1。

    5.3.4 TCP可靠傳輸

      TCP提供的可靠數據傳輸服務就是要保證接收方進程從緩存區讀出的字節流與發送方發出的字節流是完全一樣的。

      TCP使用了校驗、序號、確認和重傳機制,其中校驗機制與UDP相同。

      1.序號

      TCP首部序號字段用來保證數據能有序提交給應用層,TCP把數據看成是一個無結構但有序的字節流,序號是建立在傳送的字節 流之上而不是報文段上。

      TCP連接中傳輸的數據流中的每個字節都編上一個序號,序號的值是指本報文段數據部分第一個字節的序號。

      2.確認

      TCP首部的確認號是期望收到對方下一個報文數據部分的第一個字節的序號,發送方緩沖區會繼續存儲那些已發送但尚未收到確 認的報文段,以便在需要時重傳。

      TCP默認使用累計確認,即TCP只確認數據流中第一個丟失字節為止的字節,例如,接收方收到0~2和5~7的報文,並沒有收到3~4 的報文段,於是接收方發送的確認號應為3。

      3.重傳

      兩種事件會導致TCP對報文段進行重傳:超時和冗余ACK。

      (1)超時

      TCP每發送一個報文段,就對這個報文段設置一次計時器,只要計時器設置的重傳時間到期但還並未收到確認信息,就要重傳報 文段。

      由於TCP下層是一個互聯網環境,IP數據報所選擇的路由變化很大,因此傳輸層的往返時延的方差也很大。因此TCP采用一種自 適應算法,它記錄一個報文段的往返時間RTT。TCP保留了RTT的一個加權平均往返時間RTTs,當第一次測試RTT樣本時,RTTs就是RTT 的值,但以後每次測量新的RTT樣本時,RTTs就按以下公式重新計算:

新的RTTs = (1-α)*(舊的RTTs)+α(新的RTT樣本)

      上式中0≤α<1,若α很接近0,說明新的RTTs與舊值變化不大,受RTT樣本的影響不大,若α接近1則反之。【FRC 2988】推薦 α的值為0.125。

      顯然超時重傳計時器的超時重傳時間應大於RTTs。使用一下公式:

RTO = RTTs + 4*RTTd

      RTTd是RTT偏差的加權平均值,第一次測量時,RTTd取RTT樣本值的一半,以後的測量就使用下式:

新的RTTd = (1-β)*(舊的RTTd) + β*|RTTs-新的RTT樣本|

      β是個小於1的系數,推薦值為0.25。

  

      (2)冗余ACK(冗余確認)

      發送方可在超時事件發生前通過註意所謂的冗余ACK來較好的檢測丟包情況。冗余ACK就是再次確認某個報文段的ACK,而發送方 之前收到過該報文段的確認。TCP規定每當比期望序號大的失序報文段到達時,發送一個冗余ACK,指明下一個期待字節的序號。 TCP規定當發送方收到對同一個報文段的3個冗余ACK時,就可以認為這個被確認報文段後面的報文段已丟失,這種技術稱為快速重 傳技術。

      5.3.5 TCP流量控制

      TCP提供一種基於滑動窗口協議的流量控制機制,在通信過程中接收方根據自己接收緩存的大小,動態地調整發送方的發送 窗口大小,這就是接收窗口rwnd,即調整TCP報文首部的“窗口”字段,來限制發送方向網絡註入報文的速率。同時發送方根據網絡 擁塞程序所確定的窗口值,稱為擁塞窗口cwnd,其大小與網絡帶寬和時延緊密相連。發送窗口的實際大小是取rwnd和cwnd中的最小 值。

      傳輸層和數據鏈路層的流量控制的區別在於:傳輸層定義了端到端用戶之間的流量控制,數據鏈路層定義了兩個中間相鄰結點 間的流量控制。另外數據鏈路層的滑動窗口大小不能動態變化,傳輸層則可以。

技術分享圖片

      5.3.6 TCP擁塞控制

      擁塞控制就是防止過多的數據註入網絡中,擁塞往往表現為通信時延的增加。擁塞控制與流量控制有相似之處,都是控制發送 方的發送數據的速率來達到效果。

      擁塞控制和流量控制的區別:擁塞控制是讓網絡能夠承受現有的網絡負荷,是一個全局性的過程,涉及所有主機、路由器,以 及降低網絡傳輸性能的一切額外因素。相反,流量控制往往是對點對點的通信量的控制,即接收端控制發送端,它所要的做的就是 抑制發送端的速率,使得接收端來得及接收。

      為了更好地對傳輸層進行擁塞控制,因特網建議定義了一下四種算法:慢開始、擁塞避免、快重傳、快恢復。

      TCP協議要求發送方維護一下兩個窗口:

      1)接收窗口rwnd,接收方根據目前接收緩存大小所許諾的最新窗口值,反應了接收方的容量。接收方根據TCP報文首部的窗口 字段來通知發送方。

      2)擁塞窗口cwnd,發送方根據自己估算的網絡擁塞程度而設置的窗口值,反應當前網絡的容量。只要網絡沒有出現擁塞,擁塞 窗口就再增大,以便發送更多數據。但只要網絡出現擁塞,擁塞窗口就減小,減少註入網絡的分組數。

發送窗口的上限 = Min[rwnd,cwnd]

      1.慢開始和擁塞避免

      (1)慢開始算法

      在TCP剛剛連接好,開始發送TCP報文時,先令擁塞窗口為cwnd=1,即一個最大報文長度MSS。而在每收到一個對新報文的確認 後,將cwnd加一,即增大一個MSS,這樣的方法逐步增大擁塞窗口,使得註入到網絡的數據速率更加合理。

      使用慢開始算法後,每經過一個RTT,擁塞窗口cwnd就會加倍,即cwnd的大小呈指數式增長。這樣慢開始一直打擁塞窗口增大到 一個規定的慢開始門限ssthresh,然後改用擁塞避免算法。

      (2)擁塞避免算法

      發送端的擁塞窗口cwnd每經過一個RTT就增加一個MSS的大小,而不是加倍,使cwnd按線性規律緩慢增長,而當出現一次超時 時,則令慢開始門限等於當前cwnd的一半。

      根據cwnd的大小執行不同的算法,可歸納如下:

      ·當cwnd<ssthresh時,使用慢開始算法。

      ·當cwnd>ssthresh時,停止使用慢開始算法改用擁塞避免算法。

      ·當cwnd=ssthresh時,既可使用慢開始算法,也可使用擁塞避免算法(通常做法)。

      (3)網絡擁塞的處理

      當網絡出現擁塞時,無論在慢開始階段還是擁塞避免階段,只要發送方檢測到超時事件的發生,就要把慢開始門限設置為當前 發送方ssh的一半,但不小於2。然後把擁塞窗口重新設為1,執行慢開始算法。

技術分享圖片

      2.快重傳和快恢復

      快重傳和快恢復算法是對慢開始和擁塞避免算法的改進。

      (1)快重傳

      在TCP可靠傳輸機制中,快速重傳使用了冗余ACK來檢測丟包的發生。同樣,冗余ACK也可用於網絡擁塞的檢測。快重傳並不是取 消了重傳計時器,而是在某些情況下更早地重傳丟失的報文。

      當發送方收到三個重復的ACK報文時,直接重傳對方尚未收到的報文段,不必等待超時計時器超時。

      (2)快恢復

      快恢復算法原理:當發送端收到三個連續的冗余ACK時,就執行乘法減小算法,把慢開始門限設為出現擁塞時cwnd的一半。與慢 開始的不同之處是它把cwnd的值設置為慢開始門限改變後的數值,然後開始執行擁塞避免算法,使得擁塞窗口緩慢線性增大。

      由於跳過了cwnd從1開始的慢開始過程,所以被稱為快恢復。

技術分享圖片

      在流量控制中,發送方發送的數據量由接收方控制,而在擁塞控制中,由發送方自己通過檢測網絡狀況而決定。實際上,慢開 始、擁塞避免算法、快重傳、快恢復算法應該是同時應用在擁塞控制機制中,當發送方檢測到超時就采用慢開始和擁塞避免,當發 送方收到三個冗余ACK時就采用快重傳和快恢復。

      

      

      

考研筆記-運輸層服務和工作原理