根据Photon公司在2026年4月6日发布的博客,macOS系统也存在一个“时间炸弹”,连续运行49.7天后,TCP连接功能会逐渐瘫痪。问题的根源在于苹果XNU内核里TCP网络实现的一个缺陷。



这家公司本身是做AI服务的,需要长时间运行Mac集群来处理任务并进行监控。但有一部分设备会因为不明原因没法正常联网,开发团队排查之后确认,这是苹果造成的缺陷。

正常情况下,这个问题不会影响到普通用户。就算用户自己不主动重启设备,苹果也可能会推送系统更新从而让设备重启。只有那些长时间连续运行、一直没重启的设备,才会碰上这个问题。

问题的根源在于32位无符号整数溢出和时钟冻结。具体来说,XNU内核里用到了一个叫tcp_now的变量,这是一个32位的无符号整数计数器,单位是毫秒,用来记录系统自启动以来的时间。问题在于,这个变量的最大值只有约49天17小时2分47.3秒。当系统连续运行超过这个时间,计数器就会溢出,回绕到接近零。

内核里有一个单调性保护机制,原本是为了确保tcp_now只会一直往前递增。但溢出之后,旧值(接近最大值)比回绕后的新值要大,导致比较条件永远为假,于是tcp_now就被冻结了。冻结之后,TCP子系统的时钟和依赖它的定时器都没法正常工作,最终所有TCP连接都不能正常回收。等到所有端口用完了,TCP就再也连不上了。

这个缺陷带来的直接影响是:macOS上的TCP连接进入TIME_WAIT状态后,默认会保留30秒来处理延迟报文。正常情况下,内核的垃圾回收函数会根据tcp_now来判断并关闭这些等待状态。但tcp_now冻结后,比较逻辑永远失败,所有TIME_WAIT条目就永远没法被回收,于是引发一系列问题:临时端口被耗尽,新TCP连接无法建立,内核CPU占用上升,网络功能基本崩溃。除了PING还能通之外,浏览器、SSH、API调用这些大多数TCP应用都没法正常工作。现有的网络连接可能还能维持,但新发起的TCP连接都会受阻。

这个问题至少影响macOS Catalina 10.15及之后的版本,更老的版本有没有类似问题暂时还不确定。值得注意的是,这个缺陷不会引发内核崩溃,也不会产生明显的错误日志,属于静默失效,所以用户往往很难第一时间定位问题根源。

对可能遇到这个问题的用户来说,最简单的解决办法就是设置定期重启,确保在49天以内重启一次系统。至于苹果以后会不会修复这个BUG,还得再看看。