О том, как один и тот же симптом - «музыка тормозит» - может скрывать три разные поломки, и почему поиск виноватого в конфигах часто приводит в тупик.
Apple Music замирает. То ли поиск крутит бесконечный спиннер, то ли трек грузится по две минуты, прежде чем издать первый звук. В такие моменты возникает стойкое ощущение «глюка» сети. Знакомое чувство: ты открываешь терминал, проверяешь пинг до выходного узла, переключаешь локации с Осло на Токио. Всё чисто. Скорость в норме, потери пакетов нулевые, а музыка всё равно ведет себя так, будто её тянут через модем из девяностых.
Самое коварное здесь то, что симптом один, а причины живут в разных плоскостях: в протоколах, в радиоэфире и в памяти системы.
Стерильная сеть
Первым делом рука тянется к сетевому стеку. Логика проста: если интернет есть, а приложение тупит - значит, где-то в правилах роутинга возникла «дыра» или конфликт геопозиций. Я пересобирал конфиги, менял DNS-резолверы, проверял, не утекает ли трафик мимо туннеля.
Но приборы рапортовали: «всё в порядке». Пинг до API Apple был минимальным, туннель держал нагрузку, авторизация проходила мгновенно. Ощущение было, будто сражаешься с призраком: проблема осязаема, но любой инструмент диагностики твердит, что сеть стерильна. А лечить здоровый конфиг тянет по привычке - винить в любой заминке сетевой стек.
От поломки - к сигнатуре
Когда ты застреваешь, пора перестать искать «поломку» и начать искать «сигнатуру». Вместе с ИИ мы решили не гадать, а составить карту сокетов. Оказалось, что «тормозит музыка» - это не одна проблема, а три разных сценария, которые различаются по тому, куда и как уходят пакеты.
Первый случай - классическое «раздвоение личности» трафика: часть запросов (TCP) шла через туннель и видела меня в одной стране, а часть (QUIC/UDP) утекала мимо него - в другой. Apple Music ловил гео-десинхрон и упирался в спиннер. Полный разбор именно этого случая - в отдельном посте «Музыка, утёкшая в UDP»; здесь важна только его сигнатура - TCP и UDP уходят разными путями.
Второй случай был куда более приземлённым. Сеть была идеальна, но музыка заикалась. nettop показал, что в этот момент процесс rapportd (сервисы Continuity: AirDrop, Handoff) забивает Wi-Fi радиоэфир, пересылая гигабайты данных между устройствами Apple. Радиокарта просто не успевала переключаться между точкой доступа и peer-to-peer соединением. Пинг до близких серверов был в норме, а вот дальние узлы начали «джиттерить».
Третий вариант - самый тихий. Сеть в идеале, эфир чист, но приложение висит белым экраном. Проверка сокетов показала ноль. Вообще. Приложение даже не пыталось отправить запрос. Оказалось, что завис один из системных демонов (amsaccountsd или itunescloudd), который не обновлял свою авторизацию уже две недели.
Три двери, три ключа
Решения оказались разными для каждой сигнатуры, и ни одно из них не требовало переписывания всей архитектуры сети.
Утечку QUIC лечит одно правило - закрыть UDP-дверь на 443, чтобы приложение откатилось на TCP и снова пошло через туннель. Точный синтаксис и полный разбор - в «Музыке, утёкшей в UDP».
Для радиопомех от AirDrop помогло банальное отключение лишних функций Handoff и перенос устройств на 5 ГГц, чтобы разгрузить эфир.
Для «зависших» демонов сработал метод грубой перезагрузки. Вместо того чтобы ребутать весь Mac, я просто выжигал цепочку медиа-процессов:
killall Music itunescloudd amsengagementd amsaccountsd mediaplaybackd AMPLibraryAgent
После этого launchd мгновенно поднимал их с чистым состоянием, и музыка оживала за секунду.
Сначала сигнатура, потом настройки
Один симптом - три разные поломки, и это меняет сам подход. Моя ошибка была в допущении «тормозит приложение - значит, дело в сети»: слишком уверенный вектор, который я перестал перепроверять.
Роль ИИ была одна - возвращать к измерению. Каждый раз, когда рука тянулась «починить» и без того здоровый конфиг, вопрос возвращал к фактам: а что показывают сокеты?
Мораль проста: прежде чем менять настройки, посмотри на сигнатуру. Если сокеты в туннеле - ищи проблему в маршруте. Если сокетов нет, а CPU молчит - ищи зависший процесс. Если пакеты есть, но они приходят рывками - посмотри на соседние устройства в комнате. Самый быстрый путь к решению часто лежит через признание того, что ты ищешь не там.
