TCP可靠傳輸措施

1、TCP的可靠傳輸

  1. 序號

TCP在傳輸時會把數據當作一個有序的字節流,給每個字節都編上序號。算法

  1. 確認

在接收端接收到發送端發送過來的數據後,會指望接受到下一個編號的數據。如,在B接受到A傳輸過來的數據0、一、2後,會把發送給A的確認報文首部的確認字段設爲3。若接下來A發送的數據三、4在傳輸過程當中丟失,只成功發送了五、6,那麼B到A的確認報文段將確認號字段置爲3。緩存

  1. 重傳

有兩種狀況會致使TCP對報文段進行重傳:超時和冗餘ACK。網絡

①超時:TCP每發送一個報文段,都會進行一次計時,在規定時間前沒有收到確認,就要重傳這一報文。blog

②冗餘ACK:路由

能觸發超時重傳的週期每每比較長,因此經常用更有效的冗餘ACK方法來檢測丟包的狀況。如A發送了序號爲一、二、三、四、5的報文段,可是2丟失,因此三、四、5報文段對B來講就成了失序報文段。TCP規定每當比指望序號大的失序報文到達時,發送一個冗餘ACK。 因此當B收到三、四、5 報文段時,會給A發送3個對2號報文段的冗餘ACK,表示本身指望接收到2號報文段。TCP規定當發送方收到對同一個報文段的3個冗餘ACK時,就能夠認爲這個報文段發生了丟失。 這時A能夠當即對2號報文執行重傳,這種技術也叫快速重傳路由器

2、TCP流量控制

TCP提供的流量控制服務是爲了消除發送方使接收方緩存區溢出的可能性,也就是匹配發送方的發送速率與接收方的接受速率。方法

發送方有稱爲擁塞窗口的cwnd,接收方有稱爲接收窗口的rwnd,接收方會根據本身接受緩存的大小,動態調整發送方的發送窗口大小。發送窗口的實際大小取rwnd和cwnd中的最小值。im

傳輸層和數據鏈路層都有流量控制,區別在於傳輸層定義了端到端用戶之間的流量控制,數據鏈路層定義了兩個中間的相鄰節點的流量控制。另外,數據鏈路層的滑動窗口大小不能動態改變,傳輸層能夠動態變化。技術

3、TCP擁塞控制

擁塞控制是爲了讓網絡可以承受現有的網絡負荷,是一個全局性的過程,涉及全部主機、路由器等因素,是發送端自發的監測網絡的擁塞狀況來調整發送窗口的大小 ;流量控制每每是指點對點的控制,目的是抑制發送端的發送速率,以便接收端來得及接收,是經過接收端的反饋來調整發送端發送窗口的大小 。擁塞控制和流量控制同時控制着發送窗口的大小。d3

  1. 慢開始和擁塞避免

  • 當cwnd<ssthresh時,使用慢開始算法。即cwnd初始爲1,在接下來的傳輸中指數型增加
  • 當cwnd>ssthresh時,使用擁塞避免算法。即將cwnd的遞增速率改成每次增長1,當出現超時時,就把慢開始門限ssthresh設置爲以前的一半,並把cwnd置1且從新執行慢開始算法。
  1. 快重傳和快恢復

①快重傳:上一節說過,當發送方連續收到三個重複的ACK報文時,直接重傳對方還沒有接收到的報文段,而沒必要等待那個報文段設置的重傳計時器超時。

②快恢復:當發送端收到連續三個冗餘ACK時,把ssthresh設爲以前的一半後,不執行慢開始,而是直接使cwnd從ssthresh處以每次遞增1的速率增長。

實際上,慢開始、擁塞避免算法、快重傳和快恢復幾種算法是同時應用在擁塞控制機制之中的,當發送方檢測到超時的時候,採用慢開始和擁塞避免算法,當發送方接收到冗餘ACK時,就採用快重傳和快恢復。

相關文章
相關標籤/搜索