Тема 01

Компьютерная сеть: основные понятия и метрики

Компьютерная сеть: основные понятия и метрики

Компьютерная сеть стала инфраструктурой того же порядка, что электроснабжение и водопровод: большинство пользователей замечает её лишь тогда, когда страница «долго грузится» или видеозвонок «заикается». Инженеру такого бытового представления недостаточно. Чтобы проектировать сеть, находить в ней неисправности и оценивать, выдержит ли она новую нагрузку, нужен словарь точных понятий и умение выражать поведение сети в числах: сколько бит в секунду способен передать канал, сколько миллисекунд пакет проводит в пути и из чего эти миллисекунды складываются, сколько пакетов теряется и почему.

Настоящая тема открывает курс и вводит этот словарь. Сначала определяется, из чего состоит компьютерная сеть: узлы, каналы, протоколы и сервисы. Затем кратко прослеживается история — от телефонной сети к ARPANET и современному Интернету, — поскольку многие проектные решения, которые сегодня кажутся произвольными, становятся понятны лишь в историческом контексте. Центральное место занимает сопоставление двух способов разделения канала между пользователями — коммутации каналов и коммутации пакетов, — потому что выбор второго способа определил и достоинства Интернета, и его главную особенность: непредсказуемую задержку.

Далее рассматривается устройство Интернета как «сети сетей», классификация сетей по масштабу и топологии, а затем — метрики качества: пропускная способность, задержка и её четыре составляющие, время кругового обхода, джиттер, потери и произведение пропускной способности на задержку. Отдельный раздел посвящён очередям: без понимания того, как задержка зависит от загрузки канала, невозможно объяснить ни одно наблюдение в последующих лабораторных работах. Тема завершается обзором организаций, которые создают стандарты и распределяют адреса. Устройство уровней сетевой архитектуры здесь намеренно не затрагивается — оно составляет предмет темы 2.

Из чего состоит компьютерная сеть

Узлы, каналы и протоколы

Компьютерной сетью (англ. computer network) называют совокупность вычислительных устройств, соединённых каналами связи и обменивающихся данными по согласованным правилам. В этом определении три составляющие, и каждая из них имеет устоявшееся название.

Узел (англ. node) — любое устройство, подключённое к сети. Узлы делятся на две группы. Конечные узлы, или хосты (англ. host, end system), — это устройства, на которых работают прикладные программы и которые являются источниками и получателями данных: персональные компьютеры, смартфоны, серверы, камеры наблюдения, датчики. Промежуточные узлы (англ. intermediate system) данные не создают и не потребляют, а пересылают: коммутаторы (англ. switch) соединяют устройства в пределах одной локальной сети, маршрутизаторы (англ. router) — разные сети между собой. Граница между группами не абсолютна: домашний маршрутизатор пересылает пакеты, но одновременно является хостом для собственного веб-интерфейса настройки.

Канал связи (англ. communication link, или просто link) — среда и аппаратура, через которые биты передаются от одного узла к соседнему: медная витая пара, оптическое волокно, радиоэфир. Важнейшая характеристика канала — скорость передачи (англ. transmission rate), то есть число бит, которое передатчик способен выдать в среду за секунду; она измеряется в битах в секунду. В сетевой технике приставки десятичные: 1 Мбит/с — это ровно 1 000 000 бит/с, 1 Гбит/с — 10⁹ бит/с. Объём памяти и размеры файлов, напротив, часто выражают в двоичных единицах (1 КиБ = 1024 байта); путаница между битами и байтами, а также между десятичными и двоичными приставками — частый источник ошибок в расчётах, и в курсе эти единицы строго различаются.

Протокол (англ. protocol) — набор правил, определяющих формат и порядок сообщений, которыми обмениваются узлы, а также действия, выполняемые при передаче, приёме сообщения или наступлении иного события 1. Важно, что протокол задаёт не только синтаксис (какие поля есть в сообщении и сколько в них бит), но и семантику (что означает каждое значение) и процедуру (что делать, если ответ не пришёл за отведённое время). Бытовая аналогия — телефонный разговор: собеседники приветствуют друг друга, по очереди говорят, переспрашивают, если не расслышали, и прощаются. Если один из них нарушит правила — например, начнёт говорить, не дождавшись ответа, — общение станет невозможным, хотя сам канал исправен.

Сеть существует ради сервисов (англ. service) — услуг, которые она предоставляет прикладным программам: доставить сообщение адресату, установить надёжный поток байтов, найти адрес по имени. Программа обращается к сервису через программный интерфейс (англ. application programming interface, API) операционной системы, не вникая в то, как именно данные пересекают сеть. Различие между сервисом (что делается) и протоколом (как это делается) станет одним из главных понятий темы 2.

Хост в цифрах: первый взгляд инструментами

Перечисленные понятия удобно сразу связать с тем, что можно увидеть на собственном компьютере. В Linux состояние сетевой подсистемы показывает набор утилит iproute2. Команда ip addr перечисляет сетевые интерфейсы (англ. network interface) — точки подключения хоста к каналам — и назначенные им адреса:

ip -br addr
ip route
lo               UNKNOWN        127.0.0.1/8 10.255.255.254/32 ::1/128
eth0             UP             172.27.60.185/20 fe80::215:5dff:fe5b:8b43/64
gre0@NONE        DOWN
...
default via 172.27.48.1 dev eth0 proto kernel
172.27.48.0/20 dev eth0 proto kernel scope link src 172.27.60.185

Ключ -br (англ. brief) делает вывод кратким: имя интерфейса, состояние, адреса. Вывод получен на виртуальной машине WSL2. Главных интерфейсов два: петлевой lo (англ. loopback), через который программы обращаются к самому хосту, и eth0, связанный с внешним миром; служебные туннельные интерфейсы вида gre0 создаются ядром автоматически и не используются. Вторая команда показывает таблицу маршрутизации: адреса из диапазона 172.27.48.0/20 достижимы непосредственно через eth0, а всё остальное отправляется промежуточному узлу — шлюзу по умолчанию 172.27.48.1. Что означают эти записи, подробно разбирается в темах 6 и 8; пока достаточно заметить, что даже простейший хост «знает» о сети лишь две вещи: кто его непосредственные соседи и кому отдать всё остальное.

