{"id":1207,"date":"2016-09-28T23:14:56","date_gmt":"2016-09-29T05:14:56","guid":{"rendered":"http:\/\/jaredrobinson.com\/blog\/?p=1207"},"modified":"2016-09-28T23:14:56","modified_gmt":"2016-09-29T05:14:56","slug":"upnp-ssdp-mdns-llmnr-etc-on-the-home-network","status":"publish","type":"post","link":"https:\/\/jaredrobinson.com\/blog\/upnp-ssdp-mdns-llmnr-etc-on-the-home-network\/","title":{"rendered":"UPnP, SSDP, mDNS, LLMNR, etc.  on the home network"},"content":{"rendered":"<p>Sometime in the distant past, I was aware of Universal Plug and Play (UPnP), but I didn&#8217;t know much about it. It&#8217;s a technology that allows devices in the home to talk to each other without prior configuration &#8212; it allows auto-discovery and configuration of printers and media servers, among other things.<\/p>\n<p>The auto-discovery happens via SSDP (Simple Service Discovery Protocol). A device joins a network and announces &#8220;I&#8217;m here!&#8221;, and then other device can choose to respond. Even if the device gets a different IP address, it can still be uniquely identified by its unique identifier (UUID).<\/p>\n<p>Here&#8217;s more information about UPnP and related protocols that run on the home network:<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Zero-configuration_networking\">https:\/\/en.wikipedia.org\/wiki\/Zero-configuration_networking<\/a><\/p>\n<p>UPnP:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.upnp-hacks.org\/upnp.html\">http:\/\/www.upnp-hacks.org\/upnp.html<\/a><\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/18363833\/how-can-i-list-upnp-server-renderer-in-command-line-console-mode-on-linux\">http:\/\/stackoverflow.com\/questions\/18363833\/how-can-i-list-upnp-server-renderer-in-command-line-console-mode-on-linux<\/a><\/li>\n<\/ul>\n<p>UPnP protocol (no authentication):<\/p>\n<ul>\n<li>Discovery (SSDP)<\/li>\n<li>Description &#8211; HTTPU and HTTPMU<\/li>\n<li>Control<\/li>\n<li>Event notification<\/li>\n<li>Presentation<\/li>\n<\/ul>\n<p>UPnP has well defined device profiles for:<\/p>\n<ul>\n<li>Audio &amp; Video &#8212; DLNA, and <\/li>\n<li>\n<p>Routers:<\/p>\n<ul>\n<li>\n<p>Internet Gateway Device Protocol<\/p>\n<\/li>\n<li>\n<p>Retrieve external IP addr<\/p>\n<\/li>\n<li>Enumerate port mappings<\/li>\n<li>Add\/Remove port mappings &amp; port forwarding: firewall-hole-punching<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Devices Profile for Web Services (DPWS)<\/p>\n<\/li>\n<\/ul>\n<p>Other protocols that help on the home network:<\/p>\n<ul>\n<li>LLMNR: Link-local Multicast Name Resolution &#8212; implemented by Microsoft in Windows.  <\/li>\n<li>mDNS (multicast DNS) runs on port 5353. Uses .local hostnames.<\/li>\n<li>DNS-SD: DNS service discovery. Can use DNS or mDNS.<\/li>\n<\/ul>\n<p>Apple&#8217;s Bonjour uses mDNS and DNS-SD. Linux&#8217;s Avahi uses IPv4LL, mDNS, and DNS-SD. Linux&#8217;s systemd has &#8220;systemd-resolve&#8221;, a command-linetool to resolve hostnames on a network via DNS, mDNS, and LMMNR.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sometime in the distant past, I was aware of Universal Plug and Play (UPnP), but I didn&#8217;t know much about it. It&#8217;s a technology that allows devices in the home to talk to each other without prior configuration &#8212; it allows auto-discovery and configuration of printers and media servers, among other things. The auto-discovery happens &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/jaredrobinson.com\/blog\/upnp-ssdp-mdns-llmnr-etc-on-the-home-network\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;UPnP, SSDP, mDNS, LLMNR, etc.  on the home network&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,30],"tags":[],"class_list":["post-1207","post","type-post","status-publish","format-standard","hentry","category-tech","category-tools"],"_links":{"self":[{"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/posts\/1207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/comments?post=1207"}],"version-history":[{"count":3,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/posts\/1207\/revisions"}],"predecessor-version":[{"id":1210,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/posts\/1207\/revisions\/1210"}],"wp:attachment":[{"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/media?parent=1207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/categories?post=1207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jaredrobinson.com\/blog\/wp-json\/wp\/v2\/tags?post=1207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}