В предыдущих уроках мы много раз упоминали разные протоколы и слои. Этот урок — структурированная сводка. Здесь вы увидите, какие протоколы существуют на каждом слое, какие у них роли, и в каких ситуациях выбирать тот или иной. Это карта, к которой можно возвращаться, когда забудете «а на каком слое работает MQTT?» или «когда лучше UDP?».
Цель урока — не запомнить весь список, а получить интуицию: какой класс задач решает какой слой, какие protocols в одном «семействе», что с чем заменяется. После этого, когда встретите новый протокол, вы сможете быстро поставить его в нужную клетку.
Application layer (L7) — что видит пользователь
Прикладной слой — это всё, что вы используете напрямую. HTTP, email, чаты, файлы, базы данных по сети. На этом слое огромное разнообразие протоколов, потому что разные приложения имеют разные потребности.
L7 -- web и API protocols
HTTP/1.1Текстовый протокол поверх TCP. RFC 9110-9112. Самый распространённый в 2026. Подходит для отладки -- человекочитаемый
HTTP/2Бинарный, мультиплексированный поверх TCP. Решает HoL blocking на уровне HTTP, но не TCP. ~55% запросов в 2026
HTTP/3HTTP поверх QUIC (поверх UDP). Решает HoL blocking полностью. ~30% запросов. Быстрее на мобильных
WebSocketПолнодуплексный канал между браузером и сервером. Использует HTTP для handshake, затем переходит на свой бинарный формат. Чаты, real-time updates
gRPCRPC-фреймворк от Google поверх HTTP/2. Бинарный (Protocol Buffers), bidirectional streaming. Микросервисы
GraphQLQuery language для API. Обычно по HTTP. Один endpoint с гибкими запросами
L7 -- email и file transfer
SMTPSimple Mail Transfer Protocol. Отправка email между серверами. Порт 25 (между серверами) или 587 (submission от клиента)
IMAPInternet Message Access Protocol. Чтение email клиентом (Outlook, Mail.app, Gmail веб). Поддерживает папки, флаги, search. Порт 143/993
POP3Post Office Protocol. Старший брат IMAP, проще: скачать и удалить. Менее популярен, чем IMAP. Порт 110/995
FTPFile Transfer Protocol. Передача файлов. Старый, использует 2 соединения (control + data). Сейчас редко -- заменён SFTP/HTTPS
SFTPSSH File Transfer Protocol. Защищённый transfer поверх SSH. Стандарт для современных файловых операций
rsyncУтилита для synchronization файлов с дельта-encoding. Эффективно для backup и mirroring
L7 -- remote access и control
SSHSecure Shell. Защищённое выполнение команд на удалённой машине. Также используется для tunneling, port forwarding, file transfer (через SFTP). Порт 22
TelnetСтарый протокол remote access. Без шифрования -- небезопасный. Сейчас почти не используется. Порт 23
RDPRemote Desktop Protocol от Microsoft. Графический remote access к Windows-машинам. Порт 3389
DNSDomain Name System. Резолв доменных имён в IP. UDP по умолчанию (порт 53), TCP для больших ответов или DoT/DoH
DHCPDynamic Host Configuration Protocol. Назначение IP-адресов клиентам в LAN. UDP, порты 67/68
NTPNetwork Time Protocol. Синхронизация времени. UDP, порт 123. Критично для логов, TLS, аутентификации
L7 -- IoT и messaging
MQTTMessage Queuing Telemetry Transport. Pub/Sub для IoT. Маленький overhead, поддерживает QoS-levels. Поверх TCP
CoAPConstrained Application Protocol. HTTP-подобный для constrained devices. Поверх UDP. Для IoT с ограниченными ресурсами
Транспортный слой — маленький по количеству протоколов, но критичный по важности. TCP, UDP, QUIC — три кита, на которых держится почти всё на L7.
Transport protocols -- сравнение
TCPConnection-oriented. Гарантирует доставку и порядок. Handshake перед данными. Используется для: HTTP, SSH, FTP, SMTP, БД-протоколы. ~95% веба
UDPConnectionless. Без гарантий. Маленький overhead (8 байт header). Используется для: DNS, video streaming, gaming, VoIP, multicast
QUICСовременный transport поверх UDP. Имеет надёжность (как TCP), но мультиплексирование без HoL blocking, 0-RTT handshake, встроенный TLS
SCTPStream Control Transmission Protocol. Гибрид TCP+UDP. Multi-streaming, multi-homing. Используется в телекомах и WebRTC. Редко в обычных приложениях
DCCPDatagram Congestion Control Protocol. UDP с congestion control. Почти не используется -- QUIC занял эту нишу
ICMPv6ICMP для IPv6. Дополнительные функции -- Neighbor Discovery (ND) заменяет ARP
IPsecIP Security. Шифрование на L3. Использует AH (Authentication Header) и ESP (Encapsulating Security Payload). Классическая технология VPN
GREGeneric Routing Encapsulation. Туннелирование любого L3-протокола внутри IP. Используется для site-to-site VPN
Все, что касается L3, для приложения «прозрачно» — вы шлёте байты в TCP-соединение, не заботясь, как они доберутся через IP-маршрутизацию. Но когда что-то ломается, диагностика часто упирается в L3:
ping — проверка ICMP, базовый L3-тест.
traceroute — маршрут через сеть.
mtr — продвинутый traceroute с loss и jitter.
ip route show — routing table вашего host’а.
Link layer (L2) — внутри одной сети
Канальный слой — передача внутри одной локальной сети. Самые распространённые: Ethernet и Wi-Fi.
Link layer protocols
Ethernet (802.3)Доминантный проводной LAN. Скорости от 10 Мбит/с до 400+ Гбит/с. MTU 1500 байт (стандарт), 9000 для jumbo. MAC-адреса 48-битные
Wi-Fi (802.11)Беспроводной LAN. Стандарты: a, b, g, n (Wi-Fi 4), ac (Wi-Fi 5), ax (Wi-Fi 6/6E), be (Wi-Fi 7). С точки зрения IP -- ведёт себя как Ethernet
PPPPoint-to-Point Protocol. Используется в dial-up, ADSL (PPPoE), serial-соединениях. Простой формат frame'а
ARPAddress Resolution Protocol. Резолв IP -> MAC внутри одного LAN. Когда нужно отправить пакет на IP в моей сети -- спрашиваю 'у кого этот IP?'. Используется только в IPv4
VLAN (802.1Q)Virtual LAN. Тегирование Ethernet-frame'ов для сегментации одной физической сети на логические. 4-байтный VLAN-tag
STPSpanning Tree Protocol. Предотвращает loops в switched-сетях. Если есть резервный путь -- блокирует, чтобы избежать broadcast storm
ARP — интересный гибрид. Формально на L2, но обслуживает IP. Когда вы шлёте пакет на 192.168.1.5 в локальной сети, ваш host должен знать MAC-адрес 192.168.1.5, чтобы поставить его в Ethernet-frame. ARP спрашивает broadcast’ом «у кого 192.168.1.5?» и получает ответ.
# Посмотреть ARP-таблицу (соседи в локальной сети)ip neigh show 2>/dev/null || arp -a# Увидите IP -> MAC mapping для каждого устройства в вашей LAN# Принудительно arp-запрос (нужен root)sudo arping -c 3 192.168.1.1
Layered approach — польза на примере
Чтобы продемонстрировать, как разделение помогает, рассмотрим пример: ваше приложение делает 10000 HTTPS-запросов через requests к разным API. Что меняется на каждом слое?
10000 HTTPS-запросов -- кто что делает
L7 (HTTP)Браузер или requests строит 10000 HTTP-запросов. Каждый со своим URL, headers, методом. Application logic
TLSTLS-библиотека шифрует все запросы. Возможно, делается TLS session resumption -- не каждый запрос требует full handshake
L4 (TCP)TCP может переиспользовать соединения (connection pooling в requests). На разные хосты -- разные соединения. На один хост -- множество запросов в одном соединении (HTTP/1.1 keep-alive или HTTP/2 multiplexing)
L3 (IP)Каждый запрос разбивается на IP-пакеты по MTU. Routing table host'а решает next hop. Default gateway пересылает к ISP
L2 (Ethernet)Каждый IP-пакет упаковывается в Ethernet-frame. ARP резолвит next hop IP -> MAC. Frame идёт в локальный switch
L1 (Physical)Кабель/Wi-Fi/Ethernet. Биты летят в среду. Это physically где-то 100 Mbps - 10 Gbps в зависимости от вашей сети
Когда вы пишете requests.get(url), вы взаимодействуете только с L7. Всё, что ниже — работает само. Это огромная польза. Представьте, если бы вам приходилось каждый раз думать про MAC-адреса и Ethernet-frame’ы для каждого HTTP-запроса. Невозможно было бы писать приложения.
Так что слои — это не «теоретическая академическая ерунда», а практический инструмент сокрытия сложности. Без них Internet и его приложения не существовали бы.
Где какие порты — сводка
Запомнить стандартные порты полезно — встречаются ежедневно.
Стандартные порты по сервисам
20-21FTP -- data и control каналы. Сейчас редко используется. Заменён SFTP/HTTPS
22SSH -- защищённый remote shell. Самый частый порт на Linux-серверах
23Telnet -- небезопасный remote shell. Не используется в production
25SMTP -- между mail-серверами. Обычно блокируется на ISP-уровне у конечных пользователей
53DNS -- UDP и TCP. Самый частый L4-порт
67-68DHCP -- UDP. 67 server, 68 client
80HTTP -- незашифрованный web. Редко используется в современном вебе
123NTP -- синхронизация времени. UDP
143IMAP -- email клиента (без TLS)
443HTTPS -- HTTP внутри TLS. Стандарт современного web
3306MySQL/MariaDB. Стандартный порт для подключения к MySQL
5432PostgreSQL. Стандартный порт. Помните его если работаете с Postgres
6379Redis. In-memory key-value store
27017MongoDB. Document DB
Порты 0-1023 — «well-known», для запуска нужны root-привилегии. 1024-49151 — «registered», IANA закрепляет. 49152-65535 — «dynamic», свободны для клиентских соединений.
Попробуй сам
Посмотрите, какие протоколы и порты реально работают в вашей системе.
# 1. Все слушающие порты с информацией о процессеsudo ss -tlnp 2>/dev/null || sudo netstat -anp tcp | grep LISTEN# Какие сервисы запущены и на каких портах# 2. Active соединения и их состояниеss -tn 2>/dev/null || netstat -an | grep tcp# Покажет ESTABLISHED, TIME_WAIT, CLOSE_WAIT и другие состояния# 3. UDP-сокетыss -un 2>/dev/null || netstat -an | grep udp# DNS-resolver, mDNS, NTP# 4. Какие протоколы /etc/services знаетhead -50 /etc/services# Полный список IANA-зарегистрированных сервисов и портов# 5. Резолв сервиса в портgetent services ssh # Linux# или прямо посмотреть:grep -E '^(ssh|http|https|dns|postgres)\s' /etc/services
Сравните вывод ss -tlnp с тем, что знаете про свою машину. Все ли запущенные сервисы вам понятны? Если что-то странное слушает — это повод проверить безопасность.
Проверка знанийKnowledge check
Стартап разрабатывает приложение, которое отправляет телеметрию (1KB сообщения) с 100,000 IoT-устройств в облако. Сообщения каждые 30 секунд. Какой L7 protocol выбрать и почему?
ОтветAnswer
Для такого сценария оптимальный выбор -- MQTT поверх TCP, не HTTP. Анализ требований: (1) Объём -- 100,000 устройств * 1 сообщение/30сек = ~3333 сообщений/сек. (2) Маленькие сообщения (1KB). (3) Constrained devices -- IoT обычно слабые (батарея, мало RAM). (4) Long-lived connections -- устройство сидит онлайн. Почему MQTT: (a) Минимальный overhead. MQTT-фрейм может быть 2-3 байта header'а на сообщение. HTTP-запрос (даже минимальный) -- 200-500 байт overhead с заголовками. На 100K устройств это огромная экономия. (b) Persistent connection. Устройство одно раз подключается и держит TCP-соединение, в которое шлёт сообщения. HTTP с keep-alive похоже, но HTTP всё равно тяжелее. (c) Pub/Sub model. MQTT-брокер (Mosquitto, EMQX, HiveMQ) принимает сообщения от устройств и распределяет по подписчикам (backend сервисы). Backend не должен отдельно подключаться к каждому устройству. (d) QoS levels. MQTT поддерживает 3 уровня: 0 (at most once -- быстро), 1 (at least once -- надёжно, могут быть дубликаты), 2 (exactly once -- сложно, медленно). Можно выбрать compromise. (e) Retained messages. Брокер хранит последнее сообщение -- новый подписчик сразу получает текущее состояние. Полезно для дашбордов. (f) Last Will. Если устройство дисконнектится неожиданно, брокер шлёт указанное Last Will сообщение -- статус 'offline' для backend. Альтернативы и почему не подходят: HTTP -- слишком тяжёлый, нет pub/sub, нужно polling. WebSocket -- бинарный, но без pub/sub встроенного, придётся писать сами. CoAP -- хорош для constrained, но поверх UDP, может быть менее надёжен в плохих сетях. AMQP -- слишком сложный для простой телеметрии. Конкретный stack: Устройства -> MQTT brokers (Cluster) -> Backend services subscribing. Минимизирует CPU/memory на устройствах, scaling на брокере. Стандартный pattern в IoT. Bonus: на серьёзных нагрузках посмотрите EMQX или HiveMQ -- скейлятся до миллионов устройств.
Доступ закрыт
Требуется вход
Для доступа к материалам курса необходимо войти через Telegram
Проверьте понимание
Результат: 0 из 0
Концептуальный
Закончили урок?
Отметьте его как пройденный, чтобы отслеживать свой прогресс