计算机网络数据链路层 --- 选择重传协议(SR)
引言
GBN協議的弊端
累計確認,從而導致某一幀錯誤后會批量重傳。
可行的解決方案
可以只重傳出錯的幀,設置單個確認,同時加大接收窗口,設置接收緩存,緩存亂序到達的幀。這也就是選擇重傳協議SR。
SR中的滑動窗口
如圖所示為SR中的發送窗口,假設此時3的確認幀已經收到:
可分為以下部分:
發送完被確認的:01
發送完等待確認的:24
目前可發送:5
不可發送的:其余的
再看接收方(假設此時5號幀沒有收到):
希望收到還未收到:5號幀
收到且確認的:6號幀
等待接收的:70
SR發送方必須響應的事件
上層的調用
從上層收到數據后,SR發送方檢查下一個可用于該幀的序號,如果序號位于發送窗口內,則發送數據幀;否則就像GBN一樣,要么將數據緩存,要么返回給上層,之后再傳輸。
收到ACK
如果收到ACK,假如該幀序號在窗口內,則SR發送方將那個被確認的幀標記為已接收。如果該幀序號是窗口的下界(最左邊第一個窗口對應的序號),則窗口向前移動到具有最小序號的未確認幀處。如果窗口移動了并且有序號在窗口內的未發送幀,則發送這些幀。
超時事件
每個幀都有自己的定時器,一個超時事件發生后只重傳一個幀。
SR接收方要做的事
對于窗口內的幀,無條件接收
SR接收方將確認一個正確接收的幀而不管其是否按序。失序的幀將被緩存,并返回給發送方一個該幀的確認幀(收到誰確認誰),直到所有幀(即序號更小的幀)皆被收到為止,這時才可以將一批幀按序交付給上層,然后向前移動滑動窗口。
如果收到了窗口下界之前的幀,就返回一個ACK。其他情況,就忽略該幀。
運行中的SR
假設發送窗口和接收窗口都為4,發送方發送0幀,接收方收到0幀,并回復0幀確認,由于0幀是接收窗口下界,于是移動窗口使得窗口下界為第一個未被接收的幀(1號幀),同時把新加入幀(4號幀)的狀態置為可接收狀態:
發送方發送1幀,接收方收到1幀,并回復1幀確認,由于1幀是接收窗口下界,于是移動窗口使得窗口下界為第一個未被接收的幀(2號幀),同時把新加入幀(5號幀)的狀態置為可接收狀態:
發送方發送2幀,但是2幀丟失,接收方未收到2幀:
發送方發送3幀,接收方收到3幀,緩存三幀,發送ACK3:
發送方收到ACK0,由于窗口下限被確認,所以窗口右移一個,發送4幀,接收方收到4幀,緩存,發送ACK4:
發送方收到ACK1,由于窗口下界被確認,所以窗口右移1個,發送5幀,接收方接收5幀,緩存,發送ACK5:
發送方2幀超時未收到2幀確認,重新傳2幀,這次接收方收到了,2-5幀交付(發送給上層網絡層),發送ACK2:
發送方收到ACK3,但是無幀可發,等待,一直到ACK2到達,然后下界移至6.
滑動窗口長度
發送窗口最好等于接收窗口
大了會溢出,小了沒意義
存在以下公式
,其中,分別是發送窗口和接收窗口大小,n是幀號的比特位數。
SR協議重點總結
對數據幀逐一確認,收一個確認一個
只重傳出錯幀
接收方有緩存
總結
以上是生活随笔為你收集整理的计算机网络数据链路层 --- 选择重传协议(SR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode51 --- solve
- 下一篇: enum和enum class