[返回]
中国计算机报1999年第78期

调整TCP参数优化性能
提升网络性能之三

郝宇红

  谈到改善网络应用服务器性能,多数网管人员都会想到选择高效的操作系统和健壮的网络结构,却很少花时间来调整TCP参数,优化网络性能。因为TCP对所有网上数据的传输进行控制,所以调整TCP参数是优化网络性能至关重要的一步。


  ●TCP窗口大小


  影响网络性能的TCP参数有许多,但最重要的是TCP窗口的大小。它决定了在给定时间里一个系统可以传输多少数据。每个TCP包都有一个头信息,头信息中有一定“窗口”域用来指明该系统接受数据缓冲区的大小。窗口大可以使远程系统传输较多的数据,窗口小则限制了传输的数据量,从而影响了网络的性能。因此要想最大限度地利用网络,应该选择适当的窗口大小,使之与可用宽带相匹配。若TCP窗口过小,终端用户将无法充分地利用网络上的可用宽带;如果TCP窗口过大,可能会导致错误恢复方面的问题,这样也会大大降低网络性能。

  一般来说,所有系统都有一缺省的TCP窗口大小。有些应用允许使用系统级的API,根据每个连接来设置TCP窗口大小。准确地选择适合网络的TCP窗口的大小并非易事,需要许多测量和计算。当然这些计算是针对连接的,因此如果有许多来自不同网络的连接时,可能会感到无所适从,这时最好使用缺省设置(因为适合某一网络的TCP窗口大小可能不适用于另外一个网络)。因此,当网上的所有用户大体相似,并且所有的终端结点(包括服务器和客户端)以同样的方式设置时,高速设置才真正地体现出它的价值。


  ●传输数据量


  在决定TCP窗口大小时,两个最重要的参数是往返延迟和端到端的带宽。这两个参数决定了在任何给定的时间里在网上(正在传输中)的数据的多少。

  延迟是指数据从一个系统到另外一个系统所需的时间(包括网上传输时间和两个系统的处理时间)。数据在网上传输的时间越长,那么在任何给定的时间里网上可容纳的数据就越多。往返延迟(包括数据传输的时间和返回接收应答的时间)是一个更重要的参数。

  同样端到端的带宽也会影响在网上的数据量。如果带宽为1Mbps,那么每秒能发送1MB的数据。端到端的带宽是网络连接的咽喉。如果有一个100Mbps的网卡,而远程系统使用64kbps的ISDN,那么端到端连接的最大带宽为64kbps。此外,往返延迟应包括两者之间传输时间的总和。

  将往返延迟乘以端到端的带宽,就是在任何TCP虚电路上的最大数据量。这个值实际上决定了TCP窗口的大小,如果设定一个较小的值,发送端将受到远程系统窗口大小的限制,而无法发挥网络的潜力。因为当TCP窗口被充满时,发送端必须停止发送数据,直到收到接收应答为止。但如果正确设置窗口大小,发送端就可以不停地发送数据,因为当所有的数据传完时,接收应答正好出现。

  测量往返延迟很容易,ping远程系统,最好在正常工作日多做几次,选择最常见的延迟时间。ping时最好选择常见大小的包。网上的设备越多延迟越长,因此测量网络十分重要。


  ●最大段大小(MSS)系数


  只注意到网上的数据量,并不能确定TCP窗口值的大小。必须了解连接使用的最大段大小(MSS)。因为TCP的延迟接收应答,算法规定必须收到两个完整的TCP包时才能发送接收应答。

  实际上,缺省窗口大小应为MSS的4倍。如果接受窗口为MSS的2倍的话,发送端必须等待接收应答;如果接受窗口为MSS的4倍的话,发送者至少可以发送四个包,在头两个包的接收应答返回时,最后一个包刚刚发送。如果网络延迟较长时,接受窗口的大小应为MSS的6倍或8倍。

  一般来说,延迟为2毫秒的10Mbps以太网应使用4倍MSS的窗口大小,其他情况下使用该值会大大影响网络性能。

  当窗口过大时,TCP很难恢复丢失的数据。如一个远程的Web服务器得知某一客户的窗口大小为131kB,那么即使网上同时可传输的数据只有4kB,它也会试图传送131kB,这样就会有127kB的数据在服务器和客户端之间的某一路由器处排队。如果数据丢失需要重传,需重传的数据必须排在后面,结果客户端认为连接不可恢复就会放弃该连接。另外,客户端不断地重复向服务器发送接收应答,也可能导致服务器中断连接。有时为了窗口更加高效,可能需要移动服务器以便于改变网络结构。

  TCP窗口域只有16位,因此其最大值为65535。如果网络传输速度慢但有很大的容量,优化的窗口大小可能超过它,这时需要使用TCP窗口的高级选项。