linux下SO_RCVBUF的默认值

linux下SO_RCVBUF的默认值,第1张

网上的说法,SO_RCVBUF的默认值是 /proc/sys/net/core/rmem_default,能设置的最大值是/proc/sys/net/core/rmem_max。但是也有说法,对于tcp,值会受到 /proc/sys/net/ipv4/tcp_rmem 的影响。自己写个程序实测一下。先读一下CentOS7下各参数的默认值

[root@localhost ~]# cat /proc/sys/net/core/rmem_default

212992

[root@localhost ~]# cat /proc/sys/net/core/rmem_max

212992

[root@localhost ~]# cat /proc/sys/net/ipv4/tcp_rmem

409687380 6291456

跑一个最简单的tcp client测试程序

跑一下,输出为

recv_buf_size = 367360

很明显,大于rmem_default、rmem_max,也大于tcp_rmem[1]。试着修改一下这几个参数,看程序输出有啥变化

echo 4000000 >/proc/sys/net/core/rmem_default

echo 4000000 >/proc/sys/net/core/rmem_max

recv_buf_size = 367360

没有变化,说明对于tcp,rmem_default、rmem_max是不起决定性作用的。

echo "409647380 6291456" >/proc/sys/net/ipv4/tcp_rmem

recv_buf_size = 367360

echo "409687380 87380" >/proc/sys/net/ipv4/tcp_rmem

recv_buf_size = 87380

似乎说明tcp_rmem[1]对于接受缓冲区默认值不起作用,但是tcp_rmem[2]对最大值限制是起作用的。要注意到,上面的测试程序中,getsockopt是发生在connect成功后的。如果把getsockopt放在socket建立后,connect调用前呢?

echo "409647380 6291456" >/proc/sys/net/ipv4/tcp_rmem

recv_buf_size = 47380

echo "409687380 6291456" >/proc/sys/net/ipv4/tcp_rmem

recv_buf_size = 87380

这时候,就跟tcp_rmem[1]完全一致了。

接着试验setsockopt。先设置SO_RCVBUF为1 1024 1024,然后再用getsockopt读出来,看看什么结果

recv_buf_size = 425984

明显大小被限制了。这个限制值看起来跟tcp_rmem[3]三个值都没关系,但正好是 /proc/sys/net/core/rmem_max 的两倍。

https://man7.org/linux/man-pages/man7/tcp.7.html

tcp连接建立时,SO_RCVBUF初始化为tcp_rmem[1]。随着tcp握手及通信,SO_RCVBUF是会动态调整的,调整的范围不受rmem_max限制,只受tcp_rmem[2]的限制。但是如果手动通过setsockopt设置接收缓冲区大小,则自动调整接收缓冲区大小的机制失效,而且setsockopt是否成功会受到rmem_max的限制。

https://stackoverflow.com/questions/31546835/tcp-receiving-window-size-higher-than-net-core-rmem-max/35438236#comment58576526_35438236

1.作用

useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。

2.格式

3.主要参数

-c:加上备注文字,备注文字保存在passwd的备注栏中。

-d:指定用户登入时的主目录,替换系统默认值/home/用户名>

-D:变更预设值。

-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。

-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.

-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。

-G:指定用户所属的附加群组。

-m:自动建立用户的登入目录。

-M:不要自动建立用户的登入目录。

-n:取消建立以用户名称为名的群组。

-r:建立系统账号。

-s:指定用户登入后所使用�š.shell。默认值为/bin/bash。

-u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。

4.说明

useradd可用来建立用户账号,它和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

5.应用实例

建立一个新用户账户testuser1,并设置UID为544,主目录为/usr/testuser1,属于users组:

加-m 如果主目录不存在则自动创建

6.例如

使用管理员账号登陆系统,建立用户tmp_3452 密码3sdt5:Eawhg

添加用户命令:

修改密码命令:

在系统出现提示输入密码是输入密码:3sdt5:Eawhg 系统提示输入确认密码后再输入一次。OK添加成功。

7.useradd批量添加用户

使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

步骤如下:

(1)建立用户名列表文件username.txt (同上)

(2)创建用户密码对应文件serc.txt,格式为username:password (注意文件的格式)

(3)批量添加的脚本文件aa.sh

新建完成useradd命令,在执行没有出错的情况下,不会输出任何的信息,不会与用户交互。但是用户必须要记住那些设置项目,否则添加的用户可能出现一些预想不到的结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8554399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存