免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23337 | 回复: 7
打印 上一主题 下一主题

[网络管理] 如何改变TCP WINDOW SIZE? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-21 18:04 |只看该作者 |倒序浏览
在收到一个TCP SYN包请求的时候,我发现回应的SYN+ACK包的窗口大小固定在5792左右
非常想改变一下,比如把5792改成8192之类
可是实验了几种方法都没有成功
比如:
扩大或缩小了rmem_default、wmem_default、rmem_max、wmem_max,但没有什么效果
是不是需要修改协议栈?需要的话怎样修改?
这个问题困扰我很久了,希望得到大家的指点,谢谢!

我的机器是linux 2.6.21

[ 本帖最后由 ssd6166 于 2008-4-23 17:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-21 22:17 |只看该作者
这应该是固定在内核里的参数,无法改变。

论坛徽章:
0
3 [报告]
发表于 2008-04-21 23:06 |只看该作者
原帖由 ssd6166 于 2008-4-21 18:04 发表
在收到一个TCP SYN包请求的时候,我发现回应的SYN+ACK包的窗口大小固定在5792左右
非常想改变一下,比如把5792改成8192之类
可是实验了几种方法都没有成功
比如:
扩大或缩小了rmem_default、wmem_default、 ...

回应的 ACK 中的 window 是根据回应端的 TCP 栈自己计算出来的,他负责控制 TCP 的慢启动效果
若要改变,除非修改对方 TCP 协议栈,或对他发过来的包做手脚
但是你修改他的目的是什么呢?

论坛徽章:
0
4 [报告]
发表于 2008-04-22 09:45 |只看该作者

回复 #3 platinum 的帖子

首先感谢您和jerrtwjl的回应

您这里说的除非“修改对方的TCP协议栈”是指发送方还是回应方?我要在回应方上进行修改。

我是发现windowsXP发送的窗口大小和linux不一样,所以想知道为什么
并且想尝试更改下linux的发送窗口大小
我觉得发送窗口大小应该和缓冲区的大小有关,所以我尝试着扩大了缓冲区,但是不行
我又觉得这应该和一个初始值有关,可是又没找到这个初始值……
如果找到了这个初值是不是就能修改了?可这个初始值在哪定义的呢?

可能我对慢启动的原理还是不太清楚吧……

希望得到大家指点,谢谢!

论坛徽章:
0
5 [报告]
发表于 2008-04-22 10:55 |只看该作者
窗口在 TCP 栈里面是用来控制速率的,窗口大小和延时结合起来就是速率
Linux 和 Windows 的 TCP 栈的确是不一样的,比如结束一个 TCP 的时候,Windows 是发送 RST,而 Linux 则是双向 FIN
在网络质量发生变化时,TCP 的 window 会自动调整,这个动作叫窗口滑动,而这个窗口的全名叫滑动窗口
具体 TCP 的实现很复杂,需要看 TCP/IP 详解卷一,大概是从 17 章的位置往后看,先把原理看懂,卷二再看实现

论坛徽章:
0
6 [报告]
发表于 2008-04-23 16:25 |只看该作者
我找到在哪里改动了!

首先说下5972这个数字是怎么出来的,在此转贴一段文章以作解释:

---------------------
    tcp_sock->rcv_wnd表示当前接收窗口的大小,这个值在收到对方的数据后,会变动的。它的初始值取接收缓存大小的3/4跟MAX_TCP_WINDOW之间的最小值,MAX_TCP_WINDOW在系统中的定义为32767U。然后,还要根据mss的值作一个调整,调整逻辑是:如果mss大于 3*1460,则如果当前的rcv_wnd大于两倍的mss,就取两倍的mss作为rcv_wnd的值;如果mss大于1460,则如果当前的rcv_wnd大于3倍的mss,就取3倍的mss作为rcv_wnd的新值;否则,如果rcv_wnd大于4倍的mss,就取4倍的mss作为rcv_wnd的新值,我们的实验环境的mss值为1448(因为tcp首部有12字节的时间戳选项),所以rcv_wnd最后被调整为1448*4 = 5792。
---------------------

按照上述说明,找到具体修改的地方是tcp_select_initial_window()函数

由于SYN+ACK的包只是回应SYN的,所以还没有到滑动的时候,这时初值就是窗口值了
^^

论坛徽章:
0
7 [报告]
发表于 2008-04-23 17:53 |只看该作者
感觉他说的可能还是有问题的,我的环境 MSS 是 1440,但是 SYN/ACK 中的 WND 却是 5808
SYN/ACK 中的 MSS 是 1412,回去的 WND 却是 372768

论坛徽章:
0
8 [报告]
发表于 2015-06-09 17:34 |只看该作者
windwos size和scale factor啥关系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP