计算机网络选择重传协议实验报告.docx
- 文档编号:8990080
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:33
- 大小:495.72KB
计算机网络选择重传协议实验报告.docx
《计算机网络选择重传协议实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络选择重传协议实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
计算机网络选择重传协议实验报告
《计算机网络》
选择重传协议
实验报告
1.实验内容和实验环境描述
实验内容:
利用所学数据链路层原理,设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。
信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度固定为256字节。
实验环境:
Windows7—64位操作系统PC机VC6.0
2.协议设计
数据结构:
数据帧
+=========+========+========+===============+========+
|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:
校验和
模块结构:
staticinc(Uchar*a)
作用:
使一个字节在0~MAX_SEQ的范围内循环自增。
参数:
a,字节类型。
staticbetween(Uchara,Ucharb,Ucharc)
作用:
判断当前帧是否落在发送/接收窗口内。
参数:
a,b,c,均为字节类型,其中两个分别为窗口的上、下界,一个为帧的编号。
其中,发送窗口的上界和下界分别为next_to_send和ack_expected,接收窗口的上界和下界分别为too_far和frame_expected,均定义在main函数中。
staticvoidput_frame(unsignedchar*frame,intlen)
作用:
为一个帧做CRC校验,填充至帧的尾部并将其递交给网络层发送。
参数:
frame,字节数组,由除padding域之外的帧内容转换而来;len,整型,为帧的当前长度。
staticsend_frame_(Ucharfk,Ucharnext_frame,Ucharframe_expected,Packetout_buf[])
作用:
构造一个帧,并将其发送。
参数:
fk,字节类型,为帧的内容;next_frame,字节类型,为帧的编号;frame_expected,字节类型,为希望收到的帧的编号;out_buf,二维字节数组,为缓冲区。
intmain(intargc,char*argv[])
作用:
主程式,包含选择重传协议的算法流程。
参数:
argc,整型,表示命令行参数的个数;argv,二维字符数组,表示参数内容。
算法流程:
Start
Swctih
Phy-layer
ready
Networklayer
ready
Datacoming
Datatimeout
Acktimeout
Getpacket()
Countcsc
Findframe-end
Resetack_num
Makeackframe
Send_data()
Get_num>0
Csc==0?
Next_send=ack_expected
Sendthisframe
Phyready?
Sendframe
S_seq=frame
Expect?
Phyready?
break
Sentframe
Phy_ready=1
Put_packet()
Sendframe
Break
break
Dealwithack
number
Get_num=nbuffered
In_len=1
break
Nbuffered Enable network Disable network Y NY N YY YN N (a)物理层: 为数据链路层提供的服务为8000bps,270ms传播延时,10-5误码率的字节流传输通道。 为了仿真实现上述服务质量的信道,利用在同一台计算机上TCPSocket完成两个站点之间的通信。 由于同一台计算机上TCP通信传播时延短、传播速度快、没有误码,物理层仿真程序在发送端利用“令牌桶”算法限制发送速率以仿真8000bps线路;在接收端误码插入模块利用一个伪随机数“随机地”篡改从TCP收到的数据,使得所接收到的每个比特出现差错的概率为10-5;接收到的数据缓冲后延时270ms才提交给数据链路层程序,以仿真信道的传播时延特性。 为了简化程序,省略了成帧功能,数据链路层利用接口函数send_frame()和recv_frame()发送和接收一帧。 (b)数据链路层: 发送方和接收方都维持一个窗口,窗口内部为可以接受的序列号。 接收到的数据包被缓存起来,当按正确的顺序接收完毕后再提交给网络层。 ACK信息通过数据帧捎带确认的方式传递,若遇到长时间无数据帧发送,则产生ACK超时事件(ACK_TIMEOUT),主动发送空的ACK帧。 若长时间未收到ACK信息,则产生数据帧超时事件(DATA_TIMEOUT),发送方自动重传未确认帧;当出现帧丢失或校验错误时,接收方会主动发送NAK帧提示发送方立即重传。 数据链路层通过物理层提供的函数来利用物理层提供的服务。 通过get_packet()函数从网络层得到一个分组;当数据链路层成功接收到一个分组后,通过put_packet()函数提交给网络层。 (c)网络层: 利用数据链路层提供的“可靠的分组传输”服务,在站点A与站点B之间交换长度固定为256字节的数据分组。 网络层把产生的分组交付数据链路层,并接受数据链路层提交来的数据分组。 3.结果分析 (1)描述你所实现的协议软件是否实现了有误码信道环境中无差错传输功能。 我们的协议成功实现了有误码信道环境中无差错传输功能。 如果收到一个损坏帧,在尚未发送否认确定的情况下,则捎带发送否定确认。 并打印错误报告。 如果已发送否定确认,则只打印错误报告,不重复发送否定确认。 (2)程序的健壮性如何,能否可靠地长时间运行。 我们的程序成功连续运行半小时以上,并取得预定效果。 具有足够的健壮性。 (3)协议参数的选取: 滑动窗口的大小,重传定时器的时限,ACK搭载定时器的时限,这些参数是怎样确定的? 根据信道特性数据,分组层分组的大小,以及你的滑动窗口机制,给出定量分析,详细列举出选择这些参数值的具体原因。 我们物理层提供的是字节流传输服务,使用字节填充技术成帧,分组长度为256字节。 为了避免在有出错帧接收方要求重传时产生二义性,我们定义窗口大小为2^n-1,并且双方的窗口大小均为((MAX_SEQ+1)/2),这样的大小足够使用又不会有过于富余的空间浪费。 滑动窗口的大小直接涉及到信道利用率和数据拥塞问题,若太大,数据发送过快将产生拥塞导致数据丢失,出错率增加,若太小则信道利用率降低,通过实验测试合适的窗口大小为16。 重传定时器时限涉及到重传的响应时间,太小会导致频繁重传,太大则重传等待时间太久,经过我们的试验测试,选取重传定时器时限定为3000毫秒,ACK搭载定时器的时限为1000毫秒最合适。 (4)理论分析: 根据所设计的滑动窗口工作机制(Go-Back-N或者选择重传),推导出在无差错信道环境下分组层能获得的最大信道利用率;推导出在有误码条件下重传操作及时发生等理想情况下分组层能获得的最大信道利用率。 给出理论推导过程。 理论推导的目的是得到信道利用率的极限数据。 为了简化有误码条件下的最大利用率推导过程,可以对问题模型进行简化,比如: 假定超时重传的数据帧的回馈ACK帧可以100%正确传输,但是简化问题分析的这些假设必须不会对整个结论产生较大的误差。 由于需要携带帧信息,所以最大信息利用率为 ,由于数据链路层提供的服务为8000bps,所以每传输一个字节耗时1ms,每帧的附加信息固定为10,耗时10ms,若出现转义字符还将增加时间。 简化模型,假设信道上始终有数据需要传输。 则在误码率为 的信道上,100000个比特可发送 个数据包,即每传送48个数据包将有1个出错。 假设在限定时间内可以重传的该帧为正确帧,则每传送48个数据包需传送48+1+1=50次。 所以信道利用率为 而由于程序设计原因,当一个数据包超时后,常常需要重传多次造成信道浪费。 若重传k次,则信道利用率为 若重传10次,信道利用率为78.18%。 若信道误码率为 ,则 ,即大约每5个帧就有一个出错,此时在ESC/FLAG模式下平均250个字符需要两倍的传输空间即极限值510,若平均每个错帧重传10次信道利用率的极值为 (5)实验结果分析: 你的程序运行实际达到了什么样的效率,比对理论推导给出的结论,有没有差距? 给出原因。 有没有改进的办法? 如果没有时间把这些方法付诸编程实施,介绍你的方案。 由实验结果可以看出,窗口大小是16时信道利用率最高,与理论最大值最接近。 与理论窗口最佳值一致。 在洪泛模式下,信道利用率与理论值接近。 而在其他情况下负载有时较轻,所以信道利用率相比理论值较低。 (6)存在的问题: 在“表3性能测试记录表”中给出了几种测试方案,在测试中你的程序有没有失败,或者,虽未失败,但表现出来的性能仍有差距,你的程序中还存在哪些问题? 实验顺利进行,每次测试得到的数据都比较接近,但和理论值相比信道利用率较低,这与信道的负载有关。 实验结果: 测试最佳窗口尺寸: 窗口大小为16,DATA_TIMER3000,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 59.3 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 56.8 95.0 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.8 96.4 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 91.3 93.6 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 73.2 75.5 窗口大小为8,DATA_TIMER3000,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 57.7 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 55.6 94.8 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.9 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 95.5 95.0 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 75.0 73.2 窗口大小为32,DATA_TIMER3000,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 96.9 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 54.8 93.6 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 97.0 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 90.6 90.2 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 50.0 52.3 从测试结果比较得出,窗口最佳尺寸为16; ACK搭载定时器的时限定为1000毫秒,窗口大小为16,测试重传定时器时限 DATA_TIMER2800,窗口大小为16,ACK_TIMER1000 测试最佳DATA_TIMER取值 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 55.3 93.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 49.6 88.7 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.9 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 86.1 88.2 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 69.6 70.1 DATA_TIMER3000,窗口大小为16,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 59.3 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 56.8 95.0 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.8 96.4 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 91.3 93.6 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 73.2 75.5 DATA_TIMER3200,窗口大小为16,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 58.0 96.8 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 55.8 90.3 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.9 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 89.3 90.6 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 63.4 68.9 DATA_TIMER3400,窗口大小为16,ACK_TIMER1000 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 56.9 96.8 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 54.8 89.9 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.8 96.8 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 87.7 89.8 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 68.1 70.3 从测试结果比较得出,DATA_TIMER=3000为最佳取值 重传定时器时限定为3000毫秒,窗口大小为16,测试ACK搭载定时器的时限 ACK=1000ms 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 59.3 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 56.8 95.0 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.4 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 95.1 95.4 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 73.2 75.5 ACK=1100ms 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 68.4 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 67.6 95.6 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.9 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 95.1 95.0 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 72.5 76.3 ACK=1200ms 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 55.9 96.9 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 57.1 94.9 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 96.9 96.9 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 95.2 95.1 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 74.5 73.3 ACK=1300ms 序号 命令 说明 运行时间(分钟) Selective算法线路利用率(%) A B 1 datalinkau datalinkbu 无误码信道数据传输 30 57.0 94.8 2 datalinka datalinkb 站点A分组层平缓方式发出数据,站点B周期性交替发送100秒停发100秒 30 55.8 94.9 3 datalinkafu datalinkbfu 无误码信道,站点A和站点B的分组层都洪水式产生分组 30 97.0 96.8 4 datalinkaf datalinkbf 站点A/B的分组层都洪水式产生分组 30 95.1 95.0 5 datalinkaf–ber1e-4 datalinkbf–ber1e-4 站点A/B的分组层都洪水式产生分组,线路误码率为10^-4 30 71.4 74.4 从测试结果比较得出,最佳ACK搭载定时器的时限为1100ms 实验截图: (最佳参数) DATA_TIMER3000,窗口大小为16,ACK_TIMER1100 datalinkau datalinkbu datalinka datalinkb datalinkafu datalinkbfu datalinkaf datalinkbf datalinkaf–ber1e-4 datalinkbf–ber1e-4 4.研究和探索的问题 1.CRC校验能力CRC校验码的检错能力很强,它除了能检查出离散错外,还能检查出突发错,CRC校验码具有以下检错能力: CRC校验码能检查出全部单个错;CRC校验码能检查出全部离散的二位错;CRC校验码能检查出全部奇数个错;CRC校验码能检查出全部长度小于或等于K位的突发错;CRC校验码能以[1-(1/2)K-1]的概率检查出长度为(K+1)位的突发错。 2.由于本次试验过程的误码信道是一个比较固定的误码率,而在实际生活当中的误码率不是稳定的,可能会因为传输环境的不同,使得他的误码率波
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 选择 协议 实验 报告