計算機網絡(謝希仁版)--運輸層

運輸層概述:算法

  網絡層是爲主機之間提供邏輯通訊,而運輸層是爲應用進程之間提供端到端的邏輯通訊。緩存

  網絡層只對IP數據報的首部進行檢驗,而運輸層對協議的首部和數據部分都進行檢驗。服務器

  運輸層有兩種不一樣的運輸協議:一對一的可靠的面向鏈接的TCP和不可靠的無鏈接的UDP,二者對應的數據單元分別是TCP報文段和UDP用戶數據報。網絡

  運輸層是經過端口號,複用和分用網絡層(IP層)的,該端口不是操做系統的進程標識符,而是應用層的各類協議進程與運輸實體進行層間交互的一種地址。併發

  運輸層的端口號是16位的,分爲服務器端使用的端口號和客戶端使用的端口號;性能

  服務器端使用的端口號又分爲熟知端口號(全部用戶都知道),好比HTTP的端口號爲80,還有一種叫登記端口號(顧名思義);spa

  客戶端使用的端口號又稱短暫端口號,只在客戶進程運行時才動態選擇,用於服務器端回發數據給客戶端,通訊結束就不復存在。操作系統

 

用戶數據報協議UDP:指針

  UDP是無鏈接的,使用盡最大努力交付,以及面向報文的;應用層交給UDP多長的報文,UDP就照樣發送,同時加上UDP首部,所以,應用層交付的報文長度要控制好,不能太長也不能過短,不然都會下降IP層的效率。進程

  UDP的首部由源端口、目的端口、長度、檢驗和組成;UDP檢驗和計算的時候要加上僞首部,僞首部由源IP地址、目的IP地址、運輸層協議號(1七、6)和UDP長度組成。

 

傳輸控制協議TCP:

  TCP是面向鏈接的,一對一的,可靠交付的,提供全雙工通訊,面向字節流的;同時應用層無需關注交付的報文長度,由於,報文長度由窗口值、擁塞程度等決定。

  TCP鏈接的端點叫作套接字,即IP地址:端口號。

  

  可靠傳輸的工做原理:

    中止等待協議、超時重傳(超時計時器)、確認丟失操做和確認遲到操做,這些合起來叫作自動重傳請求ARQ,使得在不可靠的傳輸網絡上實現可靠的通訊。

    可是這樣會致使信道利用率很低,因而產生了連續ARQ協議和滑動窗口協議,發送方是無需確認的連續發送窗口中的全部字節,接收方採用累積確認,即對按序到達的最後一個分組發送確認(注意確認分組以後的分組的接收狀況,發送方無從得知,只能一概重發,這叫Go-back-N,但也有必定的方法解決)。

  

  TCP報文段的首部格式(前20個字節是固定的,後面都是可選的,總長最多60個字節):

    固定部分包括:

      源端口、目的端口、

      序號(32位):TCP傳送的字節流中的每個字節都按順序編號,序號字段是指本報文段所發送數據的第一個字節的序號

      確認號(32位):接收方發送的指望收到對方下一個報文段的第一個數據字節的序號,若確認號爲N,則到序號N-1爲止的全部數據都已正確收到

      數據偏移:即首部總長度

      緊急URG:置1即放到本報文段數據的最前面

      確認ACK:僅當ACK=1時,確認號字段纔有效,鏈接創建以後全部的報文的ACK必須爲1

      推送PSH、復位RST、同步SYN、終止FIN

      窗口(2字節):指的是發送本報文段的一方的接收窗口,窗口值做爲接收方讓發送方設置其發送窗口的依據 

      檢驗和、緊急指針、以及拓展選項:

        其中較重要的是最大報文長度MSS,指的是數據字段的最大長度,在創建鏈接的過程當中,雙方就將把本身支持的MSS寫入這一字段,雙方值能夠不同,若是沒有填寫,則默認爲536字節長

        窗口擴大(顧名思義)

        時間戳:計算報文段的往返時間RTT和防止序號繞回

        選擇確認:用來報告收到的不連續的字節塊的邊界,最多報告4個字節塊,必定程度上解決Go-back-N問題

 

  TCP可靠傳輸的實現:

    核心:以字節爲單位的滑動窗口

    注意:發送緩存包含發送窗口,發送窗口不只取決於對方的接收窗口,還會根據擁塞程度適當減少發送窗口,接收窗口由接收緩存的大小決定。

       接收方必須有累計確認的功能,同時確認推遲的時間不該超過0.5s

    超時重傳時間選擇:Karn算法:在計算加權平均RTT時,只要報文重傳了,就不採用其時間樣本。實際上,報文重傳一次,超時重傳時間就增大一倍,較爲合理。

 

  TCP的流量控制:

    利用滑動窗口機制中的序號、確認號、窗口號實現流量控制;

    必須考慮傳輸效率:

      能夠用不一樣的機制來控制TCP報文段的發送時機

        1. TCP維持一個變量,等於MSS,只要緩存中存放的數據達到MSS字節時,就組裝成一個TCP報文段發送出去;

        2. 由發送方的應用進程指明要求發送報文段,即TCP支持的推送(PSH)操做;

        3. 發送方的一個計時器期限到了,這時就把當前已有的緩存數據裝入報文段(但長度不能超過MSS),發送出去。

      在TCP中普遍使用的是Nagle算法:即邊緩存邊發送報文段,即第一次發送一個字節,以後每次收到接收方的確認後,就組裝全部的緩存數據成報文段(但長度不能超過MSS)併發送出去;同時該算法還規定,當緩存中的數據已到達發送窗口大小的一半或已到達MSS時,就當即發送一個報文段。

      遇到糊塗窗口綜合症(即應用程序每次只從接收緩存中讀取1個字節)時,可讓接收方等到接收緩存中有MSS長度或一半空閒空間後再發送確認信息。總之,發送方和接收方都不要太急,有一點點數據就發送數據報文或一點點空間就發送確認報文。

 

  TCP的擁塞控制:

    擁塞控制和流量控制的區別:

      擁塞控制是防止過多的數據注入到網絡中,這樣可使網絡中的路由器或鏈路不致過載;擁塞控制都有一個前提,網絡可以承受現有的網絡負荷。擁塞控制是一個全局性的過程,涉及到全部的主機、路由器以及與下降網絡傳輸性能有關的全部參數。

      流量控制是指點對點通訊流量的控制,是個端到端的問題(接收端控制發送端),流量控制是抑制發送端發送數據的速率,以便接收端來得及接收。

    擁塞控制的兩個概念:輸入負載(網絡負載)即單位時間內輸入給網絡的分組數目,吞吐量即單位時間內從網絡中輸出的分組數目。所謂擁塞,就是在吞吐量達到飽和以前,就出現輸入負載小於吞吐量的狀況,此時就須要擁塞控制。

    常見的擁塞控制方法:

      擁塞控制中發送方維持一個擁塞窗口(cwnd),和以前由接收窗口(rwnd)決定的窗口無關,二者取較小者做爲最後的發送方窗口大小

      1. 慢開始算法(指數增加):從初始cnwd(一個MSS)開始,每通過一個傳輸輪次(發送窗口中的數據都發送出去,而且接收到最後數據的確認),擁塞窗口cnwd就加倍。(本質是每收到對一個對新報文的確認後(重傳的不算在內),就把擁塞窗口增長一個MSS長度)

      2. 擁塞避免算法(線性增加):當慢開始算法運行到,cwnd等於白慢開始門限後,開始運行擁塞避免算法,即每通過一個傳輸輪次,擁塞窗口只增長一個MSS長度。(本質是每收到對一個對新報文的長度的確認後,就把擁塞窗口增長一個(MSS * MSS / cwnd)長度)

      若是出現網絡擁塞,則將慢開始門限的大小減半,並從新開始運行慢開始算法。

      3. 快重傳算法:收到失序的報文段後當即發出重複確認(以前最後一次有序報文段的確認),快重傳規定發送方只要一連收到三個重複確認,就當即重傳對方還沒有收到的報文段。

      4. 快恢復算法:發送方只要一連收到三個重複確認,就將慢開始門限的大小減半,因爲發送方認爲網絡可能沒有發生擁塞(一連收到三個重複確認就說明了這點),就把cwnd設值爲新的慢開始門限,並繼續執行擁塞避免算法。

      在採用快恢復算法時,慢開始算法只在TCP鏈接時或網絡超時時才使用。

      5. 隨機早期檢測RED:路由器機制,防止出現全局同步,許多TCP鏈接在同一時間忽然都進入到慢開始狀態。

 

  TCP的運輸鏈接管理:

    運輸鏈接有三個階段:鏈接創建、數據傳送和鏈接釋放。

    鏈接創建是三次握手:

      接收方的TCP服務器進程先建立傳輸控制塊TCB,準備接收客戶進程的鏈接請求;

      發送方的TCP客戶進程建立傳輸控制塊TCB,而後向接收方發出鏈接請求報文段;

      接收方收到鏈接請求報文段後,如贊成創建鏈接,則向發送方發出確認報文段;

      發送方收到確認報文段後,還要向接收方發出確認報文段,此時發送方已進入已鏈接狀態;

      接收方收到後確認報文段後,也進入到已鏈接狀態。

    出現第三次握手,是爲了防止已失效的鏈接請求報文段滯留在網絡的某處,在上一次TCP鏈接釋放以後,接收方又接收到了該請求報文段,從而產生錯誤。

    鏈接釋放是四次握手:

      發送方先發出鏈接釋放報文段;

      接收方接收到鏈接釋放報文段後,就向發送方發出確認報文段,這時接收方TCP服務器進程通知高層應用進程,發送方到接收方這個方向的鏈接就釋放了,即發送方已不能傳輸數據到接收方了;

      發送方收到確認報文段後,就等待接收方發出鏈接釋放報文段;

      接收方如沒有數據傳送,就發出鏈接釋放報文段;

      發送方接收到鏈接釋放報文段後,就向接收方發出確認報文段;

      此時,TCP鏈接尚未釋放掉,發送方必須通過時間等待計時器設置的時間2MSL後,才進入結束狀態,而接收方稍早一點,在接收到確認以後,就進入結束狀態。

    發送方必須通過時間等待計時器設置的時間2MSL,是由於接收方最後一次可能沒有接收到確認信號,則接收方會重傳請求,而發送方接收到鏈接釋放報文段後就結束,就會接收不到新的鏈接請求,接收方也就不能進入結束狀態。

相關文章
相關標籤/搜索