第三章傳輸層

第一節傳輸層的基本服務

傳輸層的核心任務:應用進程之間提供端到端的邏輯通訊服務。算法

主機具備OSI七層模型;網絡核心中的路由器、交換機、集線器等只用到OSI七層模型的下三層功能緩存

傳輸層功能:(分複流擁尋差錯-可靠;吩咐劉墉尋差錯-可靠)服務器

  • 1)對應用層報文進行行分段和重組
  • 2)面向應用層實現複用與分解
  • 3)實現端到端的流量控制
  • 4)擁塞控制 
  • 5)傳輸層尋址
  • 6)對報文進行差錯檢測
  • 7)實現進程間的端到端可靠數據傳輸控制

傳輸層尋址與端口:網絡

  • 一臺計算機中,不一樣應用進程用進程標識符(進程ID)來區分;
  • TCP/IP體系結構網絡中經過在傳輸層使用協議端口號,一般簡稱爲端口(port),在全網範圍內利用 「IP 地址+端口號」惟一標識一個通訊端點

端口號:傳輸層端口號爲16位整數,能夠編號65536個(2的16次方)性能

傳輸層端口號: 編碼

  • 一、服務器端使用的端口號:熟知端口號和登記端口號
  • 二、客戶端使用的端口號:臨時性,在客戶進程運行時由操做系統隨機選擇惟一的未被使用的端口號

無鏈接服務與面向鏈接服務:操作系統

 

 

第二節 傳輸層的複用與分解 

多路複用:在源主機,傳輸層協議從不一樣的套接字收集應用進程發送的數 據塊,併爲每一個數據塊封裝上首部信息(包括用於分解的信息)構成報文段,而後將報文段傳遞給網絡層。3d

多路分解:在目的主機,傳輸層協議讀取報文段中的字段,標識出接收套接字,進而經過該套接字,將傳輸層的報文段中的數據交付給正確的套接字。指針

多路複用與多路分解(複用與分解/複用與分用):支持衆多應用進程共用同 一個傳輸層協議,並可以將接收到的數據準確交付給不一樣的應用進程blog

無鏈接的多路複用與多路分解:

  • 用戶數據報協議(User Datagram Protocol, UDP) :Internet提供無鏈接服 務的傳輸層協議。
  • UDP套接字二元組:<目的IP地址,目的端口號>

面向鏈接的多路複用與多路分解

  • 傳輸控制協議 (Transmission Control Protocol,TCP) :Internet提供面向鏈接服務的傳輸層協議。
  • TCP套接字四元組:<源IP地址,源端口號,目的IP地址,目的端口號>

第三節 停-等協議與滑動窗口協議

不可靠傳輸信道在數據傳輸中可能發生的問題:

  • 一、比特差錯:1001——1000
  • 二、亂序:數據塊一、二、五、六、三、4
  • 三、數據丟失:數據塊一、二、5

基於不可靠信道實現可靠數據傳輸採起的措施:

  • 差錯檢測:利用編碼實現數據包傳輸過程當中的比特差錯檢測。
  • 確認:接收方,向發送方反饋接收狀態。ACK(確定確認);NAK(否認確認)
  • 重傳:發送方從新發送接收方沒有正確接收的數據。
  • 序號:確保數據按序提交;對數據進行編號,即使不按序到達,能夠按序提交
  • 計時器:解決數據丟失問題。

TCP要採起適當的措施,保證可靠數據傳輸;

自動重傳請求協議(ARQ):爲了實現可靠數據傳輸,接收方經過使用確定確認ACK 與否認確認NAK,能夠 讓發送方知道哪些內容已被正確接收,哪些內容未被正確接收而須要重傳。基 於這種重傳機制的可靠數據傳輸協議稱爲自動重傳請求協議協議;停-等協議是其最簡單的一個方式

停-等協議的工做流程

  • 一、發送方發送通過差錯編碼和編號的報文段,等待接收方的確認。
  • 二、接收方若是正確接收報文段,即差錯檢測無誤且序號正確,則接收報文段,並 向發送方發送ACK,不然丟棄報文段,並向發送方發送NAK。
  • 三、發送方若是收到ACK,則繼續發送後續報文段,不然重發剛剛發送的報文段。

停-等協議:性能差、信道利用率低;使用流水線協議能夠改善

流水線協議:管道協議。容許發送方在沒有收到確認前,連續發送多個分組。 最典型的流水線協議:滑動窗口協議

一、增長分組序號。

二、發送方和接收方能夠緩存多個分組。

發送方的發送窗口(Ws ):發送方能夠發送未被確認分組的最大數量;

接收方的接收窗口(Wr ):接收方能夠緩存的正確到達的分組的最大數量;

