計算機網絡實驗代碼與文件可見github:計算機網絡實驗整理
實驗名稱 可靠數據傳輸協議(停等協議與GBN協議)
實驗目的:
本次實驗的主要目的。
- 理解可靠數據傳輸的基本原理;掌握停等協議的工作原理;掌握基於 UDP 設計並實現一個停等協議的過程與技術。
- 理解滑動窗口協議的基本原理;掌握 GBN 的工作原理;掌握基於UDP 設計並實現一個 GBN 協議的過程與技術。
實驗內容:
概述本次實驗的主要內容,包含的實驗項等。
1)基於 UDP 設計一個簡單的停等協議,實現單向可靠數據傳輸(服務器到客戶的數據傳輸)。
- 模擬引入數據包的丟失,驗證所設計協議的有效性。
- 改進所設計的停等協議,支持雙向數據傳輸;( 選作內容,加分項目,可以當堂完成或課下完成)
4)基於所設計的停等協議,實現一個 C/S 結構的文件傳輸應用。(選作內容,加分項目,可以當堂完成或課下完成) - 基於 UDP 設計一個簡單的 GBN 協議,實現單向可靠數據傳輸(服務器到客戶的數據傳輸)。
- 模擬引入數據包的丟失,驗證所設計協議的有效性。
- 改進所設計的 GBN 協議,支持雙向數據傳輸;(選作內容,加分項目,可以當堂完成或課下完成)
8)將所設計的 GBN 協議改進為 SR 協議。(選作內容,加分項目,可以當堂完成或課下完成)
實驗過程:
以文字描述、實驗結果截圖等形式闡述實驗過程,必要時可附相應的代碼截圖或以附件形式提交。
1.停等協議的設計與實現
1.1簡單實現
停等協議是發送雙方傳輸數據的一種協議方式。停等協議的接收、發送雙方僅需設置一個幀的緩沖存儲空間和幀序號只取0或1的兩個狀態標志位,便可有效地實現數據重發並確保接收方接受的數據不會重復。簡單來說,停等協議就是發送方發送數據,等到接收方回復ack的時候才繼續發送下一段數據。
1.2驗證:
在實驗過程中在數據發送過程中引入一個隨機丟包以及隨機丟失ack的情況,對於簡單的停等協議來說,發生丟包或者丟失ack的情況下,也就是發送方並沒有接收到接收方回復的ack的情況下,接收方當等待一定時間之后將會重傳當前分組,直到接收到當前分組對應的ack的時候才會繼續發送下一個分組。
1.3雙向數據傳輸:
當實現雙向數據傳輸的時候,主要的方式就是在客戶端和服務器端都設置了接收和發送窗口,對於停等協議來說兩種窗口的大小都設置為1,當客戶端向服務器端發送數據的時候啟用客戶端的發送窗口和服務器端的接收窗口;當客戶端從服務器端下載數據的時候啟用客戶端的接收窗口和服務器端的發送窗口。
1.4 C/S結構的文件傳輸應用:
對於C/S結構的文件傳輸來說,由於上一步實現了雙向數據傳輸,因此在文件傳輸應用的時候實現的是可以提供客戶端上傳與下載數據的應用。在實現過程中根據客戶端輸入的命令決定是上傳還是下載,同時將這一條命令發送給服務器端,在服務器端決定是否執行這個服務,如果服務端拒絕提供服務,那么本次連接中斷;如果服務器端同意提供服務,以客戶端上傳文件為例講述下述過程,客戶端下載文件過程類似。當服務器端允許開始服務后,客戶端進入傳輸數據狀態,而服務器端進入接受數據狀態。當數據傳輸結束之后客戶端向服務器端發送特定報文內容標志傳送任務結束,則本次客戶端與服務器端的服務完成。
2.GBN協議的設計與實現
2.1GBN協議簡單實現:
與簡單停等協議相比,GBN協議事實上就是把發送窗口的長度設置為n,而接收窗口的長度仍保持為1,也就是GBN協議不接受亂序到達的數據,如果數據亂序到達,那么在接受處將會決定放棄這一部分數據;而GBN協議采用的是累積確認的方式,也就是說如果當前等待接收的數據編號為1,2,3,而收到了編號為3的ack,那么就表示這三個數據已經都正確接收了。GBN協議流程圖如下所示:
圖2.1 GBN流程圖
2.2驗證:
GBN驗證方法和上述停等協議中基本一致,可見上述驗證過程敘述。
2.3雙向數據傳輸:
GBN雙向數據傳輸方法和上述停等協議中基本一致,可見上述驗證過程敘述。
2.4改進為SR協議:
為了解決GBN只能順序接收數據的情況,在SR協議中,對於發送方來說:從上層收到數據后, SR發送方檢查下一個可用於該幀的序號.如果序號位於發送窗口內,則發送該數據幀.否則要么將數據緩存,要么返回給上層之后再傳輸;同時當發送方接收到某個ACK的時候,將這個被確認的幀標記為已接收.如果該幀序號是窗口的下界,則窗口向前移動到最小序號的未被確認幀處.如果窗口移動了且有序號在窗口內的未發送幀,則發送這些幀。而對於超時事件來說,SR協議只重傳超時的幀,並不重傳所有超時幀之前的幀。
而對於SR接收方,只要是接收窗口內的幀都可以接收,SR接收方將確認一個正確接收的幀而不管其是否按序,失序的幀將被緩存,並返回給發送方一個該幀的確認幀,直到所有幀(序號更小的幀)都被收到為止,這時將一批幀順序交付上層,然后向前移動滑動窗口。詳細內容可見MOOC講解截圖如下:
圖2.2 SR協議圖
最終設計的基於SR協議的文件傳輸應用流程如下:
圖2.3 文件傳輸應用流程圖
實驗結果:
采用演示截圖、文字說明等方式,給出本次實驗的實驗結果。
1.GBN:
由於停等協議就是GBN協議中發送窗口長度設置為1,因此停等協議與GBN協議驗證過程類似,統一演示如下:
獲取服務器端時間:
圖1.1 獲取服務器端時間
模擬丟包:
圖1.2 模擬丟包
在實現模擬丟包的過程中,設置的模擬丟包率和ack丟包率都是0.2,由上面的運行截圖中可以看出,由於客戶端發送的標號為2的ack報文丟失,因此在服務器端標號為2的數據發生超時之后要重傳標號為2后面的所有數據,這樣在一定的程度上就造成了資源的浪費,因此引入了SR協議。
2.SR文件傳輸:
在SR實現的文件傳輸服務中提供了客戶端上傳與下載文件的功能,演示結果如下:
圖2.1 初始狀態
圖2.2 客戶端申請上傳文件
圖2.3 客戶端申請下載文件
問題討論:
對實驗過程中的思考問題進行討論或回答。
- 由於UDP協議是無連接的傳輸協議,無法保證可靠的數據傳輸,因此如果在上層使用的時候需要上層來實現可靠的數據傳輸的部分。而且和TCP協議不同,UDP是一種無連接的協議,因此在傳輸數據之前並不需要三次揮手建立連接,盡管在本次實驗中一部分代碼確實使用了類似於連接的方式實現,但是需要注意的是那只是邏輯上的連接,並不存在真實的連接過程。
- SR協議的出現主要就是為了解決在使用GBN的過程中的一定量的資源浪費的情況,事實上SR協議、GBN協議、停等協議這三者在本質上的區別就是接收窗口和發送窗口大小的區別,至於其他的一些區別都是一些小的區別。
- 需要注意的是因為SR協議為每一個發送窗口的數據都設置了一個計時器,每次都重傳超時的部分。在實際實現的過程中每次只需要比對發送窗口最低位是否超時,如果超時則重傳,如果沒有超時則表示發送窗口中沒有超時的數據。
心得體會:
結合實驗過程和結果給出實驗的體會和收獲。
通過本次實驗對於基於UDP協議的可靠數據傳輸有了更加深刻的認識,掌握了停等協議,GBN協議以及SR協議,同時對於socket編程也有了更深入的了解。