Learning Platform
Глоссарий Troubleshooting
Урок 03.02 · 17 мин
Начальный
HostsLinksNodesPacketsNetworking basics

Hosts, links, nodes, packets — базовые сущности сети

Прежде чем разбирать TCP, HTTP, DNS, нужно условиться о терминах. В сетях есть несколько фундаментальных сущностей, и если их не различать, дальнейшие концепции превращаются в кашу. К сожалению, многие учебники используют эти слова взаимозаменяемо, что только запутывает. В этом уроке наведём порядок.

Главное, что вы должны вынести: host — это конечное устройство, node — любой узел в сети, link — физическая или логическая связь между узлами, packet — кусок данных, которые ходят по сети. Дальше посмотрим, как они соотносятся.


Host — конечная точка сети

Host — это устройство, на котором работает приложение, использующее сеть. Ваш ноутбук — host. Сервер в дата-центре — host. Ваш телефон — host. Кофеварка с Wi-Fi — тоже host (привет, IoT).

Hosts -- типичные примеры
LaptopВаш ноутбук. Запускает браузер, ваш ETL-скрипт, IDE. Имеет один или несколько сетевых интерфейсов (Ethernet, Wi-Fi)
ServerМашина в дата-центре. Может быть физическая (bare metal) или виртуальная (VM на гипервизоре). Запускает API, БД, кэши
PhoneiPhone, Android. Подключается через Wi-Fi или 4G/5G. Полноценный host -- запускает Telegram, браузер, фоновые синки
VM в AWSEC2 instance, Compute Engine, Azure VM. Виртуальная машина, но с точки зрения сети -- такой же host, как физический сервер. Имеет свой IP
ContainerDocker container, Kubernetes pod. Логически отдельный host со своим IP (в bridge или overlay сети). Но физически -- процесс на host'е
IoT deviceКофеварка, термостат, лампочка, камера. Маленький компьютер с сетевым стеком. Тоже host, хоть и слабый

Ключевая характеристика host — он генерирует трафик и потребляет трафик. Браузер на ноутбуке отправляет HTTP-запросы (генерирует) и получает HTML (потребляет). Сервер слушает входящие соединения, обрабатывает их, отправляет ответы.

Терминология вариативная: host, machine, endpoint, peer, system — часто означают одно и то же. В академическом контексте чаще «host», в инфраструктурном — «machine», в peer-to-peer — «peer». В этом курсе будем говорить «host», когда нужна точность.


Link — это «провод» между двумя узлами. Может быть физическим (медный Ethernet-кабель, оптоволокно) или логическим (Wi-Fi, виртуальная сеть в облаке).

Типы links
Ethernet cableМедный кабель (Cat5e/Cat6/Cat7). Чаще всего 1 Гбит/с в офисе, 10 Гбит/с в дата-центре. Самый предсказуемый link -- маленькая latency, нет потерь
Fiber opticОптоволокно. От 10 Гбит/с до 400 Гбит/с. Используется на backbone (между дата-центрами, между провайдерами). Минимальная latency на длинные расстояния
Wi-FiБеспроводной link. 802.11 стандарты: ac (Wi-Fi 5, до 1 Гбит/с), ax (Wi-Fi 6, до 9.6 Гбит/с), be (Wi-Fi 7, до 30+ Гбит/с). Подвержен помехам, переменная latency
4G/5GМобильная связь. 4G: до 100 Мбит/с реально. 5G: гигабиты в теории. Высокий jitter, переменный пакетный лосс. Тут QUIC выигрывает
BluetoothКороткодистанционный wireless. 1-3 Мбит/с. Для наушников, мышей, IoT. Сеть IoT часто строится поверх Bluetooth (Bluetooth Mesh)
LoopbackВиртуальный link 'к самому себе'. Адрес 127.0.0.1 (IPv4) или ::1 (IPv6). Используется приложениями для общения внутри одного host без выхода в сеть

