慢启动与拥塞窗口

在局域网中,发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。但是,如果收发双方不在同一个局域网中,那么发送方一直发送可能会出问题,因为中间路由器有可能发生拥塞,拥塞是指一个或者多个交换点的数据报超载而导致时延剧烈增加的现象。

为了解决这个问题,TCP支持一种被称为“慢启动”的算法,该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。为了控制拥塞,TCP使用了第二个窗口(第一个是控制流量的滑动窗口)限制,即拥塞窗口限制。拥塞窗口是发送方使用的流量控制,而滑动窗口则是接收方使用的流量控制。

刚建立TCP时,拥塞窗口大小为1个报文段。此时,发送方一次只能发送一个报文段。每收到一个ACK,拥塞窗口就增加一个报文段,所以这是一种指数增长。发送方取拥塞窗口与滑动窗口中的较小值作为发送上限。当发送方窗口开得过大时,中间路由器开始丢弃分组,这就通知发送方要它的窗口变小。

对于拥塞窗口大小的限制采用慢开始和乘法减小两种技术:

  • 慢启动:拥塞窗口随着一个确认的到达,拥塞窗口的大小每次增加一个报文段,拥塞窗口大小呈指数增长。
  • 乘法减小的拥塞避免策略:一旦发现报文段丢失,就把拥塞窗口的大小减半(直到减至最小的窗口,窗口中应至少包含一个报文段)。

下面通过离散的时间序列,观察拥塞控制协议:

黑色部分就代表一个个报文段。每个矩形上半部分表示发送方发往接收方的数据,下半部分表示接收方发往发送方的确认信号。左边8个时间单元time0—time7就表示一个往返时间RTT。

发送方在time7收到一个ACK,此时拥塞窗口增加到2,time8—time9便发送了两个报文段。当收到这两个报文段的ACK后,拥塞窗口增加到4,如下所示:

最后在time31,管道被填满,连接达到理想稳定状态。

拥塞常常出现在下列情况:

  • 大管道向小管道发送数据。如以太网向外网传输数据。
  • 路由器的输入流大于输出流。

基本上可以总结为网络中某个节点忙不过来。

第一种情况如下图所示:

中间带宽较窄的为广域网,两侧带宽较宽的为局域网。瓶颈路由器R1在单位时间内的接收数据量始终大于发送数据量,导致拥塞,当R1接收到数据的累积量超过了它的缓存,最终会导致路由器R1丢弃分组。

参考:

《TCP/IP详解》 P216-P221.

慢启动与拥塞窗口,布布扣,bubuko.com

时间: 2024-10-12 12:51:58

慢启动与拥塞窗口的相关文章

TCP数据量--滑动窗口、拥塞窗口、慢启动、Negle算法 经受时延的确认等

TCP的数据流大致可以分为两类,交互数据流与成块的数据流.交互数据流就是发送控制命令的数据流,比如relogin,telnet,ftp命令等等:成块数据流是用来发送数据的包,网络上大部分的TCP包都是这种包. 很明显,TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包采用不同的算法. 总之,TCP的传输原则是尽量减少小分组传输的数量. TCP的交互式数据流 ?         经受时延的确认技术 TCP的交互式数据流通常使用"经过时延的确认"

TCP/IP可靠的原理 滑动窗口 拥塞窗口

TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话"的过程,等到通信准备结束才开始传输数据,最后结束通话.所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了. 把TCP保证可靠性的简单工作原理摘抄如下 应用数据被分割成TCP认为最适合发送的数据块.这和

TCP/IP详细说明--滑模、拥塞窗口、慢启动、Negle算法

TCP的数据流大致能够分为两类,交互数据流与成块的数据流. 交互数据流就是发送控制命令的数据流.比方relogin,telnet.ftp命令等等.成块数据流是用来发送数据的包,网络上大部分的TCP包都是这样的包. 非常明显.TCP在传输这两种类型的包时的效率是不一样的,因此为了提高TCP的传输效率,应该对这两种类型的包採用不同的算法. 总之.TCP的传输原则是尽量降低小分组传输的数量. TCP的交互式数据流 ? 经受时延的确认技术 TCP的交互式数据流通常使用"经过时延的确认"技术.通

