1. TCP参数简述
为改善终端用户对数据流量的要求,现对TCP的参数做简单的分析,并通过TCP参数的调整,以期达到提高用户使用感知度的目的。
TCP参数如下:
• MTU─The Maximum Transfer Unit
• TCP1323Opts─ RFC 1323 TCP options: window scaling and timestamp
• MaxDupAcks─Maximum duplicate acknowledgements
• TCPWindowSize─TCP Window Size
• Sack─Selective Acknowledgement
以上均为影响网络性能的TCP参数,但最重要的是TCP窗口的大小。它决定了在给定时间里一个系统可以传输多少数据。每个TCP包都有一个头信息,头信息中有一定“窗口”域用来指明该系统接受数据缓冲区的大小。窗口大可以使远程系统传输较多的数据,窗口小则限制了传输的数据量,从而影响了网络的性能。因此要想最大限度地利用网络,应该选择适当的窗口大小,使之与可用宽带相匹配。若TCP窗口过小,终端用户将无法充分地利用网络上的可用宽带;如果TCP窗口过大,可能会导致错误恢复方面的问题,这样也会大大降低网络性能。
一般来说,所有系统都有一缺省的TCP窗口大小。有些应用允许调用系统级的API,根据每个连接来设置TCP窗口大小。正确设置窗口大小,发送端就可以不停地发送数据,因为当所有的数据传完时,接收应答正好出现。
当窗口过大时,TCP很难恢复丢失的数据。如一个远程的Web服务器得知某一客户设置的窗口大小为A,那么即使网上同时可传输的窗口大小只有B,它也会试图传送窗口大小为A的数据,这样就会有A-B窗口大小的数据在服务器和客户端之间的某一路由器处排队。如果数据丢失需要重传,需重传的数据必须排在后面,结果客户端认为连接不可恢复就会放弃该连接。另外,客户端不断地重复向服务器发送接收应答,也可能导致服务器中断连接。
选择MTU 的大小,设置TCP最大片段大小(MSS)为1460=1500-40,40为最小TCP/IP包头的大小,在没有给出具体数值的时候,我们可设置TcpWindowSize = 6*MSS,须遵守的规则:TcpWindowSize=2*n*MSS , 若TCP参数在C/S端有推荐设置,TCP/IP的包头会相应的增长,则不应采用TcpWindowSize=2*n*MSS的设置,依据网管要求进行设置。只注意网上的数据量,并不能确定TCP窗口值的大小。必须了解连接使用的最大段大小,因为TCP的延迟接收应答,算法规定必须收到两个完整的TCP包时才能发送接收应答。
实际上,缺省窗口大小应为MSS的4倍。如果接受窗口为MSS的2倍的话,发送端必须等待接收应答;如果接受窗口为MSS的4倍的话,发送者至少可以发送四个包,在头两个包的接收应答返回时,最后一个包刚刚发送。如果网络延迟较长时,接受窗口的大小应为MSS的6倍或8倍。
TCP窗口域只有16位,因此其最大值为65535。如果网络传输速度慢但有很大的容量,优化的窗口大小可能超过它,这时需要使用TCP窗口的高级选项。
TCP参数调整位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
1、 SackOpts
2、 TCP1323Opts
3、 TCPMaxDupAcks
4、 TCPWindowSize
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
1、MTU
参考:TCP传输慢问题分析 - 知乎 (zhihu.com)
通过滑动窗口机制来控制接收窗口,表示着自己此刻还能接收多少字节的报文。当这个窗口太小,那发送方只能按照这个窗口去发送数据,整体下来传输速率就肯定会低很多。
RWND默认情况下占头部的16个bit,可以通过windows scaling 放大到32个bit。
2、发送方的CWND基本上是没办法具体确认的,它的变化遵循一系列大佬给定的算法和接受到的ACK有关,这些算法涉及到:慢启动、拥塞避免、拥塞发生、快速恢复。
来简单的说下上面四个过程,其中慢启动、拥塞避免差不多就如下所示:

- 慢启动是从一个叫初始CWND的数值开始增长,这个初始CWND可能是2,可能是3也可能是10,代表多少个MSS的大小。Linux后来的版本里默认的初始值是10。
- 慢启动过程中,发送方不断的接受到确认的ACK,在每经历一个RTT时间后CWND呈指数增长。所以虽然刚开始只有几个报文可以发送,但是指数的增长提速很快。
- 慢启动到了一定的大小(ssthresh)就开始进入拥塞避免阶

最低0.47元/天 解锁文章
169

被折叠的 条评论
为什么被折叠?



