10tcp缓冲区大小设置

在 socket用户缓冲区、socket内核缓冲区与tcp协议buffer(滑动窗口)的关系 中,我们最主要的,认为java socket的缓冲区即是tcp滑动窗口

本文予以实践认证

在之前的例子代码中,socket缓冲区与沾包 nagle in tcp,两边加上s.getReceiveBufferSize()查看默认缓冲区大小

 

0 腾讯 centos 7 

[root@VM_0_9_centos ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456
[root@VM_0_9_centos ~]# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304

 

1 服务端 centos 7(腾讯云) 客户端 mac

服务端 centos 7(腾讯云)

flush - false
43690
^C[root@VM_0_9_centos ~]# rm -rf *
[root@VM_0_9_centos ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456

 

客户端 mac

131860

131860

 

(1)默认情况

 C 131840 S 28960

 

(2)将两边都改为100

C 17496 S 1152 

 

(3)两边3000

 C 42360 S 2896

 

 看上去linux起作用了,client mac没起作用

因此我们将客户端也搬到linux上 

 

2 服务端 centos 7(腾讯云) 客户端 centos 6.8(阿里云)

 

服务端 centos 7(腾讯云)

flush - false
43690
[root@VM_0_9_centos ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456

 

客户端 centos 6.8(阿里云)

43690 注释read
8192 注释 write
[root@iZ8vbdtd5039a0ye0oy5o4Z ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 1970176

 

(1)默认情况

C 14624 S 28960

 

(2)两边100

C(阿里) 1472 S(腾讯) 1152

 

(3)两边3000

C 4284 S 2896

 

 

3 服务端 centos 6.8(阿里云)客户端 centos 7(腾讯云)

 (注意,阿里云要额外配置端口准入)

服务端 centos 6.8(阿里云)

flush - false
43690
^C[root@iZ8vbdtd5039a0ye0oy5o4Z ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 1970176

 

客户端 centos 7(腾讯云)

43690
8192
hello
[root@VM_0_9_centos ~]# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 6291456

 

做个(2)两边100

C(腾讯) 1152  S(阿里) 1448

 

 

总结:

1 本文通过抓包找Win关键字,并通过反复设置,验证了socket(java)的缓冲区即是内核缓冲区与tcp滑动窗口

2 linux 默认读缓冲区并不是网上说的8k;接受窗口最大值也不是16位,看max?!

3 CentOS Linux release 7.5.1804 (Core) (腾讯)与 CentOS release 6.8 (Final)(阿里)存在一些差异,但基本按设置值响应了setSO_RCV_BUF,腾讯的更近些

4 以100设置为SO_RCV_BUF,系统会放到1100-1400

5 mac 本地没有响应 setSO_RCV_BUF,https://www.iteye.com/blog/zhangyafeikimi-289019 该文中指出,windows也不鸟你

6 注意对于客户端,要在connect前设置,对于服务端,要在bind前设置

7 linux默认40k读、8k写

 

 

tcp缓冲区设置抓包7.zip

内涵7个文件

mac - linux(腾讯)默认 100 3000

linux(阿里)-linux(腾讯)默认 100 3000

linux(腾讯)-linux(阿里)100

posted on 2019-12-09 14:56  silyvin  阅读(2697)  评论(0编辑  收藏  举报