TCP的滑动窗口和拥塞控制

这篇具有很好参考价值的文章主要介绍了TCP的滑动窗口和拥塞控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

滑动窗口

1.发送窗口和接收窗口

2.滑动窗口的分类

停止等待协议:发送窗口大小 = 1, 接收窗口大小= 1

后退N帧协议(GBN):发送窗口大小 > 1,接收窗口大小 = 1

选择重传协议(SR) :发送窗口大小 > 1, 接收窗口大小 > 1

拥塞控制

慢开始算法和拥塞避免:

快重传和快恢复:


滑动窗口

滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。

TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据包,但有两种情况除外:

•一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。

•另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

1.发送窗口和接收窗口

发送窗口(swnd):

假设发送方可连续发送帧,那么发送窗口为发送方已发送但待确认帧的最大个数。

比如发送窗口为8,那么发送方如果已经有8个帧没有得到确认,就必须等待某个确认帧到达后才可以继续往下发送帧。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

接收窗口(rwnd):

它是TCP接收缓冲区,用于尚未由应用程序处理的传入数据。使用TCP头的窗口大小字段将TCP接收窗口的大小传达给发送方。该字段告诉发送方在接收到确认之前可以在线路上发送多少数据。如果接收器无法尽快处理数据,则接收缓冲区将逐渐填充,并且确认数据包中的TCP窗口将减少。这将警告发送方它需要减少发送的数据量或让接收方有时间清除缓冲区。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

2.滑动窗口的分类

滑动窗口分为三类:停止等待、后退N帧、选择重传。他们之间主要的区别就是:发送窗口和接收窗口大小的区别。

停止等待协议:发送窗口大小 = 1, 接收窗口大小= 1

发送方 A 发送数据, 每发送一帧就停止发送。并等待接收方 B 发送确认, 收到确认后 A 就发送下一帧。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

在传输时, 数据往往会出现差错, 对以下差错, 该协议会进行不同的处理。

(1)超时重传(针对 A 的差错情况)

若在发送过程中数据帧出现丢失或差错, 此时 B 不会收到数据帧或者丢弃收到的数据帧, 总之,B 不会发送确认。此时 A 会一直等待, 但不会超过设置的等待时间(通常会设置一个超时计时器)。 A 重传该数据帧。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

(2)确认丢失和确认迟到(针对 B 的出错情况)

确认丢失: 若 B 在回复确认时确认出现丢失, 则 A 也会一直等待, 也不会超过设置的等待时间。 A 重传该数据帧。且B 会丢掉重复的数据帧。重传确认。

确认迟到: 若 B 在回复确认时确认很久才到, 则 A 也会一直等待, 同样也不会超过设置的等待时间。 A 重传该数据帧。且B 也会丢掉重复的数据帧。重传确认。于是 A 正常收到来自重传的确认, 但是后面又收到迟到的相同的确认,A 收下但什么也不做。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

后退N帧协议(GBN):发送窗口大小 > 1,接收窗口大小 = 1

停止等待协议发一次就等待确认, 这样会使信道利用率太低, 于是, 我们可以让发送方连续分送多个协议。不用发一次帧就等待依次确认, 采用如下的流水线传输。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

为了让流水线传输可维持可靠传输的特性, 于是让发送方与接收到都维护一个滑动窗口

发送窗口:在发送窗口内发送连续帧

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

发送窗口所遇事件:

1.收到

动作:发送方收到累计确认并前移: 收到ACK,发送方会认为接收方已经收到n号帧和它前面的那些帧,发送窗口前移至下界到n下一格的位置

2.已发送数据帧(上图标橙部分)等待收到确认时间超时

动作:发送方重传已发送但未被确认的帧

3.数据帧全部发送(橙色部分全部占满窗口)

动作:发送方将数据返回给上层,过一会儿在发送

4.数据帧未全部发送(橙色部分未占满窗口)

动作:发送方按序拷贝一份数据并发送给接收方

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

这里需要注意的是累计确认超时重传,重传需要重传所有未被确认的帧。(这也是后退N帧协议名称的由来)主要是因为接收方累计确认的原因, 发送方不知道哪些帧被接收方收到了,具体细节在接收方窗口中细讲。

接收窗口:

后退N帧协议中位于接收窗口内的序号是接收方希望收到的下一个帧,(注: 后退N帧协议的接收窗口大小 =1 ,即只有窗口内只有 1 个数据)

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

接收窗口所遇事件:

