Сети с нуля 20. Скорость и производительность: полоса, задержка, MTU, фрагментация
Note
Материал сверен с официальной документацией (RFC, реестры IANA, Microsoft Learn и др.; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашей системе значения и формат могут отличаться. Перед работой на боевом оборудовании проверьте шаги на тестовом стенде.
«Интернет медленный» — самая частая и самая бесполезная жалоба: за ней может стоять перегруженный канал, слабый Wi-Fi, потери пакетов, неправильный размер пакета или медленный сервер. Чтобы найти причину, жалобу нужно превратить в измерение; для этого нужны словарь и инструменты.
В статье мы разберём:
- чем различаются полоса, скорость передачи, полезная скорость и задержка;
- почему скорость одного соединения TCP зависит от задержки и окна;
- что такое MTU и MSS, как работает фрагментация и почему из-за заблокированного ICMP соединения «зависают»;
- что смотреть в Windows и как SNMP помогает следить за каналами.
Что нужно знать заранее
- Сети с нуля 02. Ethernet, MAC-адреса, коммутатор и кабели — скорость линка и дуплекс.
- Сети с нуля 09. TCP, UDP и порты: как программы находят друг друга — рукопожатие TCP, ICMP.
- Сети с нуля 10. Диагностика сети в Windows: ping, tracert, nslookup и другие —
ping,pathping, проверка MTU и последовательность проверок. - Сети с нуля 16. QoS: задержка, джиттер, потери, DSCP, очереди, shaping и policing — определения задержки, джиттера и потерь.
Величины вместо «медленно»
- Полоса (bandwidth, пропускная способность канала) — номинальная скорость канала в битах в секунду, как в договоре. Адаптер (
LinkSpeed, статья 02) показывает скорость только своего участка, до коммутатора или роутера, а не канала до провайдера. - Скорость передачи (throughput) — сколько данных реально проходит за секунду. Она не превышает полосы и зависит от всего пути.
- Полезная скорость (goodput) — часть throughput, которая является данными приложения. Заголовки пакетов и повторно переданные данные в неё не входят. Эти три названия мы используем для различения; в других источниках определения могут отличаться.
- Задержку обычно измеряют как круговую, RTT (Round-Trip Time): время, за которое пакет доходит до узла и ответ возвращается. Его показывает
time=вping. Для нас важно, что TCP считает потерю пакета признаком перегрузки и сбавляет скорость, поэтому даже небольшие потери влияют на скорость сильнее, чем кажется.
Не путайте единицы. Скорости каналов измеряют в битах в секунду (Мбит/с, Гбит/с), а скорость копирования Windows показывает в байтах (МБ/с). В байте 8 бит, поэтому гигабитный порт теоретически даёт не больше 125 МБ/с, а на деле меньше: только заголовки IPv4 и TCP (минимум по 20 байт) отнимают 40 из 1500 байт пакета, около 2,7 %. Диск, программа копирования и протокол файлового доступа тоже вносят свой вклад.
| Что видит пользователь | Куда смотреть в первую очередь |
|---|---|
| Страницы открываются, но большие файлы идут медленно | загрузка канала, окно TCP и RTT, потери |
| Всё «думает» перед ответом, голос рвётся | задержка и потери (статьи 10 и 16) |
| Подключение есть, но большие передачи зависают | MTU и заблокированный ICMP |
Это ориентиры, а не диагноз: любой симптом проверяйте измерением.
Задержка, окно и скорость одного соединения
Чем труба шире и длиннее, тем больше воды в ней находится одновременно. Для сети это произведение полосы на задержку (BDP, Bandwidth-Delay Product): объём данных «в пути». Канал 100 Мбит/с с задержкой 20 мс держит в пути 100 000 000 × 0,02 = 2 000 000 бит, то есть 250 000 байт. Чтобы заполнить канал, отправитель должен иметь право послать столько данных, не дожидаясь подтверждений.
Это право ограничено: объём неподтверждённых данных не больше меньшего из двух окон, окна получателя (rwnd) и окна перегрузки отправителя (cwnd). Окно получателя записывается в 16-битное поле заголовка TCP, поэтому без расширений оно не больше 64 КиБ. Опция «Window Scale» позволяет окну вырасти до 1 ГиБ; её отправляют только в SYN-пакетах, то есть масштаб согласуется при установлении соединения. Ограничение видно из простой оценки: скорость одного соединения не выше окна, делённого на RTT.
| RTT | Предел одного соединения при окне 65 535 байт |
|---|---|
| 1 мс | около 524 Мбит/с |
| 20 мс | около 26 Мбит/с |
| 100 мс | около 5,2 Мбит/с |
Расчёт: 65 535 × 8 = 524 280 бит, делим на RTT. Вывод: при RTT порядка миллисекунды окно ещё не мешает каналу в сотни Мбит/с, а при RTT в десятки миллисекунд без масштабирования одно соединение не заполнит даже канал 100 Мбит/с. Масштаб выбирается по максимальному размеру буфера приёма (по умолчанию его задаёт система, программа может изменить), отдельная настройка масштаба не нужна. В Windows за размер окна приёма отвечает автонастройка, её уровень показывает netsh int tcp show global. У Microsoft разобран случай медленной передачи по каналу с большой задержкой: причиной был не включённый Window Scale, а исправлением — вернуть автонастройку на уровень Normal. Поэтому не отключайте автонастройку по советам «оптимизаторов» (практика автора). Что стороны согласовали масштаб, видно в Wireshark: в SYN-пакете ищите параметр Window scale.
Второе окно, cwnd, растёт постепенно: новое соединение начинает с небольшого объёма данных (медленный старт), увеличивает его, пока нет потерь, а при потере сокращает. Поэтому короткие передачи, как правило, не успевают разогнаться, и для них важнее RTT, а не полоса (практика автора). На каналах с большим произведением полосы на задержку потери, по RFC 7323, могут сказаться на скорости катастрофически. Повторные передачи в Wireshark (только в своей сети и с разрешения её владельца, см. статью 11) показывает фильтр отображения tcp.analysis.retransmission.
MTU, MSS и фрагментация
MTU (Maximum Transmission Unit) — наибольший пакет IP, который канал передаёт целиком. Для Ethernet это 1500 байт. MSS (Maximum Segment Size) — наибольший объём данных TCP в одном сегменте. Стороны сообщают своё значение в SYN-пакете (опция MSS), и оно должно быть равно MTU за вычетом заголовков IP и TCP.
|<---------------- MTU = 1500 байт ---------------->|
+------------+------------+-------------------------+
| IP: 20 Б | TCP: 20 Б | данные: до 1460 Б = MSS |
+------------+------------+-------------------------+
Для IPv4 это 1500 − 20 − 20 = 1460, для IPv6 (заголовок 40 байт) — 1440. Если MSS в SYN не передан, TCP предполагает осторожные 536 байт (576 − 40) для IPv4 или 1220 (1280 − 60) для IPv6, и скорость заметно хуже.
Что делает маршрутизатор с большим пакетом
Путь состоит из многих каналов, и MTU в них может быть разным. Если пакет IPv4 больше MTU следующего канала, всё решает флаг DF (Don't Fragment) в заголовке:
- DF = 0. Маршрутизатор разрезает пакет на фрагменты (общее поле Identification, флаг MF у всех, кроме последнего, смещение в единицах по 8 байт). Собирает пакет получатель; если потерян хотя бы один фрагмент, пакет не собрать, а лишние заголовки и сборка отнимают ресурсы.
- DF = 1. Маршрутизатор пакет отбрасывает и возвращает отправителю сообщение ICMP «Destination Unreachable» (тип 3) с кодом 4, «нужна фрагментация, но DF установлен». В нём указан MTU следующего канала. Отправитель уменьшает размер пакетов.
Это и есть обнаружение MTU пути (PMTUD, Path MTU Discovery): отправитель ставит DF и ориентируется на сообщения ICMP. TCP-реализации с PMTUD работают именно так.
В IPv6 иначе: маршрутизаторы пакеты не фрагментируют, это может сделать только источник. Любой канал должен иметь MTU не меньше 1280 байт. Слишком большой пакет маршрутизатор отбрасывает и отвечает сообщением ICMPv6 Packet Too Big с MTU следующего канала, а отправитель подстраивается. Об адресах и работе IPv6 — в статье Сети с нуля 14. IPv6 для начинающих.
«Чёрная дыра» MTU
Обнаружение MTU работает, только пока сообщения ICMP доходят до отправителя. Если какой-то фильтр на пути их отбрасывает, возникает «чёрная дыра». RFC 8201 описывает её для IPv6 как соединения, которые завершают трёхстороннее рукопожатие TCP, а затем зависают при передаче данных; в IPv4 PMTUD так же зависит от ICMP, и последствия те же. Рукопожатие и короткие запросы проходят, большие пакеты исчезают молча. Типичная жалоба: «ping идёт, сайт открывается не до конца, соединение устанавливается и замирает» (практика автора).
MTU пути меньше 1500 там, где пакеты упаковываются в другие: в туннелях и VPN. Каждый дополнительный заголовок отнимает место у данных. Подробности о VPN — в статье 15.
От результата ping к MTU и MSS
Как искать MTU пути командой ping -f -l (только для IPv4), разобрано в статье 10: для MTU 1500 максимальный размер данных 1472, плюс 28 байт заголовков. Новое здесь — связать результат с настройками. Допустим, туннель добавляет 60 байт: пакет внутри него не больше 1440 байт, ping -f -l 1412 проходит, а 1413 нет. Значит, MTU туннеля 1440, а MSS внутри него должен быть 1400 (1440 − 40). Такую разницу видно сразу, если сравнить результаты при включённом VPN и без него.
Две оговорки: отсутствие ответа не доказывает проблему MTU, потому что ICMP мог быть заблокирован; а MTU адаптера (поле MtuSize в Get-NetAdapter, статья 02) относится только к первому каналу пути.
Что делать
Сначала убедитесь, что ICMP не блокируется целиком: нужные для PMTUD типы (в IPv4 «нужна фрагментация», в IPv6 Packet Too Big) должны проходить. Затем поправьте MTU на самом туннеле или шлюзе. Для TCP многие шлюзы умеют ещё уменьшать MSS в проходящих SYN-пакетах (в документации ищите «MSS clamping»). RFC 4459 называет это обходным приёмом, работающим только для TCP: для UDP и других протоколов без MSS он не помогает, так что MTU туннеля всё равно нужно настраивать правильно. Туннели разобраны в статьях Cisco с нуля 17. GRE-туннели и MikroTik с нуля 11. WireGuard: доступ в офис и туннель между офисами. Менять MTU на рабочих компьютерах — крайняя мера: сначала на одном тестовом узле, с готовым откатом. Уменьшать его «для скорости» на всех ПК не нужно: чем меньше MTU, тем больше заголовков на те же данные.
Что смотреть в Windows
Командлет Get-NetAdapterStatistics показывает байты, пакеты, отброшенные пакеты и ошибки адаптера; для всех полей добавьте Format-List:
Get-NetAdapterStatistics -Name "Ethernet" | Format-List -Property *
Пример вывода (фрагмент):
Name : Ethernet
ReceivedBytes : 48210334711
ReceivedDiscardedPackets : 0
ReceivedPacketErrors : 214
SentBytes : 9120114532
OutboundDiscardedPackets : 0
OutboundPacketErrors : 0
ReceivedPacketErrors — входящие пакеты, отброшенные из-за ошибок; ReceivedDiscardedPackets — отброшенные без ошибок; для исходящих поля называются Outbound…. Сравните два замера с интервалом в несколько минут и смотрите, растут ли числа. Рост ошибок может указывать на кабель, порт, несовпадение дуплекса (статья 02) или драйвер.
Загрузку канала показывает Performance Monitor. Нужны счётчики Network Interface(*): Bytes Received/sec и Bytes Sent/sec (в байтах: умножьте на 8 и сравните со скоростью линка), Packets Received Errors, Packets Outbound Discarded и из наборов TCPv4 и TCPv6 счётчик Segments Retransmitted/sec. Названия счётчиков зависят от языка системы (в русской Windows они могут быть переведены); точные имена смотрите в Performance Monitor на своём компьютере.
Счётчик Output Queue Length для оценки перегрузки малоинформативен: страница Microsoft одновременно пишет, что значение больше 2 означает задержки, и что из-за очереди, которую ведёт NDIS (Network Driver Interface Specification), оно должно быть всегда равно 0. Ориентируйтесь на загрузку, ошибки и сброшенные пакеты (практика автора).
Задержку и потери по маршруту показывают ping -t и pathping (статья 10). Для Wi-Fi проверьте сигнал и канал (статья 12): скорость в выводе адаптера — согласованная скорость радиосоединения, а не скорость интернета. Для голоса и видео смотрите QoS (статья 16).
Практика: MTU, MSS и окно на своём компьютере
Шаги только читают информацию и ничего не меняют.
- MTU пути с VPN и без. Найдите MTU пути до внешнего узла (например,
198.51.100.10) по статье 10 и повторите при включённом VPN: разница показывает, сколько места занимает туннель. - SYN в Wireshark. Запустите захват и выполните
curl.exe -s -o NUL http://www.example.com(как в статье 11). Фильтрtcp.flags.syn == 1оставит первые пакеты рукопожатия. Откройте SYN-пакет вашего компьютера и найдите в параметрах TCP значения Maximum segment size и Window scale. При MTU 1500 в IPv4 MSS обычно равен 1460.
Результаты сохраните: при следующей жалобе у вас будет «эталон» для сравнения.
Мониторинг и SNMP
Заметить проблему до звонка пользователя помогает мониторинг: система сама опрашивает маршрутизаторы и коммутаторы и рисует графики загрузки и ошибок. Для этого используется SNMP (Simple Network Management Protocol): на устройстве работает агент, система мониторинга выступает менеджером, а данные (счётчики интерфейсов, состояние) описаны в MIB (Management Information Base). Запросы идут на UDP-порт 161, уведомления (traps) — на UDP-порт 162.
Версии отличаются безопасностью. В SNMPv1 и SNMPv2c единственная «защита» — строка community, которая передаётся открытым текстом; RFC 3410 называет такую аутентификацию фундаментально небезопасной и относит обе версии к историческим. SNMPv3 добавляет криптографическую аутентификацию, шифрование и разграничение доступа, но защищает только при включённых аутентификации и шифровании: без них он примерно равен v1 и v2c. Поэтому по возможности используйте SNMPv3 с аутентификацией и шифрованием. Если устройство умеет только v2c, задайте собственное значение community вместо стандартного, оставьте доступ только на чтение, разрешите опрос только с адреса сервера мониторинга и не открывайте UDP 161 в интернет (практика автора). Настройка — в статьях Zabbix с нуля: установка, первые узлы и уведомления, Cisco с нуля 21. Мониторинг: SNMPv3, syslog, NTP, IP SLA и MikroTik с нуля 08. Диагностика и мониторинг.
Порядок поиска узкого места
Общая последовательность «снизу вверх» описана в статье 10. Эта статья добавляет к ней четыре шага:
- Посмотрите загрузку канала и ошибки адаптера. Если загрузка у предела, вопрос в полосе и очередях (QoS), а не в поломке.
- Для одного соединения на длинном канале сравните скорость с оценкой «окно / RTT».
- Проверьте размер пакета, особенно если в пути VPN или туннель.
- Настройте мониторинг, чтобы в следующий раз видеть графики загрузки и ошибок интерфейсов до жалобы.
Если сеть чиста, причина, вероятно, в сервере, диске или программе: Поддержка пользователей 04. «Компьютер тормозит».
Состояние на ноябрь 2026 года (проверьте актуальность). Описание TCP обновлено в RFC 9293 (2022 г.): он заменил, в том числе, RFC 793, 879 и 6691; PMTUD для IPv6 описан в RFC 8201 (он заменил RFC 1981). Значения начального окна и алгоритмы управления перегрузкой зависят от версии ОС и устройства. Страница Microsoft о сетевых счётчиках последний раз обновлялась 01.11.2024, страница о проблемах производительности TCP/IP — 12.02.2026: названия счётчиков и уровни автонастройки проверяйте на своей версии Windows. RFC 3410 датирован 2002 годом; поддержку SNMPv3 уточняйте в документации конкретного устройства.
Типичные ошибки и недоразумения
- «Купили гигабит, файл должен копироваться на 125 МБ/с». Это потолок канала, а мегабиты не равны мегабайтам: 100 Мбит/с — это 12,5 МБ/с. Реальная скорость зависит ещё от заголовков, диска, протокола и окна TCP.
- «Тест скорости в норме, значит, сеть ни при чём». Тест измеряет путь до своего сервера; до вашего сервера путь и задержка другие (практика автора).
- «Ping в норме, значит, с каналом всё хорошо». По умолчанию
pingотправляет 32 байта: он не покажет проблемы с MTU и потери под нагрузкой. - «Заблокирую весь ICMP ради безопасности». Без сообщений о слишком большом пакете PMTUD не работает, соединения зависают. Фильтруйте избирательно.
- «Отключу автонастройку TCP, станет быстрее». Можно ограничить окно и потерять скорость на длинных каналах.
- «В SNMP v2c community — это пароль, он надёжен». Он передаётся открытым текстом; для защиты нужен SNMPv3 и ограничение доступа по адресам.
Проверьте себя
- Чем MTU отличается от MSS и чему равен MSS при MTU 1500 в IPv4? MTU — наибольший пакет IP на канале, MSS — наибольший объём данных TCP в сегменте. Для IPv4 MSS = 1500 − 20 − 20 = 1460.
ping -f -l 1472проходит, а-l 1473нет. Что это значит? Пакет размером 1472 + 28 = 1500 байт проходит, а в 1501 байт не помещается: MTU пути равен 1500 (при условии, что ICMP не блокируется).- Почему при RTT 100 мс одно соединение TCP без масштабирования окна не превысит примерно 5 Мбит/с? Окно не больше 65 535 байт: 524 280 бит за 0,1 с — около 5,2 Мбит/с, как бы широк ни был канал.
- Что такое «чёрная дыра» MTU и как она проявляется? Это ситуация, когда ICMP с требованием уменьшить пакет не доходит до отправителя: рукопожатие TCP проходит, а большие передачи зависают.
- Когда SNMPv3 лучше SNMPv2c? Когда включены аутентификация и шифрование: в v2c только строка community открытым текстом; без аутентификации и шифрования v3 примерно равен v2c.
Что дальше
- Сети с нуля 15. VPN: зачем нужен, IPsec и IKEv2, TLS-VPN и WireGuard — почему туннели уменьшают MTU и как это учитывать.
- Сети с нуля 16. QoS: задержка, джиттер, потери, DSCP, очереди, shaping и policing — как защитить голос и видео, когда канал перегружен.
- Zabbix с нуля: установка, первые узлы и уведомления — мониторинг каналов и устройств.
- Безопасность для начинающих 05. Сеть и удалённый доступ — сегментация, межсетевой экран и что нельзя публиковать в интернет, включая SNMP.
Источники
- RFC 791. Internet Protocol — заголовок IPv4, фрагментация, флаги DF и MF
- RFC 1191. Path MTU Discovery — обнаружение MTU пути, ICMP тип 3 код 4, Next-Hop MTU; в таблице MTU Ethernet — 1500 (RFC 894)
- RFC 4459. MTU and Fragmentation Issues with In-the-Network Tunneling — «MSS clamping» и его ограничение: работает только для TCP
- RFC 8200. Internet Protocol, Version 6 (IPv6) Specification — минимальный MTU 1280, фрагментация только источником
- RFC 8201. Path MTU Discovery for IP version 6 — Packet Too Big, «чёрная дыра» из-за блокировки ICMPv6
- Microsoft Learn. MSFT_NetAdapterStatisticsSettingData — поля статистики адаптера: ошибки и отброшенные пакеты
- RFC 9293. Transmission Control Protocol (TCP) — MSS, значения по умолчанию, PMTUD в TCP
- RFC 5681. TCP Congestion Control — cwnd, rwnd, медленный старт, реакция на потери
- RFC 7323. TCP Extensions for High Performance — окно 64 КиБ, Window Scale, влияние BDP и потерь
- RFC 3410. Introduction and Applicability Statements for Internet-Standard Management Framework — модель SNMP, безопасность v1, v2c и v3
- IANA. Service Name and Transport Protocol Port Number Registry — порты SNMP: UDP 161 и 162
- Microsoft Learn. ping — ключи
-f,-l, время ответа - Microsoft Learn. Get-NetAdapterStatistics — статистика адаптера,
Format-List -Property "*" - Microsoft Learn. Network-Related Performance Counters — счётчики сети, Output Queue Length
- Microsoft Learn. TCP/IP performance known issues — Window Scale и автонастройка окна приёма в Windows,
netsh int tcp show global