Почему скорость выгрузки почти всегда намного ниже загрузки? Дело в кабеле, DSL и беспроводных сетях — не в тарифе. Вот чем это оборачивается.
Запустите тест скорости — и число выгрузки почти всегда оказывается меньшим из двух, нередко в десять и более раз. Это не поломка и не искусственное урезание скорости по тарифу: большинство сетей доступа изначально построены так, чтобы гнать данные к вам, а не от вас, и этот перекос заложен на уровне физической среды, а не спрятан в мелком шрифте договора. Разберёмся, почему выгрузка всегда оказывается в проигрыше — и почему это число значит больше, чем подсказывает его размер.
Ключевые выводы
- Асимметрия физическая, а не договорная. Кабель, DSL и большинство фиксированных беспроводных и спутниковых линий по конструкции делят ёмкость между направлениями неравномерно — это не ограничение, которое снимается более дорогим тарифом.
- Оптоволокно — исключение. Соединение по технологии «оптика до дома» (FTTH) обычно симметрично, поэтому этот вопрос в основном исчезает, как только кто-то переходит на FTTH.
- Забитая выгрузка вредит больше, чем подсказывает её цифра. Видеозвонки, облачные бэкапы и демонстрация экрана напрямую зависят от выгрузки, а забитая исходящая очередь ещё и задерживает подтверждения, от которых зависят ваши загрузки, — поэтому выгрузка может тормозить всё соединение целиком, а не только себя.
- Забитая исходящая очередь — классический триггер bufferbloat — см. что такое bufferbloat, чтобы разобраться в механизме и решении.
- Читайте свою цифру выгрузки с поправкой на методологию теста — одиночный поток против параллельных и длительность теста одинаково сдвигают то, что покажет короткий прогон.
Почему выгрузка меньше: это заложено в технологии доступа
Любая домашняя интернет-технология вынуждена делить конечную ёмкость между направлением, которым вы пользуетесь больше всего (загрузка), и тем, которым пользуетесь меньше всего (выгрузка), и почти никто не делит её поровну.
- Кабель (DOCSIS). Кабельные сети делят один коаксиальный провод на целый квартал, разбивая его на частотные полосы. Исторически лишь небольшой кусок этого спектра отдавался исходящему направлению, потому что модель трафика предполагала, что люди в основном принимают — веб-страницы, видео, загрузки. Более новые стандарты DOCSIS расширяют исходящую полосу, но кабельные тарифы всё ещё обычно рекламируют цифры загрузки, во много раз превышающие выгрузку, а эта исходящая полоса к тому же общая для всех остальных на том же узле.
- DSL. Асимметрия зашита прямо в название: ADSL — это Asymmetric Digital Subscriber Line, асимметричная цифровая абонентская линия. Технологию изначально спроектировали так, чтобы отдавать предпочтение загрузке перед выгрузкой на одной и той же медной паре, исходя из предположения, что домашняя линия в основном тянет данные, а не толкает их.
- Фиксированный беспроводной доступ и спутник. Эти линии упираются в ограниченную мощность передатчика на исходящем направлении, а на общих вышках или спутниках — ещё и в конкуренцию со всеми остальными абонентами, использующими ту же исходящую ёмкость одновременно. Телефон или антенна на крыше физически не могут передавать так же мощно, как базовая станция или наземный шлюз спутника, поэтому исходящее направление — более узкое место почти в любой беспроводной технологии доступа.
- Оптоволокно (FTTH). Оптика обычно исключение: многие развёртывания «оптика до дома» предоставляют симметричную услугу, где загрузка и выгрузка берутся из одной и той же обильной ёмкости. Именно поэтому вопрос «почему у меня такая медленная выгрузка» в основном перестаёт возникать, как только кто-то переходит на оптоволокно, — того перекоса на уровне физической среды, что вызывает его на кабеле и DSL, там попросту нет.
Дело здесь не в выборе провайдера — дело в том, какая технология лежит в основе вашей линии. Два провайдера на одной кабельной сети покажут одинаково перекошенное соотношение; два провайдера на оптике в одном доме — как правило, нет.
Почему маленькая цифра обходится дороже, чем кажется
Соблазнительно списать низкую цифру выгрузки со счетов, ведь большая часть того, чем вы занимаетесь — сёрфинг, стриминг, загрузки, — почти её не касается. Но несколько привычных занятий напрямую зависят от выгрузки, а забитый канал выгрузки может незаметно портить вещи, которые вроде бы никак с ним не связаны:
- Видеозвонки и демонстрация экрана непрерывно отправляют ваш собственный звук и видео вверх по каналу. Если выгрузка тонкая или забита, именно собеседник видит, как вы зависаете или пропадаете, хотя ваша загрузка — часть, которая несёт его видео к вам, — выглядит нормально.
- Облачный бэкап и синхронизация (фото, документы, видеозаписи) — это почти целиком трафик выгрузки, и крупный бэкап, идущий в фоне, может незаметно занять весь ваш исходящий канал на часы.
- Подтверждения тоже едут по исходящему каналу. Любая загрузка — даже огромная, вроде обновления игры или фильма, — зависит от того, что ваше устройство шлёт назад отправителю ровный ручеёк мелких пакетов-подтверждений (ACK), сообщающих, что данные дошли, чтобы отправитель знал, что можно продолжать. Эти ACK идут именно по исходящей стороне вашего соединения. Если что-то другое уже забило исходящую очередь, эти мелкие подтверждения застревают позади, отправитель решает, что сеть перегружена, и сбавляет темп, — и загрузка, не имеющая никакого отношения к вашей выгрузке, всё равно начинает еле ползти. Поэтому методика тестирования пропускной способности TCP из RFC 6349 требует измерять вместе со скоростью передачи ещё и время приёма-передачи (RTT) и задержку в буферах: пропускная способность TCP ограничена тем, как быстро данные подтверждаются и освобождается следующее окно, так что обратный путь важен даже для односторонней передачи.
Короче говоря: выгрузка — не просто «цифра поменьше». Забитый канал выгрузки способен заставить выглядеть сломанной даже загрузку, которая его вообще не касается.
Исходящая очередь — вот откуда обычно начинается bufferbloat
Последний пункт — забитая выгрузка, которая задерживает всё, что делит с ней соединение, — это ещё и классический триггер bufferbloat: ваш роутер или модем ставит данные в очередь вместо того, чтобы отбрасывать их, когда канал занят, и это добавляет задержку, вообще не трогая цифру пропускной способности. Крупная выгрузка (бэкап, облачная синхронизация, видеозвонок) часто оказывается именно тем триггером, что забивает исходящий буфер и заставляет звонок или игру дёргаться на соединении, которое при простое тестируется отлично. Если пинг в покое выглядит прекрасно, но подскакивает в момент, когда вы начинаете что-то выгружать, — это тот самый паттерн, который стоит проверить; см. что такое bufferbloat о том, как сравнить задержку в простое и под нагрузкой и что это лечит (активное управление очередью, конкретно FQ-CoDel).
Как честно прочитать свою цифру выгрузки
Как только вы понимаете, что выгрузка должна быть меньше, следующий вопрос — честно ли отражает вашу линию цифра, которую только что выдал тест скорости. Есть два момента в самом тесте, которые сдвигают результат:
- Один поток против параллельных. Тест, открывающий одно соединение, и тест, открывающий сразу много параллельных, могут показать разные пиковые цифры на одной и той же линии, потому что один поток TCP может упереться во время приёма-передачи (RTT) и размер окна задолго до того, как насытит канал, тогда как несколько параллельных потоков заполняют трубу быстрее. NDT от M-Lab — открытый тест, на котором работает проверка скорости в Google Поиске, — намеренно использует один поток TCP и показывает рядом с результатом детали на уровне TCP, поэтому на той же линии он может выдать меньше, чем многопоточный инструмент, и при этом ни один из них не ошибается. Цифры разных инструментов не сравнимы напрямую — сравнивайте результаты, полученные одним и тем же методом.
- Длительность теста. Короткий тест может завысить вашу реальную устойчивую выгрузку, потому что многие соединения допускают начальный всплеск выше установившейся скорости, прежде чем она осядет, — короткий тест может закончиться до того, как это осядание произойдёт, и показать именно всплеск, а не цифру, которую вы реально получите на многоминутной выгрузке. Если измеренная выгрузка стабильно разочаровывает на длинных реальных выгрузках по сравнению с тем, что показывает быстрый тест, обычно дело именно в длительности; полный список причин расхождений от запуска к запуску — в статье почему результаты теста скорости меняются.
Практический вывод: не сравнивайте свою цифру выгрузки с цифрой загрузки и не делайте вывод, что что-то сломано. Сравнивайте её с тем, что ваш тариф и технология доступа реально обещают для выгрузки, используя тест, достаточно длинный и с достаточным числом параллельных соединений, чтобы отразить устойчивую реальную нагрузку.
Проверьте сами
Тест скорости сети от BrowserInsight показывает выгрузку прямо рядом с загрузкой, задержкой и джиттером, так что вы видите свою реальную асимметрию, а не гадаете по одной заглавной цифре. Запустите его один раз в простое и один раз, пока активно что-то тяжёлое для выгрузки (бэкап, видеозвонок), — и увидите и базовую выгрузку, и то, сколько из неё съедается в реальных условиях.
Часто задаваемые вопросы
Провайдер намеренно урезает мне выгрузку?
Обычно не намеренно — разрыв почти всегда объясняется технологией доступа, а не сознательным ограничением. Кабель и DSL по конструкции делят ёмкость между направлениями неравномерно, поэтому соотношение загрузки к выгрузке 10:1 и выше на этих технологиях — обычное дело, а не признак урезания скорости. А вот если вы на оптоволокне и всё равно видите большой разрыв, это уже стоит выяснять с провайдером.
Поможет ли более дорогой тариф исправить медленную выгрузку?
Иногда да, но не всегда. Более быстрый тариф на той же технологии доступа (кабель, DSL) обычно поднимает обе цифры вместе, но соотношение между ними, как правило, остаётся похожим, потому что деление между направлениями задаёт технология, а не тарифный план. По-настоящему меняют само соотношение только технологии с симметричной услугой — чаще всего оптоволокно.
Почему у меня зависает загрузка, когда я запускаю крупную выгрузку?
Потому что пакеты-подтверждения для вашей загрузки тоже идут по исходящей стороне соединения. Если выгрузка забивает исходящую очередь, эти подтверждения задерживаются, отправитель на стороне загрузки сбавляет темп, решив, что сеть перегружена, и ваша загрузка замедляется, хотя с её собственной пропускной способностью ничего не случилось. Это тоже классический симптом bufferbloat — см. что такое bufferbloat.
Важна ли скорость выгрузки для игр?
Меньше, чем задержка, но в какой-то мере да. Сам игровой трафик лёгкий, но если исходящий канал забит чем-то другим (облачным бэкапом, демонстрацией экрана, чужим видеозвонком), маленьким игровым пакетам приходится стоять за этим трафиком в той же исходящей очереди — и задержка, которую реально ощущает игра, растёт, даже если самой игре выгрузки нужно совсем немного.
Заключение
Маленькая цифра выгрузки рядом с большой цифрой загрузки — не баг, а то, как построены кабель, DSL и большинство фиксированных беспроводных и спутниковых соединений: общая ёмкость делится в пользу направления, которым пользуется большинство. Практическую картину меняет оптоволокно, где это деление исчезает, а ещё — понимание того, чем на самом деле оборачивается забитая выгрузка: не только более медленные выгрузки, но и задержанные подтверждения, способные утянуть вниз и ваши загрузки, и классическая предпосылка для bufferbloat. Тестируйте выгрузку и загрузку вместе, читайте цифру относительно вашей технологии доступа, а не относительно загрузки, и если звонки или игры начинают дёргаться именно тогда, когда что-то выгружается, — это первая очередь, которую стоит проверить.
Рекомендуем прочитать:


