建立TCP链接,如何改变窗口扩大因子

gjf0521 2008-07-15 04:53:21
Linux建立TCP socket链接时,如何改变TCP的wscale大小?有什么方法可以办到吗?
setsockopt?
ioctl?
??
...全文
1055 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sucker2000 2008-07-15
  • 打赏
  • 举报
回复
找楼上说的,是不是我直接去修改/proc/sys/net/下对应的6~9就行了?好奇中。。。
air_snake 2008-07-15
  • 打赏
  • 举报
回复
# man tcp
...
tcp_rmem
This is a vector of 3 integers: [min, default, max]. These
parameters are used by TCP to regulate receive buffer sizes.
TCP dynamically adjusts the size of the receive buffer from the
defaults listed below, in the range of these sysctl variables,
depending on memory available in the system.

min - minimum size of the receive buffer used by each TCP
socket. The default value is 4K, and is lowered to PAGE_SIZE
bytes in low memory systems. This value is used to ensure that
in memory pressure mode, allocations below this size will still
succeed. This is not used to bound the size of the receive
buffer declared using SO_RCVBUF on a socket.

default - the default size of the receive buffer for a TCP
socket. This value overwrites the initial default buffer size
from the generic global net.core.rmem_default defined for all
protocols. The default value is 87380 bytes, and is lowered to
43689 in low memory systems. If larger receive buffer sizes are
desired, this value should be increased (to affect all sockets).
To employ large TCP windows, the net.ipv4.tcp_window_scaling
must be enabled (default).

max - the maximum size of the receive buffer used by each TCP
socket. This value does not override the global
net.core.rmem_max. This is not used to limit the size of the
receive buffer declared using SO_RCVBUF on a socket. The
default value of 87380*2 bytes is lowered to 87380 in low memory
systems.
...

至于为什么是5840我也不清楚了。
关于最后一个问题,建议读一下《详解》第20章的内容,或者《UNP》中关于SO_RCVBUF选项的阐述。



所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数, 后面是它们的含义:


1. /proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲
2. /proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲
3. /proc/sys/net/ipv4/tcp_timestamps — 时间戳在(请参考RFC 1323)TCP的包头增加12个字节
4. /proc/sys/net/ipv4/tcp_sack — 有选择的应答
5. /proc/sys/net/ipv4/tcp_window_scaling — 支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
6. rmem_default — 默认的接收窗口大小
7. rmem_max — 接收窗口的最大大小
8. wmem_default — 默认的发送窗口大小
9. wmem_max — 发送窗口的最大大小

/proc目录下的所有内容都是临时性的, 所以重启动系统后任何修改都会丢失.

建议在系统启动时自动修改TCP/IP参数:

把下面代码增加到/etc/rc.local文件, 然后保存文件, 系统重新引导的时候会自动修改下面的TCP/IP参数:

echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max

echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling

TCP/IP参数都是自解释的, TCP窗口大小设置为256960, 禁止TCP的时间戳(取消在每个数据包的头中增加12字节), 支持更大的TCP窗口和TCP有选择的应答.

上面数值的设定是根据互连网连接和最大带宽/延迟率来决定.

注: 上面实例中的数值可以实际应用, 但它只包含了一部分参数.

另外一个方法: 使用 /etc/sysctl.conf 在系统启动时将参数配置成您所设置的值:

net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