Начнём с главной интриги. Оверхед — это накладные расходы трафика, избавиться от которых не получится. Они необходимы для функционирования сети и передачи служебной информации протоколов.
Давайте посчитаем, как долго будет передаваться файл размером в 100 Мбайт, если скорость доступа у абонента — 100 Мбит/с?
Одну секунду? Не учли, что передача идёт в байтах.
8 секунд? Уже теплее.
На самом деле — 8.5 секунд. А если учесть протокол IPsec, то 9 секунд.
Казалось бы, всего одна лишняя секунда. Но если перевести задержку в проценты, то она составит около 13% — таким образом, файл, передача которого должна была уложиться в час, займёт у вас 1 час и 8 минут — и это в идеальных условиях, без учёта дополнительных факторов.
Оверхед «съедает» 13% пропускной способности. Да, в наше время высоких скоростей может показаться, что такие нюансы незначительны. Однако, всё меняется при больших объёмах данных: для интернет-провайдеров или корпораций вроде Facebook и Google каждые полпроцента имеют значение. В Google даже пытались разработать собственный протокол для уменьшения объёмов данных - SPDY, который лёг в основу протокола HTTP/2.
В этой статье подробно разберём, почему 100 Мбайт никогда не скачаются за одну секунду при скорости в 100 Мбит/с, но для этого придётся столкнуться с математикой.
Если расчёты неинтересны, то переходите к короткому изложению в конце статьи.
И так, сразу начнём с расчётов:
< математика началась >
Вместо двоичных префиксов (где 1 Кбит = 1024 бита) будем использовать десятичные:
- 1 Кбайт = 1000 байт (8000 бит)
- 1 Мбайт = 1 000 000 байт (8 000 000 бит)
Вспомним несколько нюансов про десятичные (метрические) префиксы:
- Скорость Ethernet, объём SSD/HDD, команды в Linux — десятичные префиксы.
- А вот в Windows и в стандартах передачи данных по сети традиционно используются двоичные метрики.
- Чтобы узнать точный размер, узнайте его в байтах и переведите в нужный префикс.
Биты и байты:
1 байт = 8 бит
Размеры файлов обычно считают в байтах. Скорость передачи данных считается в битах в секунду (и соответственно кило-, мега-, гигабитах), именно поэтому передача файла в 100 Мбайт займет 8 секунд при скорости в 100 Мбит без учета оверхедов.
Что ещё за оверхеды?
В сетях под оверхедами подразумевают передаваемую служебную информацию, необходимую для работы сети, и таких оверхедов существует несколько:
- TCP/IP Handshake (в наших расчетах опускаем, он слишком незначительный).
- Оверхеды Ethernet (тоже пока не учитываем, о них добавим отдельно в конце — их уже посчитали вместо нас).
- Оверхеды TCP/IP (их и будем рассчитывать).
Предположим следующее:
- У нас не происходит потерь пакетов, повторов и подобных событий.
- Передаём в одну сторону, только данные и оверхед.
- MTU (максимальный размер пакета, который может быть передан по сети без фрагментации) 1500 байт.
- MSS (максимальный размер полезного блока данных в пакете) 1460 байт — остальные 40 заняты заголовками.
- Используем полнодуплексный канал, то есть полная ширина доступна в обе стороны одновременно.
- Когда данных остаётся меньше максимального размера пакета, округляем до целого, ведь пакет всё равно нужно передать.
Расчёты:
Используем пять примеров, чтобы показать, что оверхед остаётся примерно тем же, пока объём данных превосходит 1460 байт (IP MSS).
1 байт данных
- 1 байт может поместиться в 1 пакет, так как меньше 1460 байт (стандартный TCP MSS)
- 1 x 40 байт заголовков дают 40 байт, 4.1% TCP/IP оверхеда.
- Итого, 41 байт данных передан в сети.
1 Килобайт данных
- 1 Кбайт (1000 байт) может поместиться в 1 пакет, так как он меньше 1460 байт (1000 / 1460 = 0.684)
- 1 x 40 байт заголовков дают 40 байт, 4% TCP/IP оверхеда.
- Итого, 1040 байт данных передано в сети.
20 Килобайт данных
- 20 Кбайт (20 000 байт) поделятся на 14 пакетов, не превышающих 1460 байт (20 000 / 1460 = 13.70)
- 14 x 40 байт заголовков дают 560 байт, 2.8% TCP/IP оверхеда.
- Итого, 20 560 байт данных передано в сети.
480 Килобайт данных
- 480 Кбайт (480 000 байт) поделятся на 329 пакетов, не превышающих 1460 байт (480 000 / 1460 = 328,77)
- 329 x 40 байт заголовков дают 13160 байт, 2.74% TCP/IP оверхеда.
- Итого, 493 160 байт данных передано в сети.
1 Мбайт данных
- 1 Мбайт (1 000 000 байт) поделится на 685 пакетов, не превышающих 1460 байт (1 000 000 / 1460 = 684,93)
- 685 x 40 байт заголовков дают 27 400 байт, 2.74% TCP/IP оверхеда.
- Итого, 1 027 400 байт данных передано в сети.
</ математика закончилась >
Вывод
Таким образом, для объёмов данных свыше обычного размера сегмента (MSS) в 1460 байт, оверхед будет около 2.8%. Это приводит к эффективности в 97.33% (1460/1500) — такая ширина канала останется для полезных данных, если помещать в каждый пакет максимальное их количество. При этом для очень малых объёмов данных оверхед может превышать 4%.
Кроме того, в Ethernet тоже присутствует оверхед. Он считается схожим образом, расчёты можно посмотреть здесь. Теперь, если к нашим 97.33% добавить оверхед Ethernet и теги VLAN, то пропускная способность линка в 100 Мбит/с составит 100 х 0.9733 (посчитанная выше эффективность) х 0.9728 (эффективность Ethernet с тегами) = 94.68 Мбит/с, что даёт эффективность в 94.68%. Именно поэтому при ширине канала в 100 Мбит/с Speedtest не покажет нам больше 94.68 Мбит/с.
Добавим к этому протокол безопасности, сессионные и прикладные оверхеды, и станет ясно, куда уходит скорость. К примеру, шифрование AES уменьшит нашу цифру до 87.7%, так обычно происходит при подключении по Wi-Fi. С HTTP, другими заголовками, cookie-файлами можно легко потерять до 25% ширины канала.
Оригинал — Steven Iveson на packetpushers.net
Подключайтесь к SkyNet, 5 месяцев интернета за 1000 рублей с промокодом 345534