中止等待協議: 放送方發送一個數據包,要收到接收方對該包的確認後,才發送下一個數據包。 缺點:慢,信道利用率低。
ARQ Automatic Repeat reQuest 接收方採用累加確認的方式,接收方沒必要對每個分組進行缺,只須要對按序到 達的最後一個分組發送確認。 缺點:當發送方發送了5個分組,中間第3個丟失,那麼接收方只對前兩個分組進 行確認。發送方只好把後面的3個分組都重傳一次。這叫作Go-back-N(回退N)
選擇確認 selective ack 接收方對接收到的數據字節流中,如有中間字節塊的缺失,只須要從新傳輸缺失 的就能夠了,對已經接收到的字節塊無需重傳。 須要在TCP首部的選項中設置 」容許SACK」 的選項。
TCP流量控制: 讓發送方的發送速率不要太快,要讓接收方來得及接收。端到端的問題。 機制:滑動窗口 S--------------->R 當接收方R 的窗口爲0時候,S就不能再發送數據了。當R的窗口不爲0時候R會發 送一個數據給S來代表當前的窗口大小,可是爲了防止S收不到R又有窗口的通 告,S啓動一個持續計時器(persistent timer),只要TCP鏈接的一方接收到對方 的零窗口通告,就啓動持續計時器。若持續計時器設置的時間到期,那麼發送一 個零窗口的探測報文段。 Nagle算法: 此算法在TCP的實現中普遍使用。 若發送應用進程把要發送的數據逐個字節地發送到TCP的發送緩存,則發送方就 把第一個數據字節先發出去,把後面到達的數據緩存起來。當發送接收到對第一 個數據字符的確認後,再把發送緩存中的全部數據組裝成一個報文段發送出去, 同時繼續對隨後到達的數據進行緩存。只有收到對前一個報文段的確認後才繼續 發送下一個報文段。Nagle算法還規定,當到達的數據已經達到發送窗口的一半或 已經達到報文段的最大長度時,就當即發送一個報文。 糊塗窗口綜合症: 接收方緩存已經滿了,而且一次只從緩存讀取一個字節,因此通告給發送方的窗 口只有一個字節,那麼接收方一次只發送一個字節的數據,可是發送效率低,因 爲一個字節數據要40個字節協議頭部。若是每次發送一個字節的話效率很低,解 決方法是:讓接收方等待一段時間,再通告本身的窗口大小給接收方。
TCP擁塞控制:
是整個網絡的問題(全局性的)。算法
①慢開始和擁塞避免: 發送方維持一個叫作擁塞窗口CWND(congestion window)的狀態變量。發送 方的擁塞窗口等於本身發送窗口。 慢開始: 發送方一開始設置CWND=1,發送一個包,接收到該包確認後,發送方設置 CWND=2,發送以後,接收到該包的確認,發送方設置CWND=4 ……以此類推,成倍增加。 千萬注意:窗口大小並不時一次性發送數據的大小,發送方能夠根據CWND進行 連續幾回的發數據,這連續發送的數據大小不該該超過CWND。 爲了防止cwnd增加過大引發網絡擁塞,還須要設置一個慢啓動開始門限 ssthresh 。 當cwnd等於ssthresh 的時候,cwnd並不在是成倍的增加了,而是逐漸加1
當網絡擁塞時候(就是發送方沒有按時接收到確認),那麼就把慢開始門限值設
置成當前的CWND的一半,接着將cwnd設置爲1,執行慢開始算法。緩存
②快重傳和快恢復: 快重傳要求接收方收到一個失序報文段後當即發送重複確認(目的是讓發送方儘早 知道數據段沒到達),而不要等到本身發送確認數據時候後捎帶。 發送方發送5個報文,第3個缺失,收到第四個報文時候當即發送對第2個的重複確 認,接收到第4個、第五個報文時候也發送對第2個的重複確認。只要發送方一連 收到3個重複確認就應該重發接收發未收到的報文,而沒必要等到第3個報文的重傳 計時器過時才重發。 所以,使用快重傳能夠提升整個網絡的吞吐量。
快恢復與快重傳配合使用: 當發送方連續接收到3個重複確認,就執行「乘法減少」算法,把慢開始門限值 ssthresh設置爲當前CWND的一半,同時,將此時的CWND=新的ssthresh值,接 下去並不執行慢開始算法。 由於收到3個重複報文並不時意味着網絡出現問題,可能僅僅就是那個包缺失了, 因此ssthresh減半後,cwnd在ssthresh的基礎上逐漸加1。