Подписка пакета данных¶
Подписка пакета (subscription) — механизм обмена данными в компьютерных сетях, при котором один узел (клиент) запрашивает у другого узла (сервера) регулярную доставку определённого потока пакетов, а сервер передаёт клиенту только те пакеты, которые соответствуют заданным условиям подписки. Механизм лежит в основе протоколов групповой рассылки (multicast), протоколов маршрутизации с подпиской на обновления, а также систем оповещения о событиях в распределённых системах.
¶Общие сведения
В классической модели клиент-сервер клиент отправляет запрос, а сервер отвечает на него однократно. Модель подписки изменяет этот порядок: клиент один раз регистрирует условия (подписку) на сервере или промежуточном узле, после чего сервер самостоятельно инициирует передачу данных при появлении новых пакетов, соответствующих условиям. Подписка может быть активной (клиент явно отменяет её командой unsubscribe) или истекающей (действует ограниченное время).
Ключевые характеристики:
- Условия подписки — набор фильтров (по адресу, типу пакета, диапазону портов, метке DSCP и т. д.), по которым сервер отбирает пакеты для доставки.
- Идентификатор подписки — значение, по которому клиент может изменить или отменить подписку.
- TTL (Time to Live) — время жизни подписки, после истечения которого она автоматически удаляется, если не продлена.
- Состояние подписки — хранится на сервере (или на нескольких серверах в распределённой системе) и требует ресурсов, что отличает модель подписки от модели «запрос-ответ».
¶Подписка в протоколах групповой рассылки
В IP-сетях групповая рассылка (multicast) реализует модель подписки на уровне сети. Хост подписывается на multicast-группу, отправляя IGMP-запрос (Internet Group Management Protocol) или MLD (Multicast Listener Discovery) маршрутизатору. Маршрутизатор включает данный хост в дерево рассылки и пересылает ему все пакеты, отправленные на соответствующий multicast-адрес.
Протоколы, использующие модель подписки:
| Протокол | Область применения |
|---|---|
| IGMPv2/v3 | Подписка IPv4-хостов на multicast-группы |
| MLDv1/v2 | Подписка IPv6-хостов на multicast-группы |
| PIM-SM | Маршрутизация multicast с ручным (sparse) построением дерева |
| PIM-SSM | Модель «источник-группа» — подписка на поток от конкретного источника |
В PIM-SSM (Source-Specific Multicast) подписка указывает не только групповой адрес, но и адрес источника, что устраняет необходимость в RPF-проверках и упрощает рассылку.
¶Подписка в протоколах маршрутизации
Протоколы маршрутизации используют подписку для получения обновлений таблицы маршрутизации. В BGP (Border Gateway Protocol) клиент устанавливает сессию с сервером маршрутизации и подписывается на обновления маршрутов. Существует расширение BGP Route Refresh, позволяющее запросить повторную отправку всех маршрутов без переустановки сессии.
Протокол LISP (Locator/ID Separation Protocol) использует подписку на EID-пространство (Endpoint Identifier): маршрутизатор-регистратор (xTR) подписывается на префикс удалённого хоста и получает уведомления о его перемещении.
¶Подписка в системах оповещения и шинах данных
В распределённых системах и микросервисах подписка на пакеты (сообщения) реализуется через шины данных и брокеры сообщений. Клиент подписывается на топик (topic) или очередь (queue), а брокер доставляет ему все новые сообщения, попадающие под условия подписки.
Основные технологии:
- AMQP (Advanced Message Queuing Protocol) — модель «издатель-подписчик» с биржами (exchanges) и очередями; клиент подписывается на очередь, привязанную к бирже с заданным правилом маршрутизации.
- MQTT (Message Queling Telemetry Transport) — лёгкий протокол для IoT; подписка на топик с поддержкой wildcard-шаблонов (
sensor/+/temperature). - NATS — высокопроизводительная шина сообщений с подпиской на subjects.
- Kafka — модель consumer group; подписка на топик реализована через привязку консьюмера к партиции.
¶Подписка в контексте пакетного анализа
В инструментах сетевого анализа (tcpdump, Wireshark, libpcap) понятие «подписка на пакеты» описывает фильтр захвата (BPF-фильтр), определяющий, какие пакеты будут записаны в файл или отображены в интерфейсе. Формально это не подписка в сетевом смысле, а фильтрация на стороне приёмника, однако термин «подписка» часто используется для описания сценария, когда аналитический инструмент непрерывно получает поток пакетов, отвечающих заданным условиям.
¶Преимущества и недостатки
Преимущества модели подписки:
- Снижение нагрузки на сеть — данные передаются только заинтересованным получателям.
- Экономия пропускной способности при групповой рассылке — поток передаётся один раз, а не по числу подписчиков.
- Автоматизация — клиент получает данные без повторных запросов.
Недостатки:
- Необходимость хранить состояние подписки на сервере, что создаёт нагрузку при большом числе подписчиков.
- Сложность масштабирования в распределённых системах (необходимость репликации состояния).
- Риск утечки данных при некорректной настройке фильтров подписки.
¶Применение
Механизм подписки пакетов применяется в IPTV и онлайн-вещании (multicast-рассылка видео), в финансовых системах (подписка на поток котировок), в IoT (подписка на телеметрию датчиков), в сетевой телеметрии (NetFlow/IPFIX с подпиской на потоки), в системах мониторинга (Prometheus, Zabbix — опрос или подписка на метрики).
Источники:
- RFC 3376 — Internet Group Management Protocol, Version 3
- RFC 4604 — Using Internet Group Management Protocol, Version 3 (IGMPv3) and Multicast Listener Discovery Protocol 2 (MLDv2) for Multicast Source-Specific Multicast
- RFC 7761 — Protocol Independent Multicast — Sparse Mode (PIM-SM)
- RFC 6186 — Use of SRV and URI Records for SIP
- RFC 4514 — Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3
- RFC 6749 — The OAuth 2.0 Authorization Framework
- RFC 6750 — The OAuth 2.0 Authorization Framework: Bearer Token Usage
- RFC 7662 — OAuth 2.0 Token Introspection
- RFC 8628 — OAuth 2.0 Device Authorization Grant
- RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
- RFC 8949 — Concise Binary Object Representation (CBOR)
- RFC 3261 — SIP: Session Initiation Protocol
- RFC 5321 — Simple Mail Transfer Protocol
- RFC 1939 — Post Office Protocol, Version 3
- RFC 3501 — INTERNET MESSAGE ACCESS PROTOCOL — VERSION 4rev1
- RFC 8441 — Bootstrapping WebSockets with HTTP/2
- RFC 6455 — The WebSocket Protocol
- RFC 7636 — Proof Key for Code Exchange by OAuth Public Clients
- RFC 8693 — OAuth 2.0 Token Exchange
- RFC 9068 — JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens
- RFC 8141 — Uniform Resource Names (URNs)
- RFC 3986 — Uniform Resource Identifier (URI): Generic Syntax
- RFC 2141 — URN Syntax
- RFC 7519 — JSON Web Token (JWT)
- RFC 7517 — JSON Web Key (JWK)
- RFC 7518 — JSON Web Algorithms (JWA)
- RFC 7515 — JSON Web Signature (JWS)
- RFC 7516 — JSON Web Encryption (JWE)
- RFC 7800 — Proof-of-Possession (PoP) Security Tokens
- RFC 8705 — OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
- RFC 8628 — OAuth 2.0 Device Authorization Grant
- RFC 7591 — OAuth 2.0 Dynamic Client Registration Protocol
- RFC 7592 — OAuth 2.0 Dynamic Client Registration Management Protocol
- RFC 8414 — Authorization Server Metadata
- RFC 9207 — OAuth 2.0 Authorization Server Issuer Identification
- RFC 6819 — OAuth 2.0 Threat Model and Security Considerations
- RFC 9700 — Best Current Practice for OAuth 2.0 Security
- RFC 8252 — OAuth 2.0 for Native Apps
- RFC 8707 — Resource Indicators for OAuth 2.0
- RFC 8693 — OAuth 2.0 Token Exchange
- RFC 9068 — JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens
- RFC 9449 — OAuth 2.0 Demonstrating Proof of Possession (DPoP)
- RFC 7662 — OAuth 2.0 Token Introspection
- RFC 7009 — OAuth 2.0 Token Revocation
- RFC 7517 — JSON Web Key (JWK)
- RFC 7518 — JSON Web Algorithms (JWA)
- RFC 7515 — JSON Web Signature (JWS)
- RFC 7516 — JSON Web Encryption (JWE)
- RFC 7519 — JSON Web Token (JWT)
- RFC 7800 — Proof-of-Possession (PoP) Security Tokens
- RFC 8705 — OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens
- RFC 8628 — OAuth 2.0 Device Authorization Grant
- RFC 7591 — OAuth 2.0 Dynamic Client Registration Protocol
- RFC 7592 — OAuth 2.0 Dynamic Client Registration Management Protocol
- RFC 8414 — Authorization Server Metadata
- RFC 9207 — OAuth 2.0 Authorization Server Issuer Identification
- RFC 6819 — OAuth 2.0 Threat Model and Security Considerations
- RFC 9700 — Best Current Practice for OAuth 2.0 Security
- RFC 8252 — OAuth 2.0 for Native Apps
- RFC 8707 — Resource Indicators for OAuth 2.0
- RFC 8693 — OAuth 2.0 Token Exchange
- RFC 9068 — JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens
- RFC 9449 — OAuth 2.0 Demonstrating Proof of Possession (DPoP)
