Пятидесятидневный срок годности: почему macOS отказывается работать без перезагрузки
Большинство пользователей Mac привыкли, что их компьютеры могут неделями находиться в режиме сна, не требуя полного выключения или перезагрузки. Однако оказалось, что операционная система имеет довольно жесткий, хоть и ненамеренный «срок годности» одной сессии работы. Если ваш аптайм приближается к отметке в 50 дней, готовьтесь к тому, что сетевые возможности системы превратятся в тыкву.
Математическая ловушка 32 бит
Проблему выявили специалисты компании Photon, которые занимаются мониторингом сервисов iMessage. При анализе парка компьютеров они заметили странное поведение: машины, работавшие без перерыва длительное время, внезапно теряли способность принимать новые сетевые соединения. Детальное исследование Photon показало, что корень зла кроется во внутреннем счетчике tcp_now.
Этот счетчик отвечает за отслеживание времени с момента загрузки системы для стека TCP. Проблема в том, что он представлен как 32-битное беззнаковое целое число. Максимальное значение такого числа составляет 4 294 967 295. Поскольку tcp_now считает время в миллисекундах, он неизбежно переполняется и обнуляется ровно через 49 дней, 17 часов, 2 минуты и 47 секунд. В этот момент логика обработки пакетов ломается, поскольку система ожидает последовательного роста значений, а получает «ноль».
Симптомы сетевого паралича
Самое интересное в этой ситуации то, как именно проявляется сбой. Компьютер не выключается и не выдает критических ошибок. Он продолжает отвечать на запросы ping, поскольку протокол ICMP работает на более низком уровне и не зависит от этого счетчика. Более того, уже установленные соединения могут продолжать стабильно работать. Однако ни один новый запрос через TCP/IP не будет обработан.
Для внешнего наблюдателя система выглядит живой, но фактически она изолирована от мира. Для обычного владельца MacBook, который закрывает крышку ноутбука несколько раз в день, это вряд ли станет катастрофой. Однако для серверных решений на базе macOS или систем мониторинга, где аптайм измеряется месяцами, это критический недостаток. На данный момент единственным способом решения проблемы является превентивная перезагрузка до наступления фатальной отметки.
Ожидание патча
На момент обнаружения бага официальных комментариев на ресурсах Apple не появлялось, однако технически исправить это несложно. Переход на 64-битный счетчик или корректная обработка переполнения — стандартные практики в индустрии. Удивительно только то, что такой фундаментальный промах в сетевом стеке оставался незамеченным столько лет. Возможно, инженеры компании просто не верили, что кто-то не будет перезагружать компьютер более полутора месяцев.
Если ваш рабочий компьютер внезапно «устал» от сети, возможно, стоит присмотреться к компактным решениям. Например, Minisforum Elite M1 Lite предлагает неплохую производительность для тех, кому нужен процессор Meteor Lake за адекватные деньги.
Подписывайтесь на наш нескучный канал в Telegram, чтобы ничего не пропустить.