1.收到位于窗口内的帧

动作:接收窗口前移一格,数据交付上层

2.按序(接收窗口收到希望收到的帧,窗口前移,下一个帧又是窗口希望收到的帧)

动作:收到几个帧后,对按序到达的最后一个帧发送确认(累积确认)

3.未按序收到帧

动作:丢弃该帧,并为最近按序收到的帧重发ACK

累计确认:

若未按序收到帧, 则丢弃该帧, 并且要重传最近按序收到的帧的ACK。这就是累计确认因此发送方的某帧超时未收到确认, 代表该帧出现问题, 后面的帧已经被丢掉了, 需要再传。

累计确认的确认方式为若有 发送, 则 n号帧和前面所有帧均已按序接收。(或:接收窗口停在 n 处则n−1 号帧和前面所有帧均已按序接收)

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

后退N帧协议滑动窗口大小

•首先需要明确的是,GBN协议中接收窗口的大小 =1
•其次,GBN协议中,对发送窗口的大小也有要求,若采用 n 比特编号,发送窗口的大小应满足:

这是因为发送窗口过大,会使得接收方无法区别新帧和旧帧。

选择重传协议(SR) :发送窗口大小 > 1, 接收窗口大小 > 1

后退N帧协议由于采取累计确认的方式, 重传所有未被确认的帧, 这样做在某些质量差的信道中会极大降低信道利用率。于是我们想只重传出错的帧, 这时我们需要加大接收窗口的长度, 缓存乱序到达的帧, 这就是选择重传协议(SR)。

发送窗口:位于发送窗口内的帧都可以连续发送出去

发送窗口所遇事件:

1.收到

动作:若n不为窗口下界(最左),则SR发送方将n窗口(n窗口为橙色)标记为已发送(图中为涂上黄色)。若n为窗口下界,则窗口下界移动至最左边未被确认的帧(橙色)处。

2.已发送数据帧(上图标橙部分)等待收到确认时间超时

动作:发送方重传该帧。(每个帧都有自己的超时器,一个帧超时只重传那一个帧)

3.数据帧全部发送(橙色部分全部占满窗口)

动作:发送方将数据返回给上层,过一会儿再发送

4.数据帧未全部发送(橙色部分未占满窗口)

动作:发送方按序拷贝一份数据并发送给接收方

如图所示:假设 2 号帧超时, 只用重传 2 号帧。其他帧都收到确认了就不用重传了。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

接收窗口:位于接收窗口内的帧都可以被接收并发送确认, 而不会被丢弃。

接收窗口所遇事件:

1.收到位于窗口内的帧

动作:标记为已收到(黄色)并返回该顺的确认

2.从下界开始有连续被标记的帧

动作:向前滑动至没有被标记的帧处

3.接收到了小于窗口下界的帧

动作:返回一个ACK(注:接收方发送的 ACK 失,需要重传 ACK,其他情况忽略该帧)

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

总之, 这样设置滑动窗口可以不必重传所有帧, 只需重传已超时的帧即可。

滑动窗口协议的大小:

对于所有的滑动窗口协议,为了让窗口能区别新和旧,发送窗口同样有

对接收窗口而言,至少为 1,则

两不等式联立得tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

SR协议的滑动窗口的大小:

因为,对于所有的滑动窗口协议都存在tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

但是,对SR协议而言,接收窗口与接收窗口长度都不固定,当限制  时,且

时,两者之和绝对不超过 
且对SR协议,为提高传输效率,滑动窗口长度等于接收窗口长度,这样不会造成溢出(即发送了大于对方窗口上界的帧或 ACK),于是是最好的值,并且在实际应用中,最好有==

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

参考: 可靠传输协议—停止等待、后退N帧、选择重传 - 知乎 (zhihu.com)

拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏

这种情况就叫做拥塞(congestion)。
在计算机网络中的链路容量 (即带宽)、交换结点中的缓存和处理机等,都是网络的资源。

若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

慢开始算法和拥塞避免:

发送方维护一个叫做拥塞窗口cwnd的状态变量其值取决于网络的拥塞程度,并且动态变化

拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些

判断出现网络拥塞的依据: 没有按时收到应当到达的确认报文 (即发生超时重传)

发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd
维护一个慢开始门限ssthresh状态变量:
•当cwnd<ssthresh时,使用慢开始算法;

•当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法;

•当cwnd=ssthresh时,既可以使用慢开始算法,也可以拥塞避免算法;

(1)在TCP双方建立逻辑连接关系时,拥塞窗口的值被设置为1,并设置慢开始门限的初始值,这里采用16。

(2)在进行慢开始算法时,发送方每接收到一个对新报文段的确认时,就把拥塞窗口值成倍增加,并开始下一轮的传输。

(3)当拥塞窗口值增长到慢开始门限值时,就改用拥塞避免算法,由于发送方当前的拥塞窗口值是1,而发送窗口值=拥塞窗口值,因此发送方此时只能发送一个TCP报文段。即,拥塞窗口值是几,就能发送几个数据报文段。

现在我们通过展现拥塞窗口随传输轮次的变化来理解:

传输轮次:

发送方给接收方发送数据报文后,接收方给发送方发回相应的确认报文段,一个传输轮次所经历的时间其实就是往返时间。

注:往返时间并非是恒定的数值,使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个报文段的确认。

步骤一:

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

发送方到收到确认后,将拥塞窗口值+1(此时窗口值为2),这样拥塞窗口就可以发送2个数据报文段,当发送方收到2个报文段的确认后,将窗口值+2(2+2=4),接下来就可以发送4个数据报文段,以此类推....即拥塞窗口值为2,4,8,16

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

步骤二:

现在增大到了慢开始门限值,改用拥塞避免算法:

每个传输轮次结束后,拥塞窗口值只能线性+1,发送方给接收方发送17个数据报文段,若收到接收方返回的确认后,继续线性+1

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

如图所示:

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

步骤三:

当拥塞窗口为24时,若发送的数据报部分丢失,发送方就会对这些报文段进行超时重传,

并且确定网络出现拥塞,做一下操作:

1.ssthresh值更新为发生拥塞时cwnd值的一半,如图则为12

2.将拥塞窗口值减小为1,并重新开始慢开始算法,当拥塞窗口达到新的门限值时,则改用拥塞避免算法

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

注:

1.慢开始是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢

2.“拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

快重传和快恢复:

有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞这将导致发送方超时重传,并误认为网络发生了拥塞。于是发送方将拥塞窗口减少为1,并错误地启动慢开始算法,因而降低了传输效率。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

快重传:

所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传,采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。

这就要求接收端:

•接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;

•即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认

•发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。

例如

如图所示,接收方收到了M1和M2后都分别及时发出了确认。现假定接收方没有收到 M3但却收到了 M4。本来接收方可以什么都不做。但按照快重传算法,接收方必须立即发送对M2的重复确认,以便让发送方及早知道接收方没有收到报文段 M3。发送方接着发送 M5和 M6。接收方收到后也仍要再次分别发出对 M2的重复确认。这样,发送方共收到了接收方的 4 个对 M2的确认,其中后3个都是重复确认。快重传算法规定,发送方只要一连收到3 个重复确认,就可知道现在并未出现网络拥塞,而只是接收方少收到一个报文段 M3,因而立即进行重传 M3(即“快重传”)。使用快重传可以使整个网络的吞吐量提高约20%。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

快恢复:

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法。

•发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半; 开始执行拥塞避免算法•也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3。既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

注:在拥塞避免阶段,拥塞窗是按照线性规律增大的,这就是加法增大AI。而一旦出现超时或3个重复的确认,就要把门限值设置为当前拥塞窗口值的一半,并大大减小拥塞窗口的数值,这称为“乘法减小”MD,二者合起来就是所谓AIMD

例题:

一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT(往返时间)内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是(9KB)

tcp 拥塞窗口和滑动窗口,软考网工,计算机网络,网络,服务器,运维

注:题目未给出初始“慢开始门限值”,如图的传输轮次只是便于理解。文章来源地址https://www.toymoban.com/news/detail-846457.html

到了这里,关于TCP的滑动窗口和拥塞控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 网络编程(12): TCP重传、滑动窗口、流量控制、拥塞控制

    通过序列号和确认号确保可靠传输,当发送端发送数据给接收到,接收端会返回一个确认号,表示收到消息了 超时重传 :没有在指定时间内收到 ACK 报文 超时重传的两种可能: 数据包丢失 、 确认包丢失 超时重传时间 RTO : RTO 较大:重发就变慢了,丢包之后需要半天才能重

    2024年02月12日
    浏览(10)
  • 【网络】传输层——TCP(滑动窗口&&流量控制&&拥塞控制&&延迟应答&&捎带应答)

    【网络】传输层——TCP(滑动窗口&&流量控制&&拥塞控制&&延迟应答&&捎带应答)

    🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言: 你只管努力,剩下的交给时间! 上篇文章对TCP可靠性机制讲解了一部分,这篇文章接着继续讲解。 在上篇文章中,本喵讲解了TCP的确认应答机制: 如上图所示,主机A每发送一个数据段,主机B都要给一个 ACK 确认应答,

    2024年02月12日
    浏览(12)
  • TCP/IP网络参考模型(端口号、TCP滑动窗口、TCP拥塞控制、IP协议号、以太网帧)

    TCP/IP网络参考模型(端口号、TCP滑动窗口、TCP拥塞控制、IP协议号、以太网帧)

    目录 TCP/IP四/五层模型 应用层常见协议——传输数据PDU 传输层协议——传输数据段 端口号 TCP面向连接服务CONS  TCP报文格式 TCP数据传输——ACK确认机制 TCP会话建立——三次握手 TCP会话结束——四次握手 TCP流量控制——滑动窗口协议 TCP可靠传输机制 TCP拥塞控制 UDP无面向连

    2024年02月03日
    浏览(38)
  • 八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)

    八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)

    TCP巨复杂!同时在八股计算机网络中也经常被问到,必须会!这篇文章将让小白有个大体框架,知道怎么个事,面试中可以有话说,也能让佬更加巩固知识点。 TCP是一个可靠的传输协议,为了保证它的可靠性,出现七七八八的机制,它可能有数据的破坏、丢包、重复以及分片

    2024年04月25日
    浏览(9)
  • 【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

    【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

    正常情况下,TCP需要经过三次握手建立连接+四次挥手断开链接,下面看一个图: 服务器的状态变化: [CLOSED - LISTEN] 服务器端调用listen后进入LISTEN状态, 等待客户端连接; [LISTEN - SYN_RCVD] 一旦监听到连接请求(同步报文段), 就将该连接放入内核等待队列中, 并向客户端发送SYN确认

    2024年02月07日
    浏览(10)
  • TCP协议之滑动窗口和拥塞窗口

    TCP协议之滑动窗口和拥塞窗口

    如果发送一个新的包,需要等待上一个包的 ACK 回来之后才能发送,这样效率显然是很低的。也就是每经过一个 RTT(RTT指的是一个数据包从发送到接收到ACK确认包的花费时间,RTT是会随着网络的变化而变化) 的时间,我们只能发送一个包,假设一个 RTT 是 100ms,那在一秒中我

    2024年02月05日
    浏览(10)
  • 如何解决TCP窗口与拥塞? TCP窗口与拥塞控制的解决办法

    计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不

    2024年02月07日
    浏览(29)
  • 网路原理-传输层UDP,TCP/IP(确认应答,超时重传,连接管理,三次握手,四次挥手,状态转换,流量控制,滑动窗口,拥塞控制,延时应答,捎带应答,异常情况,面向字节流)-网络层(IP协议,地址管理)

    网路原理-传输层UDP,TCP/IP(确认应答,超时重传,连接管理,三次握手,四次挥手,状态转换,流量控制,滑动窗口,拥塞控制,延时应答,捎带应答,异常情况,面向字节流)-网络层(IP协议,地址管理)

    本节重点 • 理解传输层的作⽤,深⼊理解TCP的各项特性和机制 • 对整个TCP/IP协议有系统的理解 • 对TCP/IP协议体系下的其他重要协议和技术有⼀定的了解 我们之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应⽤层,都是为了 完成某项业务,如翻译等。

    2024年04月15日
    浏览(14)
  • 拥塞控制(TCP限制窗口大小的机制)

    拥塞控制(TCP限制窗口大小的机制)

            拥塞控制机制可以使滑动窗口在保证可靠性的前提下,提高传输效率         关于滑动窗口的属性以及部分机制推荐看TCP中窗口和滑动窗口的含义以及流量控制         看了上面推荐的博客我们已经知道了,由于接收方接收数据的能力有限,所以要通过流量控制的

    2024年02月11日
    浏览(15)
  • VRRP(软考网工知识点)

    VRRP(软考网工知识点)

    近些年来软考网工常考察VRRP 题型1: VRRP 技术实现(4)功能,交换机A与交换机B之间的连接线称为(5)线,其作用是(6).   答案: (4)当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备保证网络不中断 (5)心跳线。 (6)可以相互监视对方的状态,一旦对方出现故障宕机,

    2024年02月10日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包