計算機網絡選擇重傳協議實驗報告.
《計算機網絡》選擇重傳協議實驗報告1.實驗內容和實驗環境描述實驗內容:利用所學數據鏈路層原理,設計一個滑動窗口協議,在仿真環境下編程實現有噪音信道環境下兩站點之間無差錯雙工通信。信道模型為8000bps 全雙工衛星信道,信道傳播時延270毫秒,信道誤碼率為10-5,信道提供字節流傳輸服務,網絡層分組長度固定為256字節。實驗環境:Windows7—64位操作系統PC機VC 6.02.協議設計數據結構:數據幀 +=========+========+========+===============+========+ | KIND(1) | SEQ(1) | ACK(1) | DATA(240~256) | CRC(4) | +=========+========+========+===============+========+ 確認幀 +=========+========+========+ | KIND(1) | ACK(1) | CRC(4) | +=========+========+========+ 否定確認幀 +=========+========+========+ | KIND(1) | ACK(1) | CRC(4) | +=========+========+========+KIND:表示幀的類別ACK:ACK序列號 SEQ:幀序列號 CRC:校驗和模塊結構:static inc(Uchar* a)作用:使一個字節在0~MAX_SEQ的范圍內循環自增。參數:a,字節類型。static between(Uchar a,Uchar b,Uchar c)作用:判斷當前幀是否落在發送/接收窗口內。參數:a,b,c,均為字節類型,其中兩個分別為窗口的上、下界,一個為幀的編號。其中,發送窗口的上界和下界分別為next_to_send和ack_expected,接收窗口的上界和下界分別為too_far和frame_expected,均定義在main函數中。static void put_frame(unsigned char *frame, int len)作用:為一個幀做CRC校驗,填充至幀的尾部并將其遞交給網絡層發送。參數:frame,字節數組,由除padding域之外的幀內容轉換而來;len,整型,為幀的當前長度。static send_frame_(Uchar fk,Uchar next_frame,Uchar frame_expected,Packet out_buf[])作用:構造一個幀,并將其發送。參數:fk,字節類型,為幀的內容;next_frame,字節類型,為幀的編號;frame_expected,字節類型,為希望收到的幀的編號;out_buf,二維字節數組,為緩沖區。int main(int argc,char *argv[])作用:主程式,包含選擇重傳協議的算法流程。參數:argc,整型,表示命令行參數的個數;argv,二維字符數組,表示參數內容。算法流程:Ack timeoutData timeoutData comingNetwork layerreadyMake ack frameReset ack_numCount cscFind frame-endGet packet()Send this frameNext_send=ack_expectedGet_num>0Send_data()Csc==0?YPhy ready?breakPhy ready?Send frame NYNS_seq=frameExpect?YYSend framePhy_ready=1Sent frameY NPut_packet()NGet_num=nbufferedbreakBreakDeal with acknumberbreakIn_len=1Nbuffered