- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用windows的时间函数模拟stop-and-wait
可靠传输
问题:数据帧可能出现错误,可能丢失,那么如何实现可靠传输?
基本解决方法
ACK (确认): 接收方根据差错检测的结果向发送方发送一个小的控制帧进行确认
ACK = 正确接收, NAK = 帧错误
超时: 如果发送方在一定的时间范围内未收到来自接受方的确认, 则重传数据帧
自动请求重传 (ARQ)
ARQ
采用确认和超时定时器的可靠传输机制
链路层假设
串行通信信道 :传输过程中不存在帧的乱序
所有数据帧的传播时延相同
接收方
对数据帧进行差错检测
对正确帧进行确认, 丢失错误帧
丢弃禁止接收的数据帧
发送方
发送原始数据帧
对错误帧和丢失帧进行重传
3
-4-
停止等待协议
最简单的ARQ机制
每发送完一个数据帧, 发送方在继续发送下一个数据帧之前必须等待确认
如果在一定的时间范围内,发送方未收到确认(ACK), 则发送定时器超时激发, 发送方重传原始数据帧.
-5-
停止等待协议
两种不同的帧丢失情况
Demo
-6-
停止等待协议
问题: 超时重传
解决方案: 帧序号 (SeqNum )
避免确认丢失导致的重复数据帧
在有线传输媒质中, 只需1比特
实验内容第三部分
本实验内容利用socket和windows时间函数,来模拟client和server之间的停止-等待动作
旨在帮助大家更好的理解停止-等待协议
考虑到时间,请大家完成两种情况的程序编写
正常通话,成功收到ACK
在时限内未能收到ACK,超时自动重传
Windows时间函数
请参加实验指导书
SYSTEMTIME sys:定义系统时间类型变量
GetLocalTime(sys):获得当前时间
printf(“%02d:%02d:%02d [duplex-talk] client: ”, sys.wHour, sys.wMinute, sys.wSecond): 显示时间
注意:请在每一个命令行前显示当前时间
正常通话
需要实现的功能:
客户端每发送一串数据,服务器自动回复ACK
输入为空时,回复ACK,自动退出
示例:
客户端
服务器
未收到ACK,超时自动重传
需要实现的功能:
客户端发送一串数据,服务器不回复ACK;
接收超时后,客户端自动重发数据;
发送三次数据之后,设置服务器回复ACK。
提示:可使用if()条件语句,使得发送次数达到3之后,服务器端回复ACK
如何设置超时重传?
setsockopt(): 用于任意类型、任意状态套接口的设置选项值
本实验中用于设置recv函数最长超时等待时间
设置超时等待时间Timeout=xxx;
setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO,(char *)Timeout, sizeof(int));
一旦recv()超时Timeout,将返回-1,此时客户端应自动重发。
文档评论(0)