)
起到tcp加快通信的作用
net.ipv4.tcp_fastopen 系统开启TFO功能
Tcp Fast Open nginx配置,指定TFO连接队列长度
listen addres[:port][fastopen=number];
nginx超时指令和滑动窗口
client_body_timeout time; // 默认60s
send_timeout time; // 默认60s
proxy_timeout timeout; // 默认10m
net.ipv4.tcp_rmem=4096 87380 6291456
net.ipv4.tcp_wmem=4096 16384 4194304
net.ipv4.tcp_mem=1541646 2055528 3083292
net.ipv4.tcp_moderate_rcvbuf=1
net.ipv4.tcp_adv_win_scale=1 应用缓存=buffer/(2^tcp_adv_win_scale)
作用:
1、避免一个连接上同时存在大量小报文:最多只存在一个小报文,合并多个小报文一起发送
2、提高带宽利用率
tcp_nodelay off; // 吞吐量优先,开启Nagle算法。默认on tcp_nodelay on; // 低时延优先,禁用Nagle算法。默认on
postpone_output size; // 默认1460
仅针对sendfile on开启时有效,完全禁止小报文的发送,提升网络效率
tcp_nopush on|off; // 默认off开启
什么是拥塞窗口?发送方主动限制流量
什么是通告窗口?接收方限制流量
实际流量:拥塞窗口与通告窗口的最小值
拥塞处理:
慢启动
拥塞避免
拥塞发送
快速恢复
RTT(Round Trip Time)由物理链路传输时间+末端处理时间+路由器排队处理时间组成。
RTO(Retransmission Time Out)正确的重传之前的丢包
tcp的keepalive和http的keepalive作用是不同的,http是为了复用,tcp则为了尽快释放。
tcp keepalive应用场景:检测实际断掉的连接和用于维持与客户端间防火墙有活跃网络包
linux系统的tcp keepalive:
net.ipv4.tcp_keepalive_time=7200 // 秒
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9
Nginx的tcp keepalive:
什么是SYN攻击:攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,使服务器不能为正常用户服务
net.core.netdev_max_backlog
listen addres[:port][backlog=number]
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_abort_on_overflow
net.ipv4.tcp_syncookies = 1
linux系统一切皆文件,并发的时候文件句柄数有上限
fs.file-max
查看命令:sysctl -a|grep file-max
fs.file-nr=21632 0 40000500
查看命令:sysctl -a|grep file-nr
# /etc/security/limits.conf root soft nofile 65535 root hard nofile 65535
worker_rlimit_nofile number; // 默认无
net.ipv4.tcp_syn_retries=6
net.ipv4.ip_local_port_range=32768 60999
proxy_connect_timeout time; // 默认是60s
net.ipv4.tcp_max_syn_backlog
net.ipv4.tcp_synack_retries
net.core.netdev_max_backlog = 262144
listen addres[:port][backlog=number]
net.core.somaxconn
net.ipv4.tcp_abort_on_overflow
net.ipv4.tcp_syncookies = 1
worker_connections number; // 默认512
net.ipv4.tcp_fastopen 系统开启TFO功能
Tcp Fast Open nginx配置,指定TFO连接队列长度
listen addres[:port][fastopen=number];
client_body_timeout time; // 默认60s
send_timeout time; // 默认60s
proxy_timeout timeout; // 默认10m
net.ipv4.tcp_retries1=3
net.ipv4.tcp_retries2=15
tcp_nodelay off; // 吞吐量优先,开启Nagle算法。默认on tcp_nodelay on; // 低时延优先,禁用Nagle算法。默认on
postpone_output size; // 默认1460
tcp_nopush on|off; // 默认off开启
net.ipv4.tcp_keepalive_time=7200 // 秒
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9