当前位置:首页 » 网络连接 » 计算机网络关于tcp拥塞窗口
扩展阅读
网络信号2g怎么变4g 2025-06-28 20:44:08

计算机网络关于tcp拥塞窗口

发布时间: 2022-09-05 23:07:15

❶ TCP(IV) 拥塞控制

网络中的路由器因无法处理高速到达的流量而被迫丢弃数据信息的现象称为拥塞。这里可能是因为路由器缓存较小或者处理不及时,虽然和流量控制时接收方的情况相似,但是这里有本质区别。因为后者是一对一的,几乎只影响一条连接;后者则影响多个连接。

当网络中大量的发送方和接收方被要求承担超负荷的通信任务时,可以采用 降低发送方发送速率 或者 丢弃部分数据 (也可二者结合)来降低拥塞。

通常来说,接收方没有一个精确的方法去知道中间路由器的状态。目前基本的方法有:

之前的文章提到,发送方为了适应接收方接受速度,设置了一个发送窗口来控制流量。同样的,当拥堵发生时,也需要控制发送速率,于是引入了一个窗口变量,来反映网络传输能力,称为 拥塞窗口 (Congestion window),记作 cwnd。很直观的,我们可以知道,发送端实际可用窗口 W 表示如下,其中 awnd 表示接收方窗口大小:

W = min(cwnd, awnd)

也就是说,还没有收到 ACK 的数据量(也称在外数据量)不能多于 W 。通常 W 以字节或包为单位。很明显, W 的值是在随时变化的,并且我们希望 W 接近一个最佳窗口大小——带宽延时积(Bandwidth-Delay Proct, BDP),BDP 表示某一时刻的在外数据量,但是确定一个连接的 BDP 也是一个难点。

当连接建立之初,还无法获知可用的连接资源,也无法确定 cwnd 初始值(有例外,就是之前文章里提到的目的度量)。这时候不应该直接大量快速的向网络中发送数据,因为会造成更严重的网络拥堵。获得 cwnd 最佳值的唯一方法就是以越来越快的速度发包,直到有数据包丢失(或网络拥堵)。可以考虑 慢启动 发送。在讨论具体算法之前,需要先了解 数据包守恒 的概念。

TCP 发送端的拥塞控制行为是由 ACK 的接收来驱动或“控制”的。并且链路的传输能力是固定的,当发送方接收到一个 ACK 时,就表示链路上多了一个“空位”,于是发送方可以再发送一个数据包。数据包守恒就是指链路中最大包的数量守恒。

当一个连接刚启动时,或者检测到重传超时导致的丢包时,需要执行慢启动 ; TCP 长时间处于空闲状态也可能触发慢启动。其目的是探寻到 cwnd 值已经帮助 TCP 建立 ACK 时钟。

TCP 发送一定数目的报文开始慢启动,该数目称为初始窗口(IInitial Window,IW)。为了简便,我们讨论 IW 为一个 SMSS (sender's MSS)的情况。意味着初始 cwnd 大小为 1 SMSS。

假设没有丢包且每一个数据都有相应的 ACK。那么第一个 ACK 到达,说明可以再发送一个新的报文段(数据包守恒),每收到一个“好的” ACK, cwnd = cwnd + min(N, SMSS) ,这里的 N 是指那个“好的” ACK 所确认的字节数。所谓“好的”是指 ACK 号使窗口更新了。

因为通常来说 N 的值等于 SMSS,使得 cwnd 在收到一个 ACK 后增大一倍。所以慢启动实际上是以指数增长,在 K 轮之后,cwnd = 2^K。如下图:

当接收方开启延时 ACK,则发送方 cwnd 增长曲线如图中蓝色曲线,虽然起步看起来慢,但仍是指数增长。当然这对于带宽延时积很大的网络来说,确实有所浪费,应该采用更好的办法。

当然不可能让窗口大小无限增长,否则会造成严重的网络拥堵直至网络瘫痪。在上述情况下,cwnd 将大幅减小(减至原值一半),也是慢启动和 拥塞避免 的转折点,与 慢启动阈值 (slow start threshold, ssthresh)有关。

当 cwnd 达到 ssthresh 时,可能还有一些传输资源未被占用。但这时候需要谨慎的试探,不能再以较快速度增大 cwnd。采用避免拥塞算法,每接收到一个新的 ACK,cwnd 会做以下更新:

cwnd = cwnd + SMSS * SMSS / cwnd

假设 cwnd = k * SMSS,则可推导如下:

cwnd = cwnd + SMSS / k

发包来看像这样:

通常认为拥塞避免阶段 cwnd 呈线性增长,称为累加增长。

通常 TCP 连接总是会选择慢启动和拥塞避免中的一个,依据就是之前提到的慢启动阈值。当 cwnd < ssthresh,采用慢启动算法, cwnd > ssthresh 采用拥塞避免,相等时选择任意都行。所以关键就是 ssthresh 的值,该值并不是固定的,它的主要目的是, 记录上一次最好的窗口估计值

ssthresh 初始值可以任意设定(如 awnd 或更大),这通常会使 TCP 总是以慢启动开始。当出现重传,无论是超时重传还是快速重传,都会导致 ssthresh 值更新如下:

ssthresh = max(在外数据值 / 2, 2 * SMSS)

在外数据值其实就是当前窗口大小。这样通常会使 ssthresh 变小(但也可能使其变大),然后触发拥塞避免。

Tahoe 算法规定当重传时,都会进入慢启动,并且丢包时,将 cwnd 设为 1 SMSS。这显然性能不太好,已被弃用,不用深究。

Reno 算法是标准 TCP 的基础,它根据之前提到的“包守恒”实现了快速恢复,较好的利用了带宽。快速恢复是针对快速重传的情景实现的,来看一下它在标准 TCP 中的使用:

以下是 Reno 的状态转换图:

Reno 算法在同一窗口下丢失多个包时,其中一个包快速重传成功,就会停止 cwnd 膨胀,造成其它丢失的包可能触发超时重传,然后 cwnd 降为 1 SMSS,吞吐量大大降低。NewReno 采用了一个“恢复点”,指的是收到的 ACK 号大于已发送包的序列号的最大值,达到这个恢复点,才会退出快速恢复。下图最右图中, ACK11 达到了恢复点。

限制传输策略对 TCP 做了微小改进,主要是为了解决窗口较小时,出现丢包,但是没有足够的包去引发快速重传/快速恢复机制。为了尽快触发快速重传,每接收两个连续重复 ACK,就发送一个新的包,使网络中的数据量维持一定数量。这是 TCP 推荐策略。

这里对应 TCP/IP 详解卷一里,书上对于“应用受限”说法不正确。书上说此时“无法发送”,但是查阅 rfc 原文如下:

拥塞窗口校验(Congestion Window Validation)机制规定,需要发送新数据时,距离上次发送操作超过一个 RTO,如果是:

在长时间发送暂停后,cwnd 低于 ssthresh,再次发送时会进入慢启动。Linux 默认开启 CWV。

在之前的超时重传里,我们提到了 伪超时,再来回顾下(注意下图是相当简易的情形,没有考虑延时 ACK 以及 cwnd 增长,会意即可):

伪超时可能引起“回退 N 步”的行为,并且可能触发快速重传,浪费不少资源。

该算法利用 TCP 的 TSOPT 选项,在发送生超时后,重传报文并记录 TSV,期待一个 ACK,若 ACK 的 TSER 小于重传报文的 TSV,则认为该 ACK 是对原始报文的确认而不是对重传报文的确认,即认定该重传是伪重传。

前面提到过,发生超时,则 ssthresh 减半,cwnd 降为 1 SMSS。发生伪超时的话,在 RTO 之后到来的 ACK 会使 cwnd 快速变大,但仍会有不必要重传。

采用 Eifel 算法,在判定伪超时后,会撤销对 ssthresh 的修改。在每次超时对 ssthresh 修改之前,会用 pipe_prev 变量来保存当前的 ssthresh,以便撤销修改。

若出现伪重传,当 ACK 到达时,假设 ACK 确认的报文段长度为 A:

前面讨论了当失序或者超时的时候 TCP 的行为,这些行为都是通过 ACK 的反馈来触发或者驱动的,换句话说,这些“拥塞”的情况是“猜出来的”。当明确知道发生拥堵了,TCP 会执行 拥塞窗口缩减 (congestion window recing,CWR)。明确知道拥堵的情况主要有两种:

CWR 处理过程如下:

直到 cwnd 达到新的 ssthresh 值或者由于其他原因(如丢包)打断 CWR。

到此,我们总结一下 TCP 拥塞控制的几个重要状态:

这个问题还是很有趣的,所以拿出来讲一下。先说结论,网络设备的缓冲区并不是越大越好,也不是越小越好,而是需要根据链路速率和RTT进行计算,得到一个经验值。

缓冲区过小的问题很明显,如果缓冲区太小,很容易就被写满了,只要不能进行适当的排队,丢包率会高,导致传输效率差。

假设如下场景:

上图中,我们假设中间的路由设备的buffer极大,理论来说无论来多少数据,都能buffer起来。中间的路由设备,接收速率是1M/s,而发送速率只有10k/s。

到某一时刻,发送方认为某一数据超时丢失(实际上没有丢失,而是在缓冲区没来得及处理),于是重发,导致缓存区有冗余数据。大量的冗余数据导致利用率变得极低。

而缓冲区为正常大小的时候,多的数据会被丢弃,过一会而缓冲区有新的位置,新的数据会到来,接收方收到数据是失序的,于是发送冗余 ACK,促进快速重传,反而使链路利用率得到保障。

大多数攻击是强迫 TCP 发送速率比一般情况更快或更慢。

原理是接收方将原来的确认范围划分成很多小块,把一个 ACK 变成多个 ACK,使得发送方不断增大 cwnd,使网络变的拥堵。可以通过计算每个 ACK 的确认量(而不是一个包)来判断是否是正确的 ACK。

接收方对还没到达的数据进行提前确认,使得 RTT 变得比较小,同样使得发送方不断增大 cwnd。可以采用一个可累加的随机数,动态匹配 ACK。

❷ 网络原理关于tcp拥塞窗口的一道题

发送窗口的上限值由min(接受窗口,拥塞窗口)决定,显然发送窗口为2000。而第二个最大段没有得到确认,所以还可以发送的最大字节数为:2000-1000=1000.

❸ TCP拥塞窗口的问题

TCP拥塞控制最开始采用慢开始算法,拥塞窗口值cwnd从1开始按指数增加,1、2、4、8(第1——4次的值);这时达到了ssthresh的初始值8,转而采用拥塞避免算法,拥塞窗口值cwnd从ssthresh初始值8按线性+1增加,因此为9、10、11、12(第4——8次的值);到了cwnd=12时网络发生超时,这时改ssthreash的值为发生超时时cwnd的值的一半(即为12/2=6),并重新采用慢开始算法,改cwnd的值为1(这是第9次的值),然后cnwd的值依然按指数增加,2、4(第10、11次),理论上按这个算法再增加就是cnwd=8了,超过了ssthresh=6,所以第12次开始改为拥塞避免算法、cwnd的值从6开始按线性+1,即为6、7、8、9(第12——15次)。
纯手打,希望能帮助你理解。

计算机网络里,建立TCP连接的三个TCP窗口分别是什么rwnd,cwnd是吗还有吗谢谢!

拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。流量控制:指点对点通信量的控制,是端到端中的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收

❺ tcp如何实现拥塞控制

TCP拥塞控制是传输控制协议(英语:Transmission Control Protocol,缩写TCP)避免网络拥塞的算法,是互联网上主要的一个拥塞控制措施。它使用一套基于线增积减模式的多样化网络拥塞控制方法(包括慢启动和拥塞窗口等模式)来控制拥塞。在互联网上应用中有相当多的具体实现算法。

在TCP中,拥塞窗口(congestion window)是任何时刻内确定能被发送出去的字节数的控制因素之一,是阻止发送方至接收方之间的链路变得拥塞的手段。他是由发送方维护,通过估计链路的拥塞程度计算出来的,与由接收方维护的接收窗口大小并不冲突。

1、慢开始算法:

简单的说,开始传输时,传输的数据由小到大递增到一个值(即发送窗口由小到大(指数增长)逐渐增大到拥塞窗口的数值)。

2、拥塞避免算法:

数据发送出去,并发到接收方发回来的确认收到,拥塞窗口每次值加1地线性增大。

3、快重传算法:

数据传输时(数据被分成报文,每个报文都有个序号),中间的一部分丢失接收方没收到,接收方连续接到后面的数据,则发回对丢失前的数据的重复确认,这样发送方就知道有部分数据丢失了,于是从丢失出重传数据。

4、快恢复算法:

快恢复是与快重传配合的算法,在发生数据丢失时,发送方收到接收方发回的三个重复确认信息时,就把每次传输的数据量减为原来的一半,拥塞窗口也修改为这个值,然后又开始拥塞避免的算法。

❻ TCP 流量控制与拥塞控制

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的。为了通过IP数据报实现可靠性传输,需要考虑很多事情,侧如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。 TCP通过校验和、序列号、确认应答、重发控制、连接管理、以及窗口控制等机制来实现可靠性传输 。TCP建立连接的实质是,主机A和主机B告知彼此的第一个发送字节的初始序列号,建立连接后对每一个发送的字节都需要以初始序列号为基点进行编号,需要对方来确认每一个字节编号都已经成功接收,双方初始序列号是由操作系统动态生成的随机的值,一般每个TCP 会话都会有不一样的初始序列号,占四个字节。

TCP通过肯定的确认应答(ACK) 实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,并进行重发由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。如果数据被重发之后若还是收不到确认应答,则进行再次发送。此时确认应答的时间将会以2倍、4信的指数函数延长。达到一定次数后,如果任没有任何确认应答返回,就会判断为网络发生异常,强制关闭连接,并且通知应用通信异常强行终止。

发送端根据自己的实际情况发送数据。但是,接收端可能收到的是一个毫无
关系的数据包又可能会在处理其他问题上花费一些时间。因此在为这个数据包做其他处理时会耗费一些时间,甚至在高负荷的情况下无法接收任何数据。如此一来,如果接收端将本应该接收的数据丢弃的话,就又会触发重发机制,从而导致网络流量的无端浪费。为了防止这种现象的发生,TCP 提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是所谓的 流控制。它的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小 。在前面6.4.6 节中所介绍的窗口大
小的值就是由接收端主机决定的。TCP 首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放人这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。不过,接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量。也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制。这也就形成了一个完整的TCP 流控制(流量控制)。

因为 TCP 的窗口控制,收发主机之间即使不再以一个数据段为单位发送确认应答,也能够连续发送大量数据包。然而,如果在通信刚开始时就发送大量数据,也可能会引发其他问题。 一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果突然发送一个较大量的数据,极有可能会导致整个网络的瘫痪。TCP 为了防止该问题的出现,在通信一开始时就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制 。首先,为了在发送端调节所要发送数据的量,定义了一个叫做“拥塞窗口”的概念。于是在慢启动的时候,将这个拥塞窗口的大小设置为1个数据段发送数据,之后每收到一次确认应答(ACK),拥塞窗口的值就加1MSS。在发送数据包时,将拥塞窗D的大小与接收端主机通知的窗口大小做比较,然后按照它们当中较小那个值,发送比其还要小的数据量。如果重发采用超时机制,那么拥塞窗口的初始值可以设置为1以后再进行慢启动修正。有了上述这些机制,就可以有效地减少通信开始时连续发包导致的网络拥堵,还可以避免网络拥塞情况的发生。

慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。主机发送了一个报文后就要停下来等待应答,每收到一个应答,拥塞窗口就增加一段长度,直至等于设定的阈值。比如我们可以先让发送方发一个包,等这个包被 ack 之后,我们再发 2 个包,这 2 个被 ack 之后再发 4 个包,以此类推,让一次所发的包数量慢慢增加,这就是慢启动。

谈 TCP 离不开 窗口的概念,有 congestion window,receive window,sliding window 等等。window 是以 tcp segment 数量为单位,我们可以说当前 window 值由几个 tcp 包构成,而当我们说 window size 的时候,又是在说一个 window 所包含的字节数。window size 除了和 tcp segment 的数量有关之外,还和单个 tcp segment 的最大 size 有关,即 MSS 值。发送方的 Window 大小称之为 CWND(congestion window),接收方的 Window 大小称之为 RWND(receiver window,或 advertised window)。CWND 表示当前发送方可以发送多少个 TCP 包,而 RWND 表示当前接收方还能接收多少个 TCP 包。值得注意的是,CWND 是一个发送方本地的值,并不会在网络上传输。而 RWND 则是由接收方告知发送方的,是存在于 TCP 包的协议中,会通过网络传输。比如,A主机发送给B window 大小为8192,意思是:B主机最多可以连续发送8192 字节给A主机(一般来说,8192字节就是A主机的接收缓冲区大小),如果B主机不小心发送超过8192字节,如果application 没有及时取走,则超过 8192 自己数据可能会因为A主机的接收缓冲区满而被丢弃,所以B主机会严格遵守A的 RWND 的大小,如果A主机通告它的window大小为 0,则B主机一定不会发送数据。TCP首部中 Window Size 占两个byte,最大值为65535。

MTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。

MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。

Persist Timer: 用于周期探测对方receiver window size 是否依然为0的定时器。比如,A主机通告它的window大小为 0,则B一定不会发送数据。B主机也不会一直等下去,如果一直等下去则会发生死锁。为了防止这种情况的死锁发生,发送者使用了一个持续计时器(persiet timer)来周期性的询问接收者是否已增加了窗口。从发送者发出的这些段称为窗口探测(window probes)。

在iOS设备上抓包比较方便,除了常用的,如:Charles、Paw 等软件外,我们还可以使用tcpmp。以下是抓包的步骤:


(待续)

❼ TCP拥塞控制

  在计算机网络中的链路容量(即带宽)、交换节点(如路由器)中的缓存和处理机等,都是网络的资源。在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,从而导致吞吐量将随着输入负荷增大而降低。这种情况就叫做 拥塞 。通俗来说,就跟交通拥堵性质一样。

  网络拥塞的原因有很多,如交换节点的 缓存容量太小、输出链路的容量和处理机的速度

   拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致于过载 。拥塞控制是一个 全局性的过程 。涉及网络中所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。

  拥塞控制和流量控制的关系密切,但是 流量控制往往是指点对点的通信量控制 ,是个 端对端 的问题。流量控制所要做的就是抑制发送方发送数据的速率,以便使接收端来得及接收。

  TCP进行拥塞控制的算法有四种,即 慢开始(slow-start)、拥塞避免(congestion-avoidance)、快重传(fast retransmit)、快恢复(fast recovery)

  为了讨论问题方便,提出以下假定:

  拥塞控制也叫做 基于窗口 的拥塞控制。为此,发送方维持一个叫作 拥塞窗口cwnd (congestion window)的状态变量。 拥塞窗口的大小取决于网络的用谁程度,并且动态的变化。发送方让自己的发送窗口等于拥塞窗口

  接收方窗口值rwnd和拥塞窗口值cwnd的区别:

  发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就可以再扩大一些,以便让更多的分组发送出去,如果网络出现了拥塞,就必须将拥塞窗口减小一些,以减少分组的发送。 判断网络拥塞的依据就是出现了超时

  慢开始算法的思路:刚开始发送数据时,不一下向网络中注入大量数据,而是先探测一下,即 由小到大逐渐增大发送窗口 ,也就是说, 由小到大逐渐增大拥塞窗口数值

  慢开始算法具体规定:刚开始发送数据时,先把拥塞窗口cwnd根据 发送方的最大报文段SMSS (Sender Maximum Segment Size)数值的大小设置为不超过2-4个SMSS的数值。在 每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值 。用这样的方法逐步增大发送方的拥塞窗口rwnd,可以使分组注入到网络中的速率更加合理。

  下面举例说明一下,虽然实际上TCP是用字节数作为窗口大小的单位,但为了方便描述,下面使用报文段的个数来作为窗口的大小的单位,并且假设所有的报文段大小相等。

  所以, 慢开始算法每经过一个传输轮次(transmission round),拥塞窗口cwnd就加倍

  注:在TCP实际运行时,发送方只有收到一个确认就可以将cwnd加1并发送新的分组,并不需要等一个轮次所有的确认都收到后再发送新的分组。

  从上面可以看出,慢开始算法虽然起始的窗口很小,但是每过一个轮次,窗口大小翻倍,呈指数爆炸增长,所以必须要对其进行一个限制,防止其增长过大引起网络拥塞。这个限制就是 慢开始门限ssthresh 状态变量。慢开始门限ssthresh的用法如下:

  拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。因此在拥塞避免阶段就有 “加法增大”AI (Additive Increase)的特点。这表明在拥塞避免阶段,拥塞窗口cwnd 按线性规律增长 ,比慢开始算法的拥塞窗口增长速率缓慢得多。

  下面用一个具体的例子来说明拥塞控制的过程,下图假设TCP发送窗口等于拥塞窗口,慢开始初始门限设置为16个报文段,即ssthresh = 16。

  在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这常称为 加法增大AI 。无论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前拥塞窗口的一半,这叫做 乘法减小 MD (Multiplication Decrease)。

  当网络频繁出现拥塞时,ssthresh 值就下降的很快,以大大减少注入网络中的分组数。

   快恢复算法 ,如果发送方连续接收到3个冗余ACK,发送方知道现在只是丢失了个别的报文段,此时调整门限值 ssthresh为当前拥塞窗口的一半,同时设置拥塞窗口 cwnd为新的门限值(发生报文段丢失时拥塞窗口的一半),而不是从1开始。

   TCP对这种丢包事件的行为,相比于超时指示的丢包,不那么剧烈 ,所以对于连续收到3个冗余ACK,拥塞窗口不会从1开始开始。

❽ 计算机网络,传输层拥塞控制小问题。谢谢。 假设在没有发生拥塞的情况下,在一条往返时延RTT为10m

拥塞窗口初始值=1个TCP报文= 2 K B < 24 K B =2KB<24KB=2KB<24KB,发送窗口=min{拥塞窗口,接收窗口},采用慢启动算法:
T=0,第1次发送,发送窗口=拥塞窗口=2KB;
t=10ms,得到确认,拥塞窗口=4KB
T=10ms,第2次发送,发送窗口=4KB;
t=20ms,得到确认,拥塞窗口=8KB
T=20ms,第3次发送,发送窗口=8KB;
t=30ms,得到确认,拥塞窗口=16KB
T=30ms,第4次发送,发送窗口=16KB;
t=40ms,得到确认,拥塞窗口=32KB
T=40ms,第5次发送,发送窗口=min{拥塞窗口,接收窗口}=24KB;
因此,需要40ms才能发送第一个完全窗口。