SSDP erklärt: So finden Smart-TV und Mediaserver einander

SSDP steht für Simple Service Discovery Protocol. Es ist der Discovery-Teil von UPnP und hilft Geräten und Steuerprogrammen, sich in einem lokalen Netzwerk gegenseitig zu finden. Typische Beispiele sind Smart-TVs, Mediaserver, Netzwerklautsprecher und andere UPnP-Geräte.

Wie funktioniert SSDP?

Für IPv4 nutzt SSDP normalerweise UDP-Port 1900 und die Multicast-Adresse 239.255.255.250. Geräte können ihre Anwesenheit per SSDP ankündigen; ein sogenannter Control Point kann seinerseits aktiv nach passenden Geräten oder Diensten suchen.

Eine typische Suchanfrage sieht vereinfacht so aus:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 2
ST: ssdp:all

Antwortet ein Gerät auf die Suche, enthält die SSDP-Nachricht unter anderem eine LOCATION-URL. Über diese URL kann der Client anschließend eine XML-Gerätebeschreibung per HTTP abrufen. Darin stehen zum Beispiel Gerätetyp, Friendly Name und die angebotenen UPnP-Dienste.

SSDP ist nicht das eigentliche Streaming-Protokoll

Ein häufiger Irrtum ist, SSDP selbst würde Audio- oder Videodaten übertragen. SSDP dient nur zum Entdecken von Geräten und Diensten. Die eigentliche Steuerung und Medienübertragung erfolgt anschließend über die zu den jeweiligen UPnP-/DLNA-Diensten gehörenden Protokolle und URLs.

SSDP abschalten – ja oder nein?

Die alte Empfehlung, SSDP grundsätzlich zu deaktivieren, ist zu pauschal. Wenn du UPnP-/DLNA-Funktionen im lokalen Netz nutzt, kann das Abschalten die automatische Geräteerkennung verhindern. Sinnvoll ist aber, SSDP/UPnP nicht unnötig aus nicht vertrauenswürdigen Netzen oder aus dem Internet erreichbar zu machen. Für die Fehlersuche kann man den Windows-Dienst SSDP-Suche und die Firewall-Regeln prüfen.

Die UPnP Device Architecture verwendet für IPv4 weiterhin 239.255.255.250:1900. Eine aktive Suche wird typischerweise mit M-SEARCH gesendet; Geräte können sich außerdem mit SSDP-Nachrichten selbst im Netz ankündigen.

Wenn Smart-TV und Mediaserver sich nicht finden

  • Prüfe, ob beide Geräte tatsächlich im selben lokalen Netz bzw. VLAN liegen.
  • SSDP-Multicast muss zwischen den beteiligten Geräten erreichbar sein. Router, VLAN-Grenzen, WLAN-Client-Isolation oder Firewall-Regeln können 239.255.255.250:1900/UDP blockieren.
  • Bei Windows-Systemen sollten die für Netzwerk-/Geräteerkennung benötigten Dienste und Firewallregeln nicht deaktiviert sein.
  • Mit Wireshark lässt sich nach ssdp filtern. So siehst du, ob ein Client M-SEARCH sendet und ob Antworten zurückkommen.
  • Eine SSDP-Antwort verweist über LOCATION auf die Gerätebeschreibung. Ist diese URL vom Client nicht erreichbar, kann die Discovery sichtbar sein, obwohl die eigentliche UPnP-Kommunikation anschließend scheitert.

SSDP sollte normalerweise auf das vertrauenswürdige lokale Netz begrenzt bleiben. Eine unnötige Freigabe aus dem Internet ist weder für Smart-TV-Erkennung noch für einen lokalen Mediaserver erforderlich.

Beispiel: Ein Smart-TV sucht seinen Mediaserver

Der Client sendet einen Multicast an 239.255.255.250

Der Server antwortet darauf mit der IP-Adresse, die den Serverdienst hostet. Weitere Kommunikation erfolgt im HTTP und XML Style. <?xml version="1.0" encoding="utf-8"?> <root xmlns:dlna="urn:schemas-dlna-org:device-1-0" xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType> <friendlyName>PC1 : TVersity Media Server</friendlyName> <manufacturer>TVersity</manufacturer> <manufacturerURL>http://www.tversity.com</manufacturerURL> <modelDescription>UPnP/AV 1.0 Compliant Media Server from TVersity</modelDescription> <modelName>TVersity Media Server</modelName> <modelNumber>1.9/2.3/0/</modelNumber> <modelURL>http://www.tversity.com</modelURL> <serialNumber/> <UPC/> <UDN>uuid:f32cda46-8f2a-f149-b6b6-e3165266b825</UDN> <iconList> <icon> <mimetype>image/png</mimetype> <width>48</width> <height>48</height> <depth>24</depth> <url>/images/logo48.png</url> </icon> <icon> <mimetype>image/png</mimetype> <width>32</width> <height>32</height> <depth>24</depth> <url>/images/logo32.png</url> </icon> </iconList> <presentationURL>/</presentationURL> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType> <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId> <SCPDURL>/UPnP_AV_ContentDirectory_1.0.xml</SCPDURL> <controlURL>/upnp/control/content_directory</controlURL> <eventSubURL>/upnp/event/content_directory</eventSubURL> </service> <service> <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType> <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId> <SCPDURL>/UPnP_AV_ConnectionManager_1.0.xml</SCPDURL> <controlURL>/upnp/control/connection_manager</controlURL> <eventSubURL>/upnp/event/connection_manager</eventSubURL> </service> </serviceList> </device> </root>