(a)物理层 :为数据链路层提供的服务为 8000bps,270ms 传播延时, 10-5 误码率的字节
流传输通道。 为了仿真实现上述服务质量的信道, 利用在同一台计算机上 TCP Socket完成两
个站点之间的通信。由于同一台计算机上 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 毫秒最合适。
评论0
最新资源