文章作者:恶猫 [E.S.T](EvilCat [E.S.T])
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
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