Введение

Процесс обнаружения устройств в локальной сети

Протокол обнаружения служб (SLP, srvloc) — это протокол, позволяющий компьютерам и другим устройствам находить службы в локальной сети без предварительной настройки. SLP разработан для масштабирования от небольших, не управляемых сетей до крупных корпоративных сетей и определен в RFC 2608 и RFC 3224 как документ, соответствующий стандартам.

Сетевой протокол

SLP – это пакетный протокол. Большинство пакетов передаются с использованием UDP, но TCP также может использоваться для передачи более длинных пакетов. Из-за потенциальной ненадежности UDP, SLP повторяет все многоадресные (multicast) сообщения несколько раз с увеличивающимися интервалами, пока не будет получен ответ. Все устройства должны прослушивать порт 427 для UDP-пакетов, а SA и DA также должны прослушивать TCP на том же порту. Многоадресная рассылка широко используется SLP, особенно устройствами, присоединяющимися к сети и нуждающимися в поиске других устройств. Принцип работы SLP существенно различается в зависимости от наличия в сети агента каталогов (DA). Когда клиент впервые присоединяется к сети, он отправляет многоадресный запрос на поиск DA в сети. Если ни один DA не отвечает, он предполагает, что находится в сети без DA. Добавление DA возможно и позже, поскольку они периодически рассылают пакет "heartbeat" (сигнал присутствия) с заданным интервалом, который принимается всеми остальными устройствами. Когда SA обнаруживает DA, он обязан зарегистрировать все свои сервисы в DA. При исчезновении сервиса, SA должен уведомить DA и отменить его регистрацию. Для отправки запроса в сети без DA, UA отправляет многоадресный UDP-пакет, содержащий запрос. Все SA, у которых есть соответствующие сервисы, отправляют UDP-ответ UA. Если ответ слишком велик для одного UDP-пакета, пакет помечается как "overflown" (переполненный), и UA может отправить запрос непосредственно SA с использованием TCP, который может передавать пакеты любого размера. Для отправки запроса в сети с DA, UA отправляет пакет запроса DA, используя UDP или TCP. Поскольку каждый SA должен зарегистрировать все свои сервисы в DA, DA может полностью выполнить запрос и просто отправить результат обратно UA.

Безопасность

SLP содержит механизм безопасности, основанный на криптографии с открытым ключом, позволяющий подписывать объявления об услугах. На практике он используется редко: публичные ключи каждого поставщика услуг должны быть установлены на каждом UA. Это требование противоречит первоначальной цели SLP – возможности находить службы без предварительной настройки. Защита только самих услуг недостаточна. URL-адреса служб содержат имена хостов или IP-адреса, и в локальной сети практически невозможно предотвратить спуфинг IP-адресов или DNS. Таким образом, одной лишь гарантии подлинности URL-адреса недостаточно, если любое устройство может отвечать по этому адресу. Поскольку адреса могут быть подделаны, подлинность устройства в любом случае должна быть подтверждена на другом уровне, например, на уровне прикладного протокола (например, с помощью SSL) или на сетевом уровне (IPsec). Дополнительная реализация этого в SLP не обеспечивает существенного повышения безопасности.

Усыновление

SLP часто используется для поиска принтеров и поддерживается системами печати, такими как CUPS. SLP часто встречается в принтерах с поддержкой LAN, что позволяет обнаруживать их сразу после включения. Некоторые клиентские драйверы печати могут использовать SLP для обнаружения принтеров. ACN, протокол, разрабатываемый для управления развлечениями, использует SLP для поиска различных устройств, таких как диммеры и интеллектуальные светильники. Классические Mac OS и Mac OS X до версии 10.1 использовали SLP для поиска сетевых папок и других служб. Однако, начиная с Mac OS X (версия 10.2 и выше), используются функции Zeroconf. Клиенты протокола Netware Core Protocol (NCP) в среде, работающей только по IP, используют SLP для поиска серверов Novell NetWare и Novell Open Enterprise Server (OES). SUSE Linux поддерживает SLP для различных служб, начиная с версии 9.1. Sun Microsystems поддерживает SLPv1 и SLPv2, включая функциональность SA, UA и DA. Distributed Management Task Force стандартизировала обнаружение служб WBEM через SLP. Storage Networking Industry Association предписала использование SLP для обнаружения служб в спецификации Storage Management Initiative.