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

Subnetwork Access Protocol

Subnetwork Access Protocol (SNAP) — это протокол канального уровня, определённый в стандарте IEEE 802.2, который расширяет возможности протокола Logical Link Control (LLC) для передачи данных, идентифицируемых по протоколам, не входящим в семейство IEEE 802, в частности, по протоколам TCP/IP. SNAP обеспечивает механизм инкапсуляции, позволяющий однозначно указывать тип протокола сетевого уровня (например, IP, ARP) в кадрах Ethernet, Token Ring, FDDI и других сетях, использующих стандарт IEEE 802.

История и предпосылки создания

Протокол SNAP был разработан в конце 1980-х годов как часть стандарта IEEE 802.2, который определял подуровень управления логическим каналом (LLC) для сетей IEEE 802. Основная проблема, которую решал SNAP, заключалась в ограниченности поля DSAP (Destination Service Access Point) и SSAP (Source Service Access Point) в заголовке LLC. Эти поля имели длину 1 байт, что позволяло идентифицировать только 128 различных протоколов (с учётом бита управления). Для протоколов, таких как IP (Internet Protocol) и ARP (Address Resolution Protocol), которые не были частью семейства IEEE 802, не хватало уникальных значений SAP.

Стандарт IEEE 802.2 ввёл специальное зарезервированное значение SAP — 0xAA (для DSAP и SSAP), которое указывало на то, что за заголовком LLC следует дополнительный заголовок SNAP. Этот заголовок содержал 5 байт: 3 байта для идентификатора организации (OUI) и 2 байта для идентификатора протокола (PID). Таким образом, SNAP расширил адресное пространство для идентификации протоколов, позволяя использовать, например, коды EtherType, определённые для Ethernet II.

Структура и формат заголовка SNAP

Заголовок SNAP всегда следует за заголовком LLC, который в случае использования SNAP имеет формат LLC Type 1 (ненадёжная дейтаграммная передача) с полями DSAP = 0xAA, SSAP = 0xAA и управляющим полем (Control), обычно равным 0x03 (UI — Unnumbered Information). Полный заголовок LLC+SNAP имеет следующий вид:

ПолеРазмер (байты)Описание
DSAP1Destination Service Access Point (всегда 0xAA)
SSAP1Source Service Access Point (всегда 0xAA)
Control1Управляющее поле (обычно 0x03 для UI)
OUI3Organizationally Unique Identifier — идентификатор организации, присвоенный IEEE
PID2Protocol Identifier — идентификатор протокола

OUI (Organizationally Unique Identifier) — это 24-битный идентификатор, присваиваемый IEEE производителям оборудования и организациям. Для протоколов TCP/IP, как правило, используется OUI, равный 0x000000, что означает, что PID интерпретируется как код EtherType (например, 0x0800 для IPv4, 0x0806 для ARP). Если OUI равен 0x000000, то PID является прямым кодом EtherType. Если OUI указывает на другую организацию, то PID интерпретируется в соответствии с правилами этой организации.

PID (Protocol Identifier) — 16-битное поле, которое идентифицирует конкретный протокол сетевого уровня. В случае OUI = 0x000000, PID совпадает с кодом EtherType из стандарта Ethernet II.

Применение и совместимость

SNAP используется в сетях, где требуется передача данных протоколов, не имеющих собственных SAP-кодов в рамках LLC. Наиболее распространённое применение — инкапсуляция пакетов IPv4, IPv6, ARP, а также протоколов AppleTalk, IPX (Internetwork Packet Exchange) и других в кадры IEEE 802.3 (Ethernet с LLC) и IEEE 802.5 (Token Ring).

В современных сетях Ethernet, работающих в режиме Ethernet II (также известном как DIX Ethernet), заголовок SNAP не используется, так как в этом формате сразу после MAC-адресов следует 2-байтовое поле EtherType. Однако в сетях, где используется формат кадра IEEE 802.3 (с полем длины вместо EtherType), для передачи TCP/IP обязательно применяется SNAP. Это характерно для старых реализаций, а также для некоторых промышленных и встроенных систем.

SNAP также применяется в протоколах PPP (Point-to-Point Protocol) и ATM (Asynchronous Transfer Mode) при инкапсуляции пакетов в формате LLC/SNAP. В PPP, например, SNAP используется для передачи протоколов, не имеющих собственного кода протокола PPP.

Критика и ограничения

Основным недостатком SNAP является дополнительный накладной расход (overhead) — 5 байт на каждый кадр, что снижает эффективную пропускную способность канала, особенно при передаче коротких пакетов. В современных высокоскоростных сетях это незначительно, но в сетях с низкой пропускной способностью (например, в некоторых беспроводных средах) может быть критичным.

Кроме того, SNAP усложняет обработку кадров на сетевых устройствах, так как требует анализа заголовка LLC и последующего заголовка SNAP, в то время как Ethernet II обрабатывается проще. В результате большинство производителей сетевого оборудования и операционных систем по умолчанию используют формат Ethernet II для TCP/IP, а SNAP применяется только в специфических случаях, когда требуется совместимость со старыми стандартами или передача протоколов, не поддерживаемых иначе.

Примеры использования

  • IPv4 over IEEE 802.3: Кадр содержит заголовок LLC (3 байта) с DSAP/SSAP = 0xAA, затем заголовок SNAP (5 байт) с OUI = 0x000000 и PID = 0x0800 (IPv4).
  • ARP over Token Ring: В сетях Token Ring (IEEE 802.5) для передачи ARP используется SNAP с OUI = 0x000000 и PID = 0x0806.
  • AppleTalk Phase 2: Протокол AppleTalk использовал SNAP для идентификации своих протоколов (например, AARP — AppleTalk Address Resolution Protocol) с собственным OUI (0x000000 для AppleTalk? — обычно OUI 0x080007 для Apple).
  • Cisco Discovery Protocol (CDP): CDP использует SNAP с OUI = 0x00000C (Cisco) и PID = 0x2000.

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

  • Значение SAP 0xAA было выбрано как «пустое» (null) значение, чтобы не конфликтовать с уже зарезервированными SAP для других протоколов.
  • В некоторых реализациях SNAP используется для передачи многоадресных (multicast) и широковещательных (broadcast) кадров, когда требуется идентификация протокола.
  • Стандарт IEEE 802.2, включающий SNAP, был пересмотрен в 1998 году и остаётся действующим, хотя его применение в современных сетях Ethernet существенно сократилось.

Источники

  • IEEE 802.2: Logical Link Control (LLC) — стандарт, определяющий подуровень LLC и протокол SNAP.
  • RFC 1042: A Standard for the Transmission of IP Datagrams over IEEE 802 Networks — описывает использование SNAP для инкапсуляции IP.
  • RFC 1390: Transmission of IP and ARP over FDDI Networks — применение SNAP в FDDI.
  • «Computer Networks» by Andrew S. Tanenbaum — раздел, посвящённый IEEE 802 и LLC/SNAP.
  • Документация Cisco Systems по протоколу CDP и инкапсуляции SNAP.

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

На главную BFOmetr →