Linkи имеют важные параметры, которые определяют их пригодность для разных задач:

  • Bandwidth (пропускная способность). Сколько байт в секунду можно прокачать. Ethernet 1 Гбит/с = 1,000,000,000 бит/с = ~125 МБ/с.
  • Latency (задержка). Сколько времени один пакет идёт от A до B. Внутри дата-центра — 0.1-1 мс. Между континентами — 100-300 мс.
  • Packet loss (потери). Сколько процентов пакетов теряется. На хорошем link — 0.001%. На плохом — может быть 5-10%.
  • Jitter (вариативность latency). Насколько latency колеблется. Постоянная latency = 0 jitter. Если бывает 5 мс, 25 мс, 8 мс — большой jitter.

Эти параметры определяют, какое приложение комфортно работает на этом link. Видеосвязь требует низкого jitter (иначе видео заикается). Скачивание файлов требует высокого bandwidth, но толерантно к latency. Игры требуют низкого latency и low packet loss.

# Посмотреть свои сетевые интерфейсы (links) на Linux:
ip link show
# Увидите en0, wlan0, lo (loopback), может быть docker0, br-*

# Или на macOS:
ifconfig
# Увидите en0 (Ethernet или Wi-Fi), lo0 (loopback), utun* (VPN)

# Посмотреть скорость текущего Wi-Fi link (macOS):
networksetup -getairportnetwork en0
system_profiler SPAirPortDataType | grep -A 3 "Current Network"

# Linux:
iwconfig wlan0 2>&1 | grep -i 'bit rate'

Node — любой узел в сети

Node — более общий термин, чем host. Node — это любая точка в сети, которая обрабатывает пакеты. Hosts — это nodes. Но routers и switches тоже nodes. Они не запускают приложений, но участвуют в передаче трафика.

Hosts vs intermediate nodes
Host AКонечная точка. Запускает приложение (браузер, ETL-скрипт). Генерирует и потребляет трафик
SwitchПромежуточный узел на link layer (Layer 2). Пересылает Ethernet-кадры на основе MAC-адресов. Внутри одной локальной сети
RouterПромежуточный узел на network layer (Layer 3). Пересылает IP-пакеты на основе IP-адресов. Соединяет разные сети
FirewallПромежуточный узел, фильтрующий трафик. Обычно работает на L3-L4 (IP-адреса, порты), может на L7 (HTTP). Stateful/stateless
ProxyПромежуточный узел на application layer (L7). Перехватывает HTTP-запросы. Reverse proxy (NGINX перед бэкендом) или forward proxy (корпоративный)
Host BДругой конечный host. Например, сервер, который обрабатывает ваш запрос

Когда вы отправляете HTTP-запрос с ноутбука на сервер в AWS Frankfurt, пакеты проходят через 10-20 промежуточных nodes. Каждый — это switch, router или firewall. Вы их обычно не видите, но они там есть. Команда traceroute показывает этот путь.

# Посмотреть все промежуточные nodes между вами и сервером:
traceroute github.com
# Покажет 10-20 строк -- каждая это router на пути

# На некоторых строках будут * * * -- это router,
# который не отвечает на ICMP (специально или по политике)

Различие host vs node важно, когда мы говорим о слоях. Hosts видят все слои сетевого стека (Ethernet, IP, TCP, HTTP), потому что они генерируют и потребляют трафик. Routers видят только IP-слой и ниже (Ethernet, IP) — они не должны парсить TCP или HTTP. Switches видят только Ethernet. Каждое промежуточное устройство работает на своём «уровне абстракции».


Packet — единица передачи

Packet — это кусок данных, который ходит по сети. Когда вы отправляете большой файл, он разбивается на множество пакетов, каждый из которых идёт независимо.

Структура пакета IP
IP HeaderЗаголовок IP. 20 байт (IPv4) или 40 байт (IPv6). Содержит source IP, destination IP, TTL, protocol number, длину и др.
PayloadДанные пакета. Обычно содержит TCP/UDP сегмент внутри. Может быть до 65535 - 20 байт в IPv4
src IPIP-адрес отправителя. Например, 192.168.1.42 -- ваш ноутбук в локальной сети, или 1.2.3.4 -- какой-то сервер
dst IPIP-адрес получателя. Например, 142.250.185.78 -- один из серверов google.com
TTLTime to live. Декрементируется каждым router. Когда 0 -- пакет дропается, чтобы не бесконечно крутился по сети. Изначально 64 или 128

В терминологии есть нюанс: на каждом слое единица называется по-разному.

  • Frame — на link layer (Ethernet-кадр).
  • Packet — на network layer (IP-пакет).
  • Segment — на transport layer (TCP-сегмент).
  • Datagram — на transport layer (UDP-датаграмма).
  • Message — на application layer (HTTP-сообщение).

Это вложенная структура. Когда вы отправляете HTTP-запрос, он становится HTTP-message, упаковывается в TCP-segment, упаковывается в IP-packet, упаковывается в Ethernet-frame, и улетает в кабель. На приёмной стороне всё разворачивается обратно. Это и есть encapsulation, который мы разберём в модуле 3.

# Посмотреть пакеты, проходящие через ваш интерфейс:
sudo tcpdump -i en0 -c 5
# Покажет 5 пакетов. Каждая строка -- один пакет с метаданными:
# время, source IP:port, destination IP:port, флаги

# В Wireshark вы увидите ту же информацию в GUI -- дерево полей пакета
# с расшифровкой каждого слоя

Размер пакетов — MTU

Сколько байт можно положить в один пакет? Это ограничивает MTU (Maximum Transmission Unit). Для Ethernet типичный MTU = 1500 байт (для payload IP-пакета). Это значит, что один IP-пакет на Ethernet не может быть больше 1500 байт (плюс заголовок Ethernet ещё 14 байт сверху).

Откуда взялась цифра 1500? Историческое решение IEEE при стандартизации Ethernet в 1980-х. Сейчас иногда используют jumbo frames — до 9000 байт, для дата-центров. Но в публичном internet всё ещё 1500 байт.

MTU и фрагментация
HTTP payload: 5000 байтНапример, JSON-ответ от API. Это много больше, чем MTU 1500. Что делать?
TCP делит на сегментыTCP разбивает данные на сегменты по MSS (Maximum Segment Size) ~= MTU - 40 байт заголовков. Обычно MSS = 1460 байт
Pkt 1: 1460 байтПервый TCP-сегмент. Содержит первые 1460 байт payload + TCP header + IP header = 1500 байт пакета
Pkt 2: 1460 байтВторой TCP-сегмент с следующими 1460 байтами
Pkt 3: 1460 байтТретий TCP-сегмент
Pkt 4: 620 байтПоследний сегмент. Меньше MTU, потому что данных мало осталось. Когда придёт -- TCP соберёт всё вместе

Что важно понимать: с точки зрения приложения вы шлёте 5000 байт. С точки зрения сети — 4 пакета. Все механизмы reliability TCP работают на уровне сегментов: ACKs, retransmission, congestion control. Когда вы видите в Wireshark «4 TCP packets для одного запроса» — это нормально для сообщений больше MTU.

# Узнать MTU своего интерфейса:
ip link show eth0 | grep mtu
# Или на macOS:
ifconfig en0 | grep mtu

# Будет что-то вроде: mtu 1500

# Проверить максимальный размер пакета до сервера (без фрагментации):
ping -M do -s 1472 google.com   # Linux, -M do = don't fragment
ping -D -s 1472 google.com      # macOS, -D = don't fragment
# Если пакет 1500 байт (1472 payload + 28 IP/ICMP headers) проходит, MTU >= 1500
# Если получаете 'Message too long' -- MTU меньше

Это была проблема в эпоху ADSL: PPPoE заголовки уменьшали MTU до 1492 байт, и некоторые сайты не открывались, потому что серверы слали 1500-байтные пакеты с DF (Don’t Fragment), которые не проходили. Решение — MSS clamping на router’е.


Топология — как nodes соединяются

Topology — это форма сети. Как nodes физически соединены друг с другом.

Базовые топологии
BusВсе nodes подключены к общему проводу. Историческая топология ранних Ethernet (10BASE2). Дешёво, но плохая надёжность
RingNodes соединены в кольцо. Token Ring (старый IBM-стандарт), FDDI. Хорошая предсказуемость, плохая надёжность
StarВсе nodes подключены к центральному (switch). Самая распространённая в LAN. Все Ethernet с 2000-х -- это star через switch
MeshКаждый node соединён с каждым (full mesh) или со многими (partial mesh). Internet backbone -- partial mesh. Высокая отказоустойчивость
Tree (hierarchical)Иерархия из switches. Корпоративные сети, дата-центры. Core switches -> aggregation -> access -> hosts
HybridВ реальности всё гибридно. Локальная сеть -- star, между офисами -- mesh, к интернету -- через провайдера (tree)

