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

