解析NetRiver滑动窗口协议实验

天杀的NetRiver...发泄完毕...

 

开始正题。以下代码在NetRiver1.21系统下通过。首先,这个滑动窗口实验应该主要参考Computer Networks 4th Edition中的 3.4 滑动窗口协议,结构定义与流程书上完全相同。然后,不要相信guide.pdf...另外,在提供一个FAQ,很有用。

 

再说一点,在NetRiver中调试是相当费时的工作。编译一次需要两分钟以上...不懂原因...所以,尽量将重要信息log出来,写到一个文件中,给自己提供更多调试的信息。

 

下面简要解释源码。

 

程序中,我为每个协议申请了一个与窗口等大小的帧缓冲区frameBuffer。帧缓冲区内存储可能需要重发的帧,并在窗口变化时更新缓冲区的内容。我还维护了两个变量upper, lower,用于指示窗口的上下界。对于等待发送队列,我为其维护一个链表队列,并动态申请缓存空间。帧队列的数据结构定义为WaitingList,具体结构见源代码。


停等协议与回退N协议本质完全一样。两个函数我使用了几乎一样的源码,只改动了窗口大小宏。两个函数分别处理了三种不同的帧事件:发送帧、接收帧和帧超时。当网络层有新帧需要发送时,先检查窗口大小。若窗口未开满,则直接发送帧。若窗口已开满,则将帧入队等待。当接收到新帧时,检查帧的确认号,并更新窗口下界,处理等待队列。当帧超时事件发生时,重传超时帧之后的所有帧。


选择重传协议的发送端大体结构与回退N协议基本一致,只有几个微小差别。第一,当帧超时事件发生时,选择重传协议只重传超时的一帧。第二,选择重传协议接收到确认帧中会出现特殊的“否定确认NAK”。当接收到这样的NAK时,发送端需要重发否定确认的这一帧。

 

  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值