計算機網絡教程-傳輸層(十二)傳輸層基礎協議:回退N幀協議GBN

        爲了提高傳輸效率(充滿管道),當發送端等待確認時,必須傳輸多個分組。換言之,當發送端等待確認時,我們需要讓不止一個分組處於未完成狀態,以此確保信道忙碌。回退 N 幀的關鍵是我們在接收到確認之前,可以發送多個分組,但是接收端只能緩衝一個分組。我們保存被髮送分組的副本直到確認到達。

1.發送窗口


        在每個窗口位置,某些序號定義了已經被髮送的分組;其他序號定義了可以被髮送的分組。窗口最大爲2^m – 1 。窗口本身是一種抽象;三個變量定義了它任何時候的大小和位置。我們將這些變量稱爲 Sf(發送窗口,第一個未完成分組)、 Sn(發送窗口,下一個待發送分組)以及 Ssize (發送窗口,大小)。當 ackNo 大於等於 Sf 且小於 Sn(模運算)的無錯 ACK 到達時,發送窗口可以滑動一個或多個槽

2.接受窗口

        接收窗口確保正確的數據分組被接收,並且確保正確的確認被髮送。在回退 N 幀中,接收窗口的大小總是 1。接收方總是尋找特定分組是否到達。任何失序分組到達都會被丟棄並需要被重發。接收窗口也滑動,但是一次只滑動一個槽。當正確的分組被接收時,窗口滑動 Rn =Rn + 1modulo 2m 。

3.計時器

        儘管每個被髮送分組都有計時器,但是在我們的協議中只使用一個計時器。原因是第一個未完成分組的計時器總是最先終止。當這個計時器終止時,我們重發所有未完成分組。當計時器終止時,發送方重發所有未完成分組。這就是爲什麼稱爲回退 N 幀。一旦超時,機器回退 N 個位置並重發所有分組。


4.有限狀態機


5.發送方

準備狀態。當發送方處於準備狀態,可能發生四個事件。
  •  如果請求來自應用層,發送方創建一個序號爲 Sn的分組。存儲分組的副本,發送分組。如果計時器沒有運行,發送方會開啓唯一的計時器。 Sn的值增長,( Sn = Sn + 1modulo 2m。如果窗口已滿, Sn =Sf + Ssizemodulo 2m,發送方進入阻塞狀態。
  • 如果無差錯 ACK 到達,其 ackNo 與一個未完成分組有關,那麼發送方滑動窗口(令 Sf =ackNo),並且如果所有未完成分組都被確認( ackNo = Sn),那麼計時器停止。如果並不是所有未完成分組都被確認,那麼計時器重新開啓。
  • 如果一個被破壞 ACK ackNo 與未完成分組無關的無錯 ACK 到達,它就被丟棄。
  • 如果超時發生,發送方重發所有未完成分組並重新開啓計時器。

阻塞狀態,在這種情況下可能發生三個事件:

  • 如果 ackNo 與一個未完成分組相關的無錯 ACK 到達, 那麼發送方滑動窗口(令 Sf = ackNo),如果所有未完成分組被確認( ackNo = Sn),那麼關閉計時器。如果所有未完成分組沒有被確認,那 麼重新開啓計時器。之後,發送方進入準備狀態。
  • 如果一個被破壞 ACK ackNo 與未完成分組無關的無錯 ACK 到達,那麼 ACK 被丟棄。
  • 如果超時發生,發送方發送所有未完成分組並重新開啓計時器。

6.接收方

接收方總是處於準備狀態。唯一的變量 Rn被初始化爲 0。可能發生三個事件:

  • 如果 seqNo = Rn 的無錯分組到達,分組中的報文被傳遞到應用層。之後窗口滑動, Rn =Rn + 1modulo 2m。最終 ackNo = RnACK 被髮送。
  • 如果 seqNo 在窗口之外的無錯分組到來,分組被丟棄,但是 ackNo = RnACK 被髮送。
  • 如果被破壞分組到達,將被丟棄。

7.發送窗口大小

爲什麼發送窗口要小於2^m


8.積累作用


        儘管 ACK2 丟失,但是 ACK3 是積累的並且作爲 ACK2 ACK3 進行服務。這就是爲什麼接收窗口一次只能滑動一個槽,而發送窗口可以一次滑動多個槽。

9.一個實例







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章