`
wx1568520008
  • 浏览: 20448 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于ARQ与滑动窗口

 
阅读更多

TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。

一、ARQ协议

ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议,拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。

(1)停止等待ARQ协议

要想弄明白为什么TCP要使用连续ARQ协议,首先需要弄清楚停止等待ARQ协议的原理。

TCP 连接是全双工的连接,也就是说在通信的时候,双方既是发送方,也是接收方。下面为了简化问题,只考虑一方发送,一方接受的情况。其中,A作为发送方,B作为接收方。

1.无差错情况

A发送分组M1,发送完就暂停发送,等待B的确认。B收到M1就向A发送确认。A在收到了对M1的确认后,就再发送下一个分组M2。依次下去发送剩余的数据...如下图所示:
d7ad4c5bf730d695b20ac268962a22bb910.jpg

2.出现差错

如果A发送的过程中出现差错,B在接收M1时检测出了差错,就丢弃M1,其他什么都不做(也不会通知A收到有差错的分组)。又或者A传送的过程中分组丢失了,以上这两种情况下,B不会发送任何信息。 

既然说它是可靠传输协议,那自然有它可靠的方法:如果发生以上的情况,A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,所以它会重传刚刚的发送过的分组,也就是所谓的超时重传。 

超时重传的原理也很简单:发送方发送完一个分组后,就会设置一个超时计时器,如果超时计时器到期之前没有收到接收方发来的确认信息,则会重发刚发送过的分组;如果收到确认信息,则撤销该超时计时器。如下图所示:
052d0c492be77240a43c77c37622b042cae.jpg

这里应该注意的是:
①既然发送方发送的分组可能丢失或者有差错,可能需要重传,那么它必须暂时保留已发送的分组副本,只有收到确认后,才清除这个副本。

②分组和确认分组信息都应该有各自的编号,用来标示每一个分组和确认信息。(这样才知道需要发送哪个分组,收到了哪个分组的确认信息)

③超时计时器设置的时间应该略长于分组传送往返时间。
ca41282f6b8b79c84bbb78b2243a448cb89.jpg

3.确认丢失和确认延迟 

没有正常进行通信,除了发送方出现问题外,接收方同时也可能存在问题。

例如,如果A发送了M1分组,到达B,B发送了M1确认信息,但由于网络原因,该确认信息丢失。那么这个时候,A在超时重传时间内,没有收到B的确认信息,而且它并不知道是自己的分组有差错、丢失,还是B发生的确认丢失了。因此,A会在超时重传过后,重传M1分组。 

接收方B会采取这两个行动: 

①B会丢弃M1分组,不向上层交付。(B之前已经收到过M1分组了) 

②向A发送确认(因为A重发了,肯定重传时间内没有收到确认信息)
de046bd674ae108fa6c71f5b58aa30cd697.jpg

还有可能是另一种情况,就是B发送了确认,没有丢失,但是延迟了。也就是说,B发送的确认在A超时计时器过期后才到达。 这种情况下,A收到确认信息后会丢弃,然后重传刚才的分组,B收到后,丢弃重复的分组,并重传确认信息。

cd918400afeb74d84e63878972f85039aea.jpg

根据上述的确认和重传机制,我们就可以在不可靠的网络上实现可靠的传输。

4.信道利用率

停止等待ARQ协议的优点是简答,但也有很严重的确定,就是信道利用率太低。如下图所示:

e2340369986a73923c333ac92fa8f0422d9.jpg

信道利用率U = TD / (TD + RTT + TA)

(2)连续ARQ协议
由于停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

发送方采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发完一个分组就停下来等待对方确认。如下图所示:


08a04c86e2f71e5327a29c9c87079871b9e.jpg

连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:

 

 

7ccc2ec229ddd7673a382c3986816aa9ddf.jpg

图(a)是发送方维持的发送窗口,它的意义是:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。 

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。例如上面的图(b),当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,则现在可以发送窗口内的第6个分组。 

接收方一般都是采用累积确认的方式。也就是说接收方不必对收到的分组逐个发送确认。而是在收到几个分组后,对按序到达的最后一个分组发送确认。如果收到了这个分组确认信息,则表示到这个分组为止的所有分组都已经正确接收到了。 

累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是,不能正确的向发送方反映出接收方已经正确收到的所以分组的信息。比如发送方发送了前5个分组,而中间的第3个分组丢失了,这时候接收方只能对前2个发出确认。而不知道后面3个分组的下落,因此只能把后面的3个分组都重传一次,这种机制叫Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。

二、滑动窗口协议

滑动窗口协议在在发送方和接收方之间各自维持一个滑动窗口,发送发是发送窗口,接收方是接收窗口,而且这个窗口是随着时间变化可以向前滑动的。它允许发送方发送多个分组而不需等待确认。TCP的滑动窗口是以字节为单位的。

如下图所示,发送窗口中有四个概念::已发送并收到确认的数据(不在发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之内)、允许发送但尚未发送的数据(位于发送窗口之内)、发送窗口之外的缓冲区内暂时不允许发送的数据。

接收窗口中也有四个概念:已发送确认并交付主机的数据(不在接收窗口和接收缓冲区之内)、未按序收到的数据(位于接收窗口之内)、允许的数据(位于接收窗口之内)、不允许接收的数据(位于发送窗口之内)。
79a8dc878e39bc90fe35fe13784eb1f30d9.jpg

规则:

(1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。

(2)只有当发送方A收到了接收方的确认报文段时,发送方窗口才可以向前滑动几个序号。

(3)当发送方A发送的数据经过一段时间没有收到确认(由超时计时器控制),就要使用回退N步协议,回到最后接收到确认号的地方,重新发送这部分数据。

此外,TCP利用滑动窗口协议来进行流量控制,如下图所示:
f4db7505339fc4bf7a6ecf47f3676bf71b5.jpg

 

转载于:https://my.oschina.net/u/4167465/blog/3081001

分享到:
评论

相关推荐

    NS2实现滑动窗口协议

    在这个场景中,你提到的压缩包包含了关于如何使用NS2实现滑动窗口协议的相关资源,如实验报告、PPT、Flash演示、NS2代码以及仿真的mp4录像。 滑动窗口协议的核心思想是允许发送方在一个预设大小的窗口内发送数据,...

    滑动窗口协议模拟程序

    常见的滑动窗口协议有停等协议、选择重传ARQ(Automatic Repeat-reQuest)和Go-Back-N以及更高效的TCP的滑动窗口协议。 1. **停等协议**:这是最简单的滑动窗口协议,窗口大小为1。发送方发送一个数据包后必须等待...

    TCP 滑动窗口模拟VC++

    你可以创建一个模拟程序,通过控制发送和接收的缓冲区来实现滑动窗口和ARQ功能。程序可能需要处理以下关键步骤: 1. 创建套接字:使用Winsock库初始化套接字,并建立客户端与服务器之间的连接。 2. 设置窗口大小:...

    数据链路层的滑动窗口协议

    这个程序在模拟数据链路层CRC编码实验的基础上...按照滑动窗口要求,改变帧格式,采用3位二进制作为帧编号,连续ARQ协议,滑动窗口最大值7。并实现了连续发送和重发.人家花了一天时间才做出来的哦,问你要7分,不为过吧.

    第10章 滑动窗口协议模拟程序

    滑动窗口协议有多种变体,如停-等协议、Go-Back-N(GBN)和选择重传ARQ(Selective Repeat ARQ)。在停-等协议中,每次只发送一个数据包,然后等待确认。GBN允许一次性发送多个数据包,但只要有一个包丢失或错误,就...

    滑动窗口协议模拟.rar

    滑动窗口协议是计算机网络中数据传输的一种流量控制机制,主要应用于TCP/IP协议栈中,以确保数据的可靠传输和有效利用网络带宽。在这个"滑动窗口协议模拟.rar"压缩包中,包含了该协议的模拟实现程序,包括源代码、可...

    数据链路详解--滑动窗口信道利用率

    在数据链路层中,滑动窗口协议是一种流控制协议,用于管理发送方和接收方之间数据的传输。滑动窗口协议通过维护一组序列号来管理数据帧的发送和接收,其核心思想是在确保接收方能够处理数据的同时,尽可能提高链路的...

    计算机网络高级软件编程技术第10章 滑动窗口协议模拟程序源代码.rar

    本资源提供了第10章关于滑动窗口协议的模拟程序源代码,帮助学习者深入理解并实践这一协议的运作机制。 滑动窗口协议是一种流量控制策略,用于解决数据在网络中的有序传输和避免拥塞问题。它允许发送方在一个预设的...

    计算机网络 滑动窗口协议模拟java

    滑动窗口协议有两种主要类型:停等协议(Stop-and-Wait)和Go-Back-N(GBN)协议,以及更高级的选择重传ARQ(Automatic Repeat reQuest)协议,如选择重传滑动窗口(SR)。 在Java中实现滑动窗口协议,我们需要关注...

    UDPTrsmtFile.rar_UDP 文件_UDP可靠_文件传输_滑动窗口

    要实现无差错的传输数据,我们可以采用重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议。本文重点介绍滑动窗口协议,其它的两种有兴趣的可参考相关的网络通信之类的书。 采用滑动...

    滑动窗口协议和PPT课件.pptx

    以下是关于滑动窗口协议的详细解释: 1. 发送端的滑动窗口: 发送端设置一个发送窗口(WT),其大小决定了在未收到确认信息前可以发送的最大帧数。例如,如果WT为5,那么发送端可以在收到确认前发送5个数据帧。如...

    1bit滑动窗口及退后N帧的实现

    滑动窗口协议是一种改进的连续ARQ协议,它在发送端和接收端分别设定所谓的发送窗口和接收窗口。发送窗口用来对发送端进行流量控制,而发送窗口的大小就代表在还没有收到对方确认信息的情况下发送端最多可以发送多少...

    ARQ_s.rar_ARQ

    3. **选择重传ARQ(Selective Repeat ARQ)**:选择重传ARQ与滑动窗口协议类似,但更精细。它只对出错的帧进行重传,其他正确的帧不需要重传,这样可以避免因一个错误帧导致整个窗口内的帧都需要重传的情况。 4. **...

    北京邮电大学计网实验,模拟数据链路层的滑动窗口协议。.zip

    常见的滑动窗口协议有Go-Back-N(GBN)和选择重传ARQ(Selective Repeat ARQ)。 GBN协议采用固定大小的窗口,当窗口内的所有数据都得到确认或超时重传后,窗口才向前滑动。它简单易实现,但可能会浪费带宽,因为...

    滑动窗口流量控制PPT学习教案.pptx

    连续ARQ(自动重传请求)协议是滑动窗口流量控制的一种实现,它允许发送端连续发送多个帧,并在接收端出现错误时仅重传错误帧。例如,当接收端接收到帧AB并发现它们有误,它会丢弃所有后续帧,然后发送一个否定确认...

    滑动窗口 停止等待协议

    计算机网络的教学程序,很容易理解。实在停止等待ARQ协议的基础上改编的。

    ARQ程序的具体实现

    自动重传请求(auto repeat ...后两种协议是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议。三者的区别在于对于出错的数据报文的处理机制不同。

    ARQ_s_ARQ_发送_

    发送方代码可能涉及到滑动窗口管理、序列号跟踪和重传策略。 3. 选择重传ARQ:类似于Go-Back-N,但更高效。它只重传那些丢失或错误的数据包,而不是整个窗口。这需要更复杂的接收端和发送端状态管理,"ARQ_s.cpp...

    计算机网络ARQ协议模拟程序

    3. **选择重传ARQ(Selective Repeat ARQ)**:与Go-Back-N类似,也使用滑动窗口,但不同之处在于,只有发生错误的特定帧需要重传,而不是所有未确认的帧。这进一步优化了效率,避免了无谓的重传。 在C++实现ARQ...

Global site tag (gtag.js) - Google Analytics