Открыть сервис

Дейтаграмма

Дейтаграмма — это единица данных, передаваемая по компьютерной сети с использованием дейтаграммного способа коммутации, при котором каждый пакет данных маршрутизируется независимо от других, без предварительного установления логического соединения и без гарантии доставки, сохранения порядка следования или целостности данных. Дейтаграммы являются основным механизмом передачи в протоколах, работающих без установления соединения (connectionless), наиболее известным из которых является протокол UDP (User Datagram Protocol).

История и происхождение термина

Термин «дейтаграмма» (от англ. datagram, образованного от data — данные и telegram — телеграмма) был введён в 1970-х годах в рамках разработки протоколов ARPANET — предшественницы современного Интернета. Изначально в документации ARPANET использовался термин «пакет» (packet), но для различения пакетов, передаваемых в системах с установлением соединения (виртуальные каналы) и без него, потребовалось новое обозначение. В 1974 году в работе «A Protocol for Packet Network Intercommunication» Винтон Серф и Роберт Кан описали концепцию дейтаграммы как автономного блока данных, содержащего всю необходимую информацию для маршрутизации от отправителя к получателю. Впоследствии термин был закреплён в стандартах стека протоколов TCP/IP.

Структура дейтаграммы

Дейтаграмма состоит из двух основных частей: заголовка (header) и поля данных (payload). Структура заголовка зависит от используемого протокола. Для протокола IPv4 (Internet Protocol version 4) заголовок дейтаграммы включает следующие поля:

  • Версия (Version) — 4 бита, указывает версию IP (для IPv4 значение 4).
  • Длина заголовка (IHL — Internet Header Length) — 4 бита, длина заголовка в 32-битных словах (обычно 5, что соответствует 20 байтам без опций).
  • Тип обслуживания (Type of Service, ToS) — 8 бит, определяет приоритет и требования к качеству обслуживания (QoS).
  • Общая длина (Total Length) — 16 бит, длина всей дейтаграммы (заголовок + данные) в байтах (максимум 65535 байт).
  • Идентификатор (Identification) — 16 бит, уникальный номер для сборки фрагментов дейтаграммы при фрагментации.
  • Флаги (Flags) — 3 бита, управляют фрагментацией (например, бит DF — Don't Fragment — запрещает фрагментацию).
  • Смещение фрагмента (Fragment Offset) — 13 бит, указывает положение фрагмента в исходной дейтаграмме.
  • Время жизни (Time to Live, TTL) — 8 бит, максимальное количество маршрутизаторов (хопов), через которые может пройти дейтаграмма, предотвращает бесконечную циркуляцию.
  • Протокол (Protocol) — 8 бит, идентифицирует протокол транспортного уровня (например, 6 для TCP, 17 для UDP).
  • Контрольная сумма заголовка (Header Checksum) — 16 бит, проверяет целостность только заголовка.
  • IP-адрес источника (Source IP Address) — 32 бита.
  • IP-адрес назначения (Destination IP Address) — 32 бита.
  • Опции (Options) — переменная длина (необязательно), используется для дополнительных функций (например, запись маршрута).

В протоколе UDP заголовок дейтаграммы значительно проще:

  • Порт источника (Source Port) — 16 бит.
  • Порт назначения (Destination Port) — 16 бит.
  • Длина (Length) — 16 бит, длина всей UDP-дейтаграммы (заголовок + данные).
  • Контрольная сумма (Checksum) — 16 бит, опционально проверяет целостность данных и заголовка.

Принцип работы и характеристики

Дейтаграммная передача основана на принципе «best-effort delivery» (доставка с максимально возможным усилием, но без гарантий). Каждая дейтаграмма обрабатывается независимо: маршрутизаторы принимают решение о её пересылке на основе текущего состояния сети и информации в таблице маршрутизации. Это приводит к следующим ключевым характеристикам:

  • Негарантированная доставка: дейтаграмма может быть потеряна из-за перегрузки сети, ошибок на канальном уровне или сбоев оборудования. Протоколы, работающие с дейтаграммами (например, UDP), не уведомляют отправителя о потере и не инициируют повторную передачу.
  • Отсутствие порядка следования: дейтаграммы могут прибывать к получателю в порядке, отличном от порядка отправки, так как каждая из них может следовать разным маршрутом.
  • Отсутствие контроля перегрузки: отправитель не получает обратной связи о состоянии сети, что может приводить к перегрузкам, если отправитель генерирует данные быстрее, чем сеть способна их обработать.
  • Независимость: каждая дейтаграмма содержит полную адресную информацию, поэтому нет необходимости поддерживать состояние соединения на промежуточных узлах.
  • Фрагментация: если дейтаграмма превышает максимальный размер блока данных (MTU) на каком-либо участке сети, она может быть разбита на фрагменты, которые собираются только на стороне получателя.

Отличие от виртуальных каналов

Дейтаграммный способ коммутации противопоставляется технологии виртуальных каналов (virtual circuits), используемой, например, в протоколах TCP (Transmission Control Protocol) и X.25. В виртуальных каналах перед передачей данных устанавливается логическое соединение, в рамках которого гарантируется порядок доставки, контроль ошибок и управление потоком. В отличие от этого, дейтаграммы не требуют предварительной настройки, что снижает задержки на установление соединения, но увеличивает риск потери данных и нарушения порядка. Выбор между этими подходами зависит от требований приложения: для потокового видео или онлайн-игр допустимы потери, но критична низкая задержка (используется UDP и дейтаграммы), а для передачи файлов или веб-страниц необходима надёжность (используется TCP с виртуальными каналами).

Применение

Дейтаграммы широко используются в протоколах и приложениях, где скорость и низкая задержка важнее надёжности:

  • Протокол UDP: основа для DNS (Domain Name System), DHCP (Dynamic Host Configuration Protocol), SNMP (Simple Network Management Protocol), RIP (Routing Information Protocol).
  • Потоковое мультимедиа: видеоконференции, IP-телефония (VoIP), стриминг аудио и видео (например, протокол RTP — Real-time Transport Protocol, работающий поверх UDP).
  • Онлайн-игры: многие многопользовательские игры используют UDP для минимизации задержек.
  • Протоколы реального времени: приложения, требующие быстрой передачи данных, где потеря отдельных пакетов менее критична, чем задержка.
  • Туннелирование и VPN: протоколы IPsec, OpenVPN, WireGuard могут использовать дейтаграммы для инкапсуляции трафика.
  • Протокол ICMP: используется для диагностики сети (например, команды ping и traceroute) и передачи сообщений об ошибках, также работает на основе дейтаграмм.

Ограничения и недостатки

Основные ограничения дейтаграммного подхода связаны с отсутствием гарантий:

  • Потеря данных: при перегрузках сети дейтаграммы отбрасываются без уведомления.
  • Дублирование: возможна доставка нескольких копий одной дейтаграммы из-за ошибок маршрутизации.
  • Отсутствие упорядочивания: приложения, требующие последовательности данных, должны реализовывать буферизацию и сортировку на прикладном уровне.
  • Уязвимость к атакам: дейтаграммы могут быть подделаны (spoofing) или использованы для атак типа «отказ в обслуживании» (DoS), так как проверка подлинности источника не встроена в базовый протокол (например, IP).
  • Размер данных: максимальный размер дейтаграммы ограничен MTU сети (обычно 1500 байт для Ethernet), что требует фрагментации для больших объёмов данных.

Интересные факты

  • В протоколе IPv6 (Internet Protocol version 6) термин «дейтаграмма» официально заменён на «пакет» (packet), хотя концептуально механизм остался тем же — без установления соединения.
  • Максимальный размер дейтаграммы в IPv4 (65535 байт) теоретически позволяет передавать до 64 килобайт данных в одном пакете, но на практике ограничен MTU сети.
  • Протокол UDP, использующий дейтаграммы, не имеет механизма контроля перегрузки, что в 1990-х годах привело к проблемам с «перегрузочным коллапсом» в Интернете, что стимулировало разработку алгоритмов управления перегрузкой для TCP.
  • В некоторых протоколах, таких как QUIC (Quick UDP Internet Connections), разработанный компанией Google, дейтаграммы UDP используются для реализации надёжной передачи с низкой задержкой, что сочетает преимущества обоих подходов.

Источники

  • RFC 791 — Internet Protocol (DARPA Internet Program Protocol Specification), 1981.
  • RFC 768 — User Datagram Protocol, 1980.
  • RFC 8200 — Internet Protocol, Version 6 (IPv6) Specification, 2017.
  • Tanenbaum, A. S., Wetherall, D. J. (2011). Computer Networks (5th ed.). Pearson Education.
  • Kurose, J. F., Ross, K. W. (2017). Computer Networking: A Top-Down Approach (7th ed.). Pearson.
  • Comer, D. E. (2014). Internetworking with TCP/IP, Volume 1: Principles, Protocols, and Architecture (6th ed.). Pearson.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →