macOS TCP 定时炸弹:49.7天后网络崩溃
问题描述
Photon 团队发现 macOS TCP 栈中存在一个时间炸弹——运行约 49.7 天后,TCP 网络功能会完全停止工作。
根因: macOS 使用
tv_sec 变量存储时间戳,但在转换为 unsigned int 时发生整数溢出。每 2^32 秒(约 49.7 天)重置一次。
影响
- 所有 macOS 版本: 影响包括 macOS 15 在内的所有版本
- 所有 Intel 和 Apple Silicon Mac: 无一幸免
- 症状: TCP 连接建立后无法传输数据
技术细节
问题出在内核 TCP 层的某个部分,当系统运行时间超过 49.7 天(2^32 秒)后,定时器值溢出导致 TCP 功能失效。
这是一个经典的整数溢出问题,只是在操作系统层面较为罕见。
发现过程
Photon 团队在生产环境中遇到间歇性网络故障,通过深入调试发现了这个隐藏在内核中的时间炸弹。
评价
⭐⭐⭐⭐☆ (4/5) - 有趣的整数溢出案例,展示了看似简单的时间处理可能带来的严重后果