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

Wireshark SSDP M-SEARCH vom Smart-TV zum Multicast 239.255.255.250

Der Client sendet einen Multicast an 239.255.255.250

Wireshark SSDP-Antwort des Mediaservers mit Geräteinformationen

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>