2015-02-10 89 views
4

爲什麼在TCP的後退N算法窗口大小(N)必須小於序列號空間(S):S> N?我試圖想出它自己,但不安靜得到它後退N窗口大小

+0

我建議從描述Go-Back-N算法的相關規範中添加一個引用。我只是看着RFC,無法快速找到該部分。 – user3386109 2015-02-10 23:54:05

回答

4

爲什麼S>N有一個簡單的原因。考慮下圖中描述的可能的情況,其中窗口大小與序號空格相同,即S=N2^m,其中m是以比特報頭的序列號字段的大小:

enter image description here

在此,在上述的圖像,序列號空間被表示。

現在,考慮當Sf爲0並且Sn爲1時的第一種情況。定時器在第一幀發送後立即開始。當第一幀收到時,Receiver發送ACK。但假設由於某些原因而丟失。

但是,由於窗口大小爲4,發送方將繼續發送下一幀,直到達到最大窗口大小。 (在這種情況下爲4)。

由於幀中沒有丟失,幀將成功到達接收器,每當幀到達時,Rn將增加1

假設所有的ACK。丟失了。並在一段時間後超時。所以發送者會假設幀丟失或ACK丟失。所以它會從頭開始憎恨數據。但在接收端,幀成功到達,它將等待下一幀(本例中爲0)。

並且發送方也將發送幀0。這是前一幀。但它會被接收器錯誤地接受。

所以最好有窗口大小(N)必須小於序列號空間(S)。

考慮以下圖:

enter image description here

在上述圖中的S=N+1或窗口大小是2^m-1。在這種情況下,假設與前面案例中假設的相同。但區別在於,最後接收方將等待幀3,發送方將發送幀0。所以它會被丟棄。因此發送者將再次發送整組幀。

因此在第二種情況下成功溝通的可能性更大。

希望這可以幫助你。