UPnP
Протокол UPnP: спецификация, применение и примеры
UPnP (Universal Plug and Play) – это набор сетевых протоколов, который позволяет устройствам автоматически обнаруживать друг друга и взаимодействовать в локальной сети без необходимости сложной настройки. Этот стандарт был создан форумом UPnP, возглавляемым Microsoft, Intel и другими крупными компаниями, чтобы упростить интеграцию различных устройств в домашней сети.
Основные компоненты UPnP:
-
Discovery (Обнаружение): Используется для поиска устройств в сети. Это реализуется через протокол SSDP (Simple Service Discovery Protocol), основанный на HTTPU (HTTP over UDP).
Устройства отправляют сообщения
M-SEARCHдля обнаружения других устройств, а те отвечают сообщениямиNOTIFY, содержащими информацию об устройстве и предоставляемых сервисах. -
Description (Описание): После обнаружения устройства клиент может запросить XML-документ, содержащий описание устройства и сервисов, которые оно предоставляет. Описание включает такие данные, как модель, производитель, URL для управления устройством и другие метаданные.
-
Control (Управление): Позволяет управлять устройствами посредством SOAP-запросов (Simple Object Access Protocol). Клиент отправляет команды устройству, которое выполняет их и возвращает результат.
-
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
| Критерий | UPnP | WS-Discovery |
|---|---|---|
| Основание | Разработан консорциумом UPnP Forum | Разработана компанией Microsoft |
| Ориентация | Бытовая электроника, домашние сети | Корпоративные сети, системы на основе SOA |
| Протоколы | SSDP + SOAP | SOAP поверх HTTP |
| Структура сообщений | Простые HTTP-подобные сообщения | Сложные SOAP-сообщения |
| Управление состоянием | Поддерживается механизм событий | Механизм событий отсутствует |
| Безопасность | Изначально не предусмотрена, возможны расширения (например, UPnP-sec) | Поддерживаются механизмы безопасности, такие как SSL/TLS и WS-Security |
| Совместимость | Широко поддерживается бытовыми устройствами, используется в DLNA | Чаще применяется в корпоративных приложениях и системах SOA |
Эта таблица помогает быстро сравнить ключевые аспекты двух технологий и понять, какая из них больше подходит для конкретных нужд.