В современных сетях преобладает hybrid: внутри одного дата-центра star/tree, между дата-центрами одного провайдера mesh, между провайдерами — мощный mesh на уровне backbone.

Для вас, инженера-программиста, топология обычно не важна напрямую. Но она проясняет, почему сетевые задержки такие, какие они есть. Например, два инстанса в одном AZ AWS — 0.1-0.5 мс (star). Между AZ — 1-2 мс (tree). Между регионами — 50-200 мс (mesh через backbone).


Попробуй сам

Посмотрите своими глазами все эти сущности в реальной сети.

# 1. Свои интерфейсы (links)
ip link show 2>/dev/null || ifconfig
# Найдите свой основной (en0 или eth0). Запомните его имя

# 2. Свои IP-адреса (для своего host)
ip addr show 2>/dev/null || ifconfig | grep 'inet '
# Найдите свой основной IP (обычно 192.168.x.y или 10.x.y.z)

# 3. Default gateway -- ближайший router
ip route show default 2>/dev/null || route -n get default | grep gateway
# Это IP вашего домашнего роутера или офисного

# 4. Все nodes между вами и google.com
traceroute -m 30 google.com
# Каждая строка -- это node на пути

# 5. Размер пакета и MTU
ping -c 3 -M do -s 1472 google.com 2>/dev/null || ping -c 3 -D -s 1472 google.com

# 6. Захватить пакеты на 5 секунд
sudo tcpdump -i en0 -c 20
# Каждая строка -- один packet. Видите src и dst адреса

Посчитайте, сколько hop’ов до Google (это nodes), какой MTU у вашего link, сколько пакетов в секунду генерирует ваш браузер, когда вы открываете обычный сайт. Эти цифры — ваш базовый sense of scale.


Loopback и Unix-сокеты: коммуникация внутри одного хоста Виртуальные links Docker: veth, bridge и overlay
Проверка знанийKnowledge check
Junior смотрит вывод 'traceroute github.com' и видит 15 строк, каждая со своим IP и временем. Несколько строк '* * *' без IP. Что значит каждая такая строка, что значат звёздочки, и можно ли отсюда вывести, что сеть 'плохая'?
ОтветAnswer
Каждая строка traceroute -- это один node (обычно router) на пути от вас до github.com. Время в строке -- round-trip time от вас до этого конкретного router'а. Traceroute работает через трюк с TTL: первый пакет с TTL=1 декрементируется до 0 на первом router'е, который возвращает ICMP Time Exceeded со своим IP в source. Второй пакет TTL=2 -- второй router, и т.д. Каждый IP в строке -- это IP интерфейса router'а, обращённого к вам. Звёздочки '* * *' означают: router не ответил на ICMP за timeout (обычно 5 сек). Причины могут быть разные: (1) router намеренно не отвечает на ICMP (security policy большинства корпоративных сетей -- блокируют ICMP outbound). (2) ICMP rate limiting -- router отвечает редко, чтобы не перегружаться. (3) Router выключен (но тогда пакеты не дошли бы дальше, что обычно не так). (4) Пакеты идут разными маршрутами (load balancing), и трое пакетов на этом hop'е пошли через разных router'ов, ни один не вернул ответ. Звёздочки САМИ ПО СЕБЕ НЕ ОЗНАЧАЮТ, что сеть плохая -- это нормально на большинстве маршрутов. Что значит 'плохая сеть': (а) высокий RTT на ранних hop'ах (где должно быть быстро) -- проблема в вашей локальной сети; (б) резкий скачок RTT на одном конкретном hop'е -- проблема на этом router'е или линке; (в) packet loss до конечного host -- видно через mtr (mtr github.com покажет % потерь на каждом hop'е). Правильная диагностика: mtr -n -c 30 github.com -- запустить 30 итераций, посмотреть таблицу с loss% и avg RTT по каждому hop'у.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 6. В чём разница между понятиями 'host' и 'node' в сетевой терминологии?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4