1.1 目的:在保持香港物理高防服务器DDoS防护能力的前提下,将网络与系统延迟降到最低,适用于实时游戏、金融撮合、语音/视频低延迟场景。
1.2 前提条件:具备root权限或管理员权限、可重启维护窗口、了解当前网络拓扑(公网IP、BGP/国际出口、机房架构)。建议先备份系统配置文件:/etc/sysctl.conf、/etc/hosts、防火墙规则等。
1.3 工具准备:准备好远程终端、mtr、iperf3、tc、ethtool、tcpdump、ss、netstat、strace 等工具,用于测试与排错。
2.1 检查路由路径:使用 mtr <目标IP> 或 traceroute -n <目标IP>,记录跳数与丢包点。若跨境延迟高或存在丢包,先联系机房运营商查询BGP策略。
2.2 使用多线路/多家BGP:在机房申请多出口(电信/联通/移动/海外直连),配置BGP多线并做智能回源或源站选择。步骤:联系机房添加BGP邻居、在路由器侧设置不同AS路径权重(local-pref/AS-path prepending)以优先选择延迟最低的出口。
2.3 Anycast与近源调度:如果服务允许,采用Anycast部署多个香港节点,并在DNS或BGP层做最近路由广告,缩短网络距离。实施步骤:与网络提供商同步Anycast前缀,验证每个POP的延迟并监控。
3.1 精细化防护策略:避免把所有流量都走深度包检(DPI);对延迟敏感端口(UDP游戏/金融)采用速率限制+白名单而非复杂检测。步骤:在高防控制台创建规则组,指定端口/源IP白名单与速率阈值。
3.2 分流与直连策略:对可信或VIP客户源做直连(bypass),把怀疑流量导入高防清洗池。实现:在边界路由或防护产品中配置ACL,优先匹配直连列表。
3.3 清洗节点选址:选择靠近香港出口的清洗节点,避免流量被远端清洗导致回程抖动。与防护服务商协商清洗链路优先级。
4.1 临时查看与设置(即时生效):使用 sysctl -w net.core.default_qdisc=fq 或者 bbr。示例:sysctl -w net.ipv4.tcp_congestion_control=bbr
4.2 推荐参数(写入 /etc/sysctl.conf 并 sysctl -p):
- net.core.rmem_max=67108864
- net.core.wmem_max=67108864
- net.ipv4.tcp_rmem="4096 87380 67108864"
- net.ipv4.tcp_wmem="4096 65536 67108864"
- net.ipv4.tcp_congestion_control=bbr(或 copa/ledbat 视场景)
- net.ipv4.tcp_low_latency=1(若内核支持)
4.3 启用TCP快速打开与时间戳(视应用兼容性):sysctl -w net.ipv4.tcp_fastopen=3; sysctl -w net.ipv4.tcp_timestamps=1
5.1 查看网卡能力:ethtool -k eth0;确认是否支持TSO/GSO/LRO和硬件会话卸载。
5.2 适当开启或关闭硬件卸载:对于高频小包场景(游戏),关闭LRO可以降低延迟:ethtool -K eth0 lro off gso off gro off;测试延迟是否改善并记录。
5.3 IRQ亲和与RPS/RCU调优:绑定网卡中断到特定CPU核,减少调度延迟:
- 查看中断号:cat /proc/interrupts | grep eth0
- 设置亲和:echo 2 > /proc/irq/
5.4 设置RPS(接收包软中断分发):echo
6.1 清空现有规则:tc qdisc del dev eth0 root(若无则忽略)。
6.2 简单优先级队列(优先处理实时流量):
tc qdisc add dev eth0 root handle 1: prio
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 10000 0xffff flowid 1:1(将关键端口放到高优先级队列)。
6.3 使用 fq_codel 或 cake 减少队列延迟:tc qdisc add dev eth0 root fq_codel 或 tc qdisc add dev eth0 root cake bandwidth 1gbit。测试并观测 RTT 变化。
7.1 使用长连接与连接池:调整应用端连接复用设置(HTTP keepalive、数据库连接池)以减少三次握手带来的延迟。
7.2 TLS加速:启用 TLS 1.3、会话票据(session tickets)、会话恢复和 OCSP stapling,减少握手往返。
7.3 Nagle/NoDelay:对延迟敏感的 TCP 连接设置 TCP_NODELAY:setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on))。
8.1 基线测试:在调优前用 iperf3 -c <目标> -P 10 -t 60 和 mtr -r -c 100 <目标> 记录延迟、抖动与丢包。保存结果。
8.2 每步改动后的A/B测试:修改一组配置后重测(例如改完sysctl后重启网卡并跑iperf3/mtr),对比基线并记录时间戳。
8.3 自动化监控:部署 Prometheus + node_exporter 采集tcp/udp连接数、延迟、丢包,并设置Grafana仪表板与告警。
8.4 回滚方案:对每次变更记录命令与备份文件(例如备份 /etc/sysctl.conf 为 /etc/sysctl.conf.bak.timestamp),发现延迟恶化立即回滚并重启相关服务。
问:在启用高防清洗后延迟明显上升,如何定位并缓解?
答:首先判断清洗是否在远端节点:用 traceroute/mtr 看流量是否走进清洗节点并回流;若是,要求防护商将清洗点迁近或启用香港本地清洗;其次在防护策略上开启直连白名单或对可信源走绕过策略;最终在应用层做缓存或短连接复用以减少回程次数。
问:关闭网卡硬件卸载会不会影响吞吐?如何平衡吞吐和延迟?
答:关闭GSO/TSO/GRO会增加CPU负载、降低吞吐但能减少包处理延迟。平衡方法:在高并发小包场景(游戏、语音)优先降低延迟,选择多核CPU并把中断/软中断合理分配以弥补CPU开销;在大流量文件传输场景保持卸载开启以保障吞吐。
问:如何验证内核参数改动对延迟是否真正有效?
答:使用可量化指标:在改动前后运行 mtr -r -c 200 <目标>、iperf3 进行短时间并发测试,并使用 tcpdump + tcptrace/wireshark 分析往返时间分布(RTT),同时监控CPU和中断负载,确认延迟下降且系统稳定后将参数写入持久配置并列入监控阈值。