SO_KEEPALIVE
连接保活属性,开启时,在tcp链路没数据发送时,定期发送探测数据包用于检查连接是否可用。 默认本属性是关闭的。
参数默认值:
net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9
SO_RCVBUF/SO_SNDBUF
SO_RCVBUF是接收缓冲区size,SO_SNDBUF是发送缓冲区size。
对于客户,这意味着SO_RCVBUF选项必须在调用connect之前设置
对于服务器,这意味着SO_RCVBUF选项必须在调用listen之前给监听套接字设置
发送缓冲区大小:SNDBufSize = 212992 // 默认
接收缓冲区大小:RCVBufSize = 212992 // 默认用以下命令可以查本系统的默认socket缓冲区size
## centos内核3.10.0
[root@cppcloud ~]# cat /proc/sys/net/core/wmem_default
212992
[root@cppcloud ~]# cat /proc/sys/net/core/wmem_max
212992
[root@cppcloud ~]# cat /proc/sys/net/core/rmem_default
212992
[root@cppcloud ~]# cat /proc/sys/net/core/rmem_max
212992
SO_RCVLOWAT/SO_SNDLOWAT
接收低水位/发送高水位 (byte)
接收数据时只有接收区中的数据超过SO_RCVLOWAT才会给用户层返回;
发送数据时只有发送缓冲区的数据超过SO_SNDLOWAT才会数据发至网络上;
默认值: 1、2048
SO_RCVTIMEO/SO_SNDTIMEO
接收超时时间/发送超时时间
设置为0时是阻塞状态,直到有数据或出错才返回
默认值:0
SO_REUSEADDR
服务端地端口重用
默认是关闭的
服务端程序一般需要设置,否则当进程重启时,旧端口释放完全才能重新在同一端口监听,中间要等时间比较长。
TCP_MAXSEG
接收最大出站 TCP 数据段size。如果这个选项在建立连接前的设置,它将改变发送到另一端初始信息包中的 MSS 值。这个值大于 MTU 接口值将被忽略而不起作用。
TCP_NODELAY
禁止TCP发送时的Nagle算法,默认该算法是启动
Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块
SO_LINGER
控制close系统调用在关闭TCP连接时的行为
默认是关闭的,close()调用立即返回
引用一张图说明
其他
另外说明一下tcp的几个定时器: