- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- JGJ-T98-2010砌筑砂浆配合比设计规程(正式版).pdf VIP
- (高职)管理信息系统(第七版)教学课件(完整版).pptx
- 怎样解题数学思维的新方法读后感.doc VIP
- 2022年万宁菜篮子投资有限公司招聘考试题库及答案解析.docx VIP
- AI专题:2025年AI应用案例精选报告.pptx VIP
- 人教版物理九年级上册《第十八章 电功率》大单元整体教学设计.pdf
- 骨量不足的口腔种植外科技术.ppt VIP
- 海口市龙华区镇域污水处理厂及配套管网工程(遵谭镇) 环评报告.docx VIP
- 近零能耗建筑技术标准.docx VIP
- Unit 1 How can we become good learners Section B 1a-1e 课件(共26张PPT)(含音频+视频).pptx VIP
文档评论(0)