Перейти к основному содержимому

UPnP

Протокол UPnP: спецификация, применение и примеры

UPnP (Universal Plug and Play) – это набор сетевых протоколов, который позволяет устройствам автоматически обнаруживать друг друга и взаимодействовать в локальной сети без необходимости сложной настройки. Этот стандарт был создан форумом UPnP, возглавляемым Microsoft, Intel и другими крупными компаниями, чтобы упростить интеграцию различных устройств в домашней сети.

Основные компоненты UPnP:

  1. Discovery (Обнаружение): Используется для поиска устройств в сети. Это реализуется через протокол SSDP (Simple Service Discovery Protocol), основанный на HTTPU (HTTP over UDP).

    Устройства отправляют сообщения M-SEARCH для обнаружения других устройств, а те отвечают сообщениями NOTIFY, содержащими информацию об устройстве и предоставляемых сервисах.

  2. Description (Описание): После обнаружения устройства клиент может запросить XML-документ, содержащий описание устройства и сервисов, которые оно предоставляет. Описание включает такие данные, как модель, производитель, URL для управления устройством и другие метаданные.

  3. Control (Управление): Позволяет управлять устройствами посредством SOAP-запросов (Simple Object Access Protocol). Клиент отправляет команды устройству, которое выполняет их и возвращает результат.

  4. Eventing (Уведомления): Обеспечивает возможность подписки на события от устройства. Устройство уведомляет клиента о произошедших изменениях состояния через HTTP-сообщения.

Применение UPnP в мультимедийных системах

Протокол UPnP особенно полезен при работе с медиасерверами и клиентами, такими как DLNA (Digital Living Network Alliance). Мультимедийный сервер может использовать UPnP для автоматического обнаружения клиентов, способных воспроизводить контент, а клиенты могут находить доступные медиа-ресурсы в сети.

Пример использования UPnP в системе домашнего кинотеатра:

  • Медиаплееры, такие как Smart TV или NAS-хранилище, регистрируются в сети как медиа-серверы.
  • Пользовательский смартфон или планшет может обнаружить эти устройства и получить доступ к контенту через приложение, поддерживающее UPnP.
  • Приложение отправляет команду воспроизведения контента на выбранный медиаплеер, используя SOAP-запросы.

Примеры реализации на Python

Рассмотрим пример простого клиента UPnP на Python, который находит все устройства в сети и выводит их описания.

import socket
import xml.etree.ElementTree as ET

# Создание M-SEARCH запроса
ssdp_request = (
'M-SEARCH * HTTP/1.1\r\n'
'HOST: 239.255.255.250:1900\r\n'
'MAN: "ssdp:discover"\r\n'
'MX: 10\r\n'
'ST: ssdp:all\r\n' # Поиск всех устройств
'\r\n'
)

# Отправка запроса через сокет
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(10)
sock.sendto(ssdp_request.encode(), ('239.255.255.250', 1900))

try:
while True:
data, addr = sock.recvfrom(1024)
headers = data.decode().split('\r\n')

for header in headers:
if header.startswith('LOCATION:'):
location = header.split(': ', 1)[1]

# Получаем описание устройства
description_xml = requests.get(location).content
root = ET.fromstring(description_xml)

print(f"Device found at {location}:")
for child in root.iter():
if child.tag == 'friendlyName':
print(f"Friendly Name: {child.text}")
elif child.tag == 'modelNumber':
print(f"Model Number: {child.text}")
except socket.timeout:
pass

Этот код создает и отправляет M-SEARCH запрос всем устройствам в сети, ожидая ответа. Когда устройство отвечает, программа получает его описание и выводит ключевые параметры, такие как имя и номер модели.

Сравнение с WSDiscovery

Таблица 1. Отличия между UPnP и WS-Discovery
КритерийUPnPWS-Discovery
ОснованиеРазработан консорциумом UPnP ForumРазработана компанией Microsoft
ОриентацияБытовая электроника, домашние сетиКорпоративные сети, системы на основе SOA
ПротоколыSSDP + SOAPSOAP поверх HTTP
Структура сообщенийПростые HTTP-подобные сообщенияСложные SOAP-сообщения
Управление состояниемПоддерживается механизм событийМеханизм событий отсутствует
БезопасностьИзначально не предусмотрена, возможны расширения (например, UPnP-sec)Поддерживаются механизмы безопасности, такие как SSL/TLS и WS-Security
СовместимостьШироко поддерживается бытовыми устройствами, используется в DLNAЧаще применяется в корпоративных приложениях и системах SOA

Эта таблица помогает быстро сравнить ключевые аспекты двух технологий и понять, какая из них больше подходит для конкретных нужд.