计算机网络实验二.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机网络实验二

哈尔滨工业大学 计算机网络 实验报告 (2016年度季学期) 实验 实验目的 理解滑动窗口协议的基本原理; 掌握GBN的工作原理; 掌握基于UDP设计并实现一个GBN协议的过程与技术。 实验环境 接入internet的实验主机 Windows7操作系统 Visual stadio2015 c++语言 实验内容 1) 基于UDP设计一个简单的GBN协议,实现单向可靠数据传输(服务器到客户的数据传输)。 2) 模拟引入数据包的丢失,验证所设计协议的有效性。 实验过程及结果 服务器端: 使用UDP协议传输数据(比如传输一个文件),等待客户端的请求,接收并处理来自客户端的消息(如数据传输请求),当客户端开始请求数据时进入“伪连接”状态(并不是真正的连接,只是一种类似连接的数据发送的状态),将数据打包成数据报发送,然后等待客户端的ACK信息,同时启动计时器。当收到ACK时,窗口滑动,正常发送下一个数据报,计时器重新计时;若在计时器超时前没有收到ACK,则全部重传窗口内的所以已发送的数据报。 具体实现: 命令解析 为了测试客户端与服务器端的通信交互,方便操作,设置了此过程。首先,服务器接收客户端发来的请求数据, “-time”表示客户端请求获取当前时间,服务器回复当前时间; “-quit”表示客户端退出,服务器回复“Good bye!”; “-testgbn”表示客户端请求开始测试GBN协议,服务器开始进入GBN传输状态; 其他数据,则服务器直接回复原数据。 2)数据传输数据帧格式定义 在以太网中,数据帧的MTU为1500字节,所以UDP数据报的数据部分应小于1472字节(除去IP头部20字节与UDP头的8字节),为此,定义UDP数据报的数据部分格式为: Seq 0 Seq为1个字节,取值为0~255,(故序列号最多为256个); Data≤1024个字节,为传输的数据; 最后一个字节放入EOF0,表示结尾。 客户端: 使用UDP协议向服务器端请求数据,接收服务器端发送的数据报并返回确认信息ACK(注意GBN为累积确认,即若ACK=1和3,表示数据帧2已经正确接收),必须能够模拟ACK丢失直至服务器端超时重传的情况。 1) ACK数据帧定义 由于是从服务器端到客户端的单向数据传输,因此ACK数据帧不包含任何数据,只需要将ACK发送给服务器端即可。 ACK字段为一个字节,表示序列号数值; 末尾放入0,表示数据结束。 2)命令设置 客户端的命令和服务器端的解析命令向对应,获取当前用户输入并发送给服务器并等待服务器返回数据,如输入 “-time”得到服务器的当前时间。 “-testgbn [X] [Y]”命令,[X],[y]均为[0,1]的小数,其中: [X]表示客户端的丢包率,模拟网络中报文丢失; [Y]表示客户端的ACK的丢失率。(使用随机函数完成)。 如果用户不输入,则默认丢失率均为0.2。 源代码及注释: Client.cpp: // GBN_client.cpp : 定义控制台应用程序的入口点。 // #include iostream #include stdlib.h #include WinSock2.h #include time.h #pragma comment(lib,ws2_32.lib) #define SERVER_PORT 12340 //接收数据的端口号 #define SERVER_IP 127.0.0.1 // 服务器的 IP 地址 const int BUFFER_LENGTH = 1026; const int SEQ_SIZE = 20;//接收端序列号个数,为 1~20 /****************************************************************/ /* -time 从服务器端获取当前时间 -quit 退出客户端 -testgbn [X] 测试 GBN 协议实现可靠数据传输 [X] [0,1] 模拟数据包丢失的概率 [Y] [0,1] 模拟 ACK 丢失的概率 */ /****************************************************************/ void printTips(){ printf(*****************************************\n); printf(| -time

文档评论(0)

docindpp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档