Протоколы и сервисы видны в выводе команды ss, перечисляющей сокеты (англ. socket) — программные конечные точки обмена данными:

ss -tn state established
Recv-Q Send-Q Local Address:Port    Peer Address:Port
0      0      172.27.60.185:39178 176.114.77.211:443
0      0      172.27.60.185:43112  34.149.66.165:443

Каждая строка — установленное соединение по протоколу TCP (тема 12) с удалённым сервером на порту 443, который используется защищённым протоколом HTTPS (темы 16 и 17). Подобные наблюдения выполняются в первой лабораторной работе.

Почему сеть — это прежде всего соглашение

Из определения протокола следует важное обстоятельство: сеть работает не потому, что узлы соединены проводами, а потому, что их программное обеспечение следует одним и тем же правилам. Устройства разных производителей, с разными операционными системами и на разных континентах взаимодействуют лишь благодаря тому, что правила записаны в открытых стандартах и реализованы независимо. Поэтому в сетевой инженерии первоисточник — не учебник и не документация конкретного продукта, а текст стандарта: RFC, стандарт IEEE или рекомендация ITU. О том, кто и как создаёт эти документы, говорится в последнем разделе темы.

От телефонной сети к Интернету

Телефонная сеть и коммутация каналов

Первой глобальной сетью связи была телефонная. Её устройство определялось задачей — передачей голоса в реальном времени. Разговор длится минуты, в течение которых звук должен поступать к собеседнику непрерывно и с постоянной небольшой задержкой. Решение состояло в том, чтобы на время разговора выделить абонентам непрерывный путь через телефонные станции — канал. Сначала соединения выполняли телефонистки на коммутаторах, позднее — электромеханические, затем электронные автоматические станции; само слово «коммутация» (англ. switching, буквально «переключение») пришло в сетевую терминологию именно отсюда.

При переходе на цифровую передачу голос стали оцифровывать: 8000 отсчётов в секунду по 8 бит дают 64 000 бит/с — так называемый основной цифровой канал (англ. DS0). Несколько таких каналов передаются по одной линии с временным разделением (англ. time-division multiplexing, TDM): время делится на циклы (кадры) длительностью 125 мкс, а каждый цикл — на слоты, и каждый разговор получает в каждом цикле свой слот. Европейская система E1 объединяет 32 слота и имеет скорость 32 × 64 000 = 2 048 000 бит/с, американская T1 — 24 слота и скорость 1,544 Мбит/с с учётом служебных бит 3. Другой способ — частотное разделение (англ. frequency-division multiplexing, FDM), при котором каждому соединению отводится своя полоса частот, как радиостанциям в эфире.

Такой способ организации называется коммутацией каналов (англ. circuit switching): перед началом обмена устанавливается соединение, на всём пути резервируются ресурсы (слоты или полосы частот), и до разрыва соединения они принадлежат только ему. Достоинство очевидно — гарантированная скорость и постоянная, предсказуемая задержка. Недостаток проявляется, когда трафик неравномерен. Голос в разговоре занимает канал примерно половину времени (собеседники говорят по очереди), а компьютерные данные поступают пачками (англ. burst): пользователь открывает страницу — и несколько секунд канал загружен полностью, затем читает её минуту — и канал простаивает. Зарезервированный слот в это время пустует, и использовать его никто другой не может.

Пакетная коммутация: Баран, Дэвис, Клейнрок

В начале 1960-х годов независимо в нескольких местах возникла альтернативная идея. Пол Баран (корпорация RAND) искал способ построить сеть связи, способную сохранить работоспособность при выходе из строя значительной части узлов. Он предложил распределённую сеть с избыточными связями, в которой сообщения разбиваются на небольшие блоки, и каждый блок пересылается от узла к узлу независимо, по любому доступному пути 6. В Великобритании Дональд Дэвис из Национальной физической лаборатории пришёл к сходной схеме из соображений эффективности использования линий и ввёл для блоков слово «пакет» (англ. packet). Теоретическую основу для анализа сетей с очередями заложил Леонард Клейнрок 9.

Коммутация пакетов (англ. packet switching) устроена так. Сообщение делится на пакеты, каждый из которых снабжается заголовком (англ. header) с адресом получателя. Ресурсы заранее не резервируются. Узел, получивший пакет, определяет по адресу, в какой исходящий канал его отправить, и ставит пакет в очередь этого канала. Если канал свободен, пакет передаётся сразу; если занят — ждёт. Таким образом, канал в каждый момент занят тем, у кого действительно есть данные.

Сравнение двух способов разделения канала показано на рисунке ниже. При временном разделении слот, владельцу которого нечего передавать, простаивает. При статистическом мультиплексировании (англ. statistical multiplexing) канал загружается пакетами в порядке их поступления, и общий объём переданных данных больше, но время ожидания каждого пакета зависит от того, сколько пакетов пришло раньше него.

Временное разделение канала по слотам и статистическое мультиплексирование пакетов
Коммутация каналов резервирует слоты; коммутация пакетов отдаёт канал тем, у кого есть данные

ARPANET, TCP/IP и рождение Интернета

Идеи пакетной коммутации впервые были реализованы в сети ARPANET, создававшейся по заказу Агентства перспективных исследовательских проектов Министерства обороны США (англ. Advanced Research Projects Agency, ARPA). Первый узел — специализированный компьютер-коммутатор IMP (англ. Interface Message Processor) — был установлен в Калифорнийском университете в Лос-Анджелесе в сентябре 1969 года, к концу года сеть объединяла четыре узла 5. В том же 1969 году появился первый документ серии RFC (англ. Request for Comments, «запрос комментариев») — серии, в которой и сегодня публикуются стандарты Интернета.

К началу 1970-х годов, помимо ARPANET, существовали пакетные радиосети и спутниковые сети, устроенные по-разному. Возникла задача соединения сетей между собой — межсетевого взаимодействия (англ. internetworking). В 1974 году Винтон Серф и Роберт Кан опубликовали статью «Протокол для межсетевого взаимодействия пакетных сетей», в которой предложили архитектуру, сохранившуюся до сих пор 4. Её основные положения: сети остаются разными и не меняются; их соединяют шлюзы (позднее названные маршрутизаторами), которые пересылают пакеты, не вникая в их содержимое; надёжность доставки обеспечивается не сетью, а программами на конечных хостах. Первоначально единый протокол TCP впоследствии был разделён на два: межсетевой протокол IP (англ. Internet Protocol), отвечающий за доставку отдельных пакетов, и протокол управления передачей TCP (англ. Transmission Control Protocol), обеспечивающий надёжный поток данных. Их спецификации — RFC 791 и RFC 793 — вышли в 1981 году, а 1 января 1983 года ARPANET полностью перешла на TCP/IP 5. Эту дату часто считают днём рождения Интернета.

Во второй половине 1980-х годов Национальный научный фонд США создал магистральную сеть NSFNET для соединения университетов. Её магистраль работала сначала на скорости 56 Кбит/с, в 1988 году была переведена на линии T1 (1,544 Мбит/с), а в начале 1990-х — на линии T3 (около 45 Мбит/с) 5. В 1995 году магистраль NSFNET была выведена из эксплуатации, и её функции перешли к коммерческим провайдерам. Примерно в то же время Интернет получил «приложение-катализатор»: Тим Бернерс-Ли в Европейской организации по ядерным исследованиям (ЦЕРН) в 1989–1991 годах разработал Всемирную паутину (англ. World Wide Web) — язык разметки HTML, протокол HTTP и первый браузер. Веб превратил Интернет из инструмента учёных в массовую среду.

История показывает характерную закономерность: Интернет никогда не проектировался как единая сеть с единым владельцем. Он вырос как объединение независимых сетей по общим протоколам — и эта особенность определяет его структуру сегодня.

Коммутация каналов и коммутация пакетов

Статистическое мультиплексирование: числовой пример

Выигрыш от коммутации пакетов удобно показать на классическом примере 1. Пусть пользователи разделяют канал со скоростью 1 Мбит/с. Каждый пользователь в активном состоянии передаёт данные со скоростью 100 Кбит/с, но активен лишь 10 % времени, а остальное время читает полученное и ничего не передаёт.

При коммутации каналов каждому пользователю нужно зарезервировать 100 Кбит/с, и канал выдержит ровно 1 000 000 / 100 000 = 10 пользователей, независимо от того, насколько они активны.

При коммутации пакетов резервирования нет. Пусть канал разделяют 35 пользователей. Перегрузка возникает, только если одновременно активны больше десяти из них. Если пользователи действуют независимо, число активных подчиняется биномиальному распределению с параметрами n = 35 и p = 0,1, и вероятность перегрузки равна

P(\text{активных} > 10) = \sum_{k=11}^{35} C_{35}^k \cdot 0{,}1^k \cdot 0{,}9^{35-k} \approx 0{,}0004

Расчёт легко проверить несколькими строками на Python:

from math import comb
n, p = 35, 0.1
print(sum(comb(n, k) * p**k * (1 - p)**(n - k) for k in range(11, n + 1)))
# 0.0004242975954508263

Таким образом, при той же скорости канала коммутация пакетов обслуживает в 3,5 раза больше пользователей, а перегрузка случается в среднем 4 раза на 10 000 моментов наблюдения. При 50 пользователях вероятность перегрузки уже около 0,0094, то есть почти 1 %: выигрыш не бесконечен, и чем ближе средняя суммарная нагрузка к ёмкости канала, тем чаще возникают перегрузки. Средняя нагрузка 35 пользователей — 35 × 0,1 × 100 Кбит/с = 350 Кбит/с, то есть 35 % ёмкости канала; при 50 пользователях — 50 %.

Существенна и вторая сторона примера. Если единственный пользователь внезапно должен передать файл, при коммутации каналов он ограничен своими 100 Кбит/с, а при коммутации пакетов в отсутствие других активных пользователей получает весь канал — 1 Мбит/с.

Передача с промежуточным хранением

Большинство коммутаторов пакетов работает по принципу передачи с промежуточным хранением (англ. store-and-forward): узел начинает передавать пакет в исходящий канал лишь после того, как принял его полностью. Причины просты: только целиком принятый пакет можно проверить на ошибки по контрольной сумме, а размер и адрес пакета должны быть известны до выбора исходящего канала.

Временная диаграмма на рисунке ниже показывает, как пакет длиной L бит проходит через один промежуточный узел. Время по вертикали растёт вниз; наклон полосы отражает то, что первый бит пакета достигает следующего узла раньше последнего. Передатчик узла A выдаёт биты в канал за время L/R₁, каждый бит распространяется по каналу за время d₁/s, и лишь когда последний бит принят, маршрутизатор может начать передачу во второй канал.

Временная диаграмма передачи пакета с промежуточным хранением через маршрутизатор
Передача с промежуточным хранением: следующий канал начинает передачу лишь после приёма последнего бита

Если пренебречь распространением, обработкой и очередями, то пакет длиной L, проходящий через N одинаковых каналов со скоростью R, достигает получателя за время N · L / R: на каждом звене он заново передаётся целиком. Если же отправляется P пакетов подряд, то конвейер работает параллельно: пока второй пакет передаётся по первому звену, первый уже идёт по второму, и общее время составляет (N + P − 1) · L / R. Например, при L = 1500 байт = 12 000 бит, R = 10 Мбит/с, N = 3 звена время передачи одного пакета по одному звену равно 12 000 / 10⁷ = 1,2 мс, один пакет дойдёт за 3,6 мс, а 100 пакетов — за (3 + 100 − 1) × 1,2 = 122,4 мс, а не за 3 × 120 = 360 мс. Отсюда понятно, зачем сообщение делится на пакеты: разбиение позволяет звеньям пути работать одновременно.

Существуют коммутаторы, начинающие передачу до окончания приёма, — режим сквозной коммутации (англ. cut-through); он применяется в некоторых коммутаторах Ethernet и рассматривается в теме 4.

Коммутация пакетов: цена гибкости

Коммутация пакетов эффективнее использует каналы и не требует установления соединения перед передачей, но у неё есть цена. Во-первых, задержка становится переменной: она зависит от того, сколько пакетов стоит в очереди перед данным. Во-вторых, память узла конечна: если пакеты прибывают быстрее, чем канал успевает их передавать, буфер переполняется, и вновь пришедшие пакеты отбрасываются — возникают потери (англ. packet loss). В-третьих, пакеты одного сообщения могут пойти разными путями и прийти в другом порядке.

Обе модели не исключают друг друга. Внутри пакетных сетей существуют механизмы, приближающие их свойства к коммутации каналов (виртуальные каналы, резервирование ресурсов, приоритизация трафика), а современная телефония сама стала пакетной: голос передаётся по IP-сетям. Сравнение двух подходов сведено в таблицу.

СвойствоКоммутация каналовКоммутация пакетов
Установление соединенияобязательно, до передачине требуется
Резервирование ресурсовна всём пути, на время соединениянет
Использование канала при пачечном трафикенизкое: слоты простаиваютвысокое
Задержкапостоянная, предсказуемаяпеременная, зависит от очередей
Поведение при перегрузкеотказ в новом соединении («занято»)рост очередей и потери пакетов
Отказ узла на путиобрыв соединенияпакеты могут пойти в обход
Примерклассическая телефонная сетьИнтернет

Устройство Интернета и классификация сетей

Интернет как сеть сетей

С точки зрения пользователя Интернет — единая сеть, но технически он представляет собой объединение десятков тысяч независимых сетей, каждая из которых управляется своей организацией. Такая сеть с единой политикой маршрутизации называется автономной системой (англ. autonomous system, AS) и имеет свой номер; как автономные системы обмениваются сведениями о маршрутах, рассматривается в теме 10.

Хост подключается к Интернету через сеть доступа (англ. access network) — участок от абонента до первого маршрутизатора провайдера, который часто называют «последней милей» (англ. last mile). Технологии доступа разнообразны: цифровая абонентская линия DSL по телефонной паре, кабельные модемы DOCSIS по сети кабельного телевидения, пассивные оптические сети PON, подводящие волокно в дом (англ. fiber to the home, FTTH), сотовый радиодоступ 4G/5G, Wi-Fi в публичных местах. Сеть доступа обычно оказывается самым «узким» участком пути, и именно её скорость указывается в тарифе.

Провайдер доступа сам должен быть связан с остальным Интернетом. Исторически сложилась иерархия: небольшие провайдеры покупают доступ у региональных, те — у крупных магистральных провайдеров. На вершине находятся провайдеры уровня 1 (англ. tier-1) — сети глобального масштаба, которые не покупают транзит ни у кого, а обмениваются трафиком друг с другом. Отношения между сетями бывают двух видов, как показано на рисунке ниже. Транзит (англ. transit) — коммерческая услуга: клиент платит провайдеру за доставку трафика во весь Интернет. Пиринг (англ. peering) — взаимный обмен трафиком между собственными клиентами двух сетей, часто без взаимных расчётов.

Иерархия провайдеров Интернета, транзит, пиринг и точка обмена трафиком
Интернет как сеть сетей: транзит, пиринг и точка обмена трафиком

Пиринговое соединение удобно устанавливать в точках обмена трафиком (англ. Internet exchange point, IXP) — площадках, где десятки и сотни сетей подключаются к общему коммутатору и договариваются об обмене попарно. Крупнейшие точки обмена работают во Франкфурте (DE-CIX), Амстердаме (AMS-IX), Лондоне (LINX), в России — MSK-IX и другие. Их значение видно даже в простой трассировке. Ниже приведён фрагмент вывода tracepath с учебной машины к серверу example.com; каждая строка — очередной маршрутизатор на пути (как работает трассировка, объясняется в теме 7):

tracepath -n -m 12 example.com
 1:  172.27.48.1                                           0.415ms
 2:  192.168.1.1                                           0.953ms
 3:  10.0.128.65                                           4.663ms
 ...
 9:  195.98.94.206                                         3.017ms asymm  8
10:  217.150.37.50                                         3.240ms asymm  9
11:  80.81.194.117                                        48.299ms asymm 12
12:  80.81.194.180                                        43.090ms asymm 11

Первые узлы — виртуальный коммутатор WSL2, домашний маршрутизатор и сеть провайдера с частными адресами; задержка до них — единицы миллисекунд. Узлы 11 и 12 имеют адреса из блока 80.81.192.0/21 — по данным базы RIPE NCC, это пиринговая сеть точки обмена DE-CIX во Франкфурте, — и задержка скачком возрастает на 40 мс. При 5 мкс на километр 40 мс времени кругового обхода соответствуют не менее чем 8000 км пути туда и обратно, то есть около 4000 км в одну сторону: пакет покинул сеть своего провайдера и пересёк значительное расстояние, прежде чем быть переданным в сеть получателя через точку обмена.

Выравнивание иерархии: контент-провайдеры и ЦОД

Строгая иерархия провайдеров за последние двадцать лет заметно «сплющилась». Крупные поставщики содержания (поисковые системы, видеосервисы, облачные платформы) построили собственные глобальные сети, связали свои центры обработки данных (ЦОД, англ. data center) и подключились напрямую к провайдерам доступа и точкам обмена, минуя магистральных провайдеров 11. Сети доставки содержимого (англ. content delivery network, CDN) размещают копии популярных данных в серверах, установленных у провайдеров доступа или рядом с ними. В результате значительная доля трафика пользователя проходит лишь две-три автономные системы. Устройство сетей внутри ЦОД рассматривается в теме 21.

Классификация сетей по масштабу

Традиционно сети классифицируют по территориальному охвату. Классификация условна, но её термины широко используются.

КлассАнгл.ОхватТипичные технологии
Персональная сетьpersonal area network, PANединицы метров вокруг человекаBluetooth, USB
Локальная сетьlocal area network, LANздание, кампусEthernet (IEEE 802.3), Wi-Fi (IEEE 802.11)
Городская сетьmetropolitan area network, MANгородоптические кольца, Metro Ethernet
Глобальная сетьwide area network, WANстрана, континент, мирмагистральные оптические линии, MPLS

Локальная сеть обычно принадлежит одной организации, высокоскоростна и дешева в расчёте на бит; глобальная строится из каналов, арендуемых у операторов связи, и стоимость передачи в ней значительно выше. Именно из этого различия выросли разные семейства стандартов: локальные технологии стандартизирует комитет IEEE 802, глобальные исторически — ITU 2.

Топологии

Топология (англ. topology) — конфигурация связей между узлами. Различают физическую топологию (как проложены кабели) и логическую (как распространяются сигналы или кадры); они не обязательно совпадают. Основные топологии:

  • шина (англ. bus) — все узлы подключены к общей среде, и передачу одного слышат все; ранние сети Ethernet на коаксиальном кабеле;
  • звезда (англ. star) — все узлы подключены к центральному устройству; современный Ethernet с коммутатором, при этом логически — набор двухточечных связей;
  • кольцо (англ. ring) — каждый узел соединён с двумя соседями; Token Ring, FDDI, оптические кольца операторов;
  • полносвязная сеть (англ. full mesh) — каждый узел соединён с каждым; число связей n(n − 1)/2 быстро растёт: для 10 узлов это 45 каналов, для 100 — 4950;
  • частично связная сеть (англ. partial mesh) и дерево (англ. tree) — компромиссы, типичные для реальных сетей.

Выбор топологии — компромисс между стоимостью, надёжностью и простотой управления. Звезда дешева и проста, но центральный узел становится единой точкой отказа; полносвязная сеть надёжна, но дорога. Магистраль Интернета — частично связная сеть с избыточными путями, как и предлагал Баран.

Метрики производительности сети

Пропускная способность и производительность

Слово «скорость» в применении к сети многозначно, и для точного разговора нужно различать несколько величин.

Скорость передачи канала R — номинальная скорость, с которой передатчик выдаёт биты в среду. Её часто называют полосой пропускания (англ. bandwidth), хотя строго полоса пропускания — это ширина диапазона частот в герцах; связь между ними устанавливают теоремы Найквиста и Шеннона (тема 3).

Пропускная способность (англ. throughput) — фактическая скорость, с которой данные доставляются от отправителя получателю за некоторый интервал. Она не превышает скорости самого медленного канала на пути — узкого места (англ. bottleneck): если сервер подключён на 1 Гбит/с, магистраль работает на 100 Гбит/с, а у абонента тариф 50 Мбит/с, то файл будет загружаться не быстрее 50 Мбит/с. Если канал разделяют несколько потоков, каждому достаётся лишь часть его скорости.

Полезная пропускная способность (англ. goodput) — скорость доставки собственно данных приложения, без заголовков протоколов и повторно переданных пакетов. Она всегда меньше пропускной способности: заголовки занимают место в каждом пакете (тема 2 показывает, сколько именно), а потерянные пакеты передаются повторно (тема 13).

Наконец, важно отличать мгновенную и среднюю пропускную способность. Счётчик загрузки в браузере показывает среднее за секунды; на интервалах в миллисекунды скорость колеблется от нуля до скорости канала.

Четыре составляющие задержки

Задержка (англ. delay, latency) — время, которое пакет проводит в пути. На каждом узле пути она складывается из четырёх составляющих, показанных на рисунке ниже 1.

Составляющие задержки пакета на одном участке пути: обработка, очередь, передача, распространение
Задержка на одном участке складывается из обработки, ожидания в очереди, передачи и распространения

Задержка обработки (англ. processing delay, d_proc) — время на разбор заголовка, проверку контрольной суммы и выбор исходящего канала. В аппаратных маршрутизаторах она составляет микросекунды и меньше; в программных реализациях может быть больше.

Задержка ожидания в очереди (англ. queuing delay, d_queue) — время, которое пакет ждёт, пока будут переданы пакеты, стоящие перед ним. Это единственная составляющая, сильно меняющаяся от пакета к пакету: от нуля при пустой очереди до сотен миллисекунд при переполненном буфере.

Задержка передачи (англ. transmission delay, d_trans) — время, необходимое передатчику, чтобы выдать в канал все биты пакета:

d_{\text{trans}} = \frac{L}{R}

где L — длина пакета в битах, R — скорость передачи канала в бит/с. Кадр Ethernet длиной 1500 байт (12 000 бит) передаётся по каналу 10 Мбит/с за 1,2 мс, по каналу 100 Мбит/с — за 120 мкс, по каналу 10 Гбит/с — за 1,2 мкс.

Задержка распространения (англ. propagation delay, d_prop) — время, за которое сигнал проходит физическое расстояние от одного узла до другого:

d_{\text{prop}} = \frac{d}{s}

где d — длина канала, s — скорость распространения сигнала в среде. В вакууме свет проходит около 300 000 км/с, в оптическом волокне с показателем преломления сердцевины около 1,47 — примерно 204 000 км/с, что даёт удобное для запоминания правило: около 5 мкс на километр. В медном кабеле скорость распространения того же порядка, примерно 0,6–0,8 скорости света.

Полная задержка на узле равна сумме: d_nodal = d_proc + d_queue + d_trans + d_prop. Сквозная задержка (англ. end-to-end delay) пути из N участков — сумма задержек на всех участках.

Самая распространённая ошибка понимания — смешение задержки передачи и задержки распространения. Первая зависит от длины пакета и скорости канала и не зависит от расстояния; вторая зависит только от расстояния и среды и не зависит ни от длины пакета, ни от скорости канала. Помогает аналогия с колонной автомобилей, проезжающей пункт оплаты: время, за которое вся колонна проходит через шлагбаум, — аналог задержки передачи, а время, за которое головная машина доезжает до следующего пункта, — аналог задержки распространения. Увеличение скорости канала с 1 до 10 Гбит/с в десять раз сокращает задержку передачи, но ни на микросекунду не сокращает задержку распространения из Москвы во Владивосток.

Подробный числовой пример: из Москвы во Франкфурт

Рассмотрим путь от сервера в Москве к серверу во Франкфурте. Расстояние по дуге большого круга — около 2021 км, однако кабели проложены не по прямой, и реальная трасса может быть длиннее в полтора-два раза. Пусть длина трассы 3000 км, пакет имеет длину 1500 байт, на пути 8 маршрутизаторов, и все каналы работают на скорости 10 Гбит/с, кроме последнего, 1 Гбит/с.

  1. Распространение: 3000 км × 5 мкс/км = 15 мс в одну сторону.
  2. Передача: на восьми каналах по 10 Гбит/с — 8 × 12 000 / 10¹⁰ = 8 × 1,2 мкс ≈ 0,010 мс; на последнем, девятом канале 12 000 / 10⁹ = 12 мкс = 0,012 мс. Итого около 0,022 мс.
  3. Обработка: при 10 мкс на маршрутизатор — 0,08 мс.
  4. Очереди: при слабой загрузке — порядка десятков микросекунд суммарно.

Итого задержка в одну сторону около 15,1 мс, из которых более 99 % приходится на распространение. Для дальних путей в магистральной сети это типичная картина: скорость каналов настолько велика, что задержка определяется в основном физикой — расстоянием и скоростью света. Совсем иначе выглядит та же оценка для абонентского канала 1 Мбит/с: передача 1500 байт по нему занимает уже 12 мс, сопоставимо с распространением на тысячи километров.

Оценку нижней границы задержки по расстоянию выполняет скрипт geo_rtt.py из окружения лабораторной работы 1:

python3 geo_rtt.py Москва Франкфурт --measured 42
Москва -> Франкфурт: по дуге большого круга 2 021 км
скорость света в волокне c/n = 204 218 км/с (4.90 мкс/км)
задержка распространения в одну сторону >= 9.9 мс
RTT >= 19.8 мс (для сравнения, в вакууме: 13.5 мс)
измерено 42.0 мс: в 2.12 раза больше нижней границы;
эквивалентная длина трассы туда и обратно ~ 8 577 км

Измеренное время более чем вдвое превосходит физический предел. Причины — непрямая трасса кабелей, обходные маршруты, выбираемые по экономическим соображениям, и добавки в сетях доступа.

Время кругового обхода и утилита ping

Задержку в одну сторону измерить трудно: для этого часы отправителя и получателя должны быть синхронизированы с точностью до долей миллисекунды. Поэтому на практике чаще измеряют время кругового обхода (англ. round-trip time, RTT) — интервал от отправки запроса до получения ответа. Его измеряют на одних часах, и синхронизация не нужна. RTT включает задержку в обе стороны и время обработки запроса получателем; пути туда и обратно в Интернете могут не совпадать (в выводе tracepath выше на это указывает пометка asymm).

Простейший инструмент измерения RTT — утилита ping, посылающая эхо-запросы протокола ICMP (тема 7) и замеряющая время до прихода ответа:

ping -c 20 -i 0.2 example.com
PING example.com (8.6.112.5) 56(84) bytes of data.
64 bytes from 8.6.112.5 (8.6.112.5): icmp_seq=1 ttl=52 time=40.2 ms
...
--- example.com ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 3815ms
rtt min/avg/max/mdev = 39.633/40.117/42.830/0.715 ms

Итоговая строка содержит минимальное, среднее и максимальное значения RTT, а также mdev — среднеквадратичное отклонение. Особенно информативен минимум: в нём меньше всего случайных добавок от очередей, и он ближе всего к сумме «постоянных» составляющих — распространения, передачи и обработки. Разность между средним и минимумом даёт оценку вклада очередей и прочих переменных задержек.

Джиттер и потери

Джиттер (англ. jitter) — изменчивость задержки от пакета к пакету. Строго в стандартах различают два определения 8. Вариация задержки между соседними пакетами (англ. inter-packet delay variation, IPDV) — разность задержек последовательных пакетов. Вариация задержки относительно минимума (англ. packet delay variation, PDV) — превышение задержки каждого пакета над минимальной. Протокол передачи данных в реальном времени RTP использует сглаженную оценку J, обновляемую по каждому пакету по формуле J ← J + (|D| − J)/16, где D — изменение задержки между соседними пакетами 10.

Джиттер критичен для интерактивных приложений. Аудиопоток IP-телефонии состоит из пакетов, отправляемых каждые 20 мс; если они приходят неравномерно, получатель накапливает их в буфере воспроизведения (англ. jitter buffer), добавляя задержку, равную ожидаемому разбросу. Рекомендация ITU-T G.114 указывает, что задержка в одну сторону до 150 мс приемлема для большинства разговорных приложений, а свыше 400 мс — как правило, неприемлема 12.

Потери пакетов (англ. packet loss) измеряются долей неполученных пакетов. Их основная причина в проводных сетях — переполнение буферов в очередях маршрутизаторов; искажение бит при передаче, обнаруживаемое контрольной суммой, — вторая, значительно более редкая в проводных сетях причина, но обычная для радиоканалов. Даже небольшие потери существенно снижают производительность TCP, потому что TCP интерпретирует потерю как признак перегрузки и снижает скорость отправки (тема 13).

Произведение пропускной способности на задержку

Представим канал как трубу: скорость передачи — её поперечное сечение, задержка — длина. Объём трубы равен числу бит, которые одновременно находятся «в полёте», когда отправитель передаёт непрерывно. Эта величина называется произведением пропускной способности на задержку (англ. bandwidth-delay product, BDP):

\text{BDP} = R \times \text{RTT}

Чаще берут произведение на RTT, а не на одностороннюю задержку, потому что отправитель надёжного протокола узнаёт о доставке данных только через RTT, получив подтверждение. Пример: канал 1 Гбит/с с RTT 80 мс (Москва — Нью-Йорк) имеет BDP = 10⁹ × 0,08 = 8 × 10⁷ бит = 10 000 000 байт, то есть около 10 МБ. Это означает, что отправитель должен иметь в пути 10 МБ неподтверждённых данных, чтобы загрузить канал полностью. Если протокол разрешает держать в пути не более 64 КиБ (65 535 байт — максимум окна TCP без расширений), то максимальная пропускная способность составит 65 535 × 8 / 0,08 ≈ 6,6 Мбит/с — менее 1 % ёмкости канала. Каналы с большим BDP получили название «длинных толстых сетей» (англ. long fat network, LFN), и для них в TCP пришлось вводить расширения 7. Подробно это обсуждается в теме 13.

КаналRRTTBDP
Локальная сеть1 Гбит/с0,2 мс25 000 байт
Абонентский доступ, тот же город100 Мбит/с10 мс125 000 байт
Москва — Франкфурт1 Гбит/с40 мс5 000 000 байт
Геостационарный спутник50 Мбит/с600 мс3 750 000 байт
Межконтинентальная магистраль100 Гбит/с150 мс1 875 000 000 байт

Очереди и загрузка канала

Интенсивность трафика

Задержка ожидания в очереди — самая интересная составляющая, потому что она зависит не от устройства сети, а от поведения трафика. Пусть в канал со скоростью R бит/с поступает в среднем a пакетов в секунду длиной L бит. Отношение

\rho = \frac{L \cdot a}{R}

называется интенсивностью трафика (англ. traffic intensity), или загрузкой канала (англ. utilization). Оно показывает, какую долю времени канал занят передачей. Если ρ > 1, биты поступают быстрее, чем канал успевает их передавать, очередь растёт неограниченно (на практике — до переполнения буфера), и задержка стремится к бесконечности. Отсюда первое правило проектирования: средняя загрузка канала должна быть меньше единицы.

Менее очевидно, что происходит при ρ < 1. Если пакеты поступают строго периодически — например, ровно по одному каждые L/R секунд при ρ = 1, — то каждый новый пакет приходит в момент, когда предыдущий уже передан, и очереди нет вовсе. Но реальный трафик пачечный: пакеты приходят группами, и даже при средней загрузке 50 % в отдельные моменты несколько пакетов приходят одновременно и вынуждены ждать.

Как задержка растёт с загрузкой

Количественно эффект описывает теория массового обслуживания 9. Для простейшей модели — одна очередь, неограниченный буфер, пакеты приходят случайно и независимо (пуассоновский поток), длины пакетов распределены экспоненциально; эта модель обозначается M/M/1 — среднее время ожидания в очереди равно

W_q = \frac{\rho}{1 - \rho} \cdot \frac{L}{R}

то есть выражается в единицах времени передачи одного пакета. При ρ = 0,5 пакет ждёт в среднем столько же, сколько длится передача одного пакета; при ρ = 0,8 — в четыре раза дольше; при ρ = 0,9 — в девять; при ρ = 0,95 — в девятнадцать. Рост нелинеен, что показывает график ниже.

График среднего ожидания в очереди в зависимости от загрузки канала
Ожидание в очереди при загрузке, приближающейся к единице, растёт неограниченно

Конкретные числа справедливы только для модели M/M/1, но качественный вывод верен для любых реалистичных моделей: при загрузке, далёкой от единицы, очередь мала, а при приближении к единице задержка растёт стремительно. Поэтому каналы проектируют с запасом, а загрузку свыше 70–80 % считают признаком необходимости расширения. Обратное следствие тоже важно: увеличение скорости канала вдвое не только вдвое сокращает время передачи, но и, снижая ρ, может уменьшить задержку в очереди во много раз.

Числовой пример. Канал 10 Мбит/с, пакеты по 1250 байт (10 000 бит), время передачи одного пакета 1 мс. При 500 пакетах в секунду ρ = 10 000 × 500 / 10⁷ = 0,5, среднее ожидание 1 мс. При 900 пакетах в секунду ρ = 0,9, ожидание 9 мс. При 950 пакетах в секунду ожидание 19 мс — увеличение нагрузки всего на 5,5 % удвоило задержку.

Буферы, потери и раздувание буферов

Реальный буфер конечен. Когда он заполнен, вновь прибывший пакет отбрасывается — так возникают потери. Казалось бы, большой буфер лучше: меньше потерь. Однако буфер, который постоянно заполнен, добавляет к задержке каждого пакета время его опустошения. Буфер 1 МБ на канале 10 Мбит/с — это 0,8 с дополнительной задержки. Явление, когда избыточно большие буферы в домашних маршрутизаторах и модемах создают постоянную очередь и задержку в сотни миллисекунд, получило название «раздувание буферов» (англ. bufferbloat). Оно проявляется, например, в том, что во время загрузки большого файла видеозвонок по той же линии становится невозможным. Средства борьбы с ним — алгоритмы активного управления очередью — упоминаются в темах 13 и 22.

Полезно связать очередь и задержку ещё одним соотношением, справедливым для любой устойчивой системы. Закон Литтла утверждает, что среднее число пакетов в системе N равно произведению интенсивности поступления λ на среднее время пребывания T: N = λ · T 9. Если маршрутизатор принимает 100 000 пакетов в секунду, а каждый пакет проводит в нём в среднем 2 мс, то в буфере в среднем находится 200 пакетов.

Стандартизация и управление ресурсами Интернета

IETF и серия RFC

Основные протоколы Интернета разрабатывает Инженерный совет Интернета (англ. Internet Engineering Task Force, IETF) — открытое сообщество без формального членства, работа которого ведётся в рабочих группах через списки рассылки и на очных встречах трижды в год. Документы IETF публикуются в серии RFC. Каждый RFC имеет номер и никогда не изменяется после публикации; исправления и новые версии выходят под новыми номерами, а старые помечаются как устаревшие (англ. obsoleted). Например, исходная спецификация TCP в RFC 793 заменена в 2022 году документом RFC 9293.

Не каждый RFC является стандартом. Процесс стандартизации описан в RFC 2026 13 с последующими уточнениями: документы делятся на ряд статусов, среди которых стандарты (англ. standards track), информационные (англ. informational), экспериментальные (англ. experimental) документы и документы лучшей практики (англ. best current practice, BCP). Документ стандартной дорожки проходит уровни зрелости — с 2011 года (RFC 6410) их два: предлагаемый стандарт (англ. Proposed Standard) и стандарт Интернета (англ. Internet Standard). Проекты документов, ещё не ставшие RFC, публикуются как черновики (англ. Internet-Draft) со сроком жизни шесть месяцев. Культуру IETF выражает известная формула: «грубый консенсус и работающий код» (англ. rough consensus and running code) — решения принимаются не голосованием, а по согласию большинства, подкреплённому действующими реализациями. Как читать RFC, разбирается в теме 2.

IEEE 802, ITU и другие организации

Технологии локальных сетей стандартизирует комитет IEEE 802 Института инженеров электротехники и электроники (англ. Institute of Electrical and Electronics Engineers, IEEE), созданный в 1980 году. Его рабочие группы отвечают за отдельные семейства: 802.1 — мосты и управление (в том числе VLAN, тема 5), 802.3 — Ethernet (тема 4), 802.11 — беспроводные локальные сети Wi-Fi (тема 20), 802.15 — персональные сети. Номер группы входит в название стандарта: «IEEE 802.3» означает стандарт Ethernet.

Международный союз электросвязи (англ. International Telecommunication Union, ITU) — специализированное учреждение ООН, основанное в 1865 году как Международный телеграфный союз. Его сектор стандартизации ITU-T выпускает рекомендации, касающиеся телефонии, транспортных сетей операторов и качества обслуживания (как упомянутая G.114). Стандарты мобильной связи 4G и 5G разрабатывает консорциум 3GPP, веб-технологии — консорциум W3C и сообщество WHATWG.

