滑动窗口的仿真协议
1 滑动窗口协议模拟程序

– 可以在发送方设置一个发送定时器模拟发送端 网络层数据流量。
14
协议模拟过程分析(2) • 关于接收方接收速率的模拟。
– 在接收方设置一个接收定时器,速率可设定。 – 使用令牌桶算法调节数据接收的平均速率。 – 令牌桶算法既可保证在接收窗口允许范围内产 生短暂的数据突发流量,同时又在较长时间范 围内控制接收速率的大小。
21
TCP滑动窗口协议的基本原理
• TCP发送方缓存与发送窗口
发送方缓存 发送窗口大小
… …
已发送 且已确认
34 35 36 37 38 39 40 41 42 43 44 45 46 47
已发送 但未确认 可连续 立即发送 窗口展开之前 暂不能发送
… …
空闲
下一个要发送的字节
• TCP接收方缓存与接收窗口
滑动窗口协议 模拟程序
1
概述 滑动窗口协议通常用于实现流量控 制和差错控制、保证数据传输的可 靠性和有效性。它既可以作为基本 的数据链路层协议,也可用于传输 层的TCP协议中
2
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
3பைடு நூலகம்
编程训练目的
• 掌握滑动窗口协议的概念、原理与基本 算法。 • 理解3种典型的数据链路层滑动窗口协议: l位滑动窗口协议、使用退后n帧的滑动 窗口协议与使用选择性重传的滑动窗口 协议。 • 了解传输层与数据链路层滑动窗口协议 的区别与联系,了解TCP滑动窗口协议 的实现原理。
4
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
5
编程训练要求
编程实现使用选择性重传策略的滑动窗口协议 模拟程序 :
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、协议介绍滑动窗口协议是一种用于数据传输的协议,通过设置发送方和接收方的窗口大小,实现可靠的数据传输和流量控制。
本协议旨在确保数据的完整性和可靠性,提高数据传输的效率和可控性。
二、协议要求1. 数据传输的可靠性:确保数据在传输过程中不丢失、不损坏、不重复。
2. 流量控制:根据接收方的处理能力和网络状况,控制发送方的数据发送速率,避免数据拥塞。
3. 窗口管理:通过滑动窗口的机制,实现数据的分段发送和接收,提高数据传输的效率。
4. 错误检测和纠正:采用适当的错误检测和纠正机制,保证数据传输的准确性。
三、协议流程1. 发送方将待发送的数据分割为固定大小的数据段,并设置发送窗口的大小。
2. 发送方将数据段按照顺序发送给接收方,并启动定时器等待接收方的确认信息。
3. 接收方接收到数据段后,检查数据的完整性。
如果数据正确无误,则发送确认信息给发送方。
4. 发送方收到确认信息后,将发送窗口向前滑动一个位置,并继续发送下一个数据段。
5. 如果发送方在定时器超时前没有收到确认信息,则认为数据丢失,重新发送该数据段。
6. 接收方在收到重复的数据段时,丢弃重复数据并发送确认信息。
四、协议实现1. 窗口大小的选择:根据网络状况和接收方的处理能力,合理选择发送窗口和接收窗口的大小。
2. 序列号的分配:发送方为每个数据段分配一个唯一的序列号,接收方通过序列号确认接收到的数据段。
3. 确认机制:接收方在接收到数据段后,发送确认信息给发送方,确认已收到数据段。
4. 定时器机制:发送方设置定时器,超时后重新发送未收到确认的数据段。
5. 错误检测和纠正:采用适当的错误检测和纠正机制,如循环冗余校验(CRC)等。
五、协议优化1. 快速重传:接收方在收到连续的重复数据段时,立即发送确认信息,以提高数据传输效率。
2. 拥塞控制:根据网络拥塞的程度,动态调整发送窗口的大小,避免数据拥塞和丢失。
3. 流量控制:接收方通过发送窗口的大小,控制发送方的数据发送速率,防止数据过载。
滑动窗口协议