独立双(N)拥塞窗口的TCP单边加速思想

让TCP以流水线方式工作靠谱吗?也许你听说过MPTCP,也许你听过P2P下载是多么的天下人为我而我负天下人.        如果我能将一个TCP流拆分成多个TCP流,理论上来讲传输速度会有很大的提升,因为TCP拥塞控制算法是必须携带公平性收敛特征的(不然paper不会通过...),TCP反馈系统会为每一个加入的流分配一张船票,反馈系统不会管你们几个是不是一伙儿的,它只按人头计数,不会分组,这样就有很多好玩的事情可以做了.        我平时比较喜欢跟一些非工作关系的同行做技术交流,随便找个地方

TCP 滑动窗口和 拥塞窗口

转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果你不了解TCP的滑动窗口这个事,你等于不了解TCP协议.我们都知道,TCP必需要解决的可靠传输以及包乱序(reordering)的问题,所以,TCP必需要知道网络实际的数据处理带宽或是数据处理速度,这样才不会引起网络拥塞,导致丢包. 所以,TCP引入了一些技术和设计来做网络流控,Sliding Wi

拥塞窗口

之前学习了滑动窗口,滑动窗口用来根据接收方的能接收数据的缓存大小来对发送方进行流量控制,从而减少网路负担,保证网络的正常运行.但是,在发送端和接收端之间,可能会存在很多中间设备,包括路由器.网关等,这些设备也具有一定的承载数据的上限,也会引起网络拥塞,造成数据的丢失,造成接收端接受数据的失序.为了解决这个问题,引入了拥塞窗口,即在发送端设置一个窗口结构,根据网络的拥塞情况,动态调整该窗口大小,发送端只能发送大小小于滑动窗口和拥塞窗口的数据,在发送端设置的这个窗口就是拥塞窗口. 一.超时重传 我们

TCP的拥塞窗口和快速恢复机制的一些备忘及一点想法

rwnd(窗口,代表接收端的处理能力).cwnd(拥塞窗口,从发送端看当前网络整体承载能力).ssthresh(快速增长切换成慢速增长的界限值) 1.慢启动,是指数增长(对面确认多少个包,就增加多少),并不慢,只是它的起点低,所以慢启动阶段仍需要时间.实际是起点低(1),快增长阶段,每一轮将当前拥塞窗口翻倍.2.拥塞避免,引入了ssthresh(这个是个变量,初始往往是最大值65536,随后续拥塞发生不断调整),控制慢启动阶段区间是在窗口超过ssthresh之后,就开始线性增长(是让cwnd缓慢

TCP怎么保证证包有序传输的,TCP的慢启动,拥塞避免,快速重传,快速恢复

TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化(这看起来非常烦琐),然而,如果TCP没有这样烦琐的操作,那么,可能会造成更多的麻烦.如造成数据包的重传.顺序的颠倒甚至造成数据包的丢失. 那么,TCP具体是通过怎样的方式来保证数据的顺序化传输呢? 主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包.接收主机利用序列号对接收的数据进行确认,以便检测

TCP/IP详细解释--TCP/IP可靠的原则 推拉窗 拥塞窗口

TCP和UDP在同一水平---传输层.但TCP和UDP最不一样的地方.TCP它提供了一个可靠的数据传输服务,TCP是面向连接的,那.使用TCP两台主机通过第一通信"拨打电话"这个过程,等待,直到通信结束就开始准备数据传输,最后,结束通话. 所以TCP比UDP可靠的多,UDP是把数据直接发出去.而无论对方是不是在收信,就算是UDP无法送达.也不会产生ICMP差错报文,这一经时重申了非常多遍了. 把TCP保证可靠性的简单工作原理摘抄例如以下 应用数据被切割成TCP觉得最适合发送的数据块.