Распределение адресов и имён: ICANN, IANA и RIR

Чтобы адреса и номера в Интернете были уникальны, их распределением кто-то должен управлять. Глобальные реестры — адресного пространства IP, номеров автономных систем, номеров портов и параметров протоколов, корневой зоны системы доменных имён — ведёт служба IANA (англ. Internet Assigned Numbers Authority), функционирующая под эгидой некоммерческой корпорации ICANN (англ. Internet Corporation for Assigned Names and Numbers), созданной в 1998 году.

IANA не раздаёт адреса конечным пользователям. Она передаёт крупные блоки пяти региональным интернет-регистратурам (англ. Regional Internet Registry, RIR), которые распределяют адреса провайдерам и организациям своего региона 14:

RIRРегион обслуживания
ARINСеверная Америка
RIPE NCCЕвропа, Ближний Восток, Центральная Азия (включая Россию)
APNICАзиатско-Тихоокеанский регион
LACNICЛатинская Америка и Карибский бассейн
AFRINICАфрика

Иерархическое распределение — IANA, RIR, провайдер, организация — объясняет многие свойства адресации, которые будут рассмотрены в теме 6. Исчерпание свободного пространства IPv4 (IANA выдала последние блоки в 2011 году) стало главной причиной распространения трансляции адресов (тема 14) и перехода на IPv6 (тема 11).

Итоги темы

Компьютерная сеть состоит из узлов, соединённых каналами, и существует ради сервисов, предоставляемых прикладным программам; взаимодействие узлов определяется протоколами — соглашениями о формате, смысле и порядке сообщений. Интернет не спроектирован как единая сеть: он вырос из ARPANET как объединение независимых сетей, соединённых маршрутизаторами по общим протоколам TCP/IP, и сегодня представляет собой «сеть сетей» из десятков тысяч автономных систем, связанных отношениями транзита и пиринга, часто в точках обмена трафиком.

Фундаментальный выбор Интернета — коммутация пакетов вместо коммутации каналов. Статистическое мультиплексирование позволяет обслужить на том же канале в несколько раз больше пользователей с пачечным трафиком, но делает задержку переменной и допускает потери при переполнении буферов. Передача с промежуточным хранением и конвейерная работа звеньев объясняют, почему сообщения делятся на пакеты.

Поведение сети описывается метриками. Скорость канала, пропускная способность и полезная пропускная способность — разные величины, и последняя всегда ограничена узким местом пути. Задержка на каждом участке складывается из обработки, ожидания в очереди, передачи (L/R, зависит от длины пакета и скорости канала) и распространения (d/s, зависит только от расстояния); на дальних путях доминирует распространение, ограниченное скоростью света в волокне — около 5 мкс на километр. RTT измеряется на одних часах, его минимум отражает постоянные составляющие, а разброс — очереди; джиттер и потери определяют качество интерактивных приложений. Произведение скорости на RTT показывает, сколько данных должно быть в пути, чтобы загрузить канал, и станет ключевой величиной при изучении TCP.

Задержка в очереди нелинейно зависит от загрузки канала: при приближении загрузки к единице она растёт неограниченно, поэтому каналы проектируют с запасом. Протоколы, в которых закреплены эти механизмы, создаются в открытом процессе IETF, IEEE и ITU, а адреса и номера распределяются иерархически через IANA и региональные регистратуры.

Все понятия темы — пакет, заголовок, протокол, сервис — использовались пока без уточнения того, как именно устроено взаимодействие множества протоколов внутри одного хоста. Следующая тема отвечает на этот вопрос: она вводит многоуровневую архитектуру сети и механизм инкапсуляции, благодаря которым один веб-запрос последовательно обрабатывается полудюжиной протоколов.

Литература

  1. Kurose J. F., Ross K. W. Computer Networking: A Top-Down Approach. 8th ed. — Pearson, 2021.
  2. Tanenbaum A. S., Feamster N., Wetherall D. J. Computer Networks. 6th ed. — Pearson, 2021.
  3. Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы. 5-е изд. — СПб.: Питер, 2016.
  4. Cerf V. G., Kahn R. E. A Protocol for Packet Network Intercommunication. — IEEE Transactions on Communications, 1974, Vol. 22, No. 5, С. 637–648, DOI: 10.1109/TCOM.1974.1092259.
  5. Leiner B. M., Cerf V. G., Clark D. D., Kahn R. E., Kleinrock L., Lynch D. C., Postel J., Roberts L. G., Wolff S. A Brief History of the Internet. — ACM SIGCOMM Computer Communication Review, 2009, Vol. 39, No. 5, С. 22–31, DOI: 10.1145/1629607.1629613.
  6. Baran P. On Distributed Communications Networks. — IEEE Transactions on Communications Systems, 1964, Vol. 12, No. 1, С. 1–9, DOI: 10.1109/TCOM.1964.1088883.
  7. Jacobson V., Braden R. TCP Extensions for Long-Delay Paths. — RFC 1072, IETF, 1988. https://www.rfc-editor.org/rfc/rfc1072
  8. Morton A., Claise B. Packet Delay Variation Applicability Statement. — RFC 5481, IETF, 2009. https://www.rfc-editor.org/rfc/rfc5481
  9. Kleinrock L. Queueing Systems. Vol. 1: Theory. — Wiley, 1975.
  10. Schulzrinne H., Casner S., Frederick R., Jacobson V. RTP: A Transport Protocol for Real-Time Applications. — RFC 3550, IETF, 2003. https://www.rfc-editor.org/rfc/rfc3550
  11. Labovitz C., Iekel-Johnson S., McPherson D., Oberheide J., Jahanian F. Internet Inter-Domain Traffic. — Proceedings of ACM SIGCOMM 2010, 2010, DOI: 10.1145/1851182.1851194.
  12. ITU-T Recommendation G.114. One-way transmission time. — ITU, 2003.
  13. Bradner S. The Internet Standards Process — Revision 3. — RFC 2026, IETF, 1996. https://www.rfc-editor.org/rfc/rfc2026
  14. Housley R., Curran J., Huston G., Conrad D. The Internet Numbers Registry System. — RFC 7020, IETF, 2013. https://www.rfc-editor.org/rfc/rfc7020