Một nhóm nghiên cứu đã phát hiện một lỗi nghiêm trọng trên macOS, khiến máy Mac không thể tạo kết nối mạng mới sau khi hoạt động liên tục trong khoảng 49,7 ngày. Nguyên nhân xuất phát từ việc bộ đếm thời gian TCP nội bộ bị tràn số, gây cản trở hoạt động mạng mặc dù máy vẫn cò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 mạng
Mặc dù không phải là điều phổ biến, nhưng việc sử dụng máy Mac như một máy chủ hoạt động liên tục 24/7 vẫn được một số tổ chức triển khai. 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 hiện tượng kỳ lạ: một số máy Mac đột nhiên không thể thiết lập kết nối mạng mới, mặc dù hệ thống vẫn đang hoạt động bình thường.
Điều đáng chú ý là các máy này vẫn trả lời lệnh ping và duy trì các kết nối hiện tại, khiến việc chẩn đoán sự cố trở nên phức tạp. Nhóm kỹ sư phải khởi động lại hệ thống để khôi phục kết nối mạng – một giải pháp tạm thời mà các quản trị viên hệ thống thường muốn tránh sử dụng.
Sau khi tiếp tục quan sát, nhóm nghiên cứu nhận thấy tất cả các máy gặp phải sự cố đều có thời gian hoạt động liên tục xấp xỉ 49,7 ngày.

Nguyên nhân gây ra sự cố là bộ đếm TCP nội bộ.
Khi nhóm nghiên cứu tiến hành kiểm tra kỹ hơn, họ xác định rằng nguyên nhân nằm ở bộ đếm thời gian mạng 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 và được tính bằng mili giây.
Bộ đếm 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 tới giá trị này, bộ đếm sẽ quay về 0, tương đương với khoảng 49,7 ngày hoạt động liên tục.
Trong môi trường bình thường, macOS sẽ tự động xóa 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à xảy ra lỗi trong quá trình xử lý của nhân hệ điều hành, hệ thống không thể xác định thời gian hết hạn của các kết nối cũ, dẫn đến việc dọn dẹp không thể thực hiện được.
Kết quả là các cổng mạng bị chiếm giữ tạm thời và ngăn xếp TCP dần dần bị lấp đầy, khiến máy Mac không thể thiết lập kết nối mới.
Giống như các lỗi tràn số nổi tiếng trong lịch sử công nghệ
Sự cố này thực chất là một dạng lỗi tràn số nguyên, từng xuất hiện trên nhiều hệ thống trước đây. Một ví dụ điển hình là lỗi 49,7 ngày của Windows 98, hay 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ỉ xảy ra 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 các môi trường máy chủ hoặc hệ thống giám sát, đây có thể là một rủi ro cần chú ý.

Giải pháp tạm thời là khởi động lại hệ thống để khắc phục sự cố.
Theo nhóm nghiên cứu Photon, giải pháp hiện tại là khởi động lại máy trước khi đạt mốc 49,7 ngày để tránh gặp phải lỗi. Họ cũng cho biết lỗi này đã được đề cập trong một số cuộc thảo luận trên cộng đồng người dùng Apple và có khả năng sẽ được khắc phục trong các bản cập nhật macOS sắp tới.
Trong tương lai, việc sửa đổi cách xử lý bộ đếm tcp_now trong nhân hệ điều hành sẽ là giải pháp triệt để. Nếu được cập nhật kịp thời, macOS sẽ 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ụ.
