Service Advertising Protocol
Service Advertising Protocol (SAP) — это протокол сетевого уровня, используемый в сетях Novell NetWare для автоматического оповещения о доступных сетевых службах (серверах, файловых серверах, принт-серверах, серверах приложений) и их обнаружения клиентами. Протокол работает на основе широковещательных рассылок (broadcast) и позволяет клиентам (рабочим станциям) получать актуальный список служб без необходимости ручной настройки. SAP является частью стека протоколов IPX/SPX (Internetwork Packet Exchange/Sequenced Packet Exchange), разработанного компанией Novell.
История
Протокол SAP был разработан компанией Novell в конце 1980-х годов для операционной системы NetWare версий 2.x и 3.x. В то время сети строились на основе протоколов IPX/SPX, которые были основными в среде Novell. SAP стал одним из ключевых механизмов, обеспечивающих динамическое обнаружение служб в локальных сетях (LAN). В ранних версиях NetWare (до 4.x) SAP использовался для объявления о файловых и принт-серверах, а также для поддержки работы серверов NDS (Novell Directory Services) в более поздних версиях.
С развитием сетей и переходом на TCP/IP (Transmission Control Protocol/Internet Protocol) в 1990-х годах популярность SAP снизилась. В современных сетях его функции частично заменяют протоколы SLP (Service Location Protocol), DNS (Domain Name System) и другие механизмы динамического обнаружения, однако SAP продолжает использоваться в устаревших или специализированных сетях, где сохраняется инфраструктура Novell NetWare.
Принцип работы
SAP работает на сетевом уровне модели OSI (уровень 3) и использует протокол IPX для передачи пакетов. Каждый сервер, предоставляющий службу, периодически (по умолчанию каждые 60 секунд) отправляет широковещательный пакет SAP на адрес 0xFFFFFFFF (все узлы в сети). Этот пакет содержит информацию о типе службы, её сетевом адресе (IPX-адрес), имени сервера и статусе. Клиентские станции, прослушивающие широковещательные сообщения, обновляют свою локальную таблицу доступных служб.
Типы пакетов SAP
SAP определяет несколько типов пакетов, которые используются для различных целей:
- SAP General Query (0x01) — запрос от клиента на получение списка всех служб определённого типа.
- SAP General Response (0x02) — ответ сервера на общий запрос, содержащий список служб.
- SAP Nearest Service Query (0x03) — запрос на поиск ближайшего сервера определённого типа (например, для подключения к файловому серверу).
- SAP Nearest Service Response (0x04) — ответ сервера на запрос ближайшей службы.
- SAP Service Advertisement (0x05) — периодическая широковещательная рассылка сервера о доступных службах.
- SAP Service Shutdown (0x06) — уведомление сервера о прекращении предоставления службы (например, при выключении сервера).
Идентификаторы служб
Каждая служба в SAP имеет уникальный идентификатор — 16-битное число, которое определяет её тип. Например:
- 0x0001 — файловый сервер (File Server)
- 0x0002 — сервер печати (Print Server)
- 0x0004 — сервер приложений (Application Server)
- 0x0006 — сервер времени (Time Server)
- 0x0007 — сервер каталогов (Directory Server, например NDS)
- 0x0010 — сервер баз данных (Database Server)
Всего определено несколько сотен типов служб, включая как стандартные (от Novell), так и зарезервированные для сторонних разработчиков.
Структура пакета SAP
Пакет SAP инкапсулируется в пакет IPX. Его структура включает следующие поля:
- Тип пакета (1 байт) — определяет, является ли пакет запросом или ответом (см. выше).
- Длина (2 байта) — общая длина пакета (включая заголовок IPX).
- Список служб (переменная длина) — последовательность записей, каждая из которых содержит:
- Тип службы (2 байта)
- Адрес сервера (IPX-адрес: 4 байта сетевого адреса, 6 байт MAC-адреса, 2 байта сокета)
- Имя сервера (48 байт, строковое поле, дополненное нулями)
- Статус (2 байта) — указывает, работает ли служба или выключена
- Резерв (2 байта) — не используется, заполняется нулями
Максимальный размер пакета SAP ограничен размером кадра IPX (обычно 576 байт), что позволяет передавать до 7-8 записей служб в одном пакете. Если служб больше, сервер отправляет несколько пакетов.
Применение
SAP применялся в основном в сетях Novell NetWare для автоматического обнаружения служб. Его использование было критически важным в следующих сценариях:
- Подключение клиентов к файловым серверам — рабочая станция, запрашивая список файловых серверов, получала от SAP перечень доступных серверов и могла выбрать ближайший.
- Обнаружение принт-серверов — клиенты могли найти ближайший принт-сервер для отправки заданий на печать.
- Поддержка NDS — в NetWare 4.x и выше SAP использовался для объявления о серверах, содержащих реплики каталога NDS, что позволяло клиентам находить серверы аутентификации.
- Работа в сегментированных сетях — SAP поддерживал маршрутизацию через маршрутизаторы IPX, которые могли ретранслировать SAP-пакеты между различными сегментами сети (например, с помощью протокола RIP — Routing Information Protocol для IPX).
Ограничения и недостатки
SAP имеет несколько существенных недостатков, которые ограничивают его применение в современных сетях:
- Широковещательный трафик — каждые 60 секунд каждый сервер отправляет широковещательный пакет, что в больших сетях (с сотнями серверов) приводит к значительному увеличению сетевого трафика. В сетях с медленными каналами (например, WAN) это может вызывать перегрузку.
- Отсутствие масштабируемости — SAP не поддерживает иерархическую структуру или фильтрацию служб; все серверы объявляют о себе всем узлам сети, что неэффективно в крупных корпоративных сетях.
- Зависимость от IPX — SAP работает только в сетях, использующих протокол IPX, который практически вытеснен TCP/IP. В современных сетях на основе TCP/IP SAP не применим без эмуляции или туннелирования.
- Безопасность — SAP не предусматривает аутентификацию или шифрование; любой узел в сети может отправлять ложные SAP-объявления, что может привести к атакам типа «человек посередине» или подмене сервера.
Сравнение с альтернативами
В современных сетях функции SAP выполняют другие протоколы:
- SLP (Service Location Protocol) — протокол для динамического обнаружения служб в сетях TCP/IP, поддерживает масштабирование, аутентификацию и фильтрацию.
- DNS SRV-записи — используются для обнаружения служб (например, LDAP, Kerberos) в доменных средах Windows и Unix.
- mDNS (Multicast DNS) — применяется в локальных сетях для обнаружения служб без централизованного сервера (например, в сетях Apple Bonjour).
- DHCP (Dynamic Host Configuration Protocol) — может предоставлять клиентам адреса серверов (например, DNS-серверов) без широковещательных рассылок.
В отличие от SAP, эти протоколы не требуют широковещательных рассылок и более эффективны в больших сетях.
Интересные факты
- SAP был разработан в то время, когда сети были небольшими (до 100-200 узлов), и широковещательный трафик не был проблемой. С ростом сетей его недостатки стали очевидными.
- В некоторых реализациях Novell NetWare SAP-пакеты могли использоваться для атак типа «отказ в обслуживании» (DoS) — злоумышленник мог отправлять большое количество ложных SAP-объявлений, перегружая сеть.
- Протокол SAP поддерживает не только службы Novell, но и сторонние приложения, которые могут регистрировать свои собственные типы служб (например, для игр или баз данных).
- В операционной системе Windows NT 4.0 и более ранних версиях SAP использовался для поддержки клиентов NetWare через службу Gateway Service for NetWare (GSNW).
Источники
- Novell NetWare Documentation (1990–1995): «Service Advertising Protocol (SAP) Specification».
- RFC 1795: «OSI Internet Management: Management Information Base for the OSI Internet Protocol Suite» (раздел, описывающий SAP).
- «NetWare 3.12: Concepts» — Novell, Inc., 1993.
- «IPX/SPX Protocol Suite» — техническая документация Novell, 1994.
- «Сети Novell NetWare: архитектура и протоколы» — учебное пособие, 1996.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →