Một nhóm nghiên cứu đã phát hiện lỗi nghiêm trọng trong macOS khiến máy Mac có thể ngừng tạo kết nối mạng mới nếu hoạt động liên tục trong khoảng 49,7 ngày. Sự cố xuất phát từ bộ đếm thời gian TCP nội bộ bị tràn số, khiến hệ thống mạng đình trệ dù máy vẫn hoạt động bình thường.
Lỗi ẩn khiến máy Mac đột ngột mất kết nối
Việc sử dụng máy Mac như một máy chủ chạy liên tục 24/7 không phải là điều phổ biến, nhưng vẫn có nhiều tổ chức triển khai theo cách này. Trong quá trình giám sát dịch vụ iMessage, nhóm nghiên cứu tại Photon đã phát hiện một hiện tượng khó hiểu: một số máy Mac đột ngột không thể thiết lập kết nối mạng mới, dù hệ thống vẫn hoạt động bình thường.
Điều kỳ lạ là các máy này vẫn phản hồi lệnh ping và duy trì các kết nối đang tồn tại, khiến việc chẩn đoán trở nên phức tạp. Nhóm kỹ sư buộc phải khởi động lại hệ thống để khôi phục hoạt động mạng – một giải pháp tạm thời mà quản trị viên hệ thống thường muốn tránh.
Sau khi theo dõi thêm, họ nhận ra tất cả các máy gặp lỗi đều có thời gian hoạt động liên tục khoảng 49,7 ngày.
![Loi 49,7 ngay tren macOS: May Mac co the mat ket noi mang neu chay lien tuc qua lau Lỗi 49,7 ngày trên macOS: Máy Mac có thể mất kết nối mạng nếu chạy liên tục quá lâu]()
Nguyên nhân đến từ bộ đếm TCP nội bộ
Khi tiến hành kiểm tra sâu hơn, nhóm Photon xác định nguyên nhân nằm ở bộ đếm thời gian mạng có tên tcp_now trong nhân hệ điều hành. Bộ đếm này theo dõi thời gian hoạt động của ngăn xếp TCP/IP kể từ khi hệ thống khởi động, tính bằng mili giây.
tcp_now được lưu dưới dạng số nguyên không dấu 32-bit, với giá trị tối đa là 4.294.967.295. Khi đạt đến giới hạn này, bộ đếm sẽ quay về 0, tương đương khoảng 49,7 ngày hoạt động liên tục.
Trong điều kiện bình thường, macOS sẽ tự động dọn dẹp các kết nối TCP đã đóng sau khoảng 30 giây. Tuy nhiên, khi tcp_now đạt giới hạn và bị lỗi xử lý trong nhân hệ điều hành, hệ thống không thể xác định thời điểm hết hạn của các kết nối cũ, khiến quá trình dọn dẹp không hoạt động.
Kết quả là các cổng mạng tạm thời bị chiếm giữ và ngăn xếp TCP dần bị lấp đầy, khiến máy Mac không thể tạo kết nối mới.
Tương tự những lỗi tràn số nổi tiếng trong lịch sử
Sự cố này thực chất là một dạng lỗi tràn số nguyên, vốn từng xuất hiện trong nhiều hệ thống trước đây. Một ví dụ nổi tiếng là lỗi 49,7 ngày của Windows 98 hoặc vấn đề năm 2038 liên quan đến bộ đếm thời gian 32-bit.
Trong trường hợp macOS, lỗi chỉ xuất hiện khi hệ thống hoạt động liên tục trong thời gian dài và có lưu lượng mạng lớn, vì vậy người dùng thông thường ít khi gặp phải. Tuy nhiên, với môi trường máy chủ hoặc hệ thống giám sát, đây có thể là rủi ro đáng chú ý.
![Loi 49,7 ngay tren macOS: May Mac co the mat ket noi mang neu chay lien tuc qua lau 2 Lỗi 49,7 ngày trên macOS: Máy Mac có thể mất kết nối mạng nếu chạy liên tục quá lâu 2]()
Giải pháp tạm thời là khởi động lại hệ thống
Theo Photon, giải pháp hiện tại vẫn là khởi động lại máy trước khi đạt mốc 49,7 ngày để tránh sự cố. Nhóm nghiên cứu cũng cho biết lỗi này đã được phản ánh trong một số thảo luận trên cộng đồng người dùng Apple và có khả năng sẽ được Apple khắc phục trong các bản cập nhật macOS sắp tới.
Về lâu dài, việc sửa cách xử lý bộ đếm tcp_now trong nhân hệ điều hành sẽ là hướng giải quyết triệt để. Nếu được vá kịp thời, macOS có thể trở nên ổn định hơn trong các môi trường yêu cầu hoạt động liên tục 24/7 như máy chủ hoặc hệ thống giám sát dịch vụ.