🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
调整数据包的生存周期 TTL 增大每个套接字的缓冲区大小 ## 套接字 * 调整读/写缓冲区大小 * 增大每个套接字的缓冲区大小`net.core.optmem_max`。 * 增大套接字接收缓冲区大小`net.core.rmem_max`和发送缓冲区大小`net.core.wmem_max`。 * 增大 TCP 接收缓冲区大小`net.ipv4.tcp_rmem`和发送缓冲区大小`net.ipv4.tcp_wmem`。 * 增大 UDP 接收缓冲区大小`net.ipv4.udp_rmem`和发送缓冲区大小`net.ipv4.udp_wmem`。TCP 行为 * 开启 TCP\_NODELAY,禁用 Nagle 算法。 * 开启 TCP\_CORK,让小包聚合成大包后再发送。 ## 网络层 * 路由和转发 * 调整数据包的生存周期 TTL,比如设置`net.ipv4.ip_default_ttl`为 64。**增大该值会降低系统性能**。 * 开启数据包的反向地址校验,比如将`net.ipv4.conf.eth0.rp_filter`置 1。这样可以防止 IP 欺骗,并减少伪造 IP 带来的 DDoS 问题。 * 分片 * VXLAN、GRE 等网络叠加技术会使原来的网络包变大,而以太网标准规定一个网络帧最大 1518 字节,增大交换机、路由器等的 MTU 或减小 VXLAN 封包前的 MTU。 * 支持“巨帧”的网络设备调大 MTU。 * ICMP * 禁止 ICMP 协议,即将`net.ipv4.icmp_echo_ignore_all`置 1 防止 ICMP 嗅探主机。 * 禁止广播 ICMP,即将`net.ipv4.icmp_echo_ignore_broadcasts`置 1。 ## 传输层 ### TCP * 流量比较大的场景下有大量处于 TIME\_WAIT 状态的连接 * 增大处于 TIME\_WAIT 状态的连接数量`net.ipv4.tcp_max_tw_buckets`,并增大连接跟踪表的大小 net.netfilter.nf\_conntrack\_max。 * 减小`net.ipv4.tcp_fin_timeout`和`net.netfilter.nf_conntrack_tcp_timeout_time_wait`,让系统尽快释放它们所占用的资源。 * 开启端口复用`net.ipv4.tcp_tw_reuse`。这样,被 TIME\_WAIT 状态占用的端口,还能用到新建的连接中。 * 增大本地端口的范围`net.ipv4.ip_local_port_range`。这样就可以支持更多连接,提高整体的并发能力。 * 增加最大文件描述符的数量,`fs.nr_open`调大进程的最大文件描述符数,`fs.file-max`调大系统的最大文件描述符数。 * 缓解 SYN 洪水 * 增大 TCP 半连接的最大数量`net.ipv4.tcp_max_syn_backlog`。 * 开启 TCP SYN Cookies`net.ipv4.tcp_syncookies`(不能与上面同时使用)。 * 减少 SYN\_RECV 状态的连接重传 SYN+ACK 包的次数`net.ipv4.tcp_synack_retries`。 * 优化与 Keepalive 相关的内核选项,对端连接断开后,可以自动回收 * 缩短最后一次数据包到 Keepalive 探测包的间隔时间`net.ipv4.tcp_keepalive_time`。 * 缩短发送 Keepalive 探测包的间隔时间`net.ipv4.tcp_keepalive_intvl`。 * 减少 Keepalive 探测失败后,一直到通知应用程序前的重试次数`net.ipv4.tcp_keepalive_probes`。 ## 应用层 * 网络 I/O 技术 * epoll(Nodejs、Golang、Netty) * AIO(Python asyncio) * 进程工作模型 * master + N x worker,主进程负责管理网络连接,而子进程负责实际的业务处理。 * SO\_REUSEPORT 将多个进程或者线程绑定到同一端口 * 网络协议优化 * 使用长连接降低 TCP 连接建立成本(WebSocket)。 * 使用 gRPC 相比 HTTP 可以大幅减小单次网络 I/O 数据量。 * DNS 缓存、预取、HTTPDNS 等方式,减少 DNS 解析的延迟。