傳輸層的核心任務:應用進程之間提供端到端的邏輯通訊服務。算法
主機具備OSI七層模型;網絡核心中的路由器、交換機、集線器等只用到OSI七層模型的下三層功能緩存
傳輸層功能:(分複流擁尋差錯-可靠;吩咐劉墉尋差錯-可靠)服務器
傳輸層尋址與端口:網絡
端口號:傳輸層端口號爲16位整數,能夠編號65536個(2的16次方)性能
傳輸層端口號: 編碼
無鏈接服務與面向鏈接服務:操作系統
多路複用:在源主機,傳輸層協議從不一樣的套接字收集應用進程發送的數 據塊,併爲每一個數據塊封裝上首部信息(包括用於分解的信息)構成報文段,而後將報文段傳遞給網絡層。3d
多路分解:在目的主機,傳輸層協議讀取報文段中的字段,標識出接收套接字,進而經過該套接字,將傳輸層的報文段中的數據交付給正確的套接字。指針
多路複用與多路分解(複用與分解/複用與分用):支持衆多應用進程共用同 一個傳輸層協議,並可以將接收到的數據準確交付給不一樣的應用進程blog
無鏈接的多路複用與多路分解:
面向鏈接的多路複用與多路分解
不可靠傳輸信道在數據傳輸中可能發生的問題:
基於不可靠信道實現可靠數據傳輸採起的措施:
TCP要採起適當的措施,保證可靠數據傳輸;
自動重傳請求協議(ARQ):爲了實現可靠數據傳輸,接收方經過使用確定確認ACK 與否認確認NAK,能夠 讓發送方知道哪些內容已被正確接收,哪些內容未被正確接收而須要重傳。基 於這種重傳機制的可靠數據傳輸協議稱爲自動重傳請求協議協議;停-等協議是其最簡單的一個方式
停-等協議的工做流程
停-等協議:性能差、信道利用率低;使用流水線協議能夠改善
流水線協議:管道協議。容許發送方在沒有收到確認前,連續發送多個分組。 最典型的流水線協議:滑動窗口協議
一、增長分組序號。
二、發送方和接收方能夠緩存多個分組。
發送方的發送窗口(Ws ):發送方能夠發送未被確認分組的最大數量;
接收方的接收窗口(Wr ):接收方能夠緩存的正確到達的分組的最大數量;
滑動窗口協議,根據窗口的大小,能夠具體分爲:
============GBN協議================
發送端緩存能力高,能夠在沒有獲得確認前發送多個分組。 接收端緩存能力很低,只能接收1個按序到達的分組,不能緩存未按序到達的分組
GBN協議:發送窗口WS≥1 ,接收窗口Wr =1。
GBN發送方響應的3類事件:
例如:發送發,發送1,2,3,4,5;接收方收到1,2,5;顯然3,4沒有收到確認,因此3,4,5要從新發送
==============SR協議===============
發送端緩存能力高。 接收端緩存能力高;
SR協議: 發送窗口WS>1,接收窗口Wr>1。
SR發送方響應事件:
例如:發送方,發送1,2,3,;接收方接受1,3 ;顯然2發送方沒有收到接收方的ack,因此發送方從新發送2;
用戶數據協議(User Datagram Protocol,UDP):Internet傳輸層協議,提供無鏈接、不可靠、數據報盡力傳輸服務。
UDP的特色:
UDP數據報首部:UDP首部四個字段,每一個字段長度都是2個字節,共8個字節
應用數據字段:應用層數據佔用
UDP校驗和:提供差錯檢測功能;UDP的校驗和用於檢測UDP報文段從源到目的地傳送過程當中,其中的 數據是否發生了改變
UDP校驗和計算規則:
UDP僞首部:源IP地址、目的IP地址、協議號:對應 封裝UDP數據報的IP分組的字段。 UDP協議號:17
UDP校驗和的步驟:
傳輸控制協議(Transmission Control Protocol ,TCP):Internet傳輸層協議。提供面向鏈接、可靠、有序、字節流 傳輸服務。
最大報文段長度(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;
六、接收窗口字段:佔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的流量控制:協調發送方與接收方數據的發送與接收速度;在通訊過程當中,接收方設置報文段的接收窗口字段來將窗口大小通知給發 送方。
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): 網絡未發生擁塞時,逐漸「加性」增大窗口。 網絡擁塞時「乘性」減少窗口。
擁塞預防策略: 流量整形技術:規範主機向網絡發送數據的流量。