滑动窗口协议引言在计算机网络中,滑动窗口协议是一种常用的数据传输协议,用于确保可靠的数据传输。
本文将介绍滑动窗口协议的基本概念、工作原理以及应用场景等内容。
滑动窗口协议的基本概念滑动窗口协议是一种基于窗口的流量控制协议。
在数据传输过程中,发送方和接收方都维护着一个固定大小的窗口,用于管理待发送的数据和已接收的数据。
滑动窗口协议的工作原理滑动窗口协议的工作原理可以简单地描述为以下几个步骤: 1. 发送方将待发送的数据分割成若干个数据包,并按顺序发送。
2. 接收方接收数据包,并发送确认信息给发送方。
3. 发送方收到确认信息后,将窗口向前滑动一个单位,继续发送下一个数据包。
4. 如果接收方未收到某个数据包,或者数据包有错误,将请求发送方重新发送该数据包。
滑动窗口协议的优势相比于其他传输协议,滑动窗口协议具有以下优势: 1. 可靠性:滑动窗口协议通过确认机制和重传机制,能够确保数据的可靠传输。
2. 流量控制:通过窗口大小的控制,滑动窗口协议可以有效控制数据传输的速率,避免数据的丢失和网络拥塞。
3. 高效性:滑动窗口协议支持并行发送多个数据包,提高了数据传输的效率。
滑动窗口协议的应用场景滑动窗口协议广泛应用于各种数据传输场景,包括但不限于: 1. 文件传输:在文件传输过程中,滑动窗口协议可以确保文件的完整性和正确性。
2. 视频流传输:通过滑动窗口协议,可以实现对视频流的实时传输和播放。
3. 数据库同步:在数据库同步过程中,滑动窗口协议可以确保数据的一致性和可靠性。
总结滑动窗口协议是一种常用的数据传输协议,通过窗口管理机制,实现了数据的可靠传输和流量控制。
它具有可靠性、高效性和流量控制等优势,并在文件传输、视频流传输和数据库同步等场景中得到广泛应用。
熟悉滑动窗口协议的工作原理和应用场景,对于网络通信的设计和优化具有重要意义。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、引言滑动窗口协议是一种用于数据传输的协议,其主要目的是在发送方和接收方之间建立可靠的数据传输通道。
该协议通过使用滑动窗口的概念来实现数据的流控制和错误恢复。
二、协议背景随着网络通信的发展,数据传输的可靠性和效率成为了重要的问题。
传统的数据传输方式存在着丢包、重传等问题,因此需要一种更可靠、高效的协议来解决这些问题。
滑动窗口协议应运而生。
三、协议原理1. 数据分段:发送方将要传输的数据按照一定的大小进行分段,并为每个数据段分配一个序号。
2. 窗口大小:发送方和接收方都维护一个滑动窗口,窗口大小表示当前可以发送或接收的数据段的数量。
3. 发送方操作:a. 发送窗口:发送方将窗口内的数据段发送给接收方,并等待接收方的确认。
b. 接收确认:接收到接收方的确认后,发送方将窗口滑动,并发送下一个窗口内的数据段。
c. 超时重传:如果发送方在一定时间内未收到接收方的确认,将会重传窗口内的数据段。
4. 接收方操作:a. 接收窗口:接收方接收到发送方发送的数据段后,将其存储在接收窗口中,并发送确认给发送方。
b. 确认重复:如果接收方收到重复的数据段,将会发送上一次确认的序号给发送方。
c. 有序交付:接收方将有序交付给上层应用的数据段,即按照序号顺序将数据段交付给应用层。
四、协议流程1. 发送方将要传输的数据按照一定的大小进行分段,并为每个数据段分配一个序号。
2. 发送方维护一个发送窗口,将窗口内的数据段发送给接收方,并等待接收方的确认。
3. 接收方接收到发送方发送的数据段后,将其存储在接收窗口中,并发送确认给发送方。
4. 发送方收到接收方的确认后,将窗口滑动,并发送下一个窗口内的数据段。
5. 如果发送方在一定时间内未收到接收方的确认,将会重传窗口内的数据段。
6. 接收方如果收到重复的数据段,将会发送上一次确认的序号给发送方。
7. 接收方将有序交付给上层应用的数据段,即按照序号顺序将数据段交付给应用层。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、引言滑动窗口协议是一种用于数据传输的协议,其主要目的是通过控制发送方和接收方之间的数据流量,实现可靠的数据传输。
本协议旨在确保数据的完整性、可靠性和顺序性,以满足任务要求。
二、协议概述滑动窗口协议基于数据包的发送和接收窗口的概念,通过动态调整窗口大小和确认机制来实现高效的数据传输。
发送方将数据划分为多个数据包,并按照顺序发送到接收方。
接收方通过发送确认消息来告知发送方已成功接收到数据包。
如果发送方未收到确认消息,将重传数据包,直到接收方正确接收到数据。
三、协议流程1. 建立连接阶段:1.1 发送方向接收方发送连接请求。
1.2 接收方收到连接请求后发送确认消息。
1.3 发送方收到确认消息后,建立连接。
2. 数据传输阶段:2.1 发送方将数据划分为多个数据包,并按照顺序发送。
2.2 接收方收到数据包后,发送确认消息。
2.3 发送方收到确认消息后,将发送窗口向前滑动一个位置。
2.4 如果发送方未收到确认消息,将重传数据包。
2.5 接收方收到重传的数据包后,丢弃重复的数据包。
3. 连接关闭阶段:3.1 发送方向接收方发送连接关闭请求。
3.2 接收方收到连接关闭请求后发送确认消息。
3.3 发送方收到确认消息后,关闭连接。
四、数据包格式滑动窗口协议的数据包格式如下:| 序列号 | 数据长度 | 数据内容 |- 序列号:用于标识数据包的顺序。
- 数据长度:指示数据内容的长度。
- 数据内容:实际的数据内容。
五、窗口管理1. 发送窗口:用于存放待发送的数据包。
- 发送窗口大小:根据网络状况和接收方处理能力动态调整,保证可靠传输。
- 发送窗口滑动:每次接收到确认消息后,将发送窗口向前滑动一个位置。
2. 接收窗口:用于存放接收到的数据包。
- 接收窗口大小:根据发送方发送速率和接收方处理能力动态调整,避免数据丢失或溢出。
- 接收窗口滑动:每次接收到数据包后,将接收窗口向前滑动一个位置。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、引言滑动窗口协议是一种用于数据传输的协议,它通过分割数据流并设置窗口大小,实现了可靠的数据传输和流量控制。
本协议旨在确保数据的可靠传输,提高网络传输效率。
二、协议定义1. 数据分割:发送方将待传输的数据流分割为多个数据包,每个数据包的大小由发送方自行定义。
2. 窗口设置:发送方和接收方都设置一个滑动窗口,用于控制数据传输的流量。
3. 序列号:每个数据包都有一个唯一的序列号,用于标识数据包的顺序。
4. 确认应答:接收方收到数据包后,发送确认应答给发送方,以确认数据包的接收情况。
5. 超时重传:如果发送方在规定时间内未收到确认应答,则会将该数据包重新发送。
三、协议过程1. 发送方:a) 初始化:发送方设置窗口的大小、超时时间,并将待发送的数据流分割为多个数据包。
b) 发送数据:发送方将窗口内的数据包发送给接收方,并开始计时。
c) 等待确认:发送方等待接收方的确认应答,如果在超时时间内未收到应答,则进行超时重传。
d) 窗口滑动:当接收方发送确认应答时,发送方将窗口向前滑动,并发送窗口内的下一个数据包。
e) 数据重传:如果发送方在超时时间内未收到确认应答,则会将窗口内的所有数据包进行重传。
2. 接收方:a) 初始化:接收方设置窗口的大小,并准备接收数据。
b) 接收数据:接收方接收发送方发送的数据包,并发送确认应答给发送方。
c) 确认应答:接收方发送确认应答给发送方,以告知发送方数据包的接收情况。
d) 窗口滑动:当接收方接收到连续的数据包时,窗口向前滑动,并将接收到的数据传递给上层应用。
e) 数据重复:如果接收方收到重复的数据包,则丢弃该数据包,并重新发送上次确认应答。
四、协议特点1. 可靠性:滑动窗口协议通过确认应答和超时重传机制,确保数据的可靠传输。
2. 流量控制:发送方和接收方通过设置窗口大小,实现了对数据传输的流量控制,避免了网络拥塞。
3. 效率:滑动窗口协议通过窗口滑动和数据分割,提高了网络传输的效率,减少了传输延迟。
滑动窗口协议实验报告

滑动窗口协议实验报告1. 引言滑动窗口协议是计算机网络中用于实现可靠数据传输的一种协议。
其核心思想是使用一个窗口来管理发送方和接收方之间的数据传输进程,通过滑动窗口的机制来实现流量控制和错误恢复。
本实验旨在通过编写滑动窗口协议的模拟程序,深入理解该协议的工作原理及其在数据传输中的应用。
2. 实验环境本次实验采用C++语言进行编程,并在Windows操作系统下进行测试。
3. 实验过程3.1 窗口大小的确定首先,我们需要确定滑动窗口的大小。
在实际应用中,窗口大小需要根据网络状况来调整,以保证传输效率。
本次实验中,我们设置窗口大小为5。
3.2 发送方逻辑实现发送方负责将数据分割为若干个数据包,并发送给接收方。
发送方需要维护发送窗口的起始位置和结束位置,在每次发送数据包后,将发送窗口向前滑动一格。
如果接收窗口收到接收方的确认信息,发送方将收到确认的数据包从发送窗口中移除,并将窗口向前滑动一格。
3.3 接收方逻辑实现接收方需要维护接收窗口的起始位置和结束位置。
当接收窗口收到数据包时,接收方首先检查数据包的顺序是否正确,如果顺序正确,则将数据包保存并发送确认信息给发送方。
接收方随后将接收窗口向前滑动一格,等待下一个数据包的到来。
3.4 测试与验证在实验过程中,我们通过模拟网络传输的延迟、丢包等情况来验证滑动窗口协议的可靠性。
通过调整滑动窗口的大小以及模拟网络传输的不同情况,我们可以观察到滑动窗口协议在不同场景下的性能表现。
4. 实验结果分析通过实验,我们观察到滑动窗口协议在正常网络传输情况下,能够实现高效的数据传输。
当网络传输出现延迟或丢包时,滑动窗口协议能够通过重传机制和流量控制策略,确保数据的可靠传输。
在窗口大小适当的情况下,滑动窗口协议能够最大化利用网络带宽,提高数据传输的效率。
5. 实验总结本次实验通过编写模拟程序,深入理解了滑动窗口协议的工作原理及其在数据传输中的应用。
滑动窗口协议通过窗口的滑动机制,实现了对数据传输过程的控制和管理,从而保证了数据的可靠性和传输效率。
滑动窗口协议

实验目的
实现滑动窗口协议中的1bit滑动窗口协议,提供系统调用接口函 数
实验原理
滑动窗口协议(Sliding Window Protocol),属于TCP协议 的一种应用,用于网络数据传输时的流量控制,以避免拥塞 的发生。该协议允许发送方在停止并等待确认前发送多个数 据分组。由于发送方不必每发一个分组就停下来等待确认, 因此该协议可以加速数据的传输,提高网络吞吐量。
帧丢失测试
帧丢失测试—发送端
帧丢失测试—接收端
发送及接收过程
同帧校验和错误类似,帧丢失错误同样会引发接收端回送 nak否定应答消息。不同的是,nak否定应答帧是在丢失帧 的下一帧收到后发出的。如图5所示,由于传输过程中2号帧 丢失,接收端在收到1号帧后,接下来收到了3号帧,这时, 接收端知道由于某种原因2号帧丢失了,于是立即发送了2号 帧的否定应答帧。在发送端收到该nak2帧后,也马上重传了 该帧,nak机制同样加快了对丢失帧的重传操作。
程序没有模拟信道发生随机错误的情况,如果需要读者可以使用伪随机 函数自己添加这部分模拟代码。
帧校验错测试
在做新的测试前,首先将发送端和接收端进行重置,即两端 都先停止再重新开始,然后再做后续测试(如果需要,停止 后可以修改相关参数)。
帧校验错测试—发送端
帧校验错测试—接收端
发送及接收过程
通过手工设置2号帧的校验和错误来模拟信道传输中的误码 情况。可以看到接收方在收到2号错误帧后马上向发送方回 送了一个nak2的否定应答帧,发送方在收到nak2后也立即 重传了该帧,因此nak机制加速了错误帧的重传过程(否则 如果接收方直接丢弃的话,就只能等到发送方2号帧的重发 定时器超时后进行重传)
发送程序界面,同样有4个功能区
滑动窗口的仿真协议

计算机网络课程设计书学院计算机与信息工程学院专业网络工程课程名称计算机网络题目滑动窗口协议仿真完成期限自2015年6月23日至2015年6月29日共1周内容及任务一、项目的目的掌握滑动窗口协议的工作原理,并能够用所学计算机高级语言进行编程模拟其运行过程;培养学生的动手实践和思考能力。
二,项目任务的主要内容和要求(1)本次设计任务是根据滑动窗口协议的工作原理,在Visual C++ 6.0的平台上用C++语言编写一个基本TCP滑动窗口协议的模拟程序。
(2)要求该程序能够实现滑动窗口协议的发送和接收数据帧功能,在此功能上体现滑动窗口协议的运作。
(3) 程序按照滑动窗口协议实现端对端的数据传送。
包括协议的各种策略,如包丢失、停等应答、超时等都应有所仿真实现;(4) 显示数据传送过程中的各项具体数据。
双方帧的个数变化,帧序号,发送和接受速度,暂停或重传提示等;三、项目设计(研究)思路(1) 查阅相关资料,理解滑动窗口协议的工作原理;(2) 设计滑动窗口协议实现端对端数据传送的功能流程图;(3) 编写代码实现滑动窗口协议工作的模拟程序,包括包丢失、停等应答、超时等;(4) 测试程序功能的实现情况。
四、具体成果形式和要求(1)滑动窗口协议实现端对端数据传送的模拟程序。
(2)按照要求撰写课程设计报告并准备答辩。
进度安排起止日期工作内容2015.6.23-2015.6.24了解网络协议编程的基本知识;2015.6.25-2015.6.26了解滑动窗口协议的工作机制;2015.6.27-2015.6.28使用编程语言编写一个滑动窗口协议的模拟程序,按要求实现程序。
2015.6.29 最后汇总,调试,答辩主要参考资料[1] 谢希仁. 计算机网络[M]. 4版. 北京:电子工业出版社, 2003.[2] 李仁发.何彦. 基于虚拟实验方法的滑动窗口协议分析[J]. 系统仿真学报. 2002. 8 (14) ; 1026 - 1063.[3] 李建中,张冬冬. 滑动窗口规模的动态调整算法[J]. 软件学报. 2004. 12 (15) : 1800 - 1814.[4] 王栩,李建中,王伟平. 基于滑动窗口的数据流压缩技术及连续查询处理方法[ J ]. 计算机研究与发展. 2004. 10 (41) : 1639- 1644.[5] 特南鲍姆. 计算机网络(第四版). 清华出版社指导教师意见(签字):×年×月×日系(教研室)主任意见(签字):×年×月×日计算机网络课程设计说明书(封面)学院名称:计算机与信息工程学院班级名称:网络工程一班学生姓名:学号: 201321题目:滑动窗口协议仿真指导教师姓名:邵雪梅起止日期: 2015.6.23-2015.6.29第一部分:正文部分一,选题背景早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。
滑动窗口协议

实验四滑动窗口协议1、实验目的(1)掌握滑动窗口协议的概念、原理与基本算法。
(2)理解3种典型的数据链路层滑动窗口协议:l位滑动窗口协议、使用退后n帧的滑动窗口协议与使用选择性重传的滑动窗口协议。
(3)了解传输层与数据链路层滑动窗口协议的区别与联系,了解TCP滑动窗口协议的实现原理。
2、实验要求编程实现使用选择性重传策略的滑动窗口协议模拟程序:(1)所有功能应可视,具有简单的界面。
(2)由一台PC向另一台PC发送数据包,界面中应动态显示数据帧的发送和接收情况,以表明协议模拟程序的正确运作过程。
(3)当发送方速度过快或帧丢失时,接收方应发送消息,要求暂停或者重传。
接收方应按序向网络层提交接收到的帧。
(4)发送方应可设置发送速度、滑动窗口数目、停止等待等的超时时间间隔以及发送类型(用于模拟信道错误如正常发送,帧校验错,帧丢失)等参数。
3、实验环境微机一台、Visual Studio 6.0集成开发环境。
4、实验相关知识滑动窗口协议的流量控制:发送方窗口内的序列号代表已经发送但尚未确认的帧,一旦窗口达到最大值,发送方的数据链路层必须强行关闭网络层直到有一帧缓冲区可用为止。
接收方数据链路层的窗口对应于允许接收的帧。
任何落在接收窗口之外的帧都不加说明地丢弃。
滑动窗口协议的差错控制:使用后退n帧技术:接收端丢弃出错帧后所有的帧,而不管这些帧是正确的还是出错的;对应于接收窗口的尺寸为1的情况;如果信道错误率高,将会浪费大量的带宽。
选择性重传策略:信道出错时,接收方将存储所有跟在坏帧之后的正确帧,并只要求发送方重传出错的帧;对应于接收窗口大于1的情况。
两种差错控制策略的收发过程比较:5 系统实施5.1程序的主要流程图5.2主要过程关于发送端网络层数据流量的模拟:为了使协议模拟尽量简化,事先做两个假设:假设1:发送方的网络层总有数据需要发送;假设2:接收方没有反向流量,因此不能捎带确认,每次等待辅助定时器超时之后发送一个单独的确认帧(ACK或NAK)。
滑动窗口协议模拟

实验8滑动窗口协议模拟一、实验目的1.模拟实现滑窗协议在数据链路层上的数据传输过程,加深对滑窗协议的理解2.掌握滑动窗口协议基本原理与基本算法;二、要求:1.掌握滑动窗口协议的概念、原理与基本算法;2.实现“选择性重传策略或连续自动重传策略(后退N帧)”的滑动窗口协议模拟程序;3.了解传输层和链路层滑动窗口协议的区别与联系及TCP中滑动窗口协议的实现原理。
三、实验原理滑窗协议工作原理由于停等协议要为每一个帧进行确认后才继续发送下一个帧,大大降低了信道利用率,因此又提出来回退N帧的滑窗协议。
回退N帧协议中,发送方在发送完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。
由于减少了等待时间,必然提高通信的吞吐量和信道利用率。
回退N帧的滑窗协议(GO-DACK-N)基本原理是,当接收方检测出错的信息帧后,丢弃出错帧后的所有信息帧,而不管这些帧是否正确。
待发送方收到对出错帧的否定应答(NAK)时,将重发从出错后的所有数据帧;若应答帧出错,则超时重发。
因此,发送方在每发完一个数据帧时都要设置超时计时器。
只要在所设置的计时器超时而仍未收到确认帧,就要重发相应的数据帧,若等不到1号帧的确认应答而重发1号数据帧时,虽然发送方已经发送完3号帧,但仍必须将1号帧及其以后的各帧全部进行重传。
因此,后退N帧协议一方面因连续发送数据帧而提高了效率,但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传,这种做法又使传送率降低。
四、实验要求1.Windows XP环境下运行,程序在1~2台PC上运行。
2.具体实现的协议可以采用回退N帧技术或者选择性重发技术的协议。
3.采用.NET平台中的C#、C++或其他编程语言实现。
五、实验内容模拟滑窗协议的实现过程为;(1)程序客户端线程发送连接请求。
(2) 服务器连接并返回连接信息。
(3) 客户端发送数据帧(窗口大小自行设定)。
滑动窗口的仿真协议

滑动窗口的仿真协议协议名称:滑动窗口的仿真协议一、引言滑动窗口是一种常用的数据传输协议,用于在不可靠的通信信道上实现可靠的数据传输。
本协议旨在模拟滑动窗口协议的工作原理,并提供仿真实验的设计和执行方法。
二、背景滑动窗口协议是一种基于数据包的通信协议,常用于计算机网络和通信领域。
其主要特点是发送方和接收方维护一个滑动窗口,通过滑动窗口的滑动来实现数据的可靠传输。
三、目的本协议的目的是通过仿真实验,帮助学习者深入理解滑动窗口协议的工作原理,掌握滑动窗口协议的设计和实现方法。
四、实验设计1. 实验环境搭建a. 硬件要求:一台计算机或者虚拟机b. 软件要求:模拟器软件(如Cisco Packet Tracer、GNS3等)2. 实验步骤a. 设计拓扑结构:创建一个包含发送方、接收方和信道的拓扑结构。
b. 配置设备参数:设置发送方和接收方的IP地址、子网掩码、默认网关等参数。
c. 配置滑动窗口协议:在发送方和接收方的设备上配置滑动窗口协议的相关参数,如窗口大小、超时时间等。
d. 发送数据包:发送方向接收方发送数据包。
e. 数据包传输:模拟数据包在信道上的传输过程,包括丢包、延迟、重传等情况。
f. 数据包接收:接收方接收数据包,并发送确认消息给发送方。
g. 数据包处理:发送方根据接收到的确认消息进行相应的处理,如滑动窗口的滑动、重传等操作。
h. 实验结果分析:分析实验结果,统计数据包的传输成功率、延迟时间等指标。
五、实验执行1. 实验准备a. 搭建实验环境:根据实验设计中的步骤进行实验环境的搭建。
b. 确定实验参数:根据实验设计中的步骤,确定滑动窗口协议的相关参数。
2. 实验步骤a. 启动模拟器软件,并加载实验拓扑结构。
b. 配置设备参数:设置发送方和接收方的IP地址、子网掩码、默认网关等参数。
c. 配置滑动窗口协议:在发送方和接收方的设备上配置滑动窗口协议的相关参数,如窗口大小、超时时间等。
d. 发送数据包:发送方向接收方发送数据包。
滑动窗口协议实验报告

数据链路层滑动窗口协议实验报告1实验任务对实际系统中的协议分层和协议软件的设计与实现有基本的认识。
2实验内容利用所学数据链路层原理,自己设计一个滑动窗口协议并在仿真环境下编程实现有噪音信道环境下的可靠的双工通信。
信道模型为8000bps 全双工卫星信道,信道传播时延270 毫秒,信道误码率为10-5,信道提供字节流传输服务,网络层分组长度在240~256字节范围。
通过该实验,进一步巩固和深刻理解数据链路层的字节填充方式的成帧技术,误码检测的CRC 校验技术,以及滑动窗口的工作机理。
滑动窗口机制的两个主要目标:(1) 实现有噪音信道环境下的无差错传输; (2)充分利用传输信道的带宽。
在程序能够稳定运行并成功实现第一个目标之后,运行程序并检查在信道没有误码和存在误码两种情况下的信道利用率。
为实现第二个目标,提高滑动窗口协议信道利用率,需要根据信道实际情况合理地为协议配置工作参数,包括滑动窗口的大小和重传定时器时限以及ACK 搭载定时器的时限。
这些参数的设计,需要充分理解滑动窗口协议的工作原理并利用所学的理论知识,经过认真的推算,计算出最优取值,并通过程序的运行进行验证。
对实际系统中的协议分层和协议软件的设计与实现有基本的认识。
3编程环境利用仿真环境下所提供的物理层服务和定时器机制为网络层提供服务。
8.1程序的总体结构设数据链路层通信的两个站点分别为站点A和站点B,仿真环境利用WindowsXP环境下的TCP协议和Socket客户端/服务器机制构建两个站点之间的通信,其中,站点A为服务器端,站点B为客户端。
编译、链接之后最终生成的可执行程序(.exe文件)为字符界面命令行程序(不是图形界面程序)。
可执行程序文件仅有一份,设为datalink.exe,在WindowsXP 的两个DOS 窗口中使用不同的命令行参数启动两个进程,分别仿真站点A和站点B。
8.2实验环境所提供的文件和编译运行方法实验环境使用Visual C++ 6.0系统datalink.dsw,datalink.dsp:Microsoft VC6.0的工程文件,包括Win32 Debug和Win32 Release两种配置。
滑动窗口协议

滑动窗口协议一、协议概述滑动窗口协议是一种用于数据传输的协议,通过滑动窗口的机制实现可靠的数据传输。
该协议允许发送方将一定数量的数据分成多个数据包进行发送,接收方通过确认机制告知发送方已成功接收数据包,同时控制窗口大小来调整数据传输速率。
二、协议要求1. 可靠性:确保数据的完整性和准确性,防止数据丢失或损坏。
2. 效率:通过滑动窗口机制实现高效的数据传输,尽可能减少重传和延迟。
3. 可扩展性:支持动态调整窗口大小,适应不同网络环境和传输需求。
三、协议流程1. 发送方将待发送的数据分割成多个数据包,并按顺序编号,构成发送窗口。
2. 发送方发送窗口中的数据包,并启动定时器等待接收方的确认。
3. 接收方接收到数据包后,检查数据的完整性,如果正确则发送确认消息,同时将数据包交给上层应用。
4. 发送方收到确认消息后,将对应的数据包从发送窗口中移除,并根据接收方返回的确认信息调整窗口大小。
5. 如果发送方在定时器超时前未收到确认消息,则重新发送对应的数据包。
6. 发送方和接收方根据需要动态调整窗口大小,以优化数据传输效率。
四、协议数据包格式协议数据包由报头和数据两部分组成。
1. 报头格式:- 序号:用于标识数据包的顺序,保证数据包按序传输。
- 确认号:用于标识接收方期望接收的下一个数据包的序号。
- 窗口大小:用于告知发送方接收方当前可接收的数据包数量。
- 校验和:用于检测数据包是否损坏。
2. 数据格式:- 数据:待传输的数据内容。
五、协议控制机制1. 窗口滑动:发送方根据接收方返回的确认信息,动态调整发送窗口的大小,以提高传输效率。
2. 超时重传:发送方设置定时器,如果在定时器超时前未收到确认消息,则重新发送对应的数据包。
3. 确认机制:接收方收到数据包后发送确认消息,以告知发送方已成功接收数据。
4. 流量控制:接收方通过窗口大小控制来限制发送方的传输速率,以避免网络拥塞。
六、协议优化1. 滑动窗口大小的动态调整:根据网络状况和带宽情况,动态调整发送窗口的大小,以提高传输效率。
滑动窗口的仿真协议

滑动窗口的仿真协议协议名称:滑动窗口的仿真协议1. 引言本协议旨在描述滑动窗口的仿真过程,并规定了参与方的角色、通信流程、数据传输机制等内容,以确保数据的可靠传输和系统的稳定运行。
2. 参与方本协议涉及以下参与方:- 发送方(Sender):负责将数据分割为适当大小的数据包,并通过滑动窗口机制发送数据。
- 接收方(Receiver):接收发送方发送的数据包,并确认接收到的数据包。
- 网络(Network):承载发送方和接收方之间的数据传输。
3. 通信流程3.1 发送方初始化发送方在开始数据传输前,需要进行初始化操作。
具体流程如下:- 发送方设置滑动窗口的大小(窗口大小)和初始序列号(初始序号)。
- 发送方将待发送的数据分割为适当大小的数据包,并为每个数据包分配一个序列号。
- 发送方将窗口内的数据包发送给接收方,并启动计时器。
3.2 数据传输发送方通过滑动窗口机制将数据发送给接收方。
具体流程如下:- 发送方发送窗口内的数据包给接收方。
- 接收方接收到数据包后,进行校验和验证,如果数据包有误,则丢弃该数据包。
- 接收方发送确认(ACK)给发送方,确认接收到的数据包。
- 发送方收到确认后,将确认的数据包从窗口内移除,并向前滑动窗口。
- 如果发送方在一定时间内没有收到确认,认为该数据包丢失,将重新发送该数据包。
3.3 窗口滑动窗口滑动是滑动窗口机制的核心步骤。
具体流程如下:- 当发送方收到接收方的确认时,发送方将窗口内的数据包移除,并将窗口向前滑动。
- 发送方将新的数据包发送给接收方,并启动计时器。
4. 数据传输机制4.1 停等协议发送方发送一个数据包后,会等待接收方的确认,直到收到确认后才发送下一个数据包。
如果发送方在一定时间内没有收到确认,将重新发送该数据包。
4.2 滑动窗口滑动窗口机制允许发送方在等待接收方确认的同时继续发送新的数据包。
发送方维护一个窗口,窗口内的数据包已发送但未收到确认。
窗口的大小决定了发送方可以发送的数据包数量。
课程设计报告滑动窗口协议仿真

滁州学院课程设计报告课程名称:计算机网络设计题目:滑动窗口协议仿真系别:计算机与信息工程学院专业:计算机科学与技术组别:第五组起止日期:2011年11月24日~2011年12月7日指导教师:赵国柱计算机与信息工程学院二○一一年制课程设计任务书一. 引言二. 基本原理2.1 窗口机制2.21bit滑动窗口协议2.3 后退N协议2.4选择重传协议2.5流量控制三. 需求分析3.1 课程设计题目3.2 开发环境3.3 运行环境3.4 课程设计任务及要求3.5界面要求3.6 网络接口要求四. 详细设计4.1 结构体的定义4.2 发送方的主要函数4.3 接受方的主要函数五.源代码5.1 发送方的主要代码5.2 接收方的主要代码六. 调试与操作说明致谢[参考文献]课程设计的主要内容1.引言早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。
由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。
在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。
因此就有了滑动窗口机制来解决这些问题。
早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。
因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。
同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。
但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。
这时接收方只能对前2个帧发出确认。
发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。
为了解决这个问题,又提出了选择重传协议。
当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议协议目的:本协议旨在定义一种滑动窗口协议,用于在计算机网络中实现可靠的数据传输。
该协议通过滑动窗口机制,保证数据的有序性、完整性和可靠性。
协议内容:1. 协议参与方:- 发送方(Sender):负责将数据分割成合适的数据包,并发送给接收方。
- 接收方(Receiver):负责接收数据包,并按照顺序组装成完整的数据。
2. 协议流程:a. 发送方将待发送的数据分割成固定大小的数据包,并为每个数据包分配一个唯一的序列号。
b. 发送方维护一个滑动窗口,窗口大小为N。
初始时,窗口内的所有数据包都处于未确认状态。
c. 发送方将窗口内的数据包发送给接收方,并启动一个定时器。
d. 接收方收到数据包后,检查序列号是否与期望接收的序列号相符。
如果相符,则将数据包交给上层应用,并发送确认消息给发送方。
e. 发送方收到确认消息后,将对应的数据包从窗口中移除,并将窗口右移一位。
f. 如果发送方的定时器超时,发送方会重传窗口内的所有未确认的数据包。
g. 接收方收到重传的数据包时,会丢弃重复的数据包,并发送确认消息。
h. 发送方和接收方不断重复上述步骤,直到所有的数据包都被正确接收。
3. 协议特性:a. 有序性:接收方根据序列号将数据包按正确的顺序组装成完整的数据。
b. 完整性:接收方通过发送确认消息,确保所有数据包都被成功接收。
c. 可靠性:发送方通过定时器和重传机制,保证数据包的可靠传输。
d. 流量控制:发送方根据接收方的反馈信息,动态调整滑动窗口的大小,以适应网络状况。
e. 拥塞控制:发送方根据网络拥塞的程度,动态调整数据包的发送速率,以避免网络拥塞。
4. 协议优化:a. 窗口大小的选择:根据网络带宽和延迟等因素,选择合适的窗口大小,以达到最佳的传输效率。
b. 快速重传:接收方可以在连续收到多个相同序列号的确认消息时,快速重传对应的数据包,以提高传输效率。
c. 滑动窗口机制的优化:可以使用累积确认来减少确认消息的数量,从而提高传输效率。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、引言滑动窗口协议是一种用于在计算机网络中进行可靠数据传输的协议。
该协议通过将数据分割成小的数据包,并在发送方和接收方之间维护一个滑动窗口,以实现数据的有序传输和错误恢复。
二、协议概述1. 目的:滑动窗口协议的目的是确保数据在发送方和接收方之间的可靠传输,并能够在发生错误时进行恢复。
2. 工作原理:a. 发送方将待发送的数据分割成小的数据包,并按照顺序编号。
b. 发送方维护一个发送窗口,窗口的大小取决于网络状况和接收方的处理能力。
c. 发送方将窗口内的数据包发送给接收方,并等待接收方的确认。
d. 接收方接收到数据包后,将确认信息发送给发送方。
e. 发送方收到确认信息后,将窗口向前滑动一个位置,并发送下一个数据包。
f. 如果发送方在一定时间内未收到确认信息,则认为该数据包丢失,并重新发送。
3. 数据包格式:数据包由头部和数据部分组成,头部包含以下信息:- 序列号:用于标识数据包的顺序。
- 确认号:用于确认接收方已成功接收到的数据包。
- 校验和:用于检测数据包是否损坏。
- 其他控制信息:如数据包类型、窗口大小等。
4. 窗口管理:a. 发送方维护一个发送窗口和一个接收窗口。
b. 发送窗口用于存储已发送但未收到确认的数据包。
c. 接收窗口用于存储已接收但未按序交付给上层应用的数据包。
d. 发送方根据接收方发送的确认信息调整发送窗口的大小。
e. 接收方根据发送方发送的数据包的序列号调整接收窗口的大小。
5. 错误恢复:a. 发送方在发送数据包后启动一个定时器,如果在一定时间内未收到确认信息,则认为数据包丢失。
b. 发送方收到确认信息后,将定时器取消。
c. 发送方在定时器超时后重新发送未收到确认的数据包。
d. 接收方在接收到损坏的数据包时发送一个重传请求给发送方。
e. 发送方收到重传请求后,重新发送相应的数据包。
三、协议流程1. 发送方流程:a. 将待发送的数据分割成小的数据包,并按照顺序编号。
滑动窗口协议

滑动窗口协议协议名称:滑动窗口协议一、引言滑动窗口协议是一种用于数据传输的协议,它通过定义发送方和接收方之间的窗口大小和滑动窗口的移动来实现可靠的数据传输。
本协议的目的是确保数据在网络中的可靠传输,以满足任务名称中描述的需求。
二、术语定义1. 发送方:数据传输的发起方。
2. 接收方:数据传输的接收方。
3. 窗口大小:发送方和接收方之间的数据包传输窗口的最大容量。
4. 滑动窗口:发送方和接收方之间的可滑动的窗口,用于控制数据包的传输。
5. 序列号:数据包的唯一标识符,用于确保数据包的顺序传输。
三、协议规定1. 连接建立a. 发送方向接收方发送连接请求。
b. 接收方接收连接请求,并向发送方发送连接确认。
c. 发送方接收连接确认,连接建立成功。
2. 数据传输a. 发送方将数据分割为合适大小的数据包,并分配序列号。
b. 发送方将数据包发送给接收方。
c. 接收方接收数据包,并向发送方发送确认信息。
d. 发送方接收确认信息,并根据确认信息调整滑动窗口的大小和位置。
e. 发送方根据滑动窗口的位置重新发送未收到确认的数据包。
f. 接收方根据接收到的数据包的序列号将数据包按顺序组装。
3. 错误处理a. 发送方在超时时间内未收到确认信息,则重新发送未收到确认的数据包。
b. 接收方在收到重复的数据包时,丢弃重复的数据包并发送确认信息。
c. 发送方在收到确认信息时,确认接收方已正确接收数据包。
四、协议优化1. 滑动窗口大小的选择a. 根据网络状况和传输速度,动态调整滑动窗口的大小,以提高传输效率。
b. 可以使用拥塞控制算法来自动调整滑动窗口的大小,以防止网络拥塞。
2. 错误检测和纠正a. 可以使用校验和或循环冗余检测(CRC)来检测数据包的错误。
b. 可以使用前向纠错码(FEC)来纠正数据包的错误。
3. 流量控制a. 可以使用滑动窗口的大小和滑动窗口的移动来控制数据包的传输速率,以防止接收方无法及时处理大量数据包。
五、协议安全性1. 数据加密a. 可以使用加密算法对数据进行加密,以确保数据传输的安全性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络课程设计书计算机网络课程设计说明书(封面)学院名称:计算机与信息工程学院班级名称:网络工程一班学生姓名:学号: 201321题目:滑动窗口协议仿真指导教师姓名:邵雪梅起止日期: 2015.6.23-2015.6.29第一部分:正文部分一,选题背景早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。
由于大家不知道网络拥塞状况,一起发送数据,导致中间结点阻塞掉包,谁也发不了数据。
在数据传输过程中,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这就造成数据的丢失。
因此就有了滑动窗口机制来解决这些问题。
早期我们使用的是1bit滑动窗口协议,一次只发送一个帧,等收到ack确认才发下一个帧,这样对信道的利用率太低了。
因此提出了一种采用累积确认的连续ARQ协议,接收方不必对收到的帧逐个发送ack确认,而是收到几个帧后,对按序到达的最后一个帧发送ack确认。
同1bit滑动窗口协议相比,大大减少了ack数量,并消除了延迟ack对传输效率的影响。
但是,这会产生一个新的问题,如果发送方发送了5个帧,而中间的第3个帧丢失了。
这时接收方只能对前2个帧发出确认。
发送方无法知道后面三个帧的下落,只好把后面的3个帧再重传一次,这就是回退N协议。
为了解决这个问题,又提出了选择重传协议。
当接收方发现某帧出错后,继续接受后面送来的正确的帧,只是不交付它们,存放在自己的缓冲区中,并且要求发送方重传出错的那一帧。
一旦收到重传来的帧后,就可以将存于缓冲区中的其余帧一并按正确的顺序递交给主机。
本文主要介绍如何根据滑动窗口协议的原理,在Visual C++的平台上设计一个滑动窗口协议模拟程序,并最终使该程序得以实现。
本次程序设计分两部分:第一部分是发送方,第二部分是接收方。
通过发送方和接收方之间的数据帧传输模拟,学习滑动窗口协议控制流量的原理和方法,以及滑动窗口协议的工作机制。
二、设计理念2.1滑动窗口协议工作原理TCP滑动窗口用来暂存两台计算机间要传送的数据分组。
每台运行TCP协议的计算机有两个滑动窗口:一个用于数据发送,另一个用于数据接收。
发送端待发数据分组在缓冲区排队等待送出。
被滑动窗口框入的分组,是可以在未收到接收确认的情况下最多送出的部分。
滑动窗口左端标志X的分组,是已经被接收端确认收到的分组。
随着新的确认到来,窗口不断向右滑动。
滑动窗口算法工作过程如下:首先,发送方为每1帧赋一个序号(sequence number),记作SeqNum。
现在,我们忽略SeqNum是由有限大小的头部字段实现的事实,而假设它能无限增大。
发送方维护3个变量:发送窗口大小(send window size),记作SWS,给出发送方能够发送但未确认的帧数的上界;LAR表示最近收到的确认帧(last acknowledgement received)的序号;LFS表示最近发送的帧(last frame sent)的序号,发送方还维持如下的不变式:LAR-LFS≤SWS 。
2-1滑动窗口协议工作图窗口协议算法有三个功能:●在不可靠链路上可靠地传输帧●保持帧的传输顺序●支持流量控制2.2 选择重传协议在选择重传协议中,当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。
一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。
这种方法称为选择重发(SELECTICE REPEAT),其工作过程如图所示。
显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
2-2 选择重传协议原理图三、过程论述(1)发送方程序流程图:3-1发送方程序流程图(2)接收方程序流程图:3-2接受方程序流程图3.2 功能实现(1)发送方程序:本程序设有四个变量:一是窗口大小变量,二是第一帧序列号变量,三是最近发送的帧变量,最后一个是最近收到的确认帧变量。
swpstate1.head=NULL; //变量初始值为空swpstate1.sendq=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_slot);if(!swpstate1.sendq) exit(1);sendq_rear->next=NULL;printf("请输入窗口大小:");scanf("%ld",&swpstate1.sws); //输入窗口大小swpstate1.rws=swpstate1.sws; //把窗口大小的值赋给变量if (swpstate1.sws>0){printf("请输入第一帧的序列号:");scanf("%ld",&swpstate1.hdr.seqnum); //输入第一帧序列号}swpstate1.nfe=swpstate1.hdr.seqnum; //把第一帧的值放进缓冲池内sendp=(struct sendq_slot*) malloc (size of(struct sendq_slot));if(!sendp) exit(1);sendp->msg=swpstate1.hdr.seqnum;sendp->timeout=1;sendp->next=NULL;sendq_rear->next=sendp;sendq_rear=sendp;--swpstate1.sws;swpstate1.lfs=swpstate1.hdr.seqnum; //最近发送的帧取值r=swpstate1.hdr.seqnum; //最近收到的确认帧取值do{while(swpstate1.sws>0) //当窗口大小大于0时,执行以下的循环{sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot));if(!sendp) exit(1);sendp->msg=swpstate1.lfs+1; //如果输入的帧序号大于之前帧序号,那么窗口向前滑动sendp->timeout=1; //时延为1sendp->next=NULL;sendq_rear->next=sendp;sendq_rear=sendp;--swpstate1.sws;++swpstate1.lfs;}swpstate1.hdr.acknum=0; //ACK清空swpstate1.hdr.flags=0; //存储缓冲池清空printf("最近收到的ACK的帧序号:%ld\n",r);//输出最近收到的ACK帧序号printf("最近发送的帧序号(发送新帧后):%ld\n",swpstate1.lfs);//输出最近发送帧序号(2)接收方的接收原则从总体上看是先判断输入的数据帧是否在接收范围之内,若是,则继续判断是否符合其他接收条件;若不是,则马上丢弃该数据帧,不再进行其他条件的判断。
struct sendq_slot *sendq_rear,*sendp,*p3,*p4; //设定变量struct recvq_slot *recvp,*recvq_rear,*p1,*p2;if(swpstate1.hdr.flags==0)//上次输入的数据帧被放置在缓存区,输入区被清空{do //如果继续接收数据帧则实施下面循环{printf("请输入收到的数据帧号:");scanf("%ld",&a);if(a>=swpstate1.nfe&&a<=swpstate1.lfs) //判断数据帧应被接收或缓存{if(swpstate1.head==NULL){recvp=recvq_rear=(structrecvq_slot*)malloc(sizeof(structrecvq_slot));recvp->next=NULL;swpstate1.head=recvp;}elseif(swpstate1.head!=NULL){recvp=(struct recvq_slot*)malloc(sizeof(struct recvq_slot));recvp->next=NULL;recvq_rear->next=recvp;recvq_rear=recvp;}}else{printf("所输数据不在接收窗口内!");break; //跳出该循环}(3)若输入数据帧在接收范围内则继续判断并进行以下循环。
recvp->msg=a;if(recvp->msg==swpstate1.nfe) //是否放入缓存判断recvp->received=1;elserecvp->received=0;--swpstate1.rws;if(recvp->received==1) //数据帧被接收,则进行下面语句{ a=a-1;do{ a=a+1;if(swpstate1.head==NULL)break;p1=swpstate1.head;flag=0;while((a!=p1->msg)&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(a==p1->msg){flag=1;if(p1==swpstate1.head)swpstate1.head=swpstate1.head->next;else p2->next=p1->next;swpstate1.nfe=a+1;swpstate1.hdr.acknum=a+1;swpstate1.hdr.flags=1;}}while(flag==1);}printf("ACK号(期待的下一帧的序号):%ld\n",swpstate1.nfe);printf("没按序接受的序号:\n");p1=swpstate1.head;while(p1!=NULL){printf("%ld\t",p1->msg);p1=p1->next;}(4)当接收完一个数据帧时,我们可以选择终止下面的继续接收,也可以选择继续接收。
如果继续接收,那么程序跳到判断循环,继续判断是否接收下一个数据帧,原理与上面相当。