精华内容
下载资源
问答
  • 滑动窗口协议

    2014-06-12 16:09:43
    滑动窗口协议 go-back-n 代码加文档 课程 Projec Java实现
  • TCP Sliding Window滑动窗口协议演示动画,Flash播放,可以调整参数
  • 北邮计算机网络实验 选择重传 实验一:数据链路层滑动窗口协议的设计与实现 效率大于60%,采用CRC校验技术,网络层分组长度固定为256字节
  • 计算机网络 课程设计 滑动窗口协议模拟 java 小程序实现计算机网络 课程设计 滑动窗口协议模拟 java 小程序实现
  • 计算机通信网络--滑动窗口协议,代码,c语言实现。 vc++.
  • 北邮滑动窗口协议实验设计。滑动窗口协议--SDL设计;北邮滑动窗口协议实验设计。
  • 为方便起见,使用了STL,使用时注意全局变量在不同函数中尽量不要重复。代码为GBK编码
  • 其中设为1相当于使用后退n帧技术的滑动窗口协议,设为大于1的值则相当于使用选择性重传策略的滑动窗口协议。第2个参数为接收速率设定,编辑框中填入的是接收定时器的间隔时间,单位为ms,1000表示接收速率为每秒处理...
  • 利用所学数据链路层原理,自己设计一个滑动窗口协议并在仿真环境下编程实现有噪音信道环境下的 可靠的双工通信。信道模型为 8000bps 全双工卫星信道,信道传播时延 270 毫秒,信道误码率为 10-5,信道提供字节流传输...
  • C语言模拟滑动窗口协议

    热门讨论 2010-12-16 18:46:05
    能输入窗口大小,传输的第一个字节号,能实现滑动窗口的动态滑动过程,发送方发送字节,接收方将按顺序接受的字节直接交给上层程序,错序的字节先储存在链表中,等到它之前的字节顺序到达后再一起交给上层程序。...
  • 设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道两站点间无差错双工通信 信道模型 8000bps全双工卫星信道 单向传播时延270毫秒 信道误码率为10-5 物理层接口:提供帧传输服务,帧间有1ms帧边界 网络层属性:...
  • 滑动窗口协议(GBN, SR)

    千次阅读 2021-10-22 15:59:28
    文章目录前言一、流水线协议二、滑动窗口协议1.GBN(回退N重传协议)2.SR(选择重传协议)总结 前言 提示:以下是本篇文章正文内容 一、流水线协议 我们知道Rdt 3.0: 停等操作过程中浪费了大量的时间: 从而在Rdt ...
      
    


    前言


    提示:以下是本篇文章正文内容

    一、流水线协议

    我们知道Rdt 3.0: 停等操作过程中浪费了大量的时间:
    在这里插入图片描述

    从而在Rdt 3.0上引入了流水线机制:为了提高资源利用率
    在这里插入图片描述
    流水线协议:
    允许发送方在收到ACK之前连续发送多个分组,更大的序列号范围,同时发送方和/或接收方需要更大的存储空间以缓存分组

    如图:
    在这里插入图片描述

    二、滑动窗口协议

    滑动窗口协议:发送方和接收方各有一个缓存数组,发送方存放着:已发送且成功确认包序号、已发送未确认包序号 ,未发送包序号。接收方存放着:已接受包序号、正在接收包序号、未接收包序号。每个数组有个两个扫描指针,开头和结尾,一起向后扫描,两者形成一个窗口,所有被称为窗口协议

    滑动窗口协议(Sliding-window protocol)主要有两类协议:GBN(go-Back-N,回退N重传协议), SR(selective repeat,选择重传协议)

    在这里插入图片描述

    窗口:允许使用的序列号范围,窗口尺寸为N:最多有N个等待确认的消息

    滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动

    1.GBN(回退N重传协议)

    GBN内容:
    (1)分组头部包含k-bit序列号

    (2)窗口尺寸为N,最多允许N个分组未确认
    在这里插入图片描述

    (3)确认ACK(n): 确认到序列号n(包含n)的分组均已被正确接收,可能收到重复ACK
    注:接收者仅发送累计的确认 ,如果中间有数据缺失,就不予以确认

    (4)为传输的分组设置计时器(timer),若超时Timeout(n): 重传序列号大于等于n,还未收到ACK的所有分组

    发送方扩展FSM:
    在这里插入图片描述
    发送数据时要判断窗口是否已经满了

    接收方扩展FSM:
    在这里插入图片描述
    ACK机制: 发送拥有最高序列号的、已被正确接收的分组的ACK,可能产生重复ACK,只需要记住唯一的expectedseqnum, :接收方标记下一个按序接收的分组的序号

    若乱序到达的分组:
    1.直接丢弃,接收方没有缓存
    2.重新确认序列号最大的、按序到达的分组

    示例:
    在这里插入图片描述

    窗口大小为4,发送方发送数据包0,1,2,3,然后进入等待状态,其中数据包2丢失,接收方返回Ack0,1,窗口滑动继续发送包4,5,此时包2计时超时,默认数据包2没有收到,按照GBN,发送方重新发送数据包2,3,4,5。这里可以看出数据包重复了。

    练习题:数据链路层采用后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是多少?分别是那几个帧?

    根据GBN协议工作原理,GBN协议的确认是累积确认,不会管中间所丢的数据包,所以,此时发送端需要重发的帧数是4个,依次分别是4、5、6、7号帧

    2.SR(选择重传协议)

    SR内容:
    (1)接收方对每个分组单独进行确认, 设置缓存机制,为了缓存乱序到达的分组,发送方就不会再次发送,限制已发送且未确认的分组

    发送/接收方窗口
    在这里插入图片描述

    (2)如果计时器到点, 仅重传该个未确认的数据报

    (3)发送方窗口,N个连续的序列号, 发送者在流水线中最多有 N 个未确认的数据报

    示例
    在这里插入图片描述
    滑动窗口的大小为4,发送数据包0,1,2,3,窗口满了,停止发送,等待确认,其中数据包2丢失,依次确认数据包0,1,同时窗口向后移,依次发送数据包4,5,当数据包2超时,发送方会再次发送数据包2,同时缓存乱序到达的3,4,5,当接收完数据包2后,滑动窗口后移,发送方继续发送数据包

    序列号空间大小与窗口尺寸需满足
    在这里插入图片描述
    若序号位数k位(SR协议),发送窗口和接收窗口尺寸最大是2**-1,即序号空间一半。

    避免发生接收序号重叠,出现重复分组


    总结

    提示:这里对文章进行总结:

    停等(stop-and-wait )协议:发送方发送数据,然后等待接收方通过ACK或者NAK反馈

    流水线协议(Pipelined protocols):允许发送方发送多个分组而无需等待确认

    解决流水线的差错恢复有两种基本方法(滑动窗口协议):
    1.回退N步(Go-Back-N,GBN):回退N步,接收方则是只接受最小的未接受帧,对错序到达帧,都丢弃

    2.选择重传(selective repeat,SR):只重传丢失的帧,乱序到达的帧缓存起来

    展开全文
  • 北邮 计算机网络课程实验 滑动窗口协议 选择重传协议与go-back-n协议 压缩包内附实验报告与配套代码
  • 计算机网络——滑动窗口协议的窗口大小

    千次阅读 多人点赞 2019-04-27 11:44:21
    在学习滑动窗口协议的时候,我在链路层的滑动窗口这吃了不少苦头,因为动态的窗口变化真的不适合看老师发的pdf(话说老师为什么不能发PPT非得发PDF?) 虽然后来摸索着看懂了不少,但是到了窗口大小的问题上又蒙圈...

    在学习滑动窗口协议的时候,我在链路层的滑动窗口这吃了不少苦头,因为动态的窗口变化真的不适合看老师发的pdf(话说老师为什么不能发PPT非得发PDF?)

    虽然后来摸索着看懂了不少,但是到了窗口大小的问题上又蒙圈了。在GBN(go back n)和SR(select repeat)中,我迷糊了特别久,最后终于搞明白了两者的区别

    现在开始看问题:假设发送方和接收方约定好,发送的帧的编号总共有n=3位,也就是说,有三个bit可以用来作为帧的编号,那么就意味着,编号的范围是0~7

    一、GBN的发送窗口大小,应该小于等于7,即最大窗口大小<=(2^n)-1

        先看如果大于7,会是什么情况:假设窗口大小等于8:

        发送方给接收方发送了帧编号0A,1A,2A,3A,4A,5A,6A,7A,共计8个帧,接收方均收到,并处理后提交给网络层,并向发送方回馈ACK 0A~7A,并期待下一轮的8个帧0B~7B

    然而回馈电路被雷劈了,所以ACK全部丢失,接收方等了好久,没等到确认,认定自己工作失误,发出去的东西没有到达地点,于是重发了之前的0A~7A号帧

    但是接收方不知道自己的信道被劈了啊!他还以为自己的ACK(A系列)被对方接收到了,还在喜滋滋等着第二波新帧,没想到来的居然还是上一批老人物。但是接收方脸盲啊,不把熟人当兄弟,一看来的还是八位大爷,打头的正好编号和自己需要的一样,也看不出是不是新来的,就还是全部接收并传给了网络层

    这不就出错了吗!

    所以我们得想办法防止这种事出现:

    窗口如果等于7,就不会有这种狗东行为出现:

    发送方发出0A,1A,2A,3A,4A,5A,6A共计7个帧,接收方还是接收并发送A系列的ACK,且依旧全部丢失,发送方超时重传0A~6A

    但是这次情况不同了!

    接收方发现来的人虽然数量没变,但是编号对不上了啊!自己等的带队的是7爷,怎么来的是0爷?来的人不对,混日子的不是我的兄弟,不收!

    于是数据传输断裂,但至少不会出错了……最后黑锅由闪电完美背起,鼓掌

     

    二、选择重传SR的发送窗口大小,应该小于等于4,即最大窗口大小<=2^(n-1)

    为什么同样是滑动窗口,你GBN的就可以比我大,我就得比你小?你说你演的比我好,要不你上来咱们比比?刚刚我来的时候还有小朋友问我……不对,串场了

    问题的关键在于:选择重传是可以“跳着传”的。

    现在我们看,如果SR和GBN的窗口大小一样,会是什么情况

    在同样遇到帧丢失的时候,假设我们发送了0~6号帧,并且倒霉的丢掉了2号帧,GBN协议里,接收方没有收到2号帧,就不会发送2号帧的ACK,发送方直接把2到6号全部重传,接收方也不需要担心会不会有重复数据,因为第一批来的3号到6号帧因为少了2号帧,在接收方看来就是一堆废物,直接给丢了去换新的,充分体现了某资本主义大国的浪费作风,需要点名批评。

    现在看SR的协议

    SR的协议有两个特点

    1.不需要重发错误帧到结尾帧的所有帧,只需要重发错误的2号帧即可,充分体现了社会主义的勤俭节约习惯,点名表扬

    2.如果2号帧没有到,那么3~6号虽然会被保留下来,但也不会被传到网络层。一个帧如果能够被传到网络层,前提是比他小的序号的帧都已经被传输到网络层了,类似“让小孩先走”的道理。

    所以在2号帧丢失这个问题上,SR和GBN似乎都不会出太大问题

    但是还有一种情况:如果和(一)中的问题一样,接收方的ACK全部丢失,会是什么情况?

    GBN中,由于直接丢弃+重传,不会受到影响。

    但是SR似乎没有这么乐观:假设接收方已经将0A到6A号传给了网络层,但是ACK全部丢失,那么发送方只好重传0A到6A了

    但是接收方等待的是7A,0B,1B,2B,3B,4B,5B,一看发送方发来的东西,虽然不是完美贴合我想要的七个葫芦娃们,但是似乎有6个也是编号0到5的……不管来的·是小矮人还是葫芦娃,只要编号对上了,就是我的人……呸,我的帧了。

    于是0A到5A又一次被纳入后宫,数据出错

    但是如果发送方窗口只有四个呢?

    发送方发来了0A到3A,依然没有收到ACK,重发0A~3A

    接收方苦等4到7的编号帧,一看发来的一个都没有符合的,不收不收

    皆大欢喜,完美!

    展开全文
  • 北邮的滑动窗口协议 C源代码清单 int tcp mem schedule struct sock sk int size int kind { int amt TCP PAGES size ; sk >forward alloc + amt TCP MEM QUANTUM; atomic add amt &tcp memory ...
  • Tcp滑动窗口协议简介

    2021-02-19 15:31:33
    滑动窗口---流量控制 提供tcp的可靠性 提供tcp的流控特性 tips:描述接受方数据报缓存区的大小,发送方根据这个大小来确认发送多少数据。 面向流的可靠性传输----->>确认重传机制 发送...

    窗口机制

    • 固定窗口(存在问题)

      • 固定值太小:每次传输都要确认,不停的确认,造成很大的延迟

      • 固定值太大:假如处理方处理不过来的话,每次传过来的还是相同的值,造成链路拥塞。

    • 滑动窗口---流量控制

      • 提供tcp的可靠性

      • 提供tcp的流控特性

    tips:描述接受方数据报缓存区的大小,发送方根据这个大小来确认发送多少数据。

    面向流的可靠性传输----->>确认重传机制

    • 发送窗口只有收到对端对于本段窗口字节的ACK确认才会移动窗口的左边界,
    • 接受窗口只有在前端的所有的段都确认的情况下才会接移动左边界,当前面还有字节未接受,但收到后面的字节的时候,窗口不会移动,不会对后续的进行确认。

    TCP的滑动窗口是动态的,应用程序在需要的时候,通过api通知tcp协议栈动态的改变窗口的大小,然后在下次发送的时候包含新的窗口的大小给对端,对端按照通知的窗口来改变窗口的大小。

    展开全文
  • 对于计算机网络中滑动窗口协议的仿真实现。
  • TCP之滑动窗口协议(动画演示)

    千次阅读 2020-04-30 10:22:41
    滑动窗口引入 IP层协议属于不可靠的协议,IP层并不关心数据是否发送到了对端 ,TCP通过确认机制来保证数据传输的可靠性 ,在比较早的时候使用的是send–wait–send 的模式,其实这种模式叫做stop-wait模式 ,发送...

    装载!!!!!!!

    1. CSDN博主的《解析TCP之滑动窗口(动画演示)》,网址:https://blog.csdn.net/yao5hed/article/details/81046945?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
    2. CSDN博主的《TCP-IP详解:滑动窗口(Sliding Window)》,网址:https://blog.csdn.net/wdscq1234/article/details/52444277

    该文章只是对两个文章的内容的总结,主体内容来自这两个部分

    b站上有一个视频比较nice的可视化了滑动窗口的机制

    来自于up主 今天单词背了吗O_o 的tcp滑动窗口的完美解释,网址:https://www.bilibili.com/video/BV1FE411C7dk?from=search&seid=6007213953266071805



    1. TCP背景介绍

    从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流量控制的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义:

    1. Reliability ,提供TCP的可靠性 ,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。
    2. Data Flow Control ,提供TCP的流量控制 特性,管理发送数据的速率,不要超过设备的承载能力。
      为了能够实现以上2点,TCP实现了很多细节的功能来保证数据传输 ,比如说 滑动窗口适应机制 ,超时重传机制,累计ACK等,这次先介绍一下滑动窗口的一些知识点

    2. 滑动窗口引入

    IP层协议属于不可靠的协议,IP层并不关心数据是否发送到了对端 ,TCP通过确认机制来保证数据传输的可靠性 ,在比较早的时候使用的是send–wait–send 的模式,其实这种模式叫做stop-wait模式 ,发送数据方在发送数据之后会启动定时器,但是如果数据或者ACK丢失,那么定时器到期之后,收不到ACK就认为发送出现状况,要进行重传 。这样就会降低了通信的效率,如下图所示,这种方式被称为 positive acknowledgment with retransmission (PAR)
    在这里插入图片描述
    滑动窗口机制可以优化一下PAR效率低的缺点 ,比如我让发送的每一个包都有一个id,接收端必须对每一个包进行确认,这样设备A一次多发送几个片段,而不必等候ACK,同时接收端也要告知它能够收多少,这样发送端发起来也有个限制。当然还需要保证数据发送的顺序性,尽量不要乱序。可以允许一段时间内的乱序情况,比如说先缓存提前到的数据,然后去等待需要的数据,但是如果一定时间需要的数据还没来就DROP掉,不管他,继续进行下一个步骤。

    3. 滑动窗口机制的概念

    滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴 :TCP是双工的协议 ,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口 和一个接收窗口 。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口 要求相同

    滑动窗口解决的是流量控制 的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据overflow,流量控制解决的是这个问题。


    发送方的发送缓存内的数据 都可以被分为4类:

    1. 已发送,已收到ACK
    2. 已发送,未收到ACK
    3. 未发送,但允许发送
    4. 未发送,但不允许发送
      其中类型2和3都属于发送窗口

    接收方的缓存数据 分为3类:

    1. 已接收
    2. 未接收但准备接收
    3. 未接收而且不准备接收
      其中类型2属于接收窗口。

    窗口大小代表了设备一次能从对端处理多少数据 ,之后再传给应用层。缓存传给应用层的数据不能是乱序的,窗口机制保证了这一点。现实中,应用层可能无法立刻从缓存中读取数据。

    4. 滑动机制

    1. 发送窗口只有收到发送窗口内字节的ACK确认 ,才会移动发送窗口的左边界。
    2. 接收窗口只有在前面所有的段都确认的情况下才会移动左边界 。当在前面还有字节未接收但收到后面字节的情况下,窗口不会移动,并不对后续字节确认。以此确保对端会对这些数据重传。
    3. 遵循快速重传、累计确认、选择确认等规则
    4. 发送方发的window size = 8192;就是接收端最多发送8192字节,这个8192一般就是发送方接收缓存的大小。

    5. 滑动窗口机制的模拟程序

    模拟程序,网址:http://www.exa.unicen.edu.ar/catedras/comdat1/material/Filminas3_Practico3.swf

    稍微有缺陷 :1. 丢包率如果设得太高,有时无论重发多少次都不能恢复正常 2. 窗口最大可为10,其实应该为9

    明确发送端和接收端,发送A~S数据包 ,我们不会 从头到尾分析,因为过程比较长。

    1. 简化了窗口大小,双方窗口大小都一直是4。
    2. 设置一定的丢包率,否则没什么值得分析的,包括sender发送的数据包和receiver回复的ACK包。
    3. 简化重传机制,出现丢包则直接重传,不等3个冗余ACK和超时。
    4. 既不是选择重传也不是退回N步,重传的包是随机的发。

    5.1 具体分析

    1. 首先发送端发送A,B,C,D四个包,但是A,B丢失,只有C,D到达接收端。
      在这里插入图片描述

    1. 接收端没有收到A,所以不回复ACK包。发送端重传A,B,C,D四个包,这次全都到达了。
      在这里插入图片描述

    1. 接收端先获得A,发ACK包A,但是中途丢失;获得B后,根据累计确认的原则,发D的ACK包,然后窗口滑动。再次获得C,D后,连续回复2个D的ACK包,其中C对应的ACK包丢失。
      在这里插入图片描述

    1. 发送端连收2个D的ACK包,说明4个包对方都已收到,窗口滑动,发E,F,G,H包,其中G包丢失。现在整个序列的状态:ABCD是已发送已确认,EFGH是已发送未确认,I~S是不能发送。
      在这里插入图片描述

    1. 接收端先收到E,发ACK包;收到F后发F的ACK包;未收到G,还是发F的ACK包;收到H,还是发F的ACK包。不幸的是,三个ACK包全都丢失。
      在这里插入图片描述

    1. 发送端收到E的ACK包,窗口向右滑动一位;然后再发送F,G,H,I,其中F丢失。
      在这里插入图片描述
    2. 接收端获得I,因为没有G,只好回复F的ACK包。相继收到G,H包。
      在这里插入图片描述

    1. 接收端根据累计确认,连发两个I包,其中H对应的丢失。窗口向右滑动。
      在这里插入图片描述

    1. 发送端接收I的ACK包后,向右滑动四位。发送J,K,L,M四个包,后面不再分析。
      在这里插入图片描述

    从上面的过程中,我们可以得到以下结论 TCP连接是通过数据包和ACK实现的,我们作为第三者可以看到双方发包的过程,但接受者在收到之前不知道发送方发的是什么,同样的,发送方在收到ACK前也不知道对方是否成功接收。

    1. 发送方没有收到接收方发回的ACK,就不能向右滑动 。假设发送方向接收方发了ABCD就滑动,只要对方没收到A,就不能滑动,那么就会出现二者不同步的局面。
    2. 滑动窗口提高了信道利用率 ,TCP是发送报文段为单位的,假如每发一个报文就要等ACK,那么对于大数据包,等待时间就太长了。只要发送的报文在滑动窗口里面,不用等每个ACK回来就可以向右滑动。本例中,开始接收端空着AB,只有CD,此时不能滑动;之后接收到EF和H,直接向右滑动2位,不必等G到位。
    3. 窗口大小不能大于序号空间大小的一半 。目的是为了不让两个窗口出现交迭 ,比如总大小为7,窗口大小都为4,接收窗口应当滑动4,但只剩3个序号,导致两个窗口交迭。
    4. 有一种情况没出现 :发送方发ABCD,接收方都收到然后向右滑动,但回复的ACK包全丢了。发送方未收到任何ACK, timeout后会重发ABCD,此时的接收方按累计确认的原则,收到ABCD后只会重发D的ACK,发送方收到后向右滑动。

    6 对比滑动窗口和拥塞窗口

    滑动窗口是控制接收以及同步数据范围的,通知发送端目前接收的数据范围,用于流量控制,接收端使用 。拥塞窗口是控制发送速率的,避免发的过多,发送端使用。因为tcp是全双工,所以两边都有滑动窗口
    两个窗口的维护是独立的,滑动窗口主要由接收方反馈缓存情况来维护 ,拥塞窗口主要由发送方的拥塞控制算法检测出的网络拥塞程度来决定的

    拥塞窗口控制sender向connection传输数据的速率,使这个速率为网络拥堵状况的函数。

    展开全文
  • 一位滑动窗口协议模拟 c语言实现

    热门讨论 2011-12-12 10:18:36
    一位滑动窗口协议模拟 c语言实现,编译已经通过,可以自己添加主函数进行模拟实验。
  • 数据链路层滑动窗口协议,是解决数据链路层帧传送的速度问题,控制着数据的正确发送!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,631
精华内容 13,852
关键字:

滑动窗口协议