滑動視窗協議(選擇重發)
滑動視窗協議是一種流量控制協議,允許鏈路節點 A 和 B 同時傳送和接收資料和確認。
- 在這裡,傳送方可以傳送多個幀,而無需等待確認。
- 如果在指定時間內沒有新的資料幀準備好傳輸,則會生成一個單獨的確認幀以避免超時。
- 每個出站幀包含一個序列號,範圍從 0 到 2𝑛−1(𝑛 位欄位)。對於停止等待滑動視窗協議,𝑛 = 1。
傳送視窗
傳送視窗是由傳送方維護的一組序列號,對應於已傳送但尚未確認的幀的幀序列號。
- 傳送方可以在接收任何確認之前傳輸最大數量的幀而不會阻塞(流水線)。
- 傳送視窗中的所有幀都可能丟失或損壞,因此必須儲存在記憶體或緩衝區中,直到它們被確認。
接收視窗
接收視窗是由接收方維護的一組序列號。它允許接收和確認多個幀。
- 接收視窗的大小固定為指定的初始大小。
- 任何接收到的序列號位於接收視窗之外的幀都會被丟棄。
- 傳送視窗和接收視窗的大小可能不同,或者沒有上限或下限。
選擇重發協議
選擇重發協議是滑動視窗協議的一種實現。在選擇重發協議中,傳送方和接收方都維護一個未完成和可接受序列號的視窗。
- 在 SRP 中,傳送方的視窗大小從 0 開始,並增長到某個預定義的最大值。
- 接收方的視窗大小始終固定,等於預定的最大值。
- 接收方為其固定視窗內的每個序列號保留緩衝區。
- 傳送方和接收方維護其視窗大小的緩衝區。
- 如果發生錯誤,接收方會檢查丟失幀序列號之前的最後一個序列號的下邊緣。
- 接收方繼續接收和確認傳入的幀。
- 傳送方為未確認的幀號維護一個超時時鐘,並在超時後重新傳輸該幀。
- 確認將 piggybacked 到傳送方。但是當反向方向沒有流量時,piggyback 是不可能的,一個特殊的計時器將為 ACK 超時,以便 ACK 作為獨立的資料包傳送回來。如果接收方懷疑傳輸有錯誤,它會立即向傳送方傳送否定確認 (NAK)。

注意 − 當鏈路非常不可靠時,SRP 效果更好。因為在這種情況下,重傳往往更頻繁,選擇性地重傳幀比重傳所有幀更有效。在選擇重發協議中,傳送方和接收方視窗的大小最多必須為 2𝑛 的一半。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP