TCP拥塞控制

TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈。TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。

TCP限制向其连接发送流量

TCP连接的每一端都是由一个接收缓存、一个发送缓存和几个变量组成。运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,拥塞窗口(cwnd),它对一个TCP发送方能向网络中发送流量的速率进行了限制:在一个发送方中未被确认的数据量不会超过cwnd和rwnd中的最小值,即 LastByteSent - LastByteAcked <= min{cwnd, rwnd}
    通过约束发送方中未被确认的数据量,间接限制了发送方的发送速率。考虑一个丢包和发送时延均可以忽略不计的连接。在每个往返时间 (RTT)的起始点,上面的限制条件允许发送方向该连接发送cwnd个字节的数据,在该RTT结束时发送方接收对数据的确认报文。因此,该发送方的发送速率大概为 cwnd/RTT 字节/秒。

TCP检测网络发生拥塞

当出现超时未反馈或者收到接收方的3个冗余ACK,则出现丢包事件。则发送方认为在发送方到接收方的路径上出现了拥塞的指示。 
    冗余ACK是指接收方回给发送方和之前的ACK相同的一个ACK。这出现在,当接收方本应该接收X字节开头的报文,却收到X字节之后的某字节开头的报文(即X字节开始的报文丢失)时,接收方返回给发送方和上次相同的ACK报文,即报文的确认号位置仍然填写X。 
这样发送方就知道X字节开始的报文丢失,从而会重传X字节开头的报文。

TCP拥塞控制算法

TCP拥塞控制算法包括慢启动、拥塞避免、快速恢复三个部分。 
1. 慢启动 
    TCP连接开始时,cwnd的值通常初始置为一个MSS的较小值,这就使得初始发送速率大约为 MSS/RTT;之后,每收到一个报文段的首次被确认cwnd就增加一个MSS。这样,第一个RTT中,cwnd为1 MSS, 第二个RTT中,cwnd为2 MSS, 第三个RTT中,cwnd为4 MSS, 即每个RTT之后,cwnd就翻倍,cwnd呈指数增长。 
    当发生丢包时,设置一个变量 ssthresh(慢启动阈值) = cwnd / 2, 然后cwnd重新设为1。

2. 拥塞避免 
    当出现丢包时,如果(可能会直接进入快速恢复)进入慢启动阶段,ssthresh设为 cwnd/2, cwnd值置为1,然后每个RTT cwnd翻倍,当cwnd值到达 ssthresh之后,进入拥塞避免阶段。 
    此时,每个RTT,cwnd值只增加1个MSS,即每收到一个报文的ACK,cwnd = cwnd + MSS/cwnd.直到再次出现丢包后。当出现超时类型的丢包时,进入慢启动阶段(ssthresh = cwnd/2, cwnd=1);当出现三次冗余ACK类型的丢包时,进入快速恢复阶段(ssthresh = cwnd/2, cwnd = ssthreash + 3MSS)

 
3. 快速恢复 
    当出现三次冗余ACK类型的丢包时,进入快速恢复阶段。此时 ssthresh = cwnd/2, cwnd = ssthreash + 3MSS,之后每个RTT内,cwnd增加1个MSS,直到出现丢包。

时间: 2024-10-10 17:44:17

TCP拥塞控制的相关文章

TCP拥塞控制 (1)

Basic: TCP,传输控制协议,是目前网络中应用最广泛的传输协议.SMTP.SSH.FTP.HTTP等因特网底层协议均是TCP. TCP面向连接,提供端到端的数据可靠传输.连接时三次握手,断开是四次挥手.具体表现为: 1.       TCP对传输的数据做了序号标记,其中序号标记安装字节数增长.TCP对端在接收到数据后发出一个ACK给对端(ACK中就包含序列号).TCP使用确认和超时重传机制保障了数据的可靠性传输. 2.       由于发送和接收端的数据处理能力不同,为了避免数据发送过快而

《网络协议》TCP 拥塞控制

TCP 拥塞控制主要有几种:慢启动.拥塞避免.快重传 以及 快恢复. 慢启动 为了防止网络拥塞,TCP 采用了一种慢启动算法,对发送数据量进行控制.为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为 1 个报文段发送数据,之后每收到一次确认应答,拥塞窗口的值就加 1 个报文段.在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送.拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制. 慢启动算法步骤如下(cw

linux内核工程导论-网络:tcp拥塞控制

这篇文章本来是在tcp那篇里面的,但是那篇太长了,不专一.就完善了一下提取出来了. TCP拥塞控制 拥塞控制讨论的是很多个同时存在的tcp连接应该怎么规划自己的数据包发送和接收速度,以在彼此之间共享带宽,同时与其他实体的机器公平的竞争带宽,而不是自己全占. 拥塞控制的核心是AIMD(additive-increase/multiplicative-decrease ),线性增加乘性减少.为啥不用线性增加线性减少,或者是乘性增加乘性减少呢?这个有人专门研究过,只有AIMD可以收敛聚合使得链路公平.

TCP拥塞控制 2

解决传统TCP缺陷: 1.窗口太小,最大65535. TCP利用了选项功能,其头部存在预留项,用于扩展等用途.窗口扩大选项增加了额外的16位来表示窗口大小,窗口的值由首部的16位大小和选项的16位值共同组成. 不过不是用加法组成的,而是利用移位窗口值的幂来表示的,也就是说如果移位窗口值为 10,那么窗口的最大值就是65535*210,这个值就比较大了,足够表示窗口的大小了. 2.数据包丢失,即认定为网络出现了拥塞 在高速网络中,这种假设是不成立的.如果笼统地认为分组丢失就是拥塞所引起的,从而降低

TCP 拥塞控制

TCP 拥塞控制 相关名词 滑动窗口 tcp通过滑动窗口进行流量控制,所谓的窗口可以理解为接收端所能提供的缓冲区大小. TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的 RTT(Round trip time) 表示从发送端到接收端的一去一回需要的时间. TCP在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值) RTO (Retransmission TimeOut) 发送数据包,启动重传定时器,重

计算机网络概述 传输层 TCP拥塞控制

TCP拥塞控制 计算机网络中的带宽.交换结点中的缓存和处理机等,都是网络的资源.在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏.这种情况就叫做拥塞. 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载.拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制. 拥塞控制 和 流量控制 的区别? 1. 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况: 2. 流量控制:流量

TCP拥塞控制及连接管理

在阅读此篇之前,博主强烈建议先看看TCP可靠传输及流量控制. 一.TCP拥塞控制 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion).出现资源拥塞的条件:对资源需求的总和 > 可用资源:拥塞带来的问题:若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降. 1. 拥塞的控制方法一(慢开始和拥塞避免) 发送方维持一个叫做拥塞窗口 cwnd (congestion window)的状态变

TCP拥塞控制机制

我们知道TCP是拥有拥塞控制机制的,而UDP是没有的,为什么需要拥塞控制机制呢,就是防止丢包过多导致传输效率低下.网络中传输的包太多,路由器的缓存又不够,每一个发送端都以自己想要的发送速率发送包,自然会导致网络拥塞.所以我TCP就包括了拥塞控制机制. 有几种拥塞控制方法? 2种 1.端到端拥塞控制.网络层没有显示的告知传输层此时网络出现拥塞了,传输层通过报文段的丢失(超时或3次冗余确认得知)认为网络出现拥塞了,TCP会缩减其拥塞窗口,减小发送速率. 2.网络辅助的拥塞控制.网络层显示的告知发送端

TCP拥塞控制ABC(Appropriate Byte Counting)的利弊说

TCP在慢启动阶段,每一个RTT拥塞窗口按指数级增长,TCP在拥塞避免阶段,每一个RTT拥塞窗口线性增加1.这些都是书上讲的,不必太认真,真实的情况要比这个复杂的多!        首先我们看大部分的资料里讲的TCP是怎么实现每RTT增窗的,一切都是扯理论,没什么现实意义!        在慢启动阶段,每收到一个ACK(数据包从发出到收到其ACK,就是一个RTT),窗口增加1,在拥塞避免阶段,每收到前一窗口整窗的ACK,窗口增加1,也就是说,每收到一个ACK,窗口增加1/cwnd!然而这都是理想