[原创]Stop and Wait Network Simulator v1.0(停止等待协议模拟程序v1.0)
文章作者:恶猫 [E.S.T](EvilCat [E.S.T])信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
1)停等协议基本原理
停止等待协议是工作在数据链路层,一种具有基本流量控制和差错检测校验的基本协议。是当今网络中常用的具有流量控制功能的数据链路层协议的基础,大部分的数据链路层协议,如,ARQ,HDLC及PPP等协议都是在停等协议的基础上发展起来。
a)正常情况。数据在传输过程中不出差错的情况下,接收方B在接收到一个正确的数据帧后,立即交付给主机进行上层协议的进一步处理,同时向主机A(发送方)发送一个确认帧ACK。当主机A收到确认帧ACK后才能发送一个新的数据帧。
b)数据帧出错。如果主机A发送的数据在传输过程中出错,接收方B进行差错检测(CRC检测)后,会给主机A发送一个否认帧NAK。这种情况下,发送方需要重发出错的数据。
c)数据帧丢失。如果主机A发送的数据在传输过程中丢失,接收方B没法接收到数据。此时,B即不会发送确认帧ACK,也不会发送否认帧NAK。因此,A在无法接收应答帧的情况下,不会进行任何处理,出现了死锁现象。为了避免此种情况出现,在发送方A发送完一个数据帧时,需要同时启动一个定时器(timer)。若到了超过定时器所设置的重传时间而仍接收不到应答帧,主机A就会重发数据。此过程称为超时重传。
d)应答帧丢失。超时重传的缺点是若丢失的数据帧是接收方发出的回应帧,发送方A同样会在超时后重发数据,此时接收方B就会接到两个同样的数据帧,出现了重复帧情况。为了解决重复帧问题,必须给每个数据帧编号。在对比编号后,只有编号相同时才正常接收,否则丢弃。
2)停止等待协议的算法
通过对停等协议原理的讨论,可以总结停等协议算法如下:
在发送方:
i. 从随机产生一个数字序列。
ii. 将数据分段,设置帧号,添加CRC检验和。
iii. 将数据送发缓存。
iv. 发送缓存中的数据。
v. 设置定时器。
vi. 等待。(等待vii~ix三个事件中最先出现的一个)
vii. 若收到ACK,则转到iii。(传输成功,取下一个数据)
viii. 若收到否认帧NAK,则转到iv。(出错重传)
ix. 若超时,则转到iv。(超时重传)
在接收方:
i. 接收变量初始化。数值等于欲接收的数据帧的发送帧号。
ii. 等待。
iii. 收到数据帧。CRC检测。若结构正确,继续后续算法,否则跳到viii。
iv. 若收到发送序号正确的数据帧;继续后续算法,否则跳到vii。
v. 显示数据帧
vi. 更新接收变量,准备接收下个数据帧。
vii. 发送确认帧ACK,跳到ii。
viii. 发送否认帧NAK,跳到ii。
我写的模拟程序包括3个部分,发送端sender.exe,接受端receiver.exe,还有模拟中间信道的middle.exe.附件中便是这三个程序和停等协议的基本原理图.学习停止等待协议的时候,可以用次程序进行模拟.若没有局域网环境,可以在本机模拟:
receiver.exe 127.0.0.1
middle.exe 127.0.0.1 127.0.0.1
sender.exe 127.0.0.1 这个东西要是通信专业的可能会对这个协议模拟程序感兴趣,有的大学的通信专业会把编写一个此协议的模拟程序作为课程设计 <P>[quote][b]下面是引用恶猫于06-28-2005 20:52发表的[原创]Stop and Wait Network Simulator v1.0(停止等待协议模拟程序v1.0):[/b]<BR>文章作者:恶猫 [E.S.T](EvilCat [E.S.T])<BR>信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])<BR><BR>1)停等协议基本原理<BR> 停止等待协议是工作在数据链路层,一种具有基本流量控制和差错检测校验的基本协议。是当今网络中常用的具有流量控制功能的数据链路层协议的基础,大部分的数据链路层协议,如,ARQ,HDLC及PPP等协议都是在停等协议的基础上发展起来。<BR>.......[/quote]<BR>恶猫果然恶:)一个主题把论坛潜水的洋人都挖出来了...<BR>还不快来和你的德国朋友侃两句?<BR><A href="http://www.eviloctal.com/forum/read.php?tid=12316&fpage=1&toread=1&page=2[/url]">[url]http://www.eviloctal.com/forum/read.php?tid=12316&fpage=1&toread=1&page=2[/url]</A></P><BR>
<P>EvilCat, you can make new friend from Germany here. He is interested in what you wrote in your paper: )</P> 楼主,有停等协议的源代码吧?
我下的只有应用程序。能否把源代码也发上呢,让我们好参考参考。
谢谢啊 协议很简单,也是完美了,如果考虑到传输过程中丢包产生的逻辑错误的话,是基本没有的.
最好要来一个握手的过程.至少一个包(由接收端来发),不然发送端一开始就发送数据过去,接收端在这之前要时刻等待着.
还有一个有趣的问题,可以想想,如果只发一个包的话,双方如何确认已经收到. 请问楼主没有C代码吗?拿程序看很费劲啊... hellfish.ys168.com 上有一个我做的 IOCP 完成端口的控件,DELPHI 的。客户端与服务器端配套即可以支持此方式
[b]是开源的[/b] ,有兴趣可以去下 可否加上误码率以及前向纠错功能?
另外如果这个程序能够算最佳帧长的话就很好啦 [s:264] 楼主,有停等协议的源代码吧?
我下的只有应用程序。能否把源代码也发上呢。
谢谢啊 andrew的计算机网络 第四版上有源码
页:
[1]