一、流量控制
當AB兩台設備在發送數據,如果A設備有較高的發送速度,而B設備只有較低的接收速度,那么就會造成不匹配,容易造成傳輸錯誤,因此就需要流量控制。這種情況一般是由於B設備的緩沖區溢出而造成的。
流量控制不止是鏈路層具備的功能,傳輸層也具備相應的功能。下面是鏈路層流量控制與傳輸層流量控制的區別:
(1)數據鏈路層的流量控制是點對點的,而傳輸層的流量控制是端到端的。
(2)數據鏈路層流量控制的手段是接收方收不下就不回復確認幀。傳輸層的流量控制手段是接收端通過滑動窗口告訴發送方。
二、流量控制的方法
數據鏈路層的流量控制方法主要是停止等待協議和滑動窗口協議,滑動窗口協議還包括后退N幀協議GBN和選擇重協議SR。
停止-等待協議
停止等待協議就是每發送完一個幀就停止發送,等待對方的確認幀,在收到確認幀后再發送下一個幀。下圖實例:
通過實例可以看到,當左邊的發送端需要向右邊的接收端發送數據幀M1,在右邊的接收端在收到M1數據幀后,會向左邊的發送端回復一個確認幀,當左邊的發送端收到確認幀后,才開始發送M2數據幀,往復這樣的過程來完成數據幀的發送,可以看就這種發送的方式是比較的低效的。
三種流量控制協議滑動窗口的大小對比
停止-等待協議 發送窗口大小 = 1,接收窗口大小 = 1;
后退N幀協議GBN 發送窗口大小 > 1,接收窗口大小 =1;
選擇重傳協議SR 發送窗口大小 > 1,接收窗口大小 >1;
注:在鏈路層的滑動窗口控制協議中,在傳輸過程發送方滑動窗口的大小與接收方接收窗口的大小是固定值。
流量控制總結
(1)流量控制:控制發送速率,使接收方有足夠的緩沖區來接收每一個幀。
(2)滑動窗口就是用於流量控制的具體手段。
(3)滑動窗口還可以解決可靠傳輸問題,因為它可以和自動重傳功能搭配使用。
三、停止-等待協議
停止-等待協議就是每發送完一個幀就停止發送,等待對方的確認幀,在收到確認幀后再發送下一個幀。
停止-等待協議有兩種應用情況分別是無差錯的和有差錯的。
(1)停止-等待協議無差錯的情況
當發送方向接收方發送數據幀,發送方發送0幀到接收方,接收方收到0幀后,會向發送方回復0幀的確認幀ACK 0,發送方收到回復的確認幀ACK 0后,然后再向接收方發送1幀,發送雙方不斷的進行發送和確認的操作而傳輸數據。
(2)停止-等待協議有差錯的情況
1)發送方幀丟失
當發送方向接收方發送數據幀,發送的0幀發送方已經收到,接着發送方向接收方發送1幀,但是數據1幀因傳輸問題丟失,所以接收方也就不能回復確認幀,發送方在沒有收到確認幀的情況下,它也不會無限期的等待,而是發送方設置有超時計時器,當超時計時器超時,發送方會再次發送1幀,這次接收方收到了1幀,並向發送方回復ACK 1 幀,接收方收到確認幀傳輸就結束了。
注:(1)超時計時器設置的重傳時間應當比幀傳輸的平均RTT更長一些。
(2)發送方發完一個幀后,必須保留該幀的副本,如果沒有收到回復幀,則立刻重傳該幀。
2)接收方確認幀丟失
當發送方向接收方發送數據幀,接收方已收到發送方的幀,並向發送方發確認幀,但是確認幀在傳輸過程中丟失,發送方沒有收到,此時接收方也是通過超傳計時器計時,如果在規定的時間內沒有收到確認幀,那么發送方則重新發送該幀,接收方收到幀並丟棄,則重發確認幀給發送方。
注:通過上面的實例可以看到,停止-等待協議的信道利用率比較低,只是解決了可靠傳輸的問題。
四、后退N幀協議GBN
在講述后退N幀協議GBN之前,我們先來看停止-等待協議,停止-等待協議就是每發送完一個幀就停止發送,等待對方的確認幀,在收到確認幀后再發送下一個幀。這樣就會造成發送的效率非常的低,為了解決這個發送效率問題,就有了退N幀協議GBN。
為了解決發送效率的問題,后退N幀協議GBN改變了滑動窗口的數量。
現在我們通過實例來看看,后退N幀協議對滑動窗口做的改變,首先當發送方要發送數據時,它先准備6個滑動窗口,就是發送方藍色的窗口,對應着0-5個幀。發送方先發出第0幀的數據(然后保留一份第0幀的附本),接着發送第1幀的數據(然后保留一份第1幀的附本),此時,第0幀先到達接收方,接收方收到第0幀后立刻回復第0幀的確認幀ACK 0,當發送方收到ACK 0時,滑動窗口就向后移動一格,現在則對應着1-6個幀,此時第1幀還在鏈路上傳輸,這樣就提升了發送的效率,當然這只是圖例,實現發送的過程是滑動窗口的數據都可以按順序發送,收到確認幀則滑動窗口向后移動。
GBN發送方需要響應的三件事
(1)上層的調用
上層要發送數據時,發送方先檢查發送窗口是否已滿,如果未滿,則產生一個幀並將其發送,如果窗口已滿,發送方只需將數據返回給上層,提示上層窗口已滿,上層等一會再發送。(實際情況是發送方先緩存這些數據,窗口空閑時再發送)
(2)收到了一個ACK幀
GBN協議中,對n幀的確認采用累積確認的方式,標明接收方已經收到n幀和它之前的全部幀。
(3)超時
與停止-等待協議一樣,如果出現超時,發送方重傳所有已發送但未被確認的幀。
GBN接收方需要響應的事
如果正確收到n號幀,並且按序,那么接收方為n幀發送一個ACK確認幀,並將幀中的數據部分交付給上層。其余情況都丟棄幀,並為最近按序接收的幀重新發送ACK,接收方無需緩存任何失序幀,只需要維護一個信息,就是下一個按序接收的幀序號。意思是不是按序收到的幀都會被丟棄,並且不會回復確認幀。
接着我們來看看實例:
當發送方向接收方發送數據,接收方收到0幀、1幀,並且都回復了確認幀,但是2幀傳輸過程丟失,雖然接收方收到第3、4、5幀它都會丟棄這些幀,只發送回復ACK 1(意思是只收到了0、1幀,請發送方發送第2幀),此時發送方第2幀設置的計時器超時,重新發送了2、3、4、5幀。
GBN協議總結
(1)累積確認:就是當接收方向發送方發出第n幀的確認信息,那么接收方就認為第n幀之前的所有幀接收方都已正確接收。
(2)接收方只按順序接收幀,不按順序會被丟棄。接收方有一個計錄需要接收幀的序號,如果不是它都不會接收直接丟棄。
(3)發送方窗口最大為 2n - 1,接收窗口大小為1。
GBN協議性能分析:因連續發送數據幀而提高了信道利用率(與停止-等待協議比較),但是在重傳時把原來已經正確傳送的數據幀重傳,又降低了效率。
五、選擇重傳協議SR
選擇重傳協議SR就是為解決后退N幀協議GBN數據幀丟失需要重傳確認的問題,選擇重傳協議SR解決問題的辦法是設置單個確認,同時加大接收窗口,設置接收緩存(緩存亂序幀)。以下是選擇重傳協議SR的圖例:
SR發送方需要響應的三件事
(1)上層的調用
上層要發送數據時,SR發送方先檢查發送窗口可用於該幀的序號,如果序號位地發送窗口內,則發送數據幀;否則就像GBN一樣,要么將數據緩存,要么返回上層之后再傳輸。
(2)收到了一個ACK幀
如果收到ACK,加入該幀序號在窗口內,則SR發送方將被確認的幀標記為已接收,如果該幀序號是窗口的下界(最左邊第一個窗口對應的序號),則窗口向前移動到具有最小序號的未確認幀,如果窗口移動到有序號並未發送的幀,則發送幀。
(3)超時
每個幀都有自己的定時器,當某幀確認超時,則只重傳某幀。
SR接收方需要響應的事
來者不拒(窗口內的幀)
SR接收方將確認一個正確接收的幀而不管其是否按序,失序的幀將被緩存,並反回給發送方一個該幀的確認幀,當序號最小的幀被接收,這時可以將一批按序幀交付給上層,則向前移動滑動窗口。圖例:
SR協議總結
(1)對數據幀逐一確認,收一個確認一個。
(2)只重傳出錯幀。
(3)接收方有緩存。
(4)滑動窗口大小 = WRmax = 2 (n - 1 )