49-дневная ошибка TCP в macOS: как проверить время работы Mac и избежать сетевого таймера смерти
Узнайте об ошибке ядра XNU в macOS, которая прерывает все сетевые соединения после 49,7 дней работы. Научитесь проверять время безотказной работы Mac и защищать себя.
В начале 2026 года независимый исследователь в области безопасности под псевдонимом Photon опубликовал подробный анализ в своём блоге (photon.codes), который потряс сообщество macOS: ошибка, затаившаяся в глубинах ядра XNU от Apple, незаметно разрывает все новые TCP-соединения на любом Mac, проработавшем ровно 49,7 дней без перезагрузки. Никакого предупреждающего диалога. Никаких сообщений об ошибках. Mac просто перестаёт подключаться к интернету, локальным сетевым ресурсам, ко всему, что зависит от TCP, — и единственный способ исправить это — полная перезагрузка системы. Впоследствии это открытие было освещено в Tom's Hardware, подробно проанализировано в TidBITS, обсуждалось на Reddit, форумах MacRumors и Hacker News, породив тысячи комментариев и серьёзную обеспокоенность. Данная статья представляет собой исчерпывающее руководство по пониманию ошибки, определению того, затронуты ли вы ею, немедленной защите и тому, что предпринимает Apple.
Ключевые выводы
- Критическая ошибка переполнения целого числа в ядре XNU macOS вызывает тихий сбой всех новых TCP-соединений примерно через 49,7 дней (49 дней, 17 часов, 2 минуты и 47 секунд) непрерывной работы.
- Ошибку нельзя устранить переключением Wi-Fi, сбросом сетевых настроек или перезапуском отдельных приложений — только полная перезагрузка системы восстанавливает сетевое подключение.
- Наибольшему риску подвержены пользователи, использующие Mac mini в качестве серверов, постоянно включённые машины для разработки, медиасерверы, хабы домашней автоматизации, а также любой Mac, который редко перезагружается.
- Ожидается, что Apple выпустит исправление в macOS 26.5, которая сейчас находится в стадии beta 2, однако для текущих производственных версий патч отсутствует.
- Вы можете немедленно защитить себя, проверив время работы с помощью простой команды Terminal и запланировав периодические перезагрузки до достижения 49-дневного порога.
Что такое 49-дневная ошибка TCP?
49-дневная ошибка TCP — это программный дефект в ядре XNU от Apple, основном ядре операционной системы, на котором работают macOS, iOS, iPadOS и все другие платформы Apple. Ошибка была обнаружена Photon в ходе тщательного анализа исходного кода XNU (который Apple публикует в открытом доступе): загадочная закономерность сетевых сбоев на давно работающих Mac была отслежена до конкретной операции сравнения в TCP-стеке ядра.
По своей сути ошибка представляет собой переполнение целого числа. Ядро XNU поддерживает внутренний таймер, отслеживающий время работы системы в миллисекундах с помощью 32-битного беззнакового целого числа (uint32_t). Максимальное значение, которое может хранить 32-битное беззнаковое целое число, составляет 4 294 967 295. Если перевести это количество миллисекунд в дни, получится примерно 49,71 дня:
4,294,967,295 milliseconds
= 4,294,967.295 seconds
= 71,582.788 minutes
= 1,193.046 hours
= 49.71 days
После достижения этого порога значение таймера переходит от максимального обратно к нулю. В вычислениях это не редкость — переполнение таймера хорошо известно, и надёжный код пишется с учётом этой ситуации. Однако TCP-стек в XNU содержит операцию сравнения, которая некорректно обрабатывает это переполнение. Когда таймер переполняется, операция сравнения даёт неверные результаты, и ядро считает, что параметры синхронизации каждого нового TCP-соединения недействительны. В результате ядро молча отбрасывает все новые попытки TCP-соединения.
Важно отметить, что существующие TCP-соединения, установленные до переполнения, могут некоторое время продолжать работать (поскольку процедура рукопожатия уже завершена), но любое новое соединение — открытие новой веб-страницы, запуск новой SSH-сессии, подключение к API, проверка почты — завершится неудачей. Вскоре после переполнения даже существующие соединения истекают и прерываются, оставляя Mac полностью неспособным общаться через TCP.
Ошибка затрагивает именно уровень протокола TCP. Другие сетевые протоколы, не использующие TCP (например, базовый ICMP-пинг), могут продолжать работать, что делает диагностику проблемы особенно запутанной: Mac выглядит «подключённым» к сети, он может даже отвечать на пинг, но никакие сетевые коммуникации на прикладном уровне не работают.

Как это влияет на ваш Mac?
Практические последствия 49-дневной ошибки TCP полностью определяются одним фактором: как долго ваш Mac работает между перезагрузками. Если вы перезагружаете или выключаете Mac хотя бы раз в 49 дней, вы никогда не столкнётесь с этой ошибкой. Таймер сбрасывается до нуля при каждой загрузке.
Как отметил TidBITS в своём анализе проблемы, большинство рядовых пользователей Mac вряд ли пострадают. Обновления программного обеспечения Apple обычно требуют перезагрузки, и многие пользователи выключают или перезагружают Mac хотя бы раз в неделю. Для них ошибка практически незаметна.
Однако существуют значительные категории пользователей Mac, для которых эта ошибка представляет серьёзный операционный риск:
Серверы Mac Mini и Mac без монитора
Mac mini стал всё более популярным в качестве компактного, энергоэффективного сервера. Пользователи развёртывают Mac mini как веб-серверы, серверы сборки CI/CD, медиасерверы (под управлением Plex или Jellyfin), контроллеры домашней автоматизации и удалённые машины для разработки. Эти машины специально созданы для непрерывной работы без перезагрузок. Mac mini, настроенный в январе и оставленный работать, достигнет 49-дневной отметки в конце февраля — и потеряет все сетевые подключения без какого-либо предупреждения.
Постоянно включённые машины для разработки
Многие разработчики программного обеспечения оставляют Mac работать непрерывно, нередко с десятками открытых терминальных сессий, серверами разработки, подключениями к базам данных и окнами IDE. Перезагрузка означает восстановление всей этой среды, что может занять значительное время. Такие пользователи нередко накапливают время работы, значительно превышающее 49 дней.
Креативные специалисты с длительными задачами рендеринга
Видеоредакторы, 3D-художники и музыкальные продюсеры иногда выполняют расширенные задачи рендеринга или обработки, занимающие дни или недели. Они избегают перезагрузки во время выполнения этих задач, и если задача запускается на машине с уже значительным временем работы, 49-дневный порог может быть пересечён в середине рендеринга.
Корпоративные и образовательные развёртывания
Организации, использующие Mac в режиме киоска, в системах цифровой вывески, в лабораторных средах или на общих рабочих станциях, могут настроить эти машины на неограниченную работу. ИТ-администраторы, управляющие парком Mac, должны особенно внимательно относиться к этой ошибке.
Mac в качестве хабов домашней автоматизации и IoT
Пользователи, запускающие серверы HomeKit, Home Assistant или другие платформы домашней автоматизации на постоянно включённых Mac, находятся в зоне риска. Сетевой сбой на хаб-машине может вывести из строя всю инфраструктуру умного дома.
Как узнать, находитесь ли вы в зоне риска прямо сейчас
Самый простой тест — проверить время работы вашего Mac. Если оно приближается к 49 дням или уже превысило этот порог, следует запланировать перезагрузку. Следующий раздел подробно объясняет, как это сделать.
Как проверить время работы Mac
Существует несколько способов узнать, как долго ваш Mac работает с момента последней перезагрузки. Каждый предоставляет несколько отличающуюся информацию, и все они надёжны.
Способ 1: команда uptime в Terminal
Откройте Terminal (Программы > Утилиты > Terminal или воспользуйтесь Spotlight: Cmd+Пробел и введите «Terminal») и введите:
uptime
Команда вернёт вывод, похожий на следующий:
10:32 up 43 days, 7:14, 2 users, load averages: 1.82 2.01 1.97
В этом примере Mac работает 43 дня и около 7 часов. Эта машина приближается к опасной зоне и должна быть перезагружена в ближайшие несколько дней.
Более подробное руководство по эффективному использованию команд Terminal см. в нашем руководстве по Terminal.
Способ 2: команда system_profiler
Для получения более подробной информации о времени загрузки используйте:
system_profiler SPSoftwareDataType
Вывод будет содержать, в частности:
Software:
System Software Overview:
System Version: macOS 26.4 (26E252)
Kernel Version: Darwin 25.5.0
Boot Volume: Macintosh HD
...
Time since boot: 43 days, 7:14
Строка «Time since boot» показывает, как долго работает система.
Способ 3: точное время загрузки с помощью sysctl
Для получения наиболее точной информации о том, когда Mac последний раз загружался, используйте:
sysctl kern.boottime
Вывод будет следующим:
kern.boottime: { sec = 1709812345, usec = 0 } Mon Mar 7 14:32:25 2026
Это показывает точную дату и время последней загрузки, что позволяет точно рассчитать, когда будет достигнут 49-дневный порог.
Способ 4: быстрый скрипт для расчёта
Можно создать простой скрипт, который точно сообщит, когда наступит 49-дневная отметка:
#!/bin/bash
boot_time=$(sysctl -n kern.boottime | awk '{print $4}' | tr -d ',')
danger_time=$((boot_time + 4294967))
current_time=$(date +%s)
remaining=$((danger_time - current_time))
if [ $remaining -le 0 ]; then
echo "WARNING: Your Mac has EXCEEDED the 49-day threshold!"
echo "You should restart immediately."
else
days=$((remaining / 86400))
hours=$(((remaining % 86400) / 3600))
echo "Days until 49-day TCP bug: ${days} days, ${hours} hours"
echo "Danger date: $(date -r $danger_time)"
fi
Сохраните файл как check_tcp_bug.sh, сделайте его исполняемым командой chmod +x check_tcp_bug.sh и запустите: ./check_tcp_bug.sh.
Способ 5: Мониторинг активности
Если вы предпочитаете графический подход, можно воспользоваться программой «Мониторинг активности»:
- Откройте «Мониторинг активности» (Программы > Утилиты > Мониторинг активности или найдите через Spotlight)
- Перейдите на вкладку «ЦП»
- Внизу окна найдите «Время работы системы» (в некоторых версиях это может потребовать меню «Окно» для отображения информации о системе)
Исчерпывающее руководство по «Мониторингу активности» и всем его возможностям см. в нашем руководстве по Мониторингу активности.
Как устранить и предотвратить ошибку
Поскольку в текущих производственных версиях macOS патч не доступен, единственный способ устранить 49-дневную ошибку TCP — перезагрузить Mac до достижения порога. Существует несколько подходов: от простых ручных перезагрузок до полностью автоматизированных решений.
Немедленное устранение: перезагрузить Mac
Если ваш Mac в данный момент испытывает сетевые сбои и проработал 49 дней или более, немедленно перезагрузите его:
- Через меню Apple: нажмите на логотип Apple в верхнем левом углу и выберите «Перезагрузить...»
- Через Terminal: выполните
sudo shutdown -r now - Принудительная перезагрузка (если Mac не реагирует): удерживайте кнопку питания 10 секунд, затем нажмите её снова для запуска
После перезагрузки всё сетевое подключение немедленно восстановится. Счётчик времени работы сбрасывается до нуля, давая ещё 49 дней до возможного повторения ошибки.
Стратегия профилактики 1: запланировать ежемесячную перезагрузку
Самая простая стратегия профилактики — перезагружать Mac по фиксированному расписанию, достаточно раз в месяц. Установите напоминание в календаре на первый день каждого месяца (или любой другой день) для перезагрузки Mac. Ежемесячная перезагрузка позволяет поддерживать время работы значительно ниже 49-дневного опасного порога и также гарантирует регулярное выполнение системных обновлений и очистки памяти.
Стратегия профилактики 2: автоматическая перезагрузка с помощью pmset
В macOS есть встроенный инструмент управления питанием pmset, позволяющий планировать автоматические перезагрузки. Это простейший автоматизированный подход:
# Schedule a restart every Sunday at 3:00 AM
sudo pmset repeat restart MTWRFSU 03:00:00
Для планирования перезагрузки в определённый день каждой недели:
# Restart every Sunday at 4:00 AM
sudo pmset repeat restart U 04:00:00
Для проверки запланированной перезагрузки:
pmset -g sched
Для удаления запланированной перезагрузки:
sudo pmset repeat cancel
Подход pmset идеален, поскольку использует встроенную систему управления питанием macOS и работает даже без авторизованного пользователя, что делает его идеальным для серверов без монитора и постоянно включённых Mac.
Стратегия профилактики 3: автоматическая перезагрузка с помощью launchd
Для более гибкого управления можно создать plist-файл launchd, запускающий перезагрузку по заданному расписанию. Этот подход предоставляет больше гибкости, чем pmset:
Создайте файл /Library/LaunchDaemons/com.local.scheduled-restart.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.scheduled-restart</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/shutdown</string>
<string>-r</string>
<string>now</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Weekday</key>
<integer>7</integer>
<key>Hour</key>
<integer>4</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>
Загрузите файл командой:
sudo launchctl load /Library/LaunchDaemons/com.local.scheduled-restart.plist
Это будет перезагружать Mac каждое воскресенье в 4:00. Вы можете изменить значения Weekday, Hour и Minute по своим потребностям. Значения Weekday: 1 (понедельник) — 7 (воскресенье).
Стратегия профилактики 4: скрипт мониторинга времени работы
Для пользователей, предпочитающих получать предупреждение перед порогом, а не автоматическую перезагрузку, можно настроить мониторинговый скрипт, уведомляющий при приближении к 40 дням работы:
#!/bin/bash
# Save as /usr/local/bin/uptime_monitor.sh
THRESHOLD_DAYS=40
UPTIME_SECONDS=$(( $(date +%s) - $(sysctl -n kern.boottime | awk '{print $4}' | tr -d ',') ))
UPTIME_DAYS=$(( UPTIME_SECONDS / 86400 ))
if [ $UPTIME_DAYS -ge $THRESHOLD_DAYS ]; then
osascript -e "display notification \"Your Mac has been running for ${UPTIME_DAYS} days. Please restart soon to avoid the TCP bug.\" with title \"Uptime Warning\" subtitle \"49-Day TCP Bug Prevention\""
fi
В сочетании с plist-файлом launchd, запускающим скрипт ежедневно, вы будете получать уведомления macOS о необходимости перезагрузки.
Стратегия профилактики 5: использование команды shutdown напрямую
Для быстрой разовой запланированной перезагрузки можно использовать команду shutdown:
# Restart in 30 minutes
sudo shutdown -r +30
# Restart at a specific time today
sudo shutdown -r 23:00
# Cancel a pending restart
sudo shutdown -c
Это удобно для планирования перезагрузки на более позднее время дня, когда вы не будете активно использовать Mac.
Если на вашем Mac наблюдаются более широкие сетевые проблемы помимо данной конкретной ошибки, наш гид по устранению неполадок Wi-Fi в macOS Tahoe содержит дополнительные диагностические инструменты и решения.
Появится ли патч?
Да. Apple признала проблему, и исправление ожидается в macOS 26.5. На момент написания этой статьи macOS 26.5 находится во втором бета-выпуске (beta 2), доступном для разработчиков и публичных бета-тестировщиков через бета-программу Apple.
Текущее состояние
- macOS 26.4 и более ранние версии: ошибка присутствует во всех производственных выпусках. Решения нет, кроме как перезагрузка до истечения 49 дней.
- macOS 26.5 beta 1: первоначальная бета-версия не включала исправление.
- macOS 26.5 beta 2: по сообщениям бета-тестировщиков, Apple устранила базовое переполнение целого числа в TCP-стеке. Однако, поскольку для проявления ошибки требуется 49 дней работы, быстро подтвердить исправление через обычное бета-тестирование затруднительно.
- Ожидаемый выпуск: согласно типичному бета-циклу Apple, macOS 26.5 ожидается в открытом доступе в конце весны или начале лета 2026 года.
Почему Apple не выпустила патч раньше?
Задержку объясняют несколько факторов:
Момент обнаружения: ошибка была публично раскрыта в начале 2026 года. Хотя она могла быть сообщена Apple через каналы ответственного раскрытия ещё до публикации Photon, разработка, тестирование и выпуск исправлений на уровне ядра занимают месяцы, а не дни.
Сложность на уровне ядра: ядро XNU — основа каждой платформы Apple. Исправление в TCP-стеке необходимо тщательно протестировать, чтобы убедиться, что оно не вызывает регрессий, способных затронуть миллионы устройств. Исправления переполнения целых чисел в сравнениях таймеров могут иметь тонкие взаимодействия с другими подсистемами ядра.
Сложность тестирования: поскольку для воспроизведения ошибки требуется почти 50 дней непрерывной работы, тестирование исправления занимает много времени. Apple, вероятно, использует техники манипулирования временем в своей тестовой среде для проверки исправления, а затем подтверждает, что обычные TCP-операции не нарушены.
Обходное решение простое: с точки зрения оценки рисков Apple, обходное решение (обычная перезагрузка) является простым и нераз рушительным. Это снижает срочность по сравнению, например, с уязвимостью удалённого выполнения кода.
Дополнительную информацию о том, как следить за обновлениями macOS и известными проблемами, см. в нашем руководстве по устранению неполадок macOS Tahoe.
Технический углублённый анализ: переполнение целого числа в ядре XNU
Этот раздел предназначен для разработчиков, системных администраторов и всех, кто технически заинтересован в понимании того, как и почему эта ошибка возникает на уровне кода.
Механика переполнения
Ядро XNU использует счётчик тиков для отслеживания времени работы системы. Счётчик хранится в переменной с типом данных uint32_t — 32-битном беззнаковом целом числе, способном содержать значения от 0 до 4 294 967 295.
Ядро увеличивает счётчик с интервалами в миллисекунды. TCP-стек использует этот счётчик для различных операций синхронизации, в том числе:
- Таймеры повторной передачи: как долго ждать перед повторной отправкой неподтверждённого пакета
- Расчёты тайм-аута соединения: когда считать попытку соединения неудавшейся
- Синхронизация keep-alive: когда отправлять периодические keep-alive-зонды на простаивающих соединениях
- Сравнения временны́х меток: проверка TCP-опций временны́х меток в заголовках пакетов
Критический дефект кроется в операции сравнения. В упрощённом псевдокоде проблемная логика выглядит примерно так:
// Simplified representation of the buggy comparison
uint32_t current_time = get_system_uptime_ms();
uint32_t connection_timestamp = tcp_header->timestamp;
// This comparison fails when current_time has wrapped around
if (current_time - connection_timestamp > MAX_ALLOWED_DELTA) {
// Drop the connection as "too old" or "invalid"
drop_packet();
}
Пока система работает менее 49,7 дней, current_time — это просто возрастающее значение, и сравнение работает корректно. Но когда current_time переполняется, превышая 4 294 967 295, и возвращается к небольшому числу (например, 1 000), вычитание current_time - connection_timestamp даёт неожиданно большой результат из-за потери значимости беззнакового целого числа, и ядро интерпретирует данные синхронизации каждого нового соединения как недействительные.
Почему это не было обнаружено?
Ошибки подобного рода печально известны своей труднообнаруживаемостью по нескольким причинам:
1. Зависящее от времени воспроизведение: ошибка проявляется лишь через 49,7 дней. Большинство автоматических тестов, включая CI/CD-конвейеры Apple, не выполняют отдельные тестовые циклы такой продолжительности. Модульные тесты TCP-стека, вероятно, проверяют корректность при различных значениях времени, но могут не тестировать специально переход через границу переполнения.
2. Код выглядит корректным на первый взгляд: операция сравнения синтаксически верна и работает правильно в течение первых 49 дней. Рецензент кода должен был бы специально рассмотреть случай переполнения, чтобы обнаружить ошибку. В кодовой базе такого масштаба, как XNU (миллионы строк кода), подобные тонкие проблемы легко ускользают при ревью.
3. Современные Mac часто перезагружаются: обновления macOS обычно требуют перезагрузки, и большинство потребительских Mac перезагружается достаточно регулярно, чтобы ошибка никогда не проявилась. Лишь растущее число постоянно включённых Mac-серверов (особенно Mac mini) создало достаточную экспозицию, чтобы закономерность была замечена.
4. Вводящие в заблуждение симптомы: когда ошибка срабатывает, это выглядит как проблема сетевой инфраструктуры, а не ошибка операционной системы. Пользователи (даже опытные администраторы) как правило проверяют маршрутизаторы, DNS-серверы, подключения провайдера и сетевые коммутаторы, прежде чем заподозрить ядро Mac. Многие пользователи, столкнувшиеся с этой ошибкой, вероятно, «устранили» её перезагрузкой Mac, так и не поняв, что именно перезагрузка и была решением.
Правильное исправление
Правильный подход к сравнению с переполнением таймера в C хорошо известен. Вместо сравнения «сырых» значений таймера следует использовать знаковую арифметику, корректно обрабатывающую переполнение:
// Correct wraparound-safe comparison
// Cast the difference to a signed type
int32_t time_delta = (int32_t)(current_time - connection_timestamp);
if (time_delta > MAX_ALLOWED_DELTA || time_delta < 0) {
drop_packet();
}
В качестве альтернативы ядро могло бы использовать 64-битный таймер (uint64_t), который не переполнится примерно 584 миллиона лет — что фактически устраняет проблему переполнения. Однако изменение ширины таймера имеет более широкие последствия для всего ядра и потребует более масштабных изменений и тестирования.

Как обстоит дело с другими платформами Apple?
Поскольку XNU является общим ядром для всех платформ Apple (macOS, iOS, iPadOS, watchOS, tvOS, visionOS), естественно возникает вопрос: затронуты ли также iPhone и iPad?
Теоретически тот же уязвимый код существует на всех платформах Apple. На практике устройства iOS и iPadOS перезагружаются значительно чаще, чем Mac — обновления системы, разрядка батареи и обычные паттерны использования означают, что iPhone почти никогда не достигает 49 дней непрерывной работы. Apple Watch и Apple TV также склонны к регулярным перезагрузкам. Однако если iPad каким-то образом проработает 50 дней без перезагрузки, теоретически он окажется подвержен той же ошибке.
Исторический контекст: это не первый раз
49-дневная ошибка TCP в macOS имеет поразительный исторический прецедент, который ветераны компьютерной отрасли сразу узнают: печально известная 49-дневная ошибка Windows из 1990-х годов.
49,7-дневная ошибка Windows
В Microsoft Windows 95, Windows 98 и Windows ME была практически идентичная ошибка. Функция ядра Windows GetTickCount() возвращала DWORD (32-битное беззнаковое целое число), представляющее количество миллисекунд с момента запуска системы. По истечении 49,7 дней это значение переполнялось и возвращалось к нулю.
Последствия в Windows были, пожалуй, серьёзнее, чем при нынешней ошибке macOS. В Windows 95 переполнение могло вызвать:
- Общесистемные зависания и сбои (синий экран смерти)
- Зависание приложений и повреждение данных
- Полную нестабильность системы, требующую перезагрузки
Ошибка Windows была широко известна и подробно задокументирована в конце 1990-х. Она стала стандартным примером в учебниках по программированию, иллюстрирующим необходимость осторожного обращения с переполнением целых чисел. В конечном счёте Microsoft ввела GetTickCount64() в Windows Vista (2007 год), использующую 64-битный счётчик, который не переполнится примерно 584 миллиона лет.
Ирония ситуации
То, что Apple теперь выпустила ту же по сути категорию ошибки — переполнение 32-битного таймера в миллисекундах — почти через 30 лет после того, как она была хорошо задокументированной проблемой в Windows, не ускользнуло от внимания сообщества разработчиков. Обсуждения на Hacker News часто ссылаются на прецедент Windows, а многие комментаторы выражают удивление тем, что столь известная категория ошибок могла попасть в ядро современной операционной системы.
Вместе с тем следует отметить, что ядро XNU — огромная и сложная кодовая база с десятилетиями накопленного кода. Конкретная операция сравнения, содержащая ошибку, возможно, была написана давно (возможно, в эпоху NeXTSTEP или ранние годы OS X) и просто никогда не выполнялась в условиях, которые выявили бы дефект, вплоть до недавней тенденции использовать Mac в качестве постоянно включённых серверов.
Другие заметные ошибки переполнения таймера в истории вычислительной техники
49-дневное переполнение — часть более широкой закономерности ошибок, связанных с таймерами, на протяжении всей истории вычислительной техники:
- Boeing 787 Dreamliner (2015 год): FAA издало директиву по лётной годности, требующую циклического отключения питания самолётов Boeing 787 каждые 248 дней во избежание переполнения 32-битного таймера в блоках управления генераторами, что могло бы привести к полной потере электроэнергии.
- Ошибка PlayStation 3 с високосным годом (2010 год): ошибочный расчёт во внутренних часах PS3 заставил систему считать, что дата — 29 февраля 2010 года (которого не существует), заблокировав консоли по всему миру на 24 часа.
- Mars Pathfinder (1997 год): хотя строго говоря это не переполнение таймера, ошибка инверсии приоритетов Pathfinder была обнаружена в полевых условиях после того, как марсоход уже работал на Марсе, показывая, как зависящие от времени ошибки могут уйти от предварительного тестирования.
- Y2K (2000 год): наиболее известная ошибка вычисления дат и времени в истории: двузначные представления года грозили вызвать масштабные сбои на рубеже веков.
Эти примеры иллюстрируют устойчивую закономерность: ошибки, связанные со временем, — одни из самых коварных в вычислительной технике, поскольку они ускользают от тестов, не учитывающих экстремальных временны́х диапазонов или граничных условий.
Устранение неполадок: признаки того, что ваш Mac был затронут ошибкой
Если вы подозреваете, что ваш Mac мог быть затронут 49-дневной ошибкой TCP, вот конкретные симптомы, на которые нужно обратить внимание, и способы отличить эту ошибку от других сетевых проблем.
Основные симптомы
1. Все новые TCP-соединения одновременно завершаются с ошибкой
Это характерный симптом. Не одно приложение или один сайт — а всё, что использует TCP:
- Веб-браузеры не могут загрузить ни одну страницу (Safari, Chrome, Firefox — все дают сбой)
- Почтовые клиенты не могут подключиться к почтовым серверам
- SSH-соединения завершаются по тайм-ауту
- iMessage и FaceTime перестают работать
- Синхронизация iCloud останавливается
- App Store не может подключиться
- Общий доступ к файлам и AirDrop могут не работать
- Homebrew, npm, pip и другие менеджеры пакетов не могут ничего скачать
2. Wi-Fi или Ethernet отображается как подключённые
Строка меню Mac по-прежнему показывает подключённый Wi-Fi-сигнал или Ethernet-соединение. Сетевой интерфейс функционирует на уровнях 1 и 2 (физическом и канальном) — нарушен только уровень 4 (транспортный/TCP).
3. Пинг может по-прежнему работать
Поскольку ICMP-пинг не использует TCP, вы можете успешно пинговать внешние хосты:
ping google.com
Если пинг работает, но браузеры и приложения — нет, это сильный признак ошибки TCP, а не общей сетевой проблемы или проблемы DNS.
4. Разрешение DNS может по-прежнему работать
DNS-запросы, использующие UDP (по умолчанию для большинства DNS-поисков), могут продолжать функционировать:
nslookup google.com
Если DNS разрешается, но TCP-соединения не удаются, вероятный виновник — ошибка TCP.
5. Время работы составляет 49 дней или более
Проверьте время работы, как описано в предыдущем разделе. Если оно составляет 49 дней или более и вы наблюдаете перечисленные симптомы, ошибка почти наверняка является причиной.
Как отличить от других сетевых проблем
49-дневную ошибку TCP можно спутать с несколькими другими распространёнными сетевыми проблемами. Вот как их различить:
| Симптом | Ошибка TCP | Проблема Wi-Fi | Проблема DNS | Блокировка брандмауэром | Сбой у провайдера |
|---|---|---|---|---|---|
| Все TCP-соединения не удаются | Да | Возможно | Нет | Возможно | Возможно |
| Пинг работает | Да | Нет | Да | Возможно | Нет |
| DNS разрешается | Да | Нет | Нет | Да | Возможно |
| Wi-Fi показывает подключение | Да | Нет | Да | Да | Да |
| Время работы > 49 дней | Да | Не имеет значения | Не имеет значения | Не имеет значения | Не имеет значения |
| Затронуты другие устройства | Нет | Возможно | Возможно | Нет | Да |
| Перезагрузка решает проблему | Да | Возможно | Нет | Нет | Нет |
Самое однозначное доказательство — сочетание: время работы свыше 49 дней + все TCP-соединения не удаются + пинг работает + перезагрузка устраняет проблему. Если все четыре условия выполнены, вы столкнулись с ошибкой.
Для устранения специфических проблем с Wi-Fi, которые могут помочь исключить другие причины, см. наш гид по устранению неполадок Wi-Fi в macOS Tahoe.
Команды сетевой диагностики
Выполните эти команды в Terminal для сбора диагностической информации:
# Check uptime
uptime
# Test TCP connection to a known-good server
nc -zv google.com 443
# Test DNS resolution
nslookup apple.com
# Test ICMP connectivity
ping -c 4 8.8.8.8
# Check network interfaces
ifconfig | grep "status"
# View active TCP connections
netstat -an | grep ESTABLISHED | head -20
# Check for TCP connection errors
netstat -s | grep -i "error\|fail\|drop\|overflow"
Если nc -zv google.com 443 завершается с ошибкой (тайм-аут соединения), но ping -c 4 8.8.8.8 выполняется успешно, а время работы составляет 49 дней или более — у вас есть веские основания подозревать ошибку TCP.
Если на вашем Mac помимо сетевых проблем наблюдаются также зависания или проблемы с производительностью, наш гид по устранению зависаний macOS Tahoe может предоставить полезный дополнительный контекст.
Что делать, когда ошибка подтверждена
- Сохраните несохранённые данные во всех открытых приложениях
- Корректно закройте приложения с активными файловыми операциями (базы данных, кодирование видео и т.д.)
- Перезагрузите Mac командой
sudo shutdown -r nowили через меню Apple - Проверьте подключение после перезагрузки — откройте веб-страницу и выполните
uptime, чтобы убедиться, что счётчик сброшен - Внедрите стратегию профилактики из приведённого раздела, чтобы больше не столкнуться с ошибкой
Часто задаваемые вопросы
Затронут ли мой Mac 49-дневной ошибкой TCP?
Каждый Mac под управлением macOS потенциально уязвим вне зависимости от модели, типа процессора или версии macOS. Ошибка существует в ядре XNU, которое является основой всех установок macOS. Однако вы столкнётесь с ней только в том случае, если Mac непрерывно проработает более 49,7 дней без перезагрузки. Если вы перезагружаете Mac хотя бы раз в месяц — вручную или через системные обновления — вы никогда не встретите эту ошибку.
Как часто нужно перезагружать Mac, чтобы избежать ошибки?
Перезагрузка раз в 30 дней обеспечивает комфортный запас безопасности ниже порога в 49,7 дней. Для критически важных серверных Mac еженедельная перезагрузка (в часы наименьшей загрузки) обеспечивает ещё больший запас. Это можно автоматизировать с помощью pmset, launchd или запланированной команды shutdown -r, как описано в разделе о профилактике. Более частые перезагрузки не имеют никаких недостатков — напротив, они помогают устранять утечки памяти, применять ожидающие обновления и поддерживать общее состояние системы.
Исправит ли Apple эту ошибку?
Да, Apple планирует исправить ошибку в macOS 26.5, которая по состоянию на апрель 2026 года находится в beta 2. Согласно типичному бета-циклу Apple, публичный выпуск ожидается в конце весны или начале лета 2026 года. Исправление, вероятно, будет заключаться в корректировке целочисленного сравнения в TCP-стеке ядра XNU для правильной обработки переполнения 32-битного таймера или в возможном переходе на 64-битное целое. До выпуска исправления в производственной версии единственная мера смягчения — перезагрузка Mac до истечения 49-дневного порога работы.
Затрагивает ли ошибка Mac с Apple Silicon и Intel?
Да. Ошибка находится в TCP-стеке ядра XNU — это архитектурно независимый код, работающий как на Apple Silicon (серии M1, M2, M3, M4 и M5), так и на процессорах Intel. Переполнение целого числа происходит одинаковым образом вне зависимости от аппаратной архитектуры. Независимо от того, есть ли у вас MacBook Pro 2015 года с процессором Intel или Mac Studio 2026 года с M5 Ultra, поведение ошибки одинаково.
Можно ли проверить время работы Mac удалённо?
Да, если у вас есть SSH-доступ к Mac (включается через «Системные настройки» > «Основные» > «Общий доступ» > «Удалённый вход»), вы можете проверить время работы удалённо:
ssh username@your-mac-ip "uptime"
Для управления несколькими Mac можно создать скрипт, проверяющий время работы на всех машинах:
#!/bin/bash
# check_all_macs.sh
MACS=("mac1.local" "mac2.local" "mac3.local")
for mac in "${MACS[@]}"; do
echo "--- $mac ---"
ssh user@$mac "uptime" 2>/dev/null || echo " Connection failed"
done
Для мониторинга времени работы парка управляемых Mac можно также использовать Apple Remote Desktop (ARD) или решения для управления мобильными устройствами (MDM).
Если вы управляете Mac, подключёнными к сетевым дискам или устройствам NAS, 49-дневная ошибка также может нарушать подключения к SMB-файловым ресурсам. Связанные вопросы сетевого хранения данных рассмотрены в нашем гиде по устранению неполадок SMB/NAS в macOS Tahoe.
Заключение
49-дневная ошибка TCP в macOS — это увлекательный пример того, как тонкое переполнение целого числа, одна из старейших и лучше всего задокументированных категорий программных ошибок, может годами оставаться незамеченной в современном зрелом ядре операционной системы, прежде чем всплыть по мере того, как всё больше пользователей переходят на конфигурации постоянно включённых Mac-серверов.
Для большинства пользователей Mac эта ошибка представляет собой интересное техническое курьёзное явление, которое никогда не затронет их повседневные вычисления. Но для растущего сообщества пользователей, использующих Mac в качестве серверов, машин для разработки и постоянно включённой инфраструктуры, это реальная операционная угроза, требующая внимания и мер по снижению риска.
Хорошая новость: меры по снижению риска просты. Проверьте время работы, перезагрузитесь до 49 дней и, в идеале, автоматизируйте этот процесс, чтобы больше никогда не думать об этом. А с macOS 26.5 не за горами постоянное исправление уже в пределах досягаемости.
Тем временем воспринимайте это как отличное напоминание о том, что даже самые отточенные и надёжные вычислительные платформы создаются людьми, а человеческий код никогда не бывает совершенным. Регулярные перезагрузки — это не просто ленивое клише технической поддержки, а подлинная передовая практика, защищающая именно от подобных скрытых дефектов.
Связанные ресурсы
Если вы устраняете другие проблемы macOS Tahoe параллельно с ошибкой TCP, следующие руководства могут быть полезны:
- Гид по устранению неполадок Wi-Fi в macOS Tahoe — для проблем с Wi-Fi-подключением помимо ошибки TCP
- Полный гид по устранению неполадок macOS Tahoe — исчерпывающий обзор известных проблем macOS Tahoe
- Полный гид по Мониторингу активности — для мониторинга ресурсов системы и диагностики проблем производительности
- Гид по устранению зависаний macOS Tahoe — для проблем с производительностью и зависаниями
- Устранение неполадок SMB/NAS в macOS Tahoe — для проблем с подключением к сетевому хранилищу
- Руководство по Terminal — для освоения команд Terminal, использованных в этой статье
