1.
为何选择香港线路与关键指标
- 说明:香港节点距离亚洲主要玩家近,延迟低且出海链路稳定。
- 指标:目标RTT<40ms(同省/相近地区),丢包<0.5%,抖动<10ms。
- 小结:先确认玩家分布并建立SLA目标,后续配置以这些目标为基准。
2.
准备工作与硬件/链路检查清单
- 硬件:支持SFP+或至少千兆的网卡、企业级路由器或光纤ONU、硬件防火墙(若在机房)。
- 链路:与香港本地ISP确认对等(peering)质量、并获取BGP或多线链路方案。
- 工具:ssh登录、iperf3、mtr、tcpdump、ping、netstat、htop。
3.
带宽与端口规划(实际步骤)
- 步骤1:统计并估算并发玩家与流量(每人上行/下行平均带宽)。例如:1000并发×0.1Mbps≈100Mbps。
- 步骤2:购买至少1.5×峰值的链接作为突发容量(例:预估100Mbps则买150Mbps以上)。
- 步骤3:在机房侧开通端口镜像用于抓包,以便后续排查丢包来源。
4.
Linux服务器上QoS与队列(tc)详细配置
- 标记流量:使用iptables为游戏UDP/TCP打DSCP或mark,示例:iptables -t mangle -A PREROUTING -p udp --dport 30000:40000 -j DSCP --set-dscp-class CS5
- 建立根队列:tc qdisc add dev eth0 root handle 1: htb default 30
- 创建类与限速:tc class add dev eth0 parent 1: classid 1:1 htb rate 150mbit ceil 150mbit;为游戏流量建1:10 rate 120mbit
- 应用过滤器:tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10(fw需与iptables MARK一致)
- 延迟控制(测试用):tc qdisc add dev eth0 parent 1:10 handle 10: netem delay 10ms loss 0.1%(仅用于测试,生产慎用loss注入)。
5.
家用/小型路由器与MikroTik、OpenWrt设置步骤
- OpenWrt:使用SQM(Smart Queue Management)插件,安装 luci-app-sqm,选择接口、qdisc设为 cake 或 fq_codel,设置上传下载速率为实际减去10%缓冲。
- MikroTik:在Winbox或CLI创建队列树(Queue Tree)并用Queue Types设置sfq或fq_codel;示例CLI:/queue tree add parent=global queue=default-smallest max-limit=150M name=games target=0.0.0.0/0 packet-mark=game_mark
- 标记包:用Firewall mangle规则标记游戏端口流量。
6.
丢包与MTU/MSS调整、内核参数调优(实操)
- MTU检查:使用ping -M do -s
测试,若跨越隧道或VPN需调小MTU到1400或1380。
- MSS clamping(防止分片):在iptables转发链加规则:iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu。
- 内核参数(/etc/sysctl.conf):net.ipv4.tcp_congestion_control=bbr(可选);net.core.netdev_max_backlog=2500;net.ipv4.tcp_tw_reuse=1;应用sysctl -p。
7.
监测、测试与持续优化步骤
- 测试步骤:1)用iperf3测带宽和丢包(client->server),2)用mtr从玩家侧或第三方监测到香港节点,3)部署smokeping或Prometheus监控丢包/延迟。
- 抓包排查:tcpdump -i eth0 port 30000 -w game.pcap;用Wireshark分析重传与丢包点。
- 持续:按周比对延迟/丢包数据,若某ISP波动大,申请路由优化或切换到备用链路。
8.
问:如何快速判断延迟来源是本地网络还是到香港中间链路?
- 答:先从服务器端和玩家端分别用ping与mtr探测。若服务器到网关延迟低且无丢包,问题多在中间链路或ISP;用多点mtr能定位丢包跃点,配合机房ISP确认。
9.
问:生产环境中是否应该使用tc netem注入延迟/丢包?
- 答:netem仅用于测试(复现问题、回归测试),生产不应注入延迟或丢包。生产应使用fq_codel/cake减少队头阻塞,并合理设置类和优先级。
10.
问:如果玩家分布广,香港节点如何与CDN或多点部署配合?
- 答:静态资源放CDN,游戏实时连接用香港或就近节点+Anycast/BGP多点。对实时交互可做区域性服务器并通过地理调度或DNS策略将玩家引导到延迟最低的节点,同时对跨区玩家做专线或优化路由。
来源:面向游戏的香港服务器流量设置方法 延迟与丢包控制技巧