介紹
接收進程記錄它沒有收到的最早的幀的序列號,並傳送ACK時使用這個序列號。如果一個傳送的幀沒有到達接收方,傳送方繼續傳送後面的幀,直到它填滿傳送視窗 。接收方持續用接收的幀填充它的接收視窗,並且每次回復一個帶有序列號的ACK幀。一旦傳送視窗所有幀都傳送了 ,傳送方重新傳送的幀號與ACK對應的幀,然後繼續。傳送和接收窗戶的大小必須是相同的,而且最大取值最大序列號的一半(序列號是假設編號從0到 n -1),為了當所有數據包都丟失時避免出錯。假設所有的ACK都丟失了,如果接收視窗大於最大序列號的一半,一些甚至可能是所有的逾時重傳的幀,都是不能被識別的重複傳送 。
在每個傳送的幀得到確認後,傳送方移動傳送視窗。
接收視窗的尺寸不能超過序號範圍的1/2,否則可能造成幀的重疊。另外,傳送視窗的尺寸一般和接收視窗的尺寸相同,傳送端為每一個傳送快取設定一個定時計數器,定時器一旦逾時,相應輸出快取區中的幀就被重發。
選擇重傳ARQ重排序
自動重傳請求ARQ(Automat ic Repeat Requst)是傳送端對傳輸出錯或丟失的數據幀進行自動重傳, 直到數據成功到達的一種鏈路層差錯控制方法,包括停止等待、退N 步重傳、選擇重傳SR-ARQ 三種類型。其中選擇重傳SR-ARQ 只對出錯的數據幀或定時器逾時的數據幀進行重傳, 對時延不敏感,信道利用率高, 因此被廣泛套用於長時延無線數據傳輸中, 如衛星數據通信。
但當SR-ARQ 在接收端完成接收數據幀的重排序過程時會引起較大的重排序延遲和突發數據輸出, 引起緩衝區溢出、鏈路丟包, 影響TCP 傳輸性能。
重排序方案帶來的問題
SR-ARQ 重排序的過程是當發現某幀出錯後,把其後續傳來的正確的幀暫存在一個緩衝區里, 同時要求傳送端重發出錯的幀;收到重傳來的正確的幀後, 把原已保留在緩衝區中的其餘幀一併按正確的順序遞交給高層。
該過程帶來的問題主要有以下幾點:
(1)延遲:重排序必須要保留數據幀的完整順序, 當錯幀出現後, 其後跟隨的所有正確接收的幀要保留到該錯幀
重傳以及被正確接收到為止, 這將帶來較大的延遲。圖1 中a 、b 兩個匯聚流一起經過S R-ARQ 傳輸, a流的幀a1 、幀a2 由於傳輸差錯丟失, 必須重傳;b 流的幀b1 、幀b2 要一直保留到丟失的幀a2 重傳以及被正確接收到為止。這種排頭效應(Head of theLine)阻止了b 流的傳輸, 造成b 流的延遲。
(2)數據突發:在重排序中, 當錯幀被重傳和正確接收時,所有等待它的幀一起釋放, 同時向高層轉發, 這種突發數據可能會降低QoS , 或者由於轉發節點的緩衝區溢出而產生丟包。圖1 中, 當重傳的幀a1 被接收端正確接收時, 在接收端等待重排序的3 個幀, 連同a1 幀一起釋放, 並同時向高層轉發。
(3)由於重排序帶來的延遲和數據突發, 不可避免會產生抖動現象而不利於實時的多媒體業務傳輸。
(4)緩衝器負擔:當鏈路狀態不好, 時延較大、有很多接收者且距離源端很遠時, 傳送端收不到ACK , 排序數據要一直占據著傳送緩衝器, 傳送端負擔將會過重。
重排序解決方案
非重排序方案
SR-ARQ 抑制重排序功能, 在接收端不需重排序緩衝器, 將失序的數據包直接轉發給上層TCP 端到端協定去處理。該方案能提高緩衝器資源使用效率, 不會產生S R-A RQ 的突發數據, 減小了SRARQ的數據抖動。但當TCP 接收到失序的數據包時, 會產生重複確認過程, 尤其在信道誤碼率較高時會加重TCP 的重複確認過程, 影響了TCP 的性能 。
帶有刪除重複確認ACK 的非重排序方案
這是對上一方案的改進, 由SR-ARQ 把重複確認ACK 刪除, 如圖2 所示。
該方案克服了非重排序方案中TCP 的重複確認過程, 改善了TCP 的吞吐量性能;同時在SRARQ的接收端沒有其接收快取過程和突發數據產生, 不涉及重排序延遲問題。但它破壞了TCP 端到端的語義, 隨著比特誤碼率的增加, 吞吐量變小, 發生頻繁逾時。圖2 中, 數據段2 從傳送端發出後, 由於鏈路狀態不好, 傳送時出錯而被重傳;有可能再出錯, 再重傳, 使傳送端有相當一段時間處於收不到對方確認的狀態, 導致其重傳定時器逾時。逾時又使TCP 快速重傳, 降低了TCP 的傳輸性能。