gobackn协议实验报告

合集下载

主要协议分析实验报告(3篇)

主要协议分析实验报告(3篇)

第1篇一、实验背景随着计算机网络技术的飞速发展,网络协议作为计算机网络通信的基础,扮演着至关重要的角色。

为了更好地理解网络协议的工作原理和功能,我们开展了主要协议分析实验。

本实验旨在通过分析常用网络协议的报文格式和工作机制,加深对网络协议的理解。

二、实验目的1. 熟悉常用网络协议的报文格式和工作机制。

2. 掌握网络协议分析工具的使用方法。

3. 培养网络故障排查和问题解决能力。

三、实验环境1. 实验设备:PC机、网线、Wireshark软件。

2. 实验网络:局域网环境,包括路由器、交换机、PC等设备。

四、实验内容本实验主要分析以下协议:1. IP协议2. TCP协议3. UDP协议4. HTTP协议5. FTP协议五、实验步骤1. IP协议分析(1)启动Wireshark软件,选择合适的抓包接口。

(2)观察并分析IP数据报的报文格式,包括版本、头部长度、服务类型、总长度、标识、标志、片偏移、生存时间、协议、头部校验和、源IP地址、目的IP地址等字段。

(3)分析IP分片和重组过程,观察TTL值的变化。

2. TCP协议分析(1)观察TCP数据报的报文格式,包括源端口号、目的端口号、序号、确认号、数据偏移、标志、窗口、校验和、紧急指针等字段。

(2)分析TCP连接建立、数据传输、连接终止的过程。

(3)观察TCP的重传机制和流量控制机制。

3. UDP协议分析(1)观察UDP数据报的报文格式,包括源端口号、目的端口号、长度、校验和等字段。

(2)分析UDP的无连接特性,观察UDP报文的传输过程。

4. HTTP协议分析(1)观察HTTP请求报文和响应报文的格式,包括请求行、头部字段、实体等。

(2)分析HTTP协议的请求方法、状态码、缓存控制等特性。

(3)观察HTTPS协议的加密传输过程。

5. FTP协议分析(1)观察FTP数据报的报文格式,包括命令、响应等。

(2)分析FTP的文件传输过程,包括数据传输模式和端口映射。

协议分析实验报告

协议分析实验报告

协议分析实验报告协议分析实验报告一、引言在现代信息社会中,网络通信已经成为人们生活中不可或缺的一部分。

而网络通信的基础是各种协议的运行与应用。

协议分析作为网络安全领域的一个重要研究方向,旨在对网络协议进行深入研究和分析,以发现其中的安全漏洞和潜在威胁。

本实验旨在通过对某一特定协议的分析,探索其安全性,并提出相应的改进措施。

二、实验目的本实验的主要目的是对XXX协议进行深入分析,发现其中可能存在的安全问题,并提出相应的解决方案。

通过实际的协议分析实验,加深对网络安全的认识和理解,提高分析和解决网络安全问题的能力。

三、实验方法1. 收集协议数据包:通过网络抓包工具,获取一定数量的XXX协议数据包,以便后续的分析和研究。

2. 数据包解析:使用专业的协议解析工具,对收集到的数据包进行解析,获取其中的各个字段和信息。

3. 协议分析:对解析得到的数据包进行分析,包括协议的结构、数据传输方式、安全机制等方面的研究,以发现其中的潜在问题。

4. 安全漏洞挖掘:通过对协议的深入分析,结合已知的安全漏洞和攻击手法,尝试发现协议中可能存在的安全漏洞,并进行漏洞挖掘。

5. 解决方案提出:针对发现的安全问题,提出相应的解决方案和改进措施,以提高协议的安全性和可靠性。

四、实验结果与讨论通过对XXX协议的深入分析,我们发现了其中存在的几个安全问题。

首先,协议中的身份验证机制较为薄弱,容易受到中间人攻击。

其次,协议中的数据传输方式存在明文传输的情况,容易被窃取或篡改。

此外,协议的加密算法使用较为简单,无法抵抗高级的密码攻击手法。

针对这些问题,我们提出了以下的解决方案和改进措施。

首先,加强协议中的身份验证机制,采用更安全可靠的身份验证方式,如公钥加密算法和数字证书。

其次,对数据传输进行加密处理,使用强大的加密算法,确保数据的机密性和完整性。

此外,还可以引入数字签名等机制,提高协议的抗攻击能力。

五、实验总结通过本次协议分析实验,我们对XXX协议进行了深入的研究和分析,发现了其中存在的安全问题,并提出了相应的解决方案和改进措施。

(完整版)计网协议5和协议6程序

(完整版)计网协议5和协议6程序

程序设计报告(2011/2012学年第一学期)题目:数据链路层滑动窗口协议的设计与实现专业网络工程学生姓名朱瑞霖、李小明学生学号 09211517 、 09211524日期 2011-12-01一、实验内容和实验目的利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。

信道模型为8000bps 全双工卫星信道,信道传播时延270毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度固定为256字节。

通过该实验,进一步巩固和深刻理解数据链路层误码检测的CRC 校验技术,以及滑动窗口的工作机理。

滑动窗口机制的两个主要目标:(1) 实现有噪音信道环境下的无差错传输;(2)充分利用传输信道的带宽。

在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。

为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK 搭载定时器的时限。

这些参数的设计,需要充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运行进行验证。

通过该实验提高同学的编程能力和实践动手能力,体验协议软件在设计上各种问题和调试难度,设计在运行期可跟踪分析协议工作过程的协议软件,巩固和深刻理解理论知识并利用这些知识对系统进行优化,对实际系统中的协议分层和协议软件的设计与实现有基本的认识。

二、实验环境Window操作系统下,Microsoft Visual C++ 6.0 集成化开发环境。

三、实验分工协议5主要由李小明完成,协议6主要由朱瑞霖完成,两协议的测试以及部分参数的设定、测试由两人共同完成。

实验报告由李小明和朱瑞霖共同整理完成。

四、软件设计1、数据结构分析(a)协议五#define inc(k)if(k<MAX_SEQ)k++;else k=0inc宏定义了窗口更新函数,按循环式前进更新。

bgp实验报告总结

bgp实验报告总结

bgp实验报告总结
BGP实验报告总结
背景
BGP(Border Gateway Protocol)是用于在互联网中交换路由信息的协议。

它是一种路径矢量协议,用于确定最佳路径,并且能够适应网络拓扑的变化。

在本次实验中,我们对BGP进行了实验,并对实验结果进行了总结和分析。

实验过程
在实验中,我们使用了模拟器来模拟网络环境,并配置了多个路由器和主机。

我们通过配置BGP协议来模拟网络中的路由器之间的路由信息交换。

我们还模拟了网络中的故障情况,以观察BGP协议对网络拓扑变化的适应能力。

实验结果
通过实验,我们观察到BGP协议在网络拓扑变化时能够快速地重新计算最佳路径,并更新路由表。

当网络中发生故障时,BGP能够及时地发现并通知其他路由器,从而保证了网络的稳定性和可靠性。

此外,我们还观察到BGP协议在处理大规模网络时的效率和性能表现良好。

总结与分析
通过本次实验,我们对BGP协议的工作原理和性能有了更深入的了解。

BGP作为互联网中最重要的路由协议之一,具有很强的稳定性和可靠性。

它能够适应网络拓扑的变化,并且能够处理大规模网络的路由信息交换。

因此,BGP协议在互联网中扮演着至关重要的角色。

结论
通过本次实验,我们对BGP协议有了更深入的了解,并且验证了其在网络中的
稳定性和可靠性。

BGP协议的高效性和性能表现使其成为互联网中不可或缺的一部分,对于构建稳定和可靠的互联网具有重要意义。

我们将继续深入研究BGP协议,并将其应用于实际网络中,以提高网络的稳定性和可靠性。

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编

计算机网络原理实验七传输层可靠传输协议GBN编程实验报告精编实验七:传输层可靠传输协议-GBN编程实验报告一、实验目的1. 理解传输层的可靠传输协议GBN(Go-Back-N)的工作原理;2. 利用Python编程实现GBN协议;3.通过实验验证GBN协议的可靠性。

二、实验环境1. 操作系统:Windows 10;2. 开发工具:Python3.9;3. Python库:socket, threading。

三、实验原理GBN(Go-Back-N)协议是一种滑动窗口协议,用于实现可靠的传输。

在GBN协议中,发送方可以连续发送一批数据包,每个数据包都有一个序号。

接收方会按照相同的序号顺序接收并确认收到的数据包,若一些数据包丢失,则接收方会等待一定时间,然后要求发送方重传从丢失的数据包开始之后的所有数据包。

在本实验中,我们将通过编程实现一个简化的GBN协议。

发送方和接收方将通过socket进行通信。

发送方将发送一定数量的数据包,接收方将模拟数据包丢失,并且在一段时间后要求发送方重传。

四、实验过程1. 建立发送方和接收方的socket连接,并互相绑定IP地址和端口号;2.发送方将一定数量的数据包发送给接收方;3.接收方按照GBN协议的规定接收数据包,并发送确认信息给发送方;4.发送方接收到确认信息后,继续发送下一批数据包;5.当接收方丢失数据包时,等待一段时间之后要求发送方重传;6.发送方收到重传请求后,重新发送从丢失的数据包开始之后的所有数据包;7.重复步骤2-6,直到所有数据包都被成功接收。

五、实验结果经过多次实验,数据包的发送与接收均顺利进行。

发送方能够根据接收方的确认信息进行滑动窗口的滑动,并实现重传功能。

接收方也能够检测到丢失的数据包,并要求发送方进行重传。

整个传输过程基本完成了GBN协议可靠性传输的要求。

六、实验总结通过本次实验,我深入理解了传输层的可靠传输协议GBN的工作原理,并通过编程实现了一个简化的GBN协议。

网络协议原理实验报告

网络协议原理实验报告

网络协议原理实验报告1. 实验目的本实验旨在通过实际操作,理解和掌握网络协议的基本原理,包括数据传输过程中的分段、封装和解封装等关键步骤,以及网络协议的工作方式和作用。

2. 实验环境- 操作系统:Windows 10- 软件工具:Wireshark、Tera Term3. 实验内容3.1 数据传输过程的分段和封装首先,我们需要进行数据传输过程的分段和封装操作。

为了简化实验,我们选取一个简单的应用场景:从计算机A向计算机B发送一段文字信息。

步骤如下:1. 打开Tera Term,分别在计算机A和计算机B上运行。

2. 在计算机A上输入文字信息,例如:“Hello World!”。

3. 在计算机A上使用Wireshark进行抓包操作,监听计算机A与计算机B之间的数据传输过程。

4. 在计算机A上点击发送按钮,将文字信息发送给计算机B。

3.2 网络协议的工作方式和作用在数据传输过程中,网络协议起到了关键的作用。

具体来说,网络协议分为多个层次,每个层次都有自己的功能和任务。

其中,最为常见的是TCP/IP协议。

步骤如下:1. 在Wireshark抓包工具中,我们可以看到整个数据传输过程中的分段、封装以及网络协议的工作方式。

2. 在Wireshark中,我们可以看到每个数据包的详细信息,包括源IP地址、目的IP地址、数据长度等。

3. 在Wireshark中,我们还可以追踪每个数据包的传输路径,以及每个路由器的IP地址和工作状态。

4. 实验结果与分析根据实验步骤,我们可以得出如下实验结果与分析:- 在计算机A上输入文字信息并发送后,Wireshark抓包工具会显示对应的发送数据包。

- 在Wireshark中,我们可以看到每个数据包的详细信息,包括源IP地址、目的IP地址、数据长度等。

- 在Wireshark中,我们还可以追踪每个数据包的传输路径,以及每个路由器的IP地址和工作状态。

通过实验结果与分析,我们可以得出以下结论:- 在数据传输过程中,数据被分成多个较小的分段,分别进行封装。

7go-back-n协议

7go-back-n协议

计算机网络设计实验报告
09012211 孙磊
实验七:Go-Back-N协议
实验目的
加深理解出错重传机制中的Go-Back-N协议
实验步骤
1.理解:Go-Back_N协议:发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。

且发送方在每发送完一个数据帧时都要设置超时定时器。

只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧。

2、了解实验环境,这个程序模拟了Go-Back-N协议,在该程序中,窗口限制了发送端最多为5个分组而不需等待确认。

多次点击“发送新分组”六次至多次,观察现象。

一般情况下:如图所示,点击“Send New”9次,实验现象如下图所示:
出现报文丢失的情况下,如图所示,点击发“送新的分组”9次,实验现象如下图所示:
实验结果分析
当有应答信号传回时,窗口前进(如图现象一)。

若一定时间内未收到应答信号,N 个包同时重发(如图现象二)。

计算机网络--滑动窗口实验报告

计算机网络--滑动窗口实验报告

计算机网络--滑动窗口实验报告计算机网络滑动窗口协议实验报告目录一、实验内容和实验环境描述(2)1.实验内容(2)2.实验目的(2)3.实验环境(2)二、协议设计(3)三、软件设计(4)Part A 选择重传协议1.数据结构(4)2.模块结构(6)3.算法流程(7)Part B gobackn协议 1.数据结构(8)2.模块结构(9)3.算法流程(10)四、实验结果分析(11)五、探究问题(13)六、实验总结与心得体会(14)一、实验内容和实验环境描述1.实验内容利用所学数据链路层原理,自己设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两站点之间无差错双工通信。

信道模型为8000bps全双工卫星信道,信道传播时延270毫秒,信道误码率为10?5,信道提供字节流传输服务,网络层分组长度固定为 256 字节。

2.实验目的通过该实验,进一步巩固和深刻理解数据链路层误码检测的CRC校验技术,以及滑动窗口的工作机理。

滑动窗口机制的两个主要目的:(1)实现有噪音信道环境下的无差错传输;(2)充分利用传输信道的带宽。

在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。

为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及 ACK 搭载定时器的时限。

3.实验环境Windows10环境PC机Microsoft Visual Studio 2017集成开发环境二、协议设计本次试验主要设计数据链路层,实验中分别设计了gobackn协议与选择重传协议。

主要涉及到的层次结构是物理层、数据链路层、网络层。

物理层:为数据链路层提供的服务为8000bps,270ms传播延时,10?5误码率的字节流传输通道。

数据链路层利用接口函数send_frame()和 recv_frame()从物理层发送和接收一帧。

网络解析协议实验报告(3篇)

网络解析协议实验报告(3篇)

第1篇一、实验目的1. 理解网络解析协议的基本概念和工作原理。

2. 掌握DNS、ARP等网络解析协议的报文格式和报文分析。

3. 学会使用抓包工具分析网络解析协议的报文传输过程。

4. 提高网络故障排查能力。

二、实验环境1. 硬件设备:PC机、网线、路由器。

2. 软件环境:Wireshark抓包软件、网络解析协议实验平台。

三、实验内容1. DNS协议分析(1)实验目的:了解DNS协议的工作原理,掌握DNS报文格式。

(2)实验步骤:① 在实验平台上配置好DNS服务器和客户端。

② 使用nslookup命令进行域名解析,并观察DNS服务器返回的结果。

③ 使用Wireshark抓包工具,捕获DNS查询和响应报文。

④ 分析DNS查询和响应报文的格式,包括报文类型、报文长度、域名、IP地址等信息。

2. ARP协议分析(1)实验目的:了解ARP协议的工作原理,掌握ARP报文格式。

(2)实验步骤:① 在实验平台上配置好主机A和主机B。

② 在主机A上使用ping命令ping主机B的IP地址,观察ARP请求和响应报文。

③ 使用Wireshark抓包工具,捕获ARP请求和响应报文。

④分析ARP请求和响应报文的格式,包括硬件类型、协议类型、硬件地址、协议地址等信息。

3. IP协议分析(1)实验目的:了解IP协议的工作原理,掌握IP数据报格式。

(2)实验步骤:① 在实验平台上配置好主机A和主机B。

② 在主机A上使用ping命令ping主机B的IP地址,观察IP数据报传输过程。

③ 使用Wireshark抓包工具,捕获IP数据报。

④ 分析IP数据报的格式,包括版本、头部长度、服务类型、总长度、生存时间、头部校验和、源IP地址、目的IP地址等信息。

四、实验结果与分析1. DNS协议分析结果:通过实验,我们了解到DNS协议在域名解析过程中的作用,以及DNS查询和响应报文的格式。

DNS协议通过查询和响应报文,实现域名到IP地址的转换,从而实现网络设备之间的通信。

编程实现可靠数据传输原理GO-BAN-N实验报告

编程实现可靠数据传输原理GO-BAN-N实验报告

编程实现可靠数据传输原理GO-BACK-N实验姓名:吴杰学号:13281144 班级:计科1306一.实验目的运用各种变成语言实现基于Go-Back-N的可靠数据传输软件二.实验意义通过本实验,使学生能够对可靠数据传输原理有进一步的理解和掌握。

三.实验步骤1.利用java编程实现基于Go-Back-N的可靠数据传输软件。

2.运行程序,程序将模拟实际网络中的可靠数据传输四.结果分析通过本次实验,了解了GBN传输协议的相关知识。

实验代码通过查阅资料很容易理解,但是怎么实现这个程序对我来说是个问题。

五.附件JAVA语言代码(1)Sender类package GBN;import java.util.Timer;public class Sender extends Thread{public int windowsize=3; //发送方窗口长度设为3public String[] data={"data1","data2","data3","data4","data5","data6","data7"}; //模拟七个数据包public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号public int localack=-1; //保存最近收到的ACKpublic Timers litime=null; //定时器(这里定为2秒)public int switches=0; //超时标志,1为超时public int windowsign[]; //当前窗口内待发的数据分组的序号public int acksign=0; //为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!public Sender(){windowsign=new int[windowsize]; //给窗口分配指定大小的空间for(int i=0;i<3;i++)windowsign[i]=sign[i]; //窗口初始化时存放前3个序号}public void run(){System.out.println("发送方开始发送分组数据!");}public void getack(int ack){System.out.println("发送方收到了ACK,序号为"+ack+"并且开始加以确认!");if(ack!=localack+1){System.out.println("经验证,这不是发送方正期待的ACK,立刻重发序号为"+(localack+1)+"的数据分组!");acksign=1;}else{localack=ack; //表示正确确认了ACKacksign=0;}}public void time(){switches=0; //标志初始化为0litime=new Timers();Timer limit=new Timer();limit.schedule(litime, 0,100);}}(2)Receiver类package GBN;public class Receiver extends Thread{public int lastdata;public Sender sender;public void run(Sender s){sender=s;System.out.println("接收方开始接收分组数据!");}void receive(int data, Sender s){sender=s; //发送方的参数传递System.out.println("接收方收到了序号为"+data+"的分组!");if(data!=0){if(data==lastdata+1){ //数据包序号校验,若连续则是正确/所期待的System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data; //更新本地保存的数据包序号变量respond(lastdata); //回送该正确接收的数据包对应的ACK }else{System.out.println("该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!");respond(lastdata);//若不是所期待的数据包则丢弃并且重发上一次的ACK}}else{System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdata=data;respond(lastdata); //首次接收数据包并且回送ACK }}void respond(int ack){ //回送指定序号的ACK if(sender.litime.limit<20){ //判断是否超时(2秒)ack=lastdata; //获取本场保存的数据包序号sender.getack(ack);}else{System.out.println("计时超时!!(未丢包但是时间超过2秒)发送方准备重发序号为"+ack+"的数据分组!");sender.switches=1; //如果超时,设置超时状态并显示警告}}}(3)Timers类package GBN;import java.util.TimerTask;public class Timers extends TimerTask {public int switches;public int limit;public void run(){if(limit<20) limit++; //计时2秒else {switches=-1;this.cancel();} //开关为-1表示超时,并且停止计时器}public Timers(){switches=0; //启动计时器时全部初始化limit=0;}}(4)GBN类package GBN;import java.util.Random;import java.io.*;public class GBN extends Thread{static void senddelay(int x) throws InterruptedException{if(x==1) {sleep(300);System.out.println("发送数据分组时发生延迟:300毫秒!");}else if(x==2) {sleep(750);System.out.println("发送数据分组时发生延迟:750毫秒!");}else if(x==3) {sleep(1200);System.out.println("发送数据分组时发生延迟:1200毫秒!");}else if(x==4) {sleep(3000);System.out.println("发送数据分组时发生延迟:3000毫秒!");}}public static void main(String[] args) throws IOException, InterruptedException { Sender s=new Sender();Receiver re=new Receiver();s.start();//发送端启动re.run(s);//接收端启动sleep(1000);//延迟处理int[] retimes=new int[7]; //计算每个分组被发送的次数for(int i=0;i<7;i++)retimes[i]=0;//数据包顺次发送for(int i=0;i<=s.sign.length;i++){while(i>s.localack+1){//尚有未确认的数据包,重发!System.out.println("发送方开始重新发送序号为"+(s.localack+1)+"的数据分组");retimes[s.localack+1]++;int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time();senddelay(randelay);//设置随机值,模拟数据传输延迟if(ran!=1)re.receive(s.localack+1,s);//设置随机值,模拟数据丢包过程elseSystem.out.println("序号为"+(s.localack+1)+"的分组在传给接收方途中发生了丢包!");}if(i!=s.sign.length){System.out.println();System.out.println("发送方现在开始第一次发送序号为"+i+"的数据分组");retimes[i]++;if(i!=0){for(int k=0;k<3;k++){//表示至少成功发送并确认了一个数据分组s.windowsign[k]++;//这种情况下滑动窗口向前移动!}}System.out.println();System.out.println("当前窗口内的分组情况为:");//显示当前窗口内数据包情况for(int p=0;p<3;p++){if(s.windowsign[p]<=6)System.out.println("第"+p+"号窗口里面存放的是序号为"+s.windowsign[p]+"的马上待发送的数据分组!");elseSystem.out.println("第"+p+"号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!");}System.out.println();int ran=new Random().nextInt(3);int randelay=new Random().nextInt(5);s.time();//计时开始(2秒时间)senddelay(randelay);//设置随机值,模拟数据传输延迟if(ran!=1) re.receive(s.sign[i],s);//设置随机值,模拟数据丢包过程else System.out.println("序号为"+i+"的分组在传给接收方途中发生了丢包!");}}System.out.println();System.out.println("以下是每个数据分组被发送过的次数的统计结果");for(int i=0;i<7;i++)//显示关于每个数据包发送次数的统计表System.out.println("序号为"+i+"的数据分组被发送过的次数为:"+retimes[i]);System.exit(0);}}。

网络协议实验报告

网络协议实验报告

网络协议实验报告摘要:本实验报告旨在研究和分析网络协议的重要性以及如何使用它们来实现安全和高效的数据传输。

通过实验,我们深入了解了几种常见的网络协议,并通过实际操作了解了它们的工作原理和应用场景。

实验结果表明,在合适的环境下,网络协议能够确保数据的可靠传输,并提供一定程度的安全性保障。

1. 引言网络协议是计算机网络中实现数据传输的基础。

它们定义了数据如何在计算机网络中传递和交换,确保数据的可靠性、安全性和高效性。

在本次实验中,我们将重点研究以下几种网络协议:1.1. TCP/IP协议TCP/IP协议是互联网中最常用的网络协议之一。

它分为四层:网络接口层、网络层、传输层和应用层。

每一层都有特定的功能和任务。

网络协议的实现和使用牵涉到各个层次的相关技术和配置。

1.2. HTTP协议HTTP协议是用于在Web浏览器和Web服务器之间传输超文本的协议。

它基于TCP/IP协议,并通过可靠的连接进行数据传输。

通过HTTP协议,我们可以实现网页的请求和响应,以及其他与Web相关的操作。

HTTP协议的实现和使用在今天的互联网中至关重要。

2. 实验目的本次实验的目的是:2.1. 理解和掌握各种网络协议的工作原理和应用场景;2.2. 通过实际操作验证网络协议的功能和效果;2.3. 探索网络协议在实际应用中的安全性和可靠性。

3. 实验过程3.1. 搭建实验环境在实验开始前,我们需要搭建一个适合的实验环境。

确保计算机网络的正常连接,并安装必要的软件和工具。

3.2. 实验一:TCP/IP协议实验在第一个实验中,我们将研究TCP/IP协议的工作原理,并进行一系列的实际操作。

首先,我们需要了解和配置网络接口层的相关参数。

接下来,我们将实现网络层和传输层的功能,包括IP地址的分配和路由的配置。

最后,我们将使用应用层协议进行数据传输,并验证其可靠性和效果。

3.3. 实验二:HTTP协议实验在第二个实验中,我们将以HTTP协议为例,研究应用层协议的工作流程和功能。

背包问题问题实验报告(3篇)

背包问题问题实验报告(3篇)

第1篇一、实验目的1. 理解背包问题的基本概念和分类。

2. 掌握不同背包问题的解决算法,如0-1背包问题、完全背包问题、多重背包问题等。

3. 分析背包问题的复杂度,比较不同算法的效率。

4. 通过实验验证算法的正确性和实用性。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm4. 实验数据:随机生成的背包物品数据三、实验内容1. 0-1背包问题(1)问题描述:给定n个物品,每个物品的重量为w[i],价值为v[i],背包的容量为C。

求将哪些物品装入背包,使得背包内物品的总价值最大。

(2)解决算法:动态规划法(3)实验步骤:a. 初始化一个二维数组dp[n+1][C+1],其中dp[i][j]表示前i个物品在容量为j 的背包中的最大价值。

b. 遍历每个物品,对于每个容量,根据物品的重量和价值计算dp值。

c. 返回dp[n][C],即为最大价值。

2. 完全背包问题(1)问题描述:给定n个物品,每个物品的重量为w[i],价值为v[i],背包的容量为C。

求将哪些物品装入背包,使得背包内物品的总价值最大,且每个物品可以重复取。

(2)解决算法:动态规划法(3)实验步骤:a. 初始化一个一维数组dp[C+1],其中dp[j]表示容量为j的背包的最大价值。

b. 遍历每个物品,对于每个容量,根据物品的重量和价值更新dp值。

c. 返回dp[C],即为最大价值。

3. 多重背包问题(1)问题描述:给定n个物品,每个物品的重量为w[i],价值为v[i],背包的容量为C。

每个物品有无限个,求将哪些物品装入背包,使得背包内物品的总价值最大。

(2)解决算法:动态规划法(3)实验步骤:a. 初始化一个一维数组dp[C+1],其中dp[j]表示容量为j的背包的最大价值。

b. 遍历每个物品,对于每个容量,根据物品的重量和价值更新dp值。

c. 返回dp[C],即为最大价值。

四、实验结果与分析1. 0-1背包问题实验结果显示,在背包容量为100时,最大价值为298。

网络协议实验报告

网络协议实验报告

网络协议实验报告网络协议实验报告引言网络协议是计算机网络中的重要组成部分,它定义了计算机之间通信的规则和标准。

在实际应用中,网络协议的设计和实现是至关重要的,因为它直接影响着网络的性能和安全性。

本报告将介绍我对网络协议实验的观察和分析。

实验目的本次网络协议实验的目的是通过模拟网络环境,观察和分析不同协议在不同条件下的表现。

通过这个实验,我们可以更好地理解网络协议的工作原理和优化方法。

实验环境实验中使用了一台运行着Linux操作系统的计算机作为实验平台。

通过在虚拟机中模拟多个网络节点,我们可以模拟出复杂的网络环境,以测试协议的性能和稳定性。

实验过程在实验中,我们使用了常见的网络协议,包括TCP、UDP和IP协议。

通过在虚拟机中运行不同的应用程序,并在不同的网络条件下进行测试,我们可以观察到不同协议的行为和性能差异。

首先,我们测试了TCP协议在高负载情况下的表现。

通过在多个虚拟机上同时运行大量的文件传输任务,我们观察到TCP协议在网络拥塞时的拥塞控制机制能够有效地保证数据的可靠传输,但同时也导致了较高的延迟。

这提示我们,在设计网络应用时需要权衡可靠性和传输效率。

其次,我们测试了UDP协议在实时传输场景下的表现。

通过在虚拟机中模拟音视频传输,我们观察到UDP协议具有较低的延迟和较高的传输速率,适用于实时性要求较高的应用。

然而,由于UDP协议不提供可靠性保证,数据丢失的情况也较为常见。

因此,在实际应用中需要根据需求选择合适的协议。

最后,我们测试了IP协议在不同网络环境下的表现。

通过模拟网络拓扑的变化,我们观察到IP协议能够自适应地调整路由路径,以保证数据的传输。

然而,在网络拓扑变化较为频繁的情况下,IP协议可能导致较高的路由开销和丢包率。

因此,在设计网络架构时需要考虑网络拓扑的稳定性和可靠性。

实验结果与分析通过对实验结果的观察和分析,我们发现不同网络协议在不同条件下具有不同的优势和劣势。

TCP协议适用于对数据可靠性要求较高的场景,但会导致较高的延迟;UDP协议适用于实时传输场景,但可能导致数据丢失;IP协议能够自适应地调整路由路径,但在网络拓扑变化频繁时可能会带来一定的开销。

网络协议实践课程实验报告

网络协议实践课程实验报告

一、实验目的: 通过实验了解系统漏洞, 学会发现系统漏洞。

二、实验内容:搭建一个实验环境, 使用namp工具对可能存在漏洞的开放端口进行扫描, 将结果保存在namp.cap文件里。

三、实验原理:缓冲区溢出攻击者必须非常熟悉服务器端运行的程序的特点。

他们必须知道服务器程序会分配多少空间用于接收到来的请求, 并准确知道将要插人的代码写到人何处。

攻击者可以很容易地获得服务器应用程序的代码拷贝, 并对其进行研究和攻击练习。

他们常常是对最流行的服务器软件包的默认设置进行研究, 因为大部分计算机都是在这些设置下运行的。

通常编写的恶意代码都会向其他有漏洞的主机进行打一散。

例如, 利用缓冲区溢出漏洞进人系统的恶意代码会对其他主机执行同样的攻击。

恶意代码也可能在计算机上搜索电子邮件地址, 并且把它自己的拷贝作为电子邮件的附件发送出去。

在本实验中, 我们将对一个用于探测网络中另一个系统的开放端口或漏洞的网络应用程序的跟踪结果进行观察分析。

我们也将对一个感染了冲击波蠕虫病毒的计算机的跟踪结果进行分析。

我们会看到它是如何通过试图在Windows分布式组件对象模型(DCOM)和远程过程调用(RPC)接口中发掘漏洞来传播自己的。

四、实验器材、环境配置操作及实验数据的产生:本实验的跟踪记录可在两个配置中捕获。

在第一个配置图中, 一个在防火墙后运行DHCP的PC机, 用于扫描防火墙下开放的端口。

在第二个配置图中, 我们在校园网环境中选择了一台感染冲击波蠕虫病毒的PC机进行网络行为跟踪。

配置图一配置图二在第一个实验中, 我们使用nmap工具来对另一台主机192.168.0.1的开放端口或可能的漏洞进行扫描。

我们识别到一个开放端口, HTTP端口, 将跟踪结果保存在nmap.cap文件中。

像nmap这样的端口扫描程序通过向许多常用端口发送SYN分组以检测开放端口(或漏洞)。

在本例中, SYN分组一共发送给了1658个端口。

如果服务器软件在这些端口上监听, 它就会返回一个SYNACK分组作为回应。

计网实验报告(三)概论

计网实验报告(三)概论

计算机网络实验报告(三)——编程实现可靠数据传输原理GO-BACK-N (一)实验目的:运用各种编程语言实现基于Go-Back-N 的可靠数据传输软件。

通过本实验,使学生能够对可靠数据传输原理有进一步的理解和掌握。

(二)实验内容:(1).选择合适的编程语言编程实现基于Go-Back-N 的可靠数据传输软件。

(2).在实际网络环境或模拟不可靠网络环境中测试和验证自己的可靠数据传输软件。

(三)实验原理:1.GBN协议含义:Go-Back-N ARQ中文翻译为后退N式ARQ、回退N式ARQ。

该协议对传统的自动重传请求(ARQ,Automatic Repeat reQues)进行了改进,从而实现了在接收到ACK之前能够连续发送多个数据包。

在Go-Back-N ARQ中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。

在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK,则发送端将NACK对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。

后退N帧ARQ的图例:后退N帧ARQ就是从出错处重发已发出过的N个帧。

2.Go-Back-N 的有限状态机模型表示如图所示:(a)(b)图3.1 Go-Back-N 的有限状态机模型(a)发送端(b)接受端(四)实验步骤:在eclipse平台编写并调试GBN模拟java程序,观察三组以上实验结果,验证程序可以正确模拟GBN的发送规则。

(五)实验结果:以下为随机数模拟的某次发送情况:接收方开始接收分组数据!发送方开始发送分组数据!发送方现在开始第一次发送序号为0的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为1的马上待发送的数据分组!第1号窗口里面存放的是序号为2的马上待发送的数据分组!第2号窗口里面存放的是序号为3的马上待发送的数据分组!接收方收到了序号为0的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为0并且开始加以确认!发送方现在开始第一次发送序号为1的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为2的马上待发送的数据分组!第1号窗口里面存放的是序号为3的马上待发送的数据分组!第2号窗口里面存放的是序号为4的马上待发送的数据分组!发送数据分组时发生延迟:1200毫秒!接收方收到了序号为1的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为1并且开始加以确认!发送方现在开始第一次发送序号为2的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为3的马上待发送的数据分组!第1号窗口里面存放的是序号为4的马上待发送的数据分组!第2号窗口里面存放的是序号为5的马上待发送的数据分组!发送数据分组时发生延迟:750毫秒!序号为2的分组在传给接收方途中发生了丢包!发送方开始重新发送序号为 2的数据分组发送数据分组时发生延迟:750毫秒!接收方收到了序号为2的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为2并且开始加以确认!发送方现在开始第一次发送序号为3的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为4的马上待发送的数据分组!第1号窗口里面存放的是序号为5的马上待发送的数据分组!第2号窗口里面存放的是序号为6的马上待发送的数据分组!发送数据分组时发生延迟:300毫秒!接收方收到了序号为3的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为3并且开始加以确认!发送方现在开始第一次发送序号为4的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为5的马上待发送的数据分组!第1号窗口里面存放的是序号为6的马上待发送的数据分组!第2号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!发送数据分组时发生延迟:750毫秒!接收方收到了序号为4的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为4并且开始加以确认!发送方现在开始第一次发送序号为5的数据分组当前窗口内的分组情况为:第0号窗口里面存放的是序号为6的马上待发送的数据分组!第1号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!第2号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!发送数据分组时发生延迟:1200毫秒!序号为5的分组在传给接收方途中发生了丢包!发送方开始重新发送序号为 5的数据分组序号为5的分组在传给接收方途中发生了丢包!发送方开始重新发送序号为 5的数据分组发送数据分组时发生延迟:1200毫秒!接收方收到了序号为5的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!发送方收到了ACK,序号为5并且开始加以确认!发送方现在开始第一次发送序号为6的数据分组当前窗口内的分组情况为:第0号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!第1号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!第2号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!发送数据分组时发生延迟:750毫秒!序号为6的分组在传给接收方途中发生了丢包!发送方开始重新发送序号为 6的数据分组发送数据分组时发生延迟:3000毫秒!序号为6的分组在传给接收方途中发生了丢包!发送方开始重新发送序号为 6的数据分组发送数据分组时发生延迟:3000毫秒!接收方收到了序号为6的分组!该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!计时超时!!(未丢包但是时间超过2秒)发送方准备重发序号为6的数据分组!发送方开始重新发送序号为 6的数据分组发送数据分组时发生延迟:750毫秒!接收方收到了序号为6的分组!该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!发送方收到了ACK,序号为6并且开始加以确认!当前窗口内的分组情况为:第0号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!第1号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!第2号窗口已经空了,并且后续窗口、发送方没有要发送的数据分组了!发送数据分组时发生延迟:300毫秒!序号为7的分组在传给接收方途中发生了丢包!以下是每个数据分组被发送过的次数的统计结果序号为0的数据分组被发送过的次数为: 1序号为1的数据分组被发送过的次数为: 1序号为2的数据分组被发送过的次数为: 2序号为3的数据分组被发送过的次数为: 1序号为4的数据分组被发送过的次数为: 1序号为5的数据分组被发送过的次数为: 3序号为6的数据分组被发送过的次数为: 4(六)问题总结:1.编写GBN算法,要注意的是在模拟丢包的情况下,要在接收端阻止ack的回传和在发送端发现ack超时的情况下进行该包的重发,要注意整个7个包的传送组织结构和顺序;2.进行模拟时,注意标注丢包及正确收到的flag值;3.测试时应多运行几次,观察在各种随机传送情况下的总体的发送情况,来验证是否能满足GBN协议。

选择重传协议实验报告(3篇)

选择重传协议实验报告(3篇)

第1篇一、实验目的1. 了解选择重传协议(SR)的基本原理和特点;2. 理解选择重传协议与GBN协议的区别;3. 通过实验验证选择重传协议在实际网络环境中的性能。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 网络模拟器:Mininet三、实验原理选择重传协议(SR)是一种数据链路层协议,用于解决GBN协议中累计确认导致的批量重传问题。

SR协议允许接收方仅对出错的帧进行确认,从而减少网络资源的浪费,提高数据传输效率。

四、实验步骤1. 构建实验拓扑结构:使用Mininet创建一个简单的网络拓扑,包括发送方、接收方和交换机;2. 编写实验代码:使用Python编写选择重传协议的发送方和接收方代码;3. 配置实验参数:设置发送方窗口大小、接收方窗口大小、数据帧大小、确认帧间隔等参数;4. 运行实验:启动网络模拟器,运行实验代码,观察实验结果;5. 分析实验结果:分析实验数据,评估选择重传协议的性能。

五、实验结果与分析1. 实验结果:(1)发送方窗口大小为5,接收方窗口大小为3,数据帧大小为100字节,确认帧间隔为1秒;(2)实验过程中,发送方共发送了10个数据帧,接收方成功接收了8个数据帧;(3)实验过程中,共发生4次重传,其中3次为单个帧重传,1次为批量重传。

2. 实验分析:(1)选择重传协议在实际网络环境中表现良好,与GBN协议相比,减少了批量重传的情况,提高了数据传输效率;(2)发送方窗口大小和接收方窗口大小对实验结果有较大影响,适当增大窗口大小可以进一步提高传输效率;(3)数据帧大小和确认帧间隔也会影响实验结果,需要根据实际情况进行优化。

六、实验结论1. 选择重传协议在实际网络环境中具有较好的性能,可以有效解决GBN协议中批量重传的问题;2. 实验结果表明,通过调整发送方窗口大小、接收方窗口大小、数据帧大小和确认帧间隔等参数,可以进一步提高选择重传协议的性能;3. 选择重传协议在实际应用中具有较高的研究价值和实用价值。

完全背包实验报告

完全背包实验报告

一、实验目的本次实验旨在通过C++编程实现完全背包问题,并对其算法原理、时间复杂度、空间复杂度进行分析。

通过对比不同实现方式,加深对动态规划算法的理解,提高解决实际问题的能力。

二、实验原理完全背包问题是指有n种重量和价值分别为wi、vi(1≤i≤n)的物品,从这些物品中挑选总重量不超过W的物品,求出挑选物品价值总和最大的挑选方案,这里每种物品可以挑选任意多件。

解决完全背包问题常用的方法是动态规划。

动态规划的核心思想是将复杂问题分解为若干个相互重叠的子问题,并存储已求解的子问题的解,避免重复计算。

三、实验步骤1. 定义状态定义状态dp[i][w]表示从前i种物品中挑选总重量不超过w的物品时所能获得的最大价值。

2. 状态转移方程当不选择第i种物品时,状态dp[i][w] = dp[i-1][w]。

当选择第i种物品时,状态dp[i][w] = max(dp[i-1][w], dp[i-1][w-wi] + vi)。

其中,wi表示第i种物品的重量,vi表示第i种物品的价值。

3. 初始化初始化dp[0][w] = 0,表示不选择任何物品时的最大价值为0。

4. 计算按照状态转移方程计算dp[n][W],其中n为物品种类数,W为背包容量。

5. 输出结果输出dp[n][W],即为所求的最大价值。

四、实验实现1. C++代码实现```cpp#include <iostream>using namespace std;const int MAXN = 100; // 物品种类数上限const int MAXW = 1000; // 背包容量上限int w[MAXN], v[MAXN]; // 物品重量和价值数组int dp[MAXN+1][MAXW+1]; // 动态规划表int main() {int n, W;cout << "请输入物品种类数和背包容量:" << endl; cin >> n >> W;cout << "请输入每种物品的重量和价值:" << endl; for (int i = 1; i <= n; i++) {cin >> w[i] >> v[i];}// 初始化dp表for (int i = 0; i <= n; i++) {for (int j = 0; j <= W; j++) {dp[i][j] = 0;}}// 计算dp表for (int i = 1; i <= n; i++) {for (int j = 1; j <= W; j++) {if (j >= w[i]) {dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]); } else {dp[i][j] = dp[i-1][j];}}}// 输出结果cout << "最大价值为:" << dp[n][W] << endl;return 0;}```2. 测试用例```plaintext输入:4 71 62 35 46 5输出:14```五、实验分析1. 时间复杂度动态规划算法的时间复杂度为O(nW),其中n为物品种类数,W为背包容量。

回退测试报告

回退测试报告

回退测试报告
1.本次实验目的
1)熟练掌握Visual C+ +网络编程的基本方法和客户机/服务器架构的工作原理。

2)设计数据链路层协议,并通过试验仿真测试协议算法。

2.本次实验环境
1)需要在各个计算机装有Windows系统,TCP/IP 协议软件和Visual C++6.0开发工具。

2)并且需要:信道仿真模拟软件xds.
3.本次实验要求
1)根据提供的参考程序和连续ARQ协议的伪代码,设计数据链路层通信协议一带有滑动窗口的选择性重传ARQ协议和回退N重传ARQ 协议,由“发送端程序”和“接收端程序”实现。

2)要求能检测差错和丢失,判断重复帧,实现重传,确保数据可靠传输。

3)发送端和接收端窗口能正确反映客户端和服务器端数据通信过程。

4)总结实验过程(实验报告),方案、编码、调试、结果、分析和结论。

4.本次实验结果
回退N重传协议代码及实验结果。

防冲撞协议原理实验报告

防冲撞协议原理实验报告

实验三防冲撞协议原理实验一、实验目的通过本实验使学生了解 RFID 的防冲撞原理的实现方法,掌握时间槽、VICC 四种状态的含义以及状态的切换规律。

二、实验设备TI TRF7960 读卡器一个、usb 连接线一条、电脑一台、HF RFID 实验上位机软件、ISO15693标签若干张三、实验知识预备及原理1、VICC 状态一个 VICC 可能处于以下 4 种状态中的一种:断电准备静默选择这些状态间的转换在图 6.22中有规定。

断电、准备和安静状态的支持是强制性的。

选择状态的支持是可选的。

(1)断电状态当VICC不能被VCD激活的时候,它处于断电状态。

(2)准备状态当 VICC 被 VCD 激活的时候,它处于准备状态。

选择标志没有置位时,它将处理任何请求。

(3)安静状态当 VICC 处于安静状态,目录标志没有设置且寻址标志已设置情况下,VICC 将处理任何请求。

(4)选择状态只有处于选择状态的 VICC 才会处理选择标志已设置的请求。

注 1:状态转换方法的意图是,某一时间只有一个 VICC 应处于选择状态。

注 2:VICC 状态转换图只图示出有效的转换。

在所有的其它情况下,当前的 VICC 状态保持不变。

当 VICC不能处理一个 VCD 请求(例如 CRC 错误,等等),它将仍然处于当前状态。

注 3:虚线表示的选择状态图示出 VICC 支持的选择状态是可选的。

2、上位机软件防碰撞算法实现流程上位机界面打开默认设置:支持 ISO15693,高速率,数据编码 1/4 操作,寄存器会自动设置一些参数:1).在询卡请求时检测标志位(B5)如果设置了,slots=1,如果没有设置,slots=16 同时使能不反应中断。

2). 初始化 mask length=0;mask value=03).初始化 slot 数指针为 04). 发送询卡请求命令带上 mask length,mask value 值5). 等待发送完成中断6).等待下一个中断,中断可能是以下情况:a.接受完成b.碰撞c.没有反应检测 IRQ 状态寄存器中断类型如果是接收完成中断,就意味着没有错误/碰撞在 FIFO 接收 UID 过程中,从 FIFO中可以读出完整的 UID如果是碰撞中断,在 slot 指针里记录碰撞位置,指针数值加 1如果是标签没反应中断,忽略。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个数据帧如图所示:其中有效数据和校验码可能含有转义字符。

(3) 帧中各个字段的定义和编码,计算CRC校验和的多项式定义帧的定义编码:帧中的第一比特为开头FLAG,第二比特是帧的类型,共定义了{data,ack,nak} frame_kind三种类型,用枚举常量表述,第三比特是顺序编码,用于确定到达帧的顺序,第四比特是ACK捎带确认讯息,记录了当前已收到帧的确认情况,这是数据帧的头部。

若为数据帧,从第五比特开始为网路层的数据,到网路层包裹信息结束后,接上4比特的CRC校验讯息,后有一结束字符FLAG表明该帧结束。

CRC校验数:CRC校验数据由函数crc32()产生,函数crc32()返回一个32位整数为数据生成CRC-32校验和,并且把这 32比特校验和附在数据字节之后。

多项式定义:采用的CRC校验方案为CRC-32,生成多项式为:x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1校验和附加在数据帧尾部,接受方用带校验和的数据来逻辑除以生成多项式,余数为零则数据无误码,反之有误码等待发送方重传。

(4) 协议工作时两个站点之间信息交换的过程控制,尤其是发生误码条件下的控制方案协议工作时,两个站点通过互发数据包交换数据,而控制讯息则稍带在数据讯息中传递,当遇到超时情况时,则主动发送空数据包以提供讯息。

当出现帧丢失时,如收到帧的序号有跳跃,或者出现CRC校验出错丢弃了某帧,会主动发送NAK否定帧,提示重传,接收方丢弃所有的后续帧。

若长期未产生放送消息,则出现ACK超时事件,主动发送ACK帧提示确认,对方收到确认后,滑动窗口继续发送,若一直未收到确认讯息,则出现数据帧超时事件,发送方会自动重发未确认帧。

11.3 软件设计给出程序的数据结构,模块之间的调用关系和功能,程序流程。

(1)数据结构:数据结构是整个程序的要点之一,程序维护者充分了解数据结构就可以对主要算法和处理流程有个基本的理解。

描述程序中自定义结构体中各成员的用途,定义的全局变量和主函数中的变量的变量名和变量所起的作用。

采用字符数组结构来存放数据帧:typedef unsigned char seq_nr;typedef unsigned char packet[PKT_LEN];typedef unsigned char frame_kind;typedef struct FRAME {frame_kind kind; /* FRAME_DATA */seq_nr ack;seq_nr seq;packet info;unsigned int padding;} frame;其中:frame kind 是帧的类型。

Ack 捎带确认数据帧是否正确传到Seq 是数据帧传输的序号info是帧传输的内容Padding是帧经过CRC校验之后所添加的内容定义的全局变量:static int phl_ready 表示物理层的状态int out_buffer_len[MAX_SEQ + 1] 从网络层得到的数据包的长度主函数中的变量的变量名和变量:int event 接收方等待的发生事件int arg 物理层到达的字数packet buffer[MAX_SEQ+1]; 发送方的数据包缓存区seq_nr nbuffered 当前帧号seq_nr next_frame_to_send 下一个要发送的帧的序号seq_nr ack_expected 期望收到的确认seq_nr frame_expected; 期望接收到对方的帧的编号frame r; 变量帧(2)模块结构:给出程序中所设计的子程序所完成的功能,子程序每个参数的意义。

给出子程序之间的程序调用关系图。

函数between(seq_nr a,seq_nr b,seq_nr c)用于判断收到的ACK序号是否在发送窗口内。

a 为下限,b为ack序号,c为上限。

函数send_to_physical(unsigned char *out_buf, int slen)用字符填充方式将帧发送到物理层函数recv_from_physical(unsigned char *in_buf, int arg)用于从物理层接收一个字节并做处理函数send_data_frame(frame_kind fk, seq_nr frame_nr, seq_nr frame_expected, packet buffer) 用于发送从网络层得到的数据函数调用图为:主函数mainbetween send_to_phys recv_from_ph send_data_fram(3) 算法流程:画出流程图,描述算法的主要流程。

11.4 实验结果分析(1)描述所实现的协议软件是否实现了有误码信道环境中无差错传输功能。

能实现协议软件是否实现了有误码信道环境中无差错传输功能,采用了CRC校验和重传技术是错误得以被发现和纠正。

(2) 程序的健壮性如何,能否可靠地长时间运行。

程序健壮性较好,在高负荷和高误码率等条件下均能工作。

在较低误码率的信道条件下,该程序运行平稳,没有出现任何差错,健壮性良好,在高误码率的信道条件下,程序运行有时会出现中断,但大多数时候运行时间较长,故本程序健壮性良好。

(3) 协议参数的选取:滑动窗口的大小,重传定时器的时限, ACK 搭载定时器的时限,这些参数是怎样确定的?根据信道特性数据,分组层分组的大小,以及你的滑动窗口机制,给出定量分析,详细列举出选择这些参数值的具体原因。

本次实验中物理层提供了一种字节流传输服务,为了成帧,使用了字节填充技术。

分组长度为240~256字节。

滑动窗口的大小:该参数的选择直接涉及到信道利用率和数据拥塞的问题;若太小,会导致信道利用率很低,信道中长时间没有数据传送;若太大,数据发送过快,会造成接受方数据链路层来不及处理,数据物理层及信道发生拥塞现象导致数据丢失,出错率增大。

在go_back_n协议中(假设接受方一直有数据发送,即无ack定时器超时现象),滑动窗口的大小M,信道传输时延a,发送速率c,帧大小f在满足如下关系时信道利用率(M*(f/c)/[2a+2(f/c)])接近100%:M>=[2a+2*(f/c)]/(f/c);由于实际数据传送很可能在某段时间类接受方无数据反送,涉及ack帧单独传送问题,故一般信道利用率不可能达到100%,但M的选择至少要满足公式。

至于防止M过大的问题,可通过实际测试的结果分析来得到合适的M值。

最终,我们选择M值为31,效果较好。

重传定时器的时限:该参数的选择涉及到重传的相应时间,若改时间选择过大,则会导致重传等待的时间过久,若时间选择过小,则将导致较为频繁的重传,这两种情况均将导致信道利用率的下降,经过实际检测,当wait_time设为1700ms时,效果较好。

Ack搭载定时器的时限:若该值选择较小,则将导致频繁重传ack帧,虽然我们在程序中将ack帧的长度设定为8(最小长度),但频繁的重传仍将降低信道利用率;若将该值设置过大,则发送方将长时间得不到ack确认信号,严重时将导致重传,降低利用率。

经过实际测试,ack_time选择为240-300ms内,效果较好。

(5) 理论分析:根据所设计的滑动窗口工作机制(Go-Back-N),推导出在无差错信道环境下分组层能获得的最大信道利用率;推导出在有误码条件下重传操作及时发生等理想情况下分组层能获得的最大信道利用率。

给出理论推导过程。

理论推导的目的是得到信道利用率的极限数据。

为了简化有误码条件下的最大利用率推导过程,可以对问题模型进行简化,比如:假定超时重传的数据帧的回馈ACK 帧可以100%正确传输,但是简化问题分析的这些假设必须不会对整个结论产生较大的误差。

由于需要携带帧讯息,因此最大的信息利用率为约为96.2%,由于信道的最大比特率为8000bps,可得出每传输一个字节耗时1ms,每帧的附加讯息固定为10,耗时10ms,若出现转义字符,则可能增加时间,在ESC/FLAG模式中传输的平均250个字符需要两倍的传输空间即极限值500,此时的信道利用率的极限值是49%,若平均每个错帧重传10次,利用率将下降为40%。

(6) 实验结果分析:你的程序运行实际达到了什么样的效率,比对理论推导给出的结论,有没有差距?给出原因。

有没有改进的办法?如果没有时间把这些方法付诸编程实施,介绍你的方案。

实验所得的结果是无差错条件下分组层能获得的最大信道利用率对于A是50%,对于B是100%。

(7) 存在的问题:在“表3 性能测试记录表”中给出了7 种测试方案,在测试中你的程序有没有失败,或者,虽未失败,但表现出来的性能仍有差距,你的程序中还存在哪些问题?在误码率不同的情况下所执行程序的结果截图如下:当参数为u的运行结果:无参数时运行结果为:参数为fu的运行结果:参数为f的的运行结果如下:当参数为fs时的运行结果如下:该图参数为afs:该图参数为bfs:当参数为fle的运行结果:该图的参数为afle该图的参数为bfle当参数为fl时的运行效果如下:当参数为f –ber 1e-7时的运行效果:当参数为f –ber 5e-5时程序运行效果如下:该程序存在的主要问题就在于会反复重传未被确认的帧,造成了信道资源的浪费,这可以在实验的结果中看出,在进行较长时间的运行后,信道流量水平趋于平稳,此时的数据和理论之大致相当,说明所确认的问题确实是症结所在。

只要能限制其反复重传,就能提高信道利用率。

11.5 研究和探索的问题前面列出的“可研究和探索的问题”,有哪些问题你有了答案或者自己的见解?给出你的结论,并详细阐述你的理由或见解。

1. CRC 校验能力CRC校验码的检错能力很强,它除了能检查出离散错外,还能检查出突发错,CRC校验码具有以下检错能力:CRC校验码能检查出全部单个错;CRC校验码能检查出全部离散的二位错;CRC校验码能检查出全部奇数个错;CRC校验码能检查出全部长度小于或等于K位的突发错;CRC校验码能以[1-(1/2)K-1]的概率检查出长度为(K+1)位的突发错。

2. 软件测试方面的问题(1)验证所完成的程序能否在各种情况下都能够正确工作,是软件测试环节的主要目的。

(2)表3 中列出了七种测试方案,设计这么多种测试方案的目的是检测此程序在不同信道条件下的传输性能。

-u是测试成帧方案的效率。

无参数时模拟在实际线路中,不连续的收发时的传输性能。

-f 用于测试信道满负荷时的传输性能。

-l,-e,-s用于测试在特殊情境下传输性能。

-ber可以改变误码率,从而检验无差错传输的健壮性及性能。

11.6 实验总结和心得体会如果一切100%顺利,编辑的程序一次编译就通过,运行一次就正确,那么完成本次实验的代码编写和调试工作大约需要4~6 个小时。

相关文档
最新文档