做运维的朋友大概都遇到过这种怪事:机房内网怎么测都稳得像一条直线,可一到外网,丢包就像过山车一样忽高忽低。内网不丢包,说明香港服务器本身的网卡、交换机、网线、操作系统协议栈这些硬件和底层配置都是正常的。服务器能正常收发数据包,也能正确处理ICMP请求。那为什么换上公网IP就不行了?
关键区别在于:内网流量只在机房内部走,最多经过一两台交换机;而外网流量要经过运营商骨干网、国际出口、海底光缆、对端ISP……中间环节少说有十几个路由节点,任何一个节点出问题,丢包就来了。所以香港服务器外网丢包,90%以上的原因不在服务器本身,而在公网路径上。
香港作为亚洲的互联网枢纽,带宽资源其实很丰富,很多ISP都提供国际带宽。但恰恰因为“枢纽”这个身份,导致香港服务器面临的网络环境比新加坡、日本、韩国都要复杂。内地到香港的流量,虽然地理上很近,但中间要过GFW、过运营商的国际出口,还要经过香港这边的边境路由器。如果用的是“混合带宽”或者“国际带宽共享”的香港服务器,高峰期很容易出现拥塞。
另外香港本地有几十家ISP,像PCCW、HGC、HKIX、中国电信国际、中国联通国际等等。不同ISP之间的互联带宽并不总是充足的,有时候你的服务器用了A运营商的带宽,而你的客户走的是B运营商的线路,两家运营商之间的peer点带宽不够,丢包就来了。
一、最常见的几个元凶
1. 运营商国际出口拥塞
这是内地客户访问香港服务器时最常见的问题。中国电信、联通的国际出口带宽就那么多,晚高峰(通常是晚上8点到11点)大家都在用,出口路由器队列一满,只能随机丢包。
你ping一下,可能前50个包都正常,第51个突然超时,后面又好了——这种“阵发性丢包”基本上就是出口拥塞。
2. 路由绕路
有时候运营商为了省钱或者因为线路故障,会把流量调到备用的长线路上。比如香港到广东的流量,正常应该直连,但某些情况下会绕到美国西海岸再回来——一来一回几百毫秒延迟不说,中间经过的节点多了,丢包概率自然增加。
用traceroute看一下路由路径,如果发现中间跳数超过15跳,或者出现了明显不属于亚洲的IP段(比如洛杉矶、圣何塞的节点),基本就是绕路了。
3. DDoS攻击或流量清洗
香港机房很多都自带基础的DDoS防护。如果你的服务器正在被攻击,或者机房的防护设备把某些正常流量误判成了攻击流量,就会主动丢包。这种现象的特点是:丢包率比较稳定,比如固定丢5%或10%,而且不管什么时候测都丢。
4. 带宽跑满
香港服务器的带宽普遍比内地机房贵不少,很多小机房会偷偷超卖。你的标称是10M独享,但邻居有个跑PT的狂人,或者机房整体出口带宽跑满了,你的流量就会被限速或者丢包。
这种情况内网测不出来,因为内网带宽是独立的;但一到外网,出了机房的交换机之后,大家就挤在一起了。
5. 运营商之间的互联瓶颈
香港本地有HKIX(香港国际互联网交换中心),理论上连接到HKIX的ISP之间可以免费对内互联。但不是所有运营商都接入了HKIX,也不是所有流量都走HKIX。
比如你的服务器接的是PCCW,而客户用的是移动的国际专线,两家之间的互联带宽可能只有10Gbps,高峰期直接干满,丢包免不了。
二、怎么判断到底是哪里出了问题?
手把手教几个排查命令:
第一步:确认问题范围
从多个地点同时ping你的香港服务器。可以用免费的主机监控服务,或者找朋友在不同城市、不同运营商帮忙测一下。
如果所有地点都丢包 → 问题可能在服务器所在机房或上游ISP
如果只有部分地区丢包(比如只有电信丢、联通不丢) → 问题在特定运营商的国际线路上
第二步:MTR看每一跳的丢包情况
MTR是比ping和traceroute更强大的工具,它能显示路径上每一跳的丢包率和延迟。
在本地运行(Windows可以用WinMTR,Linux/macOS直接mtr):
mtr --report 你的香港服务器IP
看结果的时候有个技巧:不要只看中间某一跳的丢包,要看最终一跳的丢包。因为很多中间路由器为了性能会优先转发数据包、自己却不回复ICMP,导致中间跳显示丢包但实际没丢。
如果最终一跳丢包,而前面某一跳开始丢包率不再增加,那问题大概率就在那一跳之后的链路上。
第三步:对比TCP和ICMP
ping用的是ICMP协议,但你的业务跑的是TCP。有些运营商或者防火墙会针对ICMP做限速(觉得ping包不重要),导致ICMP丢包但TCP正常;反过来也有可能,TCP被限速但ICMP正常。
用tcping或者curl看下实际端口的连通性,如果ping丢包但业务端口稳如老狗,那就是ICMP被限了,不用管。
三、香港服务器外网丢包的解决方案
根据不同的原因,解法不一样:
如果是运营商国际出口问题:换用CN2/GIA线路(贵但稳),或者用BGP服务器,让流量自动走最优路径。实在不行就加个CDN,动态内容也可以考虑用香港本地CDN
如果是机房带宽超卖:换靠谱的供应商,别图便宜,要求提供独享带宽证明,或者直接买独享端口
如果是路由绕路:找机房申请调整路由(有些机房允许客户提交优化申请),换一个上游ISP的IP段试试
如果是DDoS清洗误伤:联系机房调整防护阈值或者买高防IP,把流量先过一遍清洗中心
总结:内网不丢、外网丢,这个问题在香港服务器上尤其常见,根本原因是香港作为国际互联网枢纽,流量路径太复杂了。很多时候不是服务器本身的问题,而是“路”的问题。
做运维的都知道一个道理:内网正常只说明服务器没坏,外网丢包先从链路找原因。不要一上来就重启、重装、换网卡,先花十分钟跑个MTR,可能问题就定位清楚了。
相关内容
