计算机网络超时重传时间,TCP超时重传机制
超時重傳是TCP協議保證數據可靠性的另一個重要機制,其原理是在發送某一個數據以后就開啟一個計時器,在一定時間內如果沒有得到發送的數據報的ACK報文,那么就重新發送數據,直到發送成功為止。[1]
中文名
TCP超時重傳機制
外文名
TCP Timeout retransmission mechanism
領????域
計算機網絡所屬協議
TCP協議
工作進程
TCP數據傳輸
功????能
保證TCP協議數據可靠性
TCP超時重傳機制簡介
語音
TCP可靠性中最重要的一個機制是處理數據超時和重傳。TCP協議要求在發送端每發送一個報文段,就啟動一個定時器并等待確認信息;接收端成功接收新數據后返回確認信息。若在定時器超時前數據未能被確認,TCP就認為報文段中的數據已丟失或損壞,需要對報文段中的數據重新組織和重傳。盡管超時重傳的概念十分簡單,但是在實現中,TCP處理超時重傳的機制與其他可靠性協議相比是相當復雜的。[2]
超時重傳機制是TCP中非常重要和復雜的技術之一,也是TCP協議數據傳輸可靠性的保證。發送端每發送一個報文段,TCP便為其保留一個副本、設定一個計時器并等待確認信息。如果計時器超時,而發送的報文段中的數據仍未得到確認,則重傳這一報文段,直到發送成功為止。由此可見,重傳超時時間(Retransmission time-Out,RTO)的計算是超時重傳的關鍵部分,TCP要求能大致估計出當前的網絡狀況。[3]
TCP超時重傳機制重傳超時時間
語音
TCP超時重傳機制RTO
影響超時重傳機制協議效率的一個關鍵參數是重傳超時時間(RTO,Retransmission TimeOut)。RTO的值被設置過大過小都會對協議造成不利影響。如果RTO設置過大將會使發送端經過較長時間的等待才能發現報文段丟失,降低了連接數據傳輸的吞吐量;另一方面,若RTO過小,發送端盡管可以很快地檢測出報文段的丟失,但也可能將一些延遲大的報文段誤認為是丟失,造成不必要的重傳,浪費了網絡資源。[2]
TCP超時重傳機制RTO的設定
如果底層網絡的傳輸特性是可預知的,那么重傳機制的設計相對簡單得多,可根據底層網絡的傳輸時延的特性選擇一個合適的RTO,使協議的性能得到優化。但是TCP的底層網絡環境是一個完全異構的互聯結構。在實現端到端的通信時,不同端點之間傳輸通路的性能可能存在著巨大的差異,而且同一個TCP連接在不同的時間段上,也會由于不同的網絡狀態具有不同的傳輸時延。[2]
因次,TCP協議必須適應兩個方面的時延差異:一個是達到不同目的端的時延的差異,另一個是統一連接上的傳輸時延隨業務量負載的變化而出現的差異。為了處理這種底層網絡傳輸特性的差異性和變化性,TCP的重傳機制相對于其他協議顯然也將更為復雜,其復雜性主要表現在對超時時間間隔的處理上。為此,TCP協議使用自適應算法(Adaptive Retransmission Algorithm)以適應互聯網分組傳輸時延的變化。這種算法的基本要點是TCP監視每個連接的性能(即傳輸時延),由此每一個TCP連接推算出合適的RTO值,當連接時延性能變化時,TCP也能夠相應地自動修改RTO的設定,以適應這種網絡的變化。[2]
TCP協議采用自適應算法記錄數據包的往返時延,并根據往返時延設定RTO的取值。一般來說,RTO的取值會略大于RTT以保證數據包的正常傳輸。RFC 2988中建議RTO的計算方式為:[4]
其中RTTs為加權平均往返時間,RTTd是偏差的加權平均值。后續針對重傳數據包確認和原來數據包確認區分問題,對該取值進行了修正:取舊重傳時間的2倍作為新的重傳時間。當不再發生數據包重傳時,才重新根據上圖所示式子計算超時重傳時間。[4]
TCP超時重傳機制連接往返時間
語音
TCP超時重傳機制RTT
判斷超時采取的比較簡單的方法就是指定一個固定的超時值,啟動一個時間間隔為該值的計時器,計時器超時后就進行重發。這個固定值的指定可以選擇傳輸往返時間(Round Trip Time,RTT),即所有網絡上報文段的數據傳輸加上確認傳輸的時間。這個時間一過就可以確定報文段已經丟失了。[3]
TCP超時重傳機制RTT的計算
針對網絡環境的復雜性,TCP協議以傳輸往返時間RTT為基礎,采用了一種自適應算法確定重傳時間。由于RTT對應不同報文段的往返有不同的時延,而且其起伏比較大,導致其不能作為重傳超時的標準。因此,這里將各個報文段的往返時間樣本進行加權平均,就得出報文段的平均往返時間,可以記為SRTT,又稱為平滑往返時間(Smoothed RTT)。第一次測量往返時間時,SRTT值就取所測量到的RTT樣本值,但以后每測量到一個新的往返時間樣本,就按下面的式子重新計算一次平滑往返時間SRTT:[3]
新的SRTT=α×(舊的SRTT)+(1-α)×(新的RTT樣本)[3]
式中α——平滑因子,范圍是0≤α<1。若α值很接近于1,表示新計算出的SRTT和原來的值相比變化不大,新的往返時間RTT樣本對SRTT的影響不大。若選擇的α值接近于零,則表示加權計算的SRTT受新的往返時間樣本的影響較大,典型的α為7/8。[3]
TCP超時重傳機制Karn算法
如果在一個報文段中的數據被一次性地成功傳輸和確認,那么發送端可以準確得到該報文段傳輸的RTT樣本。但若出現了重傳,情況就會變得很復雜。例如,一個報文段發送后出現超時,TCP將在另一個報文段中重傳。由于這兩個報文段包含了同樣的數據,發送方接收到確認信息時將無法分辨出確認信息到底是針對哪個報文段的,因為這兩個報文段產生的確認信息可能是完全相同的,確認信息既可能是針對原始報文段的(這種情況可能是由于原報文段或確認在傳輸中被延遲造成的),也可能是對重傳報文段的確認。這種現象稱為確認二義性(Acknowledgement Ambiguiity)。確認的二義性將導致TCP無法準確地估算RTT。[2]
解決上述問題可以考慮Karn算法,簡單的說,在計算新的RTT時,不考慮重傳報文段的RTT,即對于發送重傳的數據段,在收到確認信息后,不要更新RTT,除非發送了一個報文段并在不需要重傳的情況下收到了確認信息。[3]
Karn算法能夠防止由于數據段重傳造成的不正確的往返時間(RTT)的測量。該算法最初被用在分組無線電網絡中,對分組丟失的問題是一種較好的解決辦法。但Karn算法也有一個主要缺點,就是不能適應網絡中延遲的高速變化。[3]
TCP超時重傳機制往返時間測量
往返時間的測量比較復雜。由于路由器和網絡流量均會變化,因此TCP應該跟蹤這些變化并相應的改變超時時間。TCP必須首先測量在發送一個帶有特別序號的字節和接收到包含該字節的確認之間的RTT。對往返時間的測量有很多方法:[1]
ICMP時間戳請求和應答;[1]
日期服務程序和時間服務程序;[1]
網絡時間協議(NTP);[1]
開放軟件基金會(OSF)的分布式計算環境(DCE)定義的分布式時間服務(DTS);[1]
伯克利大學的UNIX系統提供的守護程序timed(8)來同步局域網上的系統時鐘。[1]
TCP超時重傳機制重傳
語音
有了超時就要有重傳,但是就算是重傳也是有策略的,而不是將數據簡單的發送。[5]
TCP報文重傳的次數也根據系統設置的不同而有區分,有些系統,一個報文只會被重傳3次,如果重傳3次后還未收到該報文的確認,那么就不再嘗試重傳,直接reset重置該TCP連接,但有些要求很高的業務應用系統,則會不斷地重傳被丟棄的報文,以盡最大可能保證業務數據的正常交互。[5]
TCP的重傳存在原因就是為了保障TCP的可靠性,正是由于TCP存在重傳的機制,那些基于TCP的業務應用在網絡交互的過程中,不再擔心由于丟包、包損壞等導致的一系列應用問題了。[5]
由于IP協議的不可靠性和網絡系統的復雜性,少量的報文丟失和TCP重傳是正常的,但是如果業務交互過程中,存在大量的TCP重傳,會嚴重影響業務系統交互的效率,導致業務系統岀現緩慢甚至無響應的情況發生。一般而言,出現大量TCP重傳說明網絡通信的狀況非常糟糕,需要站在網絡層的角度分析丟包和重傳的原因。[5]
TCP超時重傳機制擁塞避免算法
該算法假定由于分組收到損壞引起的丟失是非常少的,因此分組丟失就意味著在源主機和目的主機之間的某處網絡上發生了阻塞。有兩種分組丟失的指示:發生超時和收到重復的確認。擁塞避免算法需要對每個連接維持兩個變量:一個擁塞窗口cwnd和一個慢啟動門限ssthresh。[6]
對一個給定的連接,初始化cwnd為1個報文段,ssthresh為65535個字節。TCP輸出例程的輸出不能超過cwnd和接收方通告窗口的大小。擁塞避免是發送方使用的流量控制,而通告窗口則是接收方進行的流量控制。前者是發送方感受到的網絡擁塞的估計,而后者則與接收方在該連接上的可用緩存大小有關。當擁塞發生時(超時或收到重復確認),ssthresh被設置為當前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少為2個報文段)。此外,如果是超時引起了擁塞,則cwnd被設置為1個報文段(這就是慢啟動)。當新的數據被對方確認時,就增加cwnd,但增加的方法依賴于是否正在進行慢啟動或擁塞避免。如果cwnd小于或等于ssthresh,則正在進行慢啟動,否則正在進行擁塞避免。[6]
TCP超時重傳機制快速重傳和快速恢復算法
如果一連串收到3個或以上的重復ACK,就非??赡苁且粋€報文段丟失了。于是就重傳丟失的數據報文段,而無需等待超時定時器溢出。[6]
當收到第3個重復的ACK時,將ssthresh設置為當前擁塞窗口cwnd的一半,重傳丟失的報文段,設置cwnd為ssthresh加上3倍的報文段大小。[6]
每次收到另一個重復的ACK時,如果允許的話,cwnd增加1個報文段大小并發送一個1個分組。[6]
當下一個確認新數據的ACK到達時,設置cwnd為ssthresh。這個 ACK應該是在進行重傳后的一個往返時間內對步驟1中重傳的確認。另外,這個ACK也應該是對丟失的分組和收到的第1個重復的ACK之間的所有中間報文段的確認。[6]
TCP超時重傳機制重新分組
當TCP超時并重傳時,并不一定要重傳同樣的報文段。TCP允許進行重新分組而發送一個較大的報文段,這樣有助于提高性能。在協議中這是允許的,因為TCP是使用字節序號而不是報文段序號來識別它所要發送的數據和確認的。[1]
參考資料
1.
劉素芹,曹紹華.TCP/IP協議分析:中國石油大學出版社,2012.05:146-147
2.
龔向陽等.寬帶通信網原理:北京郵電出版社,2006年:290-295
3.
席振元,田立勤.數據通信與計算機網絡:煤炭工業出版社,2010.12:152-153
5.
徐勁松.計算機網絡應用技術:北京郵電大學出版社,2015.01:76
6.
武奇生.計算機網絡及工程實踐:西安電子科技大學出版社,2013.10:224-225
總結
以上是生活随笔為你收集整理的计算机网络超时重传时间,TCP超时重传机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安徽大学计算机基础知识答案,安徽大学大学
- 下一篇: 大学计算机基础上机考试试卷,大学计算机基