服务器入门必看

锐一网络为您解答服务器的疑难杂症

服务热线:400-920-4021

网络的拥塞预防、控制与流量控制
1492017-12-04

1984年初,John Nagle提到了一个被称为“拥塞崩溃”的现象,这个现象会影响节点间带宽容量不对称的任何网络:

“拥塞控制是复杂网络中众所周知的一个问题。我们发现国防部的Internet Protocol(IP)--纯粹的数据报协议,和Transmission Control Protocol(TCP)--传输层协议,在一块使用时,由于传输层与数据报层之间的交互,会导致一些不常见的拥塞问题。特别是IP网关容易受到我们称为“拥塞崩溃”现象的严重影响,尤其是在这种网关连接不同带宽的网络时...

可能是往返时间超过了所有主机的最大中断间隔,于是相应的主机会在网络中制造越来越多的数据报副本,使得整个网络陷入瘫痪。最终,所有交换节点的缓冲区都将被填满,多出来的分组必须删掉。目前的分组往返时间已经设定为最大值。主机会把每个分组都发送好几次,结果每个分组的某个副本会抵达目标。这就是拥塞崩溃。这种情况永远存在。达到饱和状态时,只要选择被删除分组的算法适当,网络就可以退而求其次地持续运行下去。”--John Nagle-RFC 896

这份报告的结论是拥塞崩溃不会对ARPANET造成影响,因为其大多数节点的带宽相同,而且其骨干网的容量相对大得多。然而,这两种情况没有持续太久。1986年,随着加入网络的节点数量(5000+)及类型日益增多,该网络中发生了一系列拥塞崩溃故障。个别情况下,容量下降为千分之一,网络完全瘫痪。为了解决这些问题,TCP加入了很多机制,以便控制双向发送数据的速度,比如流量控制、拥塞控制和拥塞预防机制。

ARPANET(Advanced Research Projects Agency Network,高级研究计划局网络)是现代互联网的前身,是世界上第一个实际运行的分组交换网络。这个项目于1959年正式启动,1983年TCP/IP作为主要通信协议取代了原来的NCP(Network Control Program,网络控制程序)协议。

流量控制是一种预防发送端过多向接收端发送数据的机制。否则,接收端可能因为忙碌、负载重或缓冲区既定而无法处理。为实现流量控制,TCP连接的每一方都要通告自己的接收窗口(rwnd),其中包含能够保存数据的缓冲区空间大小信息。

通告接受窗口rwnd的大小

第一次建立连接时,两端都会使用自身系统的默认设置来发送rwnd。浏览网页通常主要是从服务器向客户端下载数据,因此客户端窗口更可能成为瓶颈。然而,如果是在上传图片或视频,即客户端向服务器传送大量数据时,服务器的接收窗口又可能成为制约因素。不管怎样,如果其中一端跟不上数据传输,那它可以向发送端通告一个较小的窗口。假如窗口为零,则意味着必须由应用层先清空缓冲区,才能再接收剩余数据。这个过程贯穿于每个TCP连接的整个生命周期:每个ACK分组都会携带相应的最新rwnd值,以便两端动态调整数据流速,使之适应发送端和接收端的容量及处理能力。

最初的TCP规范分配给通告窗口大小的字段是16位的,这相当于设定了发送端和接收端窗口的最大值(216即65535字节)。结果,在这个限制内经常无法获得最优性能,特别是在那些“带宽延迟积”(参见2.3节“带宽延迟积”)很高的网络中。为解决这个问题,RFC1323提供了“TCP窗口缩放”(TCPWindowScaling)选项,可以把接收窗口大小由65535字节提高到1G字节!

缩放TCP窗口是在三次握手期间完成的,其中有一个值表示在将来的ACK中左移16位窗口字段的位数。今天,TCP窗口缩放机制在所有主要平台上都是默认启用的。不过,中间节点和路由器可以重写,甚至完全去掉这个选项。如果你的服务器或客户端的连接不能完全利用现有带宽,那往往该先查一查窗口大小。在Linux中,可以通过如下命令检查和启用窗口缩放选项:

$>sysctlnet.ipv4.tcp_window_scaling
$>sysctl-wnet.ipv4.tcp_window_scaling=1

本文由锐一网络整理发布,如需香港服务器、高防服务器,请联系锐一客服或者百度“锐一网络”即可找到我们。

网络拥塞预防,网络流量控制

关注我们

关于我们

  • 400热线:400-920-4021
  • 电话:0755-33076677
  • 邮箱:info@a166.com
  • 地址:深圳市福田区彩莲路天隆大厦1507

产品销售

售后服务

  • 售后 锐一售后客服
  • 售后 锐一售后客服

增值服务

  • 证书 SSL
收缩