net.ipv4.tcp_window_scaling = 1 --启用tcp窗口--
net.core.rmem_max=16777216 --最大的TCP数据接收窗口--
net.core.wmem_max=16777216 --最大的TCP数据发送窗口--
syn 报文重发
一般情况下,ACK 报文会在几毫秒内返回。如果客户端迟迟没有收到 ACK,客户端会以翻倍的方式在第 2、4、8、16、32 秒共做 6 次重试,总耗时 127s。可以降低重试次数
net.ipv4.tcp_synack_retries = 2 --第一次握手重发--
net.ipv4.tcp_syn_retries = 2 --第二次握手重发--
半连接队列长度
服务端状态在 SYN_RECV 下,会建立一个 SYN 半连接队列来维护未完成的握手信息,当这个队列溢出后,服务器将无法再建立新连接。可以适当增加队列长度
net.ipv4.tcp_max_syn_backlog = 262144 --半连接队列长度--
绕开半连接队列
如果 SYN 半连接队列已满,可以开启 syncookies 功能,在不使用 SYN 队列的情况下也能建立连接。
net.ipv4.tcp_syncookies = 1。--0表示关闭,1表示开启--
accept 队列
服务器收到 ACK 后表示连接建立成功,此时内核会把连接从半连接队列中移出再移入 accept 队列,等待进程调用 accept 函数时把连接取出来。如果进程不能及时地调用 accept 函数,就会造成 accept 队列溢出
net.core.somaxconn = 16384 --accept队列长度--
RST 复位
accept 队列溢出会导致建立好的 TCP 连接被丢弃。我们可以选择向客户端发送 RST 复位报文,告诉客户端连接已经建立失败。通常会出现下面这两个错误
Connection reset/Connect reset by peer
net.ipv4.tcp_abort_on_overflow=1 --设置为0可以提高连接建立的成功率--
TIME_WAIT
当 TIME_WAIT 的连接数量超过 buckets,新关闭的连接就不再经历 TIME_WAIT 而直接关闭
net.ipv4.tcp_max_tw_buckets = 5000
收发数据包
这个参数设置为 0,会导致内网中断
echo "1" > /proc/sys/net/ipv4/ip_forward --0禁用,1启用--