TCP/IP卷一:93---TCP拥塞控制之(缓冲区膨胀、积极队列管理和ECN)

一、缓冲区膨胀

  • 虽然存储单元的价格昂贵(高端路由器也是如此),但是现在的网络设备中仍包含大量 的内存和几百万字节的包缓冲区。然而,这样庞大的内存(与传统的网络设备相比)会导致 像TCP这样的协议性能下降。这一问题被称为缓冲区膨胀[GllⅡDHGSO7]。它主要存在于 家用网关的上行端以及家庭或小型办公室的接人点处,与排队等待而产生的大量延迟有关。 标准TCP协议的拥塞控制算法会在链路的瓶颈处将缓冲区填满。而由于拥塞的信号(一个数 据包丢失)需经很长时间才能反馈到发送端,此时在发送端和接收端之间缓存了大量数据, TCP协议也不能很好地运作。
  • 吁WNPlO]中指出,在美国包括电缆和DSL在内,上传带宽范围是256Kb/s - 4Mb/s, 在商用路由器上的缓冲区大小应该在16kB至256RB之间。下图显示了在几种缓冲区大 小下延迟和数据传输速率的关系,可以证明之前结论的正确性

  • 上图展示了针对不同缓冲区大小( 1kB - 2MB)数据在队列等待所产生的延迟情 况。如果缓冲区大小为几百kB或者更多,那么家庭网络上传带宽速率(一般在250kb/s至 圃 10Mb/s之间)会引起几百秒的延迟。为了给用户带来更好的体验,一般的交互式应用程序需 要把单向延迟控制在150ms以下[G¨4]。因此,如果缓冲区被一个或多个大的上传文件所 占满(如BT共享文件),会严重影响交互式应用性能
  • 不是所有的网络设备中都存在缓冲区膨胀的问题。实际上,主要间题是缓冲区端用户接 人设备过满。有很多方法可以解决这一问题,包括修改协议(如像Ⅵgas这样的基于延迟的 拥塞控制方式,但是它可能会因为网络抖动而产生相反效果[DHGSO7])、使用缓冲区大小可 动态改变的接人设备(吁wNPlO]中提到),或将两者结合。接下来介绍一种综合的方法,它不仅可以解决缓冲区膨胀的间题,而且还有一些其他的好处0

二、积极队列管理和ECN

  • 到现在为止, TCP能够推断出拥塞产生的唯一方法就是发生丢包现象。特别是路由器 (最有可能产生拥塞)通常不会通知连接两端的主机, TCP即将产生拥塞。而是当缓存没有 多余的可用空间时,只好将新到达的数据包丢弃(称为“尾部丢弃”)。然后依照先进先出(FIFO)的方法继续转发那些先前到达的数据包。当网络路由器像这样被动工作时(指它们 在超负荷的时候仅仅丢弃数据包,而不会提供它们已经处于拥塞状态的任何反馈信息), TCP 除了事后再做出反应以外无能为力。然而,如果路由器可以更积极地管理它们的等待队列 (也就是说使用更精确复杂的调度算法和缓存管理策略),也许这种情况就能得到改善。若可 以将拥塞状态报告给端节点,效果会更好
  • 应用FIFO和尾部丢弃以外的调度算法和缓存管理策略被认为是积极的,路由器用来管 理队列的相应方法称为积极队列管理(AQM)机制。 [RFC2309]中提到了AQM机制的潜在 优势。若可以通过将路由器和交换机的状态传输给端系统来实现AQM时,它将更具利用价 值。这些在[RFC3168]中有详细描述, [RFC3540]利用相关实验描述了扩展安全性的AQMo 这些RFC都描述了显式拥塞通知( Explicit Congestion Notification, ECN),它对经过路由器 的数据包进行标记(设置IP头中的两个ECN标志位),以此得到拥塞状况
  • 随机早期检测(RED)网关[FJ93]机制能够探测拥塞情况的发生,并且控制数据包标 记。这些网关实现了一种衡量平均占用时间的队列管理方法。如果占用队列的时间超过最小 值( minthresh),并且小于最大值( maxthresh),那么这个数据包将被标记上一个不断增长的 概率值。如果平均队列占用时间超过了maxthresh,数据包将被标记一个可配置的最大的概 率值(MaxP), MaxP可以设置为1.00 RED也可以将数据包丢弃而不是标记它们。

  • 当数据包被接收时,其中的拥塞标记表明这个包经过了一个拥塞的路由器。当然,发送 端(而不是接收端)才真正需要这些信息,以此降低发送速率。因此,接收端通过向发送端 返回一个ACk数据包来通知拥塞状况o
  • ECN机制主要在IP层进行操作,也可以应用于TCP协议之外的其他传输层协议。当一 个包含ECN功能的路由器经过长时间的拥塞,接收到一个IP数据包后,它会查看IP头中的 ECN传输能力(ECT)标识(在IP头中由两位ECN标志位定义)。如果有效,负责发送数据包的传输层协议将开启ECN功能,此时,路由器会在IP头设置一个已发生拥塞(CE)标识 (将ECN位都置为1 ),然后继续向下转发数据报。若拥塞情况不会持续很长时问(例如由于 队列溢出导致最新的一个数据包被丢弃),路由器不会将CE标识置位。因为即使是一个单独 的CE标识,传输协议也会做出反应
  • 如果TCP接收端发现接收到的数据包的CE标识被置位,那么它必须将该标识发送回发 送端([RFC5562]中的实验表明,也可以将ECN添加到SYN+ACK报文段中发送)。因为 接收端经常会通过ACk数据包(不可靠的)向发送端返回信息,所以拥塞标识很有可能会丢 失。出于对这种情况的考虑, TCP实现了一个小型的可靠连接协议,通过这个协议可以将标 识返回给发送端o TCP接收端接收到CE标识被置位的数据包之后,它会将每一个ACK数据包的“ ECN回显” (ECN-Echo)位字段置位,直到接收到一个从发送端发来的CWR位字 段设置为1的数据包。cwR位字段被置位说明拥塞窗口(也就是发送速率)已经降低。

  • TCP发送端接收到含有ECN ̄Echo标识的ACK数据包时,会与探测到单个数据包丢失 时一样调整cwnd值。同时发送端还会重新设置后续数据包的CWR位字段。常规的拥塞处 理方式为:调用快速重传和快速恢复算法(当然,数据包不会进行重传),这样就可以使TCP 在丢包之前降低发送速率。值得注意的是, TCP的处理不应该过度。特别是它不能对同一个 数据进行多次响应。否则, ECN TCP相对于其他来说会处于不利地位
  • 在Windows Vista及之后的版本中,激活ECN功能需要使用以下命令:

  • 在Linux系统中,如果布尔型Sysctl变量net.ipv4.tcp_eCn的值非零,则ECN功能被激 活。这种基于Linux的改变默认设置的方法正在广泛使用。在Mac OS lO.5及更新的版本中, 变量net.inet.tcp.ecn_initiate_Out和net.inet.tcp.ecn_negotiate_in分别控制向外传输和向内传 输的ECN功能的开启。当然,没有路由器和交换机的协作, ECN的实用性在任何情况下都 圃 会受到限制o AQM在整个全球互联网络中发挥作用还需要时间

发布了1463 篇原创文章 · 获赞 996 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/104261056