TCP拥塞算法
- Tahoe
- Reno
- Vegas
约定俗成, 使用发明的地点命名.
sysctl
socket 相关选项
SO_RCVBUF / SO_SNDBUF
读写缓存区大小
SO_RCVLOWAT / SO_SNDLOWAT
SO_REUSEADDR
SO_REUSEPORT
多个进程监听同一个端口, 一个请求由系统分发给一个进程去处理, 减少了业务层级的争用. nginx在1.9.1之后引入 reuseport. 之前使用 accept_mutex 来分发请求.
TCP_NODELAY
都是牺牲Latency以提高Efficiency.
TCP_NODELAY 关闭了Nagle算法, 适用于对实时性要求很高的场景, 如实时网络游戏.
TCP_DEFER_ACCEPT
在有数据之后再接受连接, 减少了上下文切换的开销.
TCP Fast Open
TCP_FASTOPEN
建立连接时发送cookie信息, 避免了三次握手带来的开销.
net.ipv4.tcp_fastopen
SO_KEEPALIVE
TCP Keep Alive
如果打开KEEPALIVE, 系统的默认参数
- tcp_keepalive_time
- tcp_keepalive_intvl
- tcp_keepalive_probes
也可以使用自定义的选项
- TCP_KEEPIDLE 链接处于空闲状态超过该数值后, 开始探测链接
- TCP_KEEPINTVL 探测的间隔
- TCP_KEEPCNT 最多探测的次数
SO_LINGER
sysctl
/proc/sys/net/ipv4/
- net.ipv4.tcp_tw_reuse
- net.ipv4.tcp_tw_recycle
Reference
- Coping with the TCP TIME-WAIT state on busy Linux servers
-
http://coryklein.com/tcp/2015/11/25/custom-configuration-of-tcp-socket-keep-alive-timeouts.html
- https://idea.popcount.org/2017-02-20-epoll-is-fundamentally-broken-12/
nginx相关选项