# sliding-window-protocol **Repository Path**: wx_3623a1db3a/sliding-window-protocol ## Basic Information - **Project Name**: sliding-window-protocol - **Description**: 计网项目 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-05-17 - **Last Updated**: 2023-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python ## README # 设计要求: ## 1.Windows 环境下运行,程序应在1-2台PC上运行; ## 2.演示在两台计算机间传输文件。允许在同一台机器中用两个独立线程来模拟; ## 3.功能: ### 1)由一台PC(线程)向另一台PC(线程)发送数据包,界面应显示出双方帧个数变化,帧序号,发送和接受速度,暂停或重传提示等,界面中必须动态显示数据帧的发送情况和接受情况,包括在相应窗口详细显示相应的ACK和其他收发数据帧后发出的消息,以表明模拟协议的正确运作过程。 ### 2)接收方及发送方应具有按序收发帧的能力; ### 3)接受方应有固定大小的滑动窗口,并对收到信息缓存。当发送方速度过快或帧丢失(超时),接受方应发送消息,要求暂停或重传; ### 4)发送方发送速度应可以调节,并可以暂停或重发; ### 5)发送方重传时可仅重传帧(丢失帧); ## 4.以上几个功能应可视,要求有简单界面; ## 5.提交: ### 1)所有程序源代码,并可编译执行(现场检查、演示); ### 2)文档应包括原理概述,程序详细设计说明及收获建议部分,其中详细说明应包括程序流程,主要数据结构及主要函数说明。并需附上程序代码文件说明,即各个代码文件的用途。 ## 5.评分依据: ### (1)原代码是否可运行; ### (2)文档是否完备,清晰; ### (3)文档与程序代码是否一致; ### (4)程序容错性,健壮性。 # 项目介绍 ## 滑动窗口协议是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。本课题通过设计软件,实现对滑动窗口协议的模拟。 ### 1.运行时启动两个端口client 和server。其中sever 初始应该为监听状态; ### 2.可指定滑动窗口数目m(m=2n,n为大于1的整数)和要发送的帧总数,停等的超时时间间隔以及发送类型(正常发送,即没有缺帧和错序发送帧的现象),发送速率等参数; ### 3.client向server发起连接,成功则转入5; ### 4.client端发出帧,帧的内容可同序号 ### 5.选择发送类型为“缺帧”,模拟因网络拥塞造成丢帧的情况,开始发送情况同“正常发送”的情况。不同的是在帧x发送前用户可以选择丢失,则客户端继续接收帧x+1,x+2…并且对帧x+1,x+2…发出确认并缓存该帧; ### 6.服务器端等待一段相当长的时间(超时),重发帧x; ### 7.选择发送类型为“错序发送”。将一组待发送的帧按照指定(错序)顺序发送。具体实现同“缺帧”情况; ### 8.以上各种情况下,client和server窗口中应实时显示帧的发送和接受情况,包括序号,到达时间,内容等。以及窗口的填充和清空情况; ### 9.使用socket编程; ### 10.本项目实现一个简化的滑动窗口协议。对于所有包,在生成序列号后进行发送。接收方为每个包设定一个定时器,记录包的到达情况。如发送方发送速度过快,或某包定时器超时,则发送方应重发。接受方窗口满时,接受到的包应被拷贝至硬盘。