滑動窗口協議,根據窗口的大小,能夠具體分爲:

  • 回退N步協議:GBN協議(Go-Back-N)
  • 選擇重傳協議: SR協議(Selective Repeat)

============GBN協議================

發送端緩存能力高,能夠在沒有獲得確認前發送多個分組。 接收端緩存能力很低,只能接收1個按序到達的分組,不能緩存未按序到達的分組

GBN協議:發送窗口WS≥1 ,接收窗口Wr =1。

GBN發送方響應的3類事件:

  • 一、上層調用。
  • 二、收到1個ACKn。GBN採用累積確認方式,即發送方收到 ACKn時,代表接收方正確接收序號n以及序號小於n的全部分組。
  • 三、計時器超時。發送方只使用一個計時器

例如:發送發,發送1,2,3,4,5;接收方收到1,2,5;顯然3,4沒有收到確認,因此3,4,5要從新發送

==============SR協議===============

發送端緩存能力高。 接收端緩存能力高;

SR協議: 發送窗口WS>1,接收窗口Wr>1。

SR發送方響應事件:

  • 一、上層調用。
  • 二、計時器超時。發送方對每一個分組進行計時。
  • 三、收到ACKn。SR協議採起逐個確認方式

例如:發送方,發送1,2,3,;接收方接受1,3 ;顯然2發送方沒有收到接收方的ack,因此發送方從新發送2;

 第四節 用戶數據報協議(UDP)

用戶數據協議(User Datagram Protocol,UDP):Internet傳輸層協議,提供無鏈接、不可靠、數據報盡力傳輸服務。
UDP的特色:

  • 一、應用進程容易控制發送什麼數據以及什麼時候發送,會出現分組的丟失和重複。
  • 二、無需創建鏈接。
  • 三、無鏈接狀態。
  • 四、首部開銷小,只有8個字節。

UDP數據報首部:UDP首部四個字段,每一個字段長度都是2個字節,共8個字節

  • 源端口號和目的端口號:UDP實現複用和分解。
  • 長度:指示UDP報文段中的字節數(首部和數據的總和)。
  • 校驗和:接收方使用來檢測數據報是否出現差錯

應用數據字段:應用層數據佔用

UDP校驗和:提供差錯檢測功能;UDP的校驗和用於檢測UDP報文段從源到目的地傳送過程當中,其中的 數據是否發生了改變

UDP校驗和計算規則:

  • 一、全部參與運算的內容按16位對齊求和;UDP校驗和計算的內容包括3部分:UDP僞首部、UDP首部、應用數據
  • 二、求和過程當中遇到溢出(即進位)都被回捲(即進位與和的最低位再相加)。
  • 三、最後獲得的和取反碼,就是UDP的校驗和,填入UDP數據報的校驗和字段

UDP僞首部:源IP地址、目的IP地址、協議號:對應 封裝UDP數據報的IP分組的字段。 UDP協議號:17

 

 

 UDP校驗和的步驟:

  • 一、全部參與運算的內容按16位對齊求和(UDP僞首部、UDP首部、應用數據 三個部分的二進制數據的和)
  • 二、求和過程當中遇到溢出(即進位)都被回捲(即進位與和的最低位再相加)。
  • 三、最後獲得的和取反碼,就是UDP的校驗和,填入UDP數據報的校驗和字段。反碼就是 0->1;1->0;

第五節 傳輸控制協議(TCP)

傳輸控制協議(Transmission Control Protocol ,TCP):Internet傳輸層協議。提供面向鏈接、可靠、有序、字節流 傳輸服務。

  • 第1、應用進程先創建鏈接。
  • 第2、每一條TCP鏈接只有兩個端點。
  • 第3、可靠交付:無差錯,不丟失,不重複,按序到達
  • 第4、全雙工通訊。
  • 第5、面向字節流; 流:字節序列。應用程序和TCP的交互是一個個數據塊,TCP把他們看作是無結構字節流。

最大報文段長度(Maximum Segment Size , MSS):報文段中封裝的應用層數據的最大長度。

TCP報文段首部結構:TCP段的首部長度最短是20字節 (首部報文長度=固定首部長度(20) + 可選項)

 

 

一、源端口號字段,目的端口號字段:佔16位。複用和分解上層應用的數據。

二、序號字段、確認序號字段:佔32位。 序號字段:TCP的序號是對每一個應用層數據的每一個字節進行編號; 確認序號字段:指望從對方接收數據的字節序號,即該序號對應的字節還沒有收到;

三、首部長度字段:佔4位。指出TCP段的首部長度,以4字節爲計算單位。

四、保留字段:佔6位。保留爲從此使用,目前值爲0。

五、URG、ACK、PSH、RST、SYN、FIN各佔1位,爲標誌位字段,取值爲0或1;

  • 緊急URG=1,緊急指針字段有效,優先傳送;
  • 確認ACK=1,確認序號字段有效;ACK=0時,確認序號字段無效;
  • 推送PSH=1,儘快將報文段中的數據交付接收應用進程,不要等緩存滿了再交付。
  • 復位RST=1,TCP鏈接出現嚴重差錯,釋放鏈接,再從新創建TCP鏈接。
  • 同步SYN=1,該TCP報文段是一個創建新鏈接請求控制段或者贊成創建新鏈接的確認段
  • 終止FIN=1,TCP報文段的發送端數據已經發送完畢,請求釋放鏈接

六、接收窗口字段:佔16位。向對方通告我方接收窗口的大小。

七、校驗和字段:佔16位。 計算方法與UDP校驗和的計算方法相同。TCP協議號是6。

八、緊急指針字段:佔16位。 URG=1時,纔有效。指出在本TCP報文段中緊急數據共有多少個字節

九、選項字段長度可變,最短爲0字節,最長爲40字節

十、填充字段,取值全爲0,目的是爲了整個首部長度是4字節的整倍數

TCP鏈接管理:鏈接創建與鏈接拆除。

第一次握手:客戶向服務器發送鏈接請求段:(SYN=1,seq=x) SYN=1:創建鏈接請求控制段; seq=x:表示傳輸的報文段的第1個數據字節的序列號是x,此序列號表明整個報文段的序號; 客戶端進入SYN_SEND(同步發送狀態)

第二次握手:服務器相應確認報文段:(SYN=1,ACK=1,seq=y, ack_seq=x+1) SYN=1:贊成創建新鏈接的確認段;ack_seq=x+1:表示已經收到了序列號爲x的報文段,準備接收序列號爲x+1的報文段; seq=y:服務器告訴客戶確認報文段的序列號是y;服務器由LISTEN進入SYN_RCVD(同步收到狀態)

第三次握手:客戶對服務器的贊成鏈接報文段進行確認:(ACK=1,seq=x+1,ack_seq=y+1); seq=x+1:客戶這次的報文段的序列號是x+1; ack_seq=y+1:客戶指望接收服務器序列號爲y+1的報文段; 當客戶發送ACK時,客戶端進入ESTABLISHED狀態;當服務收到ACK後,也迚入ESTABLISHED狀態; 第三次握手可攜帶數據

 

 

 爲何須要三次握手?

  • 第一次握手:客戶發送請求,此時服務器知道客戶能發送數據。
  • 第二次握手:服務器發送確認,此時客戶知道服務器能發送數據能接收數據。
  • 第三次握手:客戶發送確認,此時服務器知道客戶能接收數據。

 TCP鏈接拆除:四次揮手

第一次揮手: 客戶向服務器發送釋放鏈接報文段:(FIN=1,seq=u) FIN=1:發送端數據發送完畢,請求釋放鏈接;seq=u:傳輸的第一個數據字節的序號是u; 客戶端狀態由ESTABLISHED進入FIN_WAIT_1(終止等待1狀態)

第二次揮手:服務器向客戶發送確認段:(ACK=1,seq=v,ack_seq=u+1);ACK=1:確認字號段有效; ack_seq=u+1:服務器指望接收客戶數據序號爲u+1;seq=v:服務器傳輸的數據序號是v; 服務器狀態由ESTABLISHED迚入CLOSE_WAIT(關閉等待);客戶端收到ACK段後,由FIN_WAIT_1迚入FIN_WAIT_2
第三次揮手: 服務器向客戶發送釋放鏈接報文段:(FIN=1,ACK=1,seq=v+1,ack_seq=u+1); FIN=1:請求釋放鏈接;ACK=1:確認字號段有效;ack_seq=u+1:表示服務器指望接收客戶數據序號爲u+1;seq=v+1:表示本身傳輸的第一個數據字節的序號是v+1;服務器狀態由CLOSE_WAIT進入LAST_ACK(最後確認狀態)
第四次揮手: 客戶向服務器収送確認段:(ACK=1,seq=u+1,ack_seq=w+1);ACK=1:確認字號段有效;ack_seq=v+1+1:表示客戶指望接收服務器數據序號爲v+1+1; seq=u+1:表示客戶傳輸的數據的序號是u+1;客戶端狀態由FIN_WAIT_2進入TIME_WAIT,等待2MSL時間,進入CLOSED狀態; 服務器在收到最後一次ACK後,由LAST_ACK進入CLOSED

TCP可靠數據傳輸: 

可靠:保證接收方應用進程從緩衝區讀出的字節流與發送方發出的字節流是徹底同樣的

TCP實現可靠數據傳輸服務的工做機制

一、應用層數據被分割成TCP認爲最適合發送的數據塊(最大報文段長度(Maximum Segment Size , MSS): 報文段中封裝的應用層數據的最大長度)

二、序號,發送方對發送的數據包進行編號,確保數據按序提交給接收方。(序號:一個字節佔用一個序號。序號字段指的就是一個報文段第一個字節的序號)

三、確認,接收方向發送方反饋接收狀態,確認是否正確接收數據。 TCP採起累計確認。

四、查錯檢測,利用差錯編碼實現數據包傳輸過程當中的比特查錯檢測(甚至糾正)。

五、重傳,發送方從新發送接收方沒有正確接收的數據(快速重傳: TCP發送方接收到對相同序號的3次重複ACK,就說明被重複確認的報文段已丟失,這時候即使沒有超時,也會重發該報文段)

六、計時器,在發送方引入計時器,解決數據丟失問題(計時器超時時間設置:TimeoutInerval=EstimatedRTT+4×DevRTT; EstimatedRTT:抽樣RTT的加權移動平均值。  DevRTT:誤差RTT)

TCP生成ACK的策略:

  • 一、具備所指望序號的報文段按序到達,全部在指望序號及之前的報文段都已被確認。TCP延遲500ms収送ACK。
  • 二、具備所指望序號的報文段按序到達、且另外一個按序報文段在等待ACK傳輸,TCP接收方當即發送單個累計ACK,確認以上兩個按序到達報文段;例如:接收方剛剛收到4,正準備返回ACK5。此時5來了, 則接收方返回ACK6
  • 三、擁有序號大於指望序號的失序報文段到達,TCP接收方當即發送重複ACK,指示下一個指望接收字節的序號;例如:接收方返回ACK5,可是6到了則接收方返回三次重複的ACK5
  • 四、收到一個報文段,部分或徹底填充接收數據間隔;例如:接收方收到1 2,且返回對1 2的確認,後來又收到了4 5 6。這時3來了, 則接收方返回ACK7 

TCP的流量控制:協調發送方與接收方數據的發送與接收速度;在通訊過程當中,接收方設置報文段的接收窗口字段來將窗口大小通知給發 送方。

TCP的擁塞控制:

網絡擁塞:太多的主機以太快的速度向網絡中發送太多的數據,超出了網 絡處理能力,致使大量數據分組擁擠在中間設備隊列中等待轉發,網絡性能顯 著降低的現象

擁塞控制:經過合理調度、規範、調整向網絡中發送數據的主機數量、發 送速率、數據量,以免擁塞或消除已發生的擁塞

擁塞控制算法:慢啓動、 擁塞避免 、快速重傳、 快速恢復

一、擁塞窗口(CongWin):鏈接開始,爲1MSS ; 1個最大報文段長度(Maximum Segment Size , MSS)

二、閾值(Threshold):臨界值

======================慢啓動=====================

慢啓動算法:在TCP鏈接創建時,每經 過1個RTT時間,擁塞窗口增大一倍。

======================擁塞避免===================

擁塞避免算法:當擁塞窗口大於等於閾 值時,每通過1個RTT,擁塞窗口的值 加1。

 

 

 ====================快速重傳=========================

 

快速重傳:接收端收到3次重複確認,則推斷被重複確認的報文段已經丟失,因而立 即發送被重複確認的報文段

==============快速恢復算法==================

思考:怎樣算是報文段丟失了: 一、收到三次重複確認  。 二、計時器超時

快速恢復算法:當發生3次重複確認時,網絡擁塞程度不是很嚴重。 閾值和擁塞窗口的調整方法:是直接重新的閾值開 始,直接進入擁塞避免階段。

例如:發生3次重複確認時,當前擁塞窗口爲24MSS,當前閾值爲16MSS。 新的閾值:爲當前擁塞窗口的一半。 新的閾值= 24MSS÷2=12MSS;新的擁塞窗口:調整爲新的閾值。 新的擁塞窗口=新的閾值=12MSS;調整好新的閾值和新的擁塞窗口後,使用擁塞避免算法增長擁塞窗口大小。

例如:發生計時器超時,當前擁塞窗口爲24MSS,當前閾值爲16MSS。 新的閾值:爲當前擁塞窗口的一半, 新的閾值= 24MSS÷2=12MSS; 新的擁塞窗口:直接調整爲1MSS,新的擁塞窗口=1MSS; 調整好新的閾值和新的擁塞窗口後,使用慢啓動,擁塞避免算法增長擁塞窗口 大小。

 

 窗口調整的基本策略 (Additive Increase,Multiplicative Decrease ,AIMD): 網絡未發生擁塞時,逐漸「加性」增大窗口。 網絡擁塞時「乘性」減少窗口。

擁塞預防策略: 流量整形技術:規範主機向網絡發送數據的流量。

相關文章
相關標籤/搜索