分享
分销 收藏 举报 申诉 / 7
播放页_导航下方通栏广告

类型网络协议设计.doc

  • 上传人:xrp****65
  • 文档编号:5963993
  • 上传时间:2024-11-24
  • 格式:DOC
  • 页数:7
  • 大小:143.50KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    网络 协议 设计
    资源描述:
    声明:仅仅用于交作业,小心与别人重复,被老师抓 问题描述: 设计一个简单的网络协议,要求有协议的功能、目标、协议的工作原理、协议算法,并编程实现 文件传输协议 协议功能:通过网络以字节形式传输文件 协议工作原理:全双工先信道传输 发送端一次发送4个字节32位。 接收端一次发送1个字节8位。 接收端缓冲区4个字节,平均分为4块。 协议详细和协议算法 1、 建立连接 先发送方端请求建立连接,字节流数据首部 00 表示请求连接。请求建立连接时2~31位无效。 如: 0 0 1 1 1 1 1 1 接收端返回字节数据0~1位为00表示同意建立连接。不同意连接则不给予回应 如: 0 0 1 1 1 1 1 1 发送端开始发送数据,接收端缓冲区一共有4块,每块大小为一个字节。 发送的字节 5~7 位表示本次发送的数据大小单位 byte 当数据发送完时,发送端发送的字节流首部 0、1位为 11 表示发送结束 发送端发送 字节流首部 0 1 2 3 4 5 6 7 状态 数据标记 缓冲区块号 本次数据长度 8 16 24 31 数据 各位说明 状态标识位 00 请求连接 01 正在发送 11 发送结束 数据标记 0 发送的数据是源数据 1 发送的数据是加密后的数据 缓冲区块号 本次发送数据长度 0~8个字节 接收端发送 字节流 0 1 2 3 4 5 6 7 标识位 缓冲区块号 标识为 00 同意建立连接 01 缓冲区已刷新 10 确认收到数据 11 确认结束 2、 开始发送 发送端发送的字节状态标识位 为01 如:发送到第1块缓冲区、大小为8 byte的数据源数据 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 0 1 0 1 0 1 0 0 1 8byte 数据 保证数据的可靠性,发送时将源数据发一遍,将加密后的数据也发一遍,源数据和加密后的数据的差别由数据标记位区分。0表示发送的数据是源数据,1表示发送的数据是加密后的数据。 接收端接收数据时将数据接收到的源数据加密与接收到在发送端加密的数据比较,不同则把接收到的数据丢弃。假如相同则给发送端回一个数据,表示该缓冲区块的数据接收成功,并且不再接收往该缓冲区块的数据。 如:第 2 缓冲块 1 0 1 1 0 1 1 1 接收端接受数据后不再发那个字节数据。当缓冲区填满以后发送端不再发送,接收端将缓冲区的数据则写入设备,并给发送端一个回应。表示可以发送端继续发送数据了。 如: 0 1 1 1 1 1 1 1 发送端在发送数据后假如接收不到接收端的确认信息,则等待一个时间后继续发送。 3、 发送完成 发送端在数据发送完后发送的结束标识字节,并等待接收端回应,如一段世间还不回应则继续发送。 如: 1 1 1 1 1 1 1 1 接收端回送确认结束 如: 1 1 1 1 1 1 1 1 编程实现 #include<iostream> using namespace std; #define SEND_SIZE 32 #define BACK_SIZE 8 //用int型数组模拟数据的位 void SendEnd(const int* recData); //发送端处理函数 void RecevieEnd(const int* recData); //接收端处理函数 void encode(int* data); //加密函数 int pool[4][SEND_SIZE-BACK_SIZE]; int main() { int data[SEND_SIZE] = {0,0}; SendEnd(data); return 0; } /*发送端请求 00 请求连接 01 正在发送 11 发送结束 接收端回送 00 同意建立连接 01 缓冲区已刷新 10 确认收到数据 11 确认结束 */ //发送端处理函数 void SendEnd(const int* recData) { //recData 从接收端回送的的数据 int sendData[SEND_SIZE]; //往接收端发送的数据 if(recData[0]==0 && recData[1]==0) { // 00 同意建立连接 //往第二块缓冲区发送的源数据 sendData[0] = 0;sendData[1] = 1; sendData[2] = 0; sendData[3] = 1;sendData[4] = 0; sendData[5] = 0;sendData[6] = 1;sendData[7] = 1; int data[24] = {1,1,0,1,0,1,1,0, 0,1,0,0,0,0,1,0, 1,0,0,1,0,1,1,0}; for(int i=0; i<SEND_SIZE-BACK_SIZE; i++) sendData[i+BACK_SIZE] = data[i]; cout<<"开始给接收端发送源数据大小:"<<sendData[5]*4+sendData[6]*2+sendData[7]+1<<"B 缓冲块:"<<sendData[3]*2+sendData[4]<<endl; RecevieEnd(sendData); //往第二块缓冲区发送加密后数据 sendData[2] = 1; encode(data); //将数据加密后在发一次 for(int i=0; i<SEND_SIZE-BACK_SIZE; i++) sendData[i+BACK_SIZE] = data[i]; cout<<"开始给接收端发送加密后的数据大小:"<<sendData[5]*4+sendData[6]*2+sendData[7]+1<<"B 缓冲块:"<<sendData[3]*2+sendData[4]<<endl; RecevieEnd(sendData); } else if(recData[0]==0 && recData[1]==1) { // 01 缓冲区已刷新 cout<<"发送端: 好啊,继续发送..."<<endl; cout<<"文件传输结束,发送端请求结束"<<endl; sendData[0] = 1;sendData[1] = 1; RecevieEnd(recData); } else if(recData[0]==1 && recData[1]==0) { // 10 确认收到数据 cout<<"发送端: 我知道"<<"第"<<recData[3]*2+recData[4]<<" 块缓冲区的数据成功接收了"<<endl; cout<<"文件传输结束,发送端请求结束"<<endl; sendData[0] = 1;sendData[1] = 1; RecevieEnd(recData); } else { // 11 确认结束 cout<<"发送端: 断开连接"<<endl; } } //接收端处理函数 void RecevieEnd(const int* recData) { //recData 从发送端发送的数据 int sendData[BACK_SIZE]; //往发送端回送的数据 if(recData[0]==0 && recData[1]==0) { // 00 请求连接 cout<<"发送端请求连接"<<endl; sendData[0] = 0;sendData[1] = 0; } else if(recData[0]==0 && recData[1]==1) { // 01 正在发送 int piece = recData[3]*2+recData[4]; //缓冲块号 int size = recData[5]*4+recData[6]*2+recData[7]+1; //本次发送数据大小 //cout<<piece<<" sfsfsf"<<endl; if(recData[2] == 0) { //接收源数据 cout<<"接收到源数据数据大小:"<<size<<"B 缓冲块:"<<piece<<endl; //将数据存到指定的缓冲区块 cout<<"收到的数据为:"<<endl; for(int i=8; i<SEND_SIZE; i++) { pool[piece][i-8] = recData[i]; cout<<recData[i]<<" "; } cout<<endl; } else { cout<<"接收到加密后的数据大小:"<<size<<"B 缓冲块:"<<piece<<endl; int temp[SEND_SIZE-BACK_SIZE]; int i; for(i=0; i<SEND_SIZE-BACK_SIZE; i++) temp[i] = pool[piece][i]; encode(temp); for(i=0; i<SEND_SIZE-BACK_SIZE; i++) { if(temp[i] != recData[i+8]) break; } if(SEND_SIZE-BACK_SIZE==i) { cout<<"接收端: 正确成功接收"<<endl; sendData[0] = 1;sendData[1] = 0; for(int j=2; j<BACK_SIZE; j++) sendData[j] = recData[j]; SendEnd(sendData); } else { cout<<"接收端: 没有正确接收,不给予回应"<<endl; } } } else if(recData[0]==1 && recData[1]==0) { // } else { // 11 发送结束 cout<<"发送端发送结束,接收端回应结束"<<endl; sendData[0] = 1;sendData[1] = 1; SendEnd(sendData); } } void encode(int* data) { int code[SEND_SIZE-BACK_SIZE] = {1,0,1,1,0,1,1,0, 1,0,1,0,1,0,1,0, 1,0,1,0,1,1,1,0}; for(int i=0; i<SEND_SIZE-BACK_SIZE; i++) data[i] = data[i]&code[i]; } 编译环境windows 编译器vc2008 执行结果 总结 此文件传输协议还有很多不足的地方 如: 1、 两次握手连接无法保证正确连接 2、 当缓冲去未满时无法继续发送 3、 程序也没有完全模拟出来 7
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:网络协议设计.doc
    链接地址:https://www.zixin.com.cn/doc/5963993.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork