找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13816|回复: 11

[讨论+资料:]如何取RWIN的合理值以提高网络速度?

[复制链接]
发表于 2005-2-5 20:17:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
相关的贴子老大发过,我最近仔细研究了下。又用www.speedguid做了测试,但是仍然有些不明白的地方,希望大家一起讨论,同时也希望这些资料对大家有用。

QUOTE
/proc/sys/net/core/rmem_default该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。/proc/sys/net/core/rmem_max该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。/proc/sys/net/core/wmem_default该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。/proc/sys/net/core/wmem_max该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。
以上是linux进程文件系统的几个核心参数的作用。都是对RWIN的设置。还有一个比较有用的:

QUOTE
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
关于MTU和MSS的资料大家自己去查查,这里只是简单的东东:以我自己用的ADSL为例:MTU = 1492则:MSS = MTU - 40 = 1452RWIN 为 MSS 的倍数。一般的计算方法为:RWIN = MSS x 44 * 2 的倍数。对于ADSL线路,最小的RWIN=1452*44=63888但是还不清楚为什么要 * 44,请对此了解的朋友解答,  一般情况下最大的因子为 8,所以最大的RWIN应该是 511104。对于不同大小的封包,RWIN的值应该是不同的,也就是说,因子应该是可变的。从 1 到 8,即 2 的 0 次幂到 2 的 3 次幂。以下就是我自己用的CL的设置,写在rc.local当中。

QUOTE
echo 63888 > /proc/sys/net/core/rmem_defaultecho 511104 > /proc/sys/net/core/rmem_maxecho 1 > /proc/sys/net/ipv4/tcp_window_scaling
rmem_default :定义默认的接收窗口大小,即最小的RWIN;rmem_max     :定义最大的接收窗口大小,即最大的RWIN;tcp_window_scaling : 这个是最关键的,该值只能是 1 或者为 0;只有该值为 1 的情况下才允许根据接收的包的大小自动调整接收的窗口,也就是上面说的因子。wmem_default 和 wmem_max 是关于发送的,同样按以上方法计算。客户端的调整:使用 TCP Optimizer 软件,选择相应的接入方式优化即可。软件在这里下载相信按以上的修改速度会有很大的提高。现在的问题是:对于光纤接入的用户比较好办,直接按照以上的设置即可。对于ADSL用户就存在取舍的问题了,毕竟局域网内的MTU和ADSL线路上的MTU是不同的。非倍数的RWIN究竟会有多少性能上的影响?欢迎指教。。。
routeros
 楼主| 发表于 2005-2-5 20:29:47 | 显示全部楼层
补充,如果你用的线路达不到较高的下载速率,rmem_default 设置过大的是没有意义的。不过对使用光纤接入的用户来说,rmem_default 可以设置为更大的值。

QUOTE
/proc/sys/net/ipv4/tcp_sack. 使用Selective ACK?它可以用来找出特定的遗失数据包--- 因而有助于迅速复原
更多的参数请参考:Linux 2.4 Advanced Routing HOWTO 的核心网络参数。
routeros
回复

使用道具 举报

发表于 2005-2-5 21:16:17 | 显示全部楼层
在网路间的的传输是将资料分成N 个封包,陆续的送达对方,而这个封包的大小是由要求送资料的一方来界定,这个值就是MTU (Maximum Transmission Unit)而MSS (Maxmum Segment Size, the largest segment of TCP data that the winsock is prepared to receive on that connection)则是传输协定所界定,接收方准备要接收的每节资料的大小(一般就是MTU 减 40 bytes,这40bytes是让每个封包储存传送封包时的一些基本资料,MSS 是我方接收时去掉这40 bytes後的资料)至於 RWIN (the TCP Receive WINdow)则是我们的电脑每次要收受存入的资料大小,一般是MSS 乘 4倍(或6 倍,8 倍)最高不要超过10倍,也就是我们的传输协定每次在收到4 节资料後,才送给电脑接收。Rwin是决定你的电脑准备接收多少数据,如果Rwin太高,那么一旦信息安在传输中丢失或破坏时,整个数据都会丢失,而如果Rwin太低,将会产生很低的输出。推荐Rwin值应当是MSS值的4倍,而当你下载大文件或浏览的网页中存在大量图片时,你可以将Rwin值改为6倍或8倍
routeros
回复

使用道具 举报

 楼主| 发表于 2005-2-5 21:51:02 | 显示全部楼层
to bow:MTU = 4 * MSS ?
routeros
回复

使用道具 举报

发表于 2005-2-5 22:02:13 | 显示全部楼层
QUOTE (哈啤猫 @ Feb 5 2005, 09:51 PM)
to bow:MTU = 4 * MSS ?  
  RWIN (the TCP Receive WINdow)则是我们的电脑每次要收受存入的资料大小,一般是MSS 乘 4倍(或6 倍,8 倍)最高不要超过10倍你看错了吧
routeros
回复

使用道具 举报

 楼主| 发表于 2005-2-5 22:13:42 | 显示全部楼层
我写错了。。。RWUIN = 4 * MSS ? 我第一个贴子里面为什么要乘 44 ?糊涂呢。
routeros
回复

使用道具 举报

 楼主| 发表于 2005-2-7 16:00:12 | 显示全部楼层
QUOTE
Tuning a Linux 2.4 systemEnabling and disabling some of the advanced features of TCP:(Usually it is a good idea for these to be enabled)

QUOTE
        /proc/sys/net/ipv4/tcp_timestamps        /proc/sys/net/ipv4/tcp_window_scaling        /proc/sys/net/ipv4/tcp_sack
To enable all these features, for example, do the following as root:

QUOTE
        echo 1 > /proc/sys/net/ipv4/tcp_timestamps        echo 1 > /proc/sys/net/ipv4/tcp_window_scaling        echo 1 > /proc/sys/net/ipv4/tcp_sack
Path MTU discovery can be enabled and disabled using the following boolean sysctl variable:       

QUOTE
/proc/sys/net/ipv4/ip_no_pmtu_disc
But be on the lookout for blackholes if this is enabled, as indicated at the beginning of the document. Please see the following URL for additional documentation on sysctl variables:http://www.linuxhq.com/kernel/v2.4/doc/net...sysctl.txt.htmlTuning the default and maximum window sizes:

QUOTE
        /proc/sys/net/core/rmem_default   - default receive window        /proc/sys/net/core/rmem_max       - maximum receive window        /proc/sys/net/core/wmem_default   - default send window        /proc/sys/net/core/wmem_max       - maximum send window        /proc/sys/net/ipv4/tcp_rmem       - memory reserved for TCP rcv buffers        /proc/sys/net/ipv4/tcp_wmem       - memory reserved for TCP snd buffers
The following values would be reasonable for path with a large BDP:

QUOTE
        echo 8388608 > /proc/sys/net/core/wmem_max        echo 8388608 > /proc/sys/net/core/rmem_max        echo "4096 87380 4194304" > /proc/sys/net/ipv4/tcp_rmem        echo "4096 65536 4194304" > /proc/sys/net/ipv4/tcp_wmem
You will find a short description in LINUX-SOURCE_DIR/Documentation/networking/ip-sysctl.txtIf you would like these changes to be preserved across reboots, it may be a good idea to add these commands to your /etc/rc.d/rc.local file.Linux users may want to look into the Web100 project. In addition to providing complete instrumentation of the TCP stack, it has features for doing auto tuning of send and receive buffers.For paths with a very large BDP, it also has some features that will allow you to get better transfers.User testimonial: With the tuned TCP stacks it was possible to get a maximum throughput between 1.5 - 1.8 Mbit/s via a 2Mbit/s satellite link, measured with netperf.
routeros
回复

使用道具 举报

发表于 2005-2-13 04:25:24 | 显示全部楼层
这个MM是谁了。。
routeros
回复

使用道具 举报

 楼主| 发表于 2005-2-16 19:13:19 | 显示全部楼层
你访问这个站点:http://www.speedguide.net:8117/建议值就是 * 44 的。
routeros
回复

使用道具 举报

发表于 2005-2-19 15:59:13 | 显示全部楼层
没看懂了.
routeros
回复

使用道具 举报

发表于 2005-2-24 16:06:02 | 显示全部楼层
我也想设置一下, 就是看不懂!
routeros
回复

使用道具 举报

 楼主| 发表于 2005-2-24 17:11:06 | 显示全部楼层
QUOTE
对于不同大小的封包,RWIN的值应该是不同的,也就是说,因子应该是可变的。从 1 到 8,即 2 的 0 次幂到 2 的 3 次幂。
这里弄错了,嘿嘿,应该是 2 的倍数,但是不知道为什么他们都取 2 的幂来计算。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-11-24 04:56 , Processed in 0.057443 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表