Добавить в корзинуПозвонить
Найти в Дзене
DigiNews

В macOS заложена сетевая «бомба замедленного действия» на 49,7 суток, которую можно обезвредить только перезагрузкой

Стек сетевых протоколов macOS содержит ошибку, которая создает 49,7-дневный обратный отсчет до сбоя, устранить который на данный момент можно только перезагрузкой, как обнаружила компания Photon, поставщик ИИ-сервисов. — tomshardware.com Основываясь на личном опыте, использование Mac в качестве сервера или некоего подобия сервера — довольно интересное занятие, поскольку, несмотря на свои Unix-корни, операционная система не совсем предназначена для круглосуточной работы без вмешательства и сложна в настройке и использовании в таком режиме — это резкие слова, но я их придерживаюсь. В то время как почти каждый пользователь перезагружает свой Mac как минимум раз в несколько недель, если вы оставите его работать ровно 49 дней, 17 часов, 2 минуты и 47 секунд, многие части внезапно перестанут работать, поскольку его стек сетевых протоколов TCP/IP выйдет из строя. Таковы выводы специалистов из Photon, которые провели серьезное расследование после столкновения с таинственной проблемой в парке M

Стек сетевых протоколов macOS содержит ошибку, которая создает 49,7-дневный обратный отсчет до сбоя, устранить который на данный момент можно только перезагрузкой, как обнаружила компания Photon, поставщик ИИ-сервисов. — tomshardware.com

Основываясь на личном опыте, использование Mac в качестве сервера или некоего подобия сервера — довольно интересное занятие, поскольку, несмотря на свои Unix-корни, операционная система не совсем предназначена для круглосуточной работы без вмешательства и сложна в настройке и использовании в таком режиме — это резкие слова, но я их придерживаюсь. В то время как почти каждый пользователь перезагружает свой Mac как минимум раз в несколько недель, если вы оставите его работать ровно 49 дней, 17 часов, 2 минуты и 47 секунд, многие части внезапно перестанут работать, поскольку его стек сетевых протоколов TCP/IP выйдет из строя. Таковы выводы специалистов из Photon, которые провели серьезное расследование после столкновения с таинственной проблемой в парке Mac, используемых ими для мониторинга сервисов iMessage. Проблема проявилась, когда некоторые машины просто внезапно перестали отвечать на сетевые подключения, хотя на запросы ping они отвечали: «У нас все в порядке, босс!». Эти машины сохраняли существующие сетевые соединения, что еще больше усложняло диагностику, поскольку сбой был необъяснимым и в остальном незаметным. Не имея большого выбора, эксперты Photon были вынуждены перезагрузить машины, чтобы устранить проблему, — то, что любой системный администратор ненавидит в качестве «решения» загадочной проблемы. В конце концов, если это произошло один раз, это произойдет снова, и, несомненно, в самый неподходящий момент. После того как команда заметила еще одну группу машин, достигшую 49,7-дневного времени безотказной работы, они настроили скрипты для проверки своей теории. Увы, они обнаружили, что когда наступил роковой момент, Mac, который непрерывно создавал новые соединения, просто перестал это делать, даже не выдав ошибки. Затем команда обратила внимание на коренную причину, поскольку она явно была связана с таймером, относящимся к сети. Они обнаружили виновника — внутренний счетчик «tcp_now», значение которого было «обречено на переполнение». Задача tcp_now — отслеживать текущее время с момента загрузки с точки зрения стека TCP, вплоть до миллисекунды. tcp_now представлен как 32-битное беззнаковое целое число, а их максимальное значение составляет 4 294 967 295 (2^32 – 1) до того, как оно обнулится. Поскольку он отслеживает миллисекунды, максимум для tcp_now составляет 4 294 967 секунд, или 49,7 дня. Согласно стандартам, операционные системы собирают и удаляют закрытые TCP-соединения через короткое время; в случае macOS это 30 секунд. Результат попытки очистить эти неактивные соединения, когда tcp_now близок к своему пределу или достиг его (и застревает там из-за бага в ядре XNU от Apple), заключается в том, что статус истечения срока действия любого соединения рассчитывается на основе этого замороженного числа, что приводит к значению, которое всегда вызывает переполнение 32-битного беззнакового целого числа. Когда периодическая проверка определяет, следует ли удалить закрытое соединение, результат всегда «нет», потому что математика сравнения не работает. Затем стек TCP заполняется ошибочно удерживаемыми эфемерными портами и фактически останавливается, когда больше нет свободных. Как быстро это произойдет, зависит от объема сетевой активности, но в любой серверной или профессиональной среде это неизбежно произойдет быстро. Этот класс проблем малоизвестен; переполнение целых чисел стало причиной знаменитого сбоя Windows 98 через 49,7 дня и предстоящей проблемы 2038 года. По данным Photon, текущее смягчение последствий — это перезагрузка, хотя команда заявляет, что работает над альтернативным решением. Они также обнаружили, что эта проблема является источником некоторых ошибок, обсуждавшихся в онлайн-форумах Apple Community. Давний RFC 7323 определяет, что должно происходить с временной меткой (tcp_now) при достижении предела, но ядро Apple выполняет некорректную реализацию. Можно с уверенностью сказать, что эта проблема, вероятно, будет быстро исправлена — и, надеюсь, до истечения 49,7 дней с момента сообщения.

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

Автор – Bruno Ferreira

Оригинал статьи