jmdns : service discovery for the 21st century
DESCRIPTION
TRANSCRIPT
![Page 1: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/1.jpg)
JmDNS : Service Discovery for the
21st CenturyB r i a n S l e t t e n
B o s a t s u C o n s u l t i n g , I n cb r i a n @ b o s a t s u . n e t
N o F l u f f J u s t S t u f f2 0 0 6
![Page 2: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/2.jpg)
Speaker Qualifications
12 years of software development experience
Have own software consulting company for design, mentoring, training and development
Work with Semantic Web, Aspect-Oriented Programming, Grid Computing
![Page 3: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/3.jpg)
Agenda
Where We Have Been
ZeroConf
Bonjour
JmDNS
Brainstorming
![Page 4: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/4.jpg)
Where have we been?
![Page 5: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/5.jpg)
finding things in the past
Configuration Files (ick!)
DNS (requires central authority, hostname only -- no ports)
Directory Services
AppleTalk (chatty “has been”)
JINI (Java-only, central services)
JXTA (steep learning curve)
![Page 6: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/6.jpg)
ad hoc networking too hard
Law Offices, Schools, etc. do not always have sufficient IT personnel
Home networking is even worse!
Could your grandma set up a DNS server?
LDAP at home?
What is so hard about two devices talking?
![Page 7: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/7.jpg)
Protocol Design Goals
Internet Protocol (IP) was designed to be interoperable, extensible and scalable
Propietary protocols (AppleTalk, NetBIOS/SMB, IPX) were designed around local network features and decentralized discovery
![Page 8: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/8.jpg)
AppleTalk
Ahead of its time -- focused on services, not devices
Too chatty for large networks
Not based on IP
Support persists but waned with Apple’s pre-OS X fortunes
![Page 9: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/9.jpg)
DHCP
Solves some of the problem
Dynamic address allocation
Great for clients
Client-Server sessions are easy to regenerate
Not-so-great for servers
![Page 10: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/10.jpg)
DHCP (Cont)
However, still focuses on hardware, not services (i.e. capabilities)
Users care about ‘printing’ and ‘sharing files’ and listening to ‘music’
How to publish? find? bind?
![Page 11: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/11.jpg)
JINI
Showed a lot of early promise for finding devices and services on a network
Problems:
Required Java (harder to embed on devices, at least historically)
Required Central Services
Tried to proscribe service hierarchies
![Page 12: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/12.jpg)
JXTA
Bill Joy Brain-Sibling to JINI
Multi-language/Multi-Platform
Huge Learning Curve
Although it has languished, good things might still come from the JXTA world
![Page 13: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/13.jpg)
Publish/Find/Bind
Hmmm... sounds familiar
WebServices are hoping to solve some of these problems
UDDI/WSDL/SOAP
We’ll get back to you once WS-Whatever Draft is completed
![Page 14: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/14.jpg)
ZeroConf
![Page 15: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/15.jpg)
Zeroconf History
Began out of discussions on a mailing list in 1997
Interested people got together at IETF BOFs
ZeroConf WG was formed in 1999
![Page 16: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/16.jpg)
Zeroconf Goals
Allocate addresses without a DHCP Server
Translate names and IP addresses without a DNS Server
Find services without a directory server
Reuse existing technologies, infrastructure and expertise
![Page 17: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/17.jpg)
Zeroconf Technologies
IPv4 Link-Local Addressing
Multicast DNS
DNS Service Discovery
![Page 18: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/18.jpg)
IPv4 link-local Addressing
Uses 169.254/16 prefix for “local links”
Between 169.254.1.0-169.254.254.255
Reserved by IANA for this purpose
Links are local when
Host A sends a packet that arrives unmodified (i.e. no TTL decrements)
![Page 19: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/19.jpg)
IPv4 link-local Addressing (cont)
Hosts should not use “link-local” and routable addresses at the same time
Will use an IP address from DHCP if one is available
![Page 20: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/20.jpg)
IPv4 Link-Local Process
Generate an address using a PRNG (preferably seeded w/ MAC address or something uniqueish)
ARP Probe for conflict
Claim address on success
Defend address on future conflict (ARP)
Must relinquish if conflict persists
![Page 21: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/21.jpg)
multicast dns
Designed to allow naming lookups without central server
Introduces .local domain
DNS is IETF technology so they are responsible, not ICANN
![Page 22: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/22.jpg)
Multicast DNS (Cont)
Queries are sent to 224.0.0.251 on port 5353
Uses multicast broadcasts but is well-designed to minimize chattiness
Hosts listen to changes and can cache results
To avoid pig-piling new queries, mDNS responders delay responses by random value to see if someone else will respond
![Page 23: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/23.jpg)
Query Types
One Shot
“Just give me something”
One Shot - Accumulate Results
“Stick around for multiple results”
Continuous Query
“Keep on keepin’ on”
![Page 24: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/24.jpg)
Avoiding Chattiness
Known Answer Suppression
Passive Caching/Listening
Exponential Decay Rates
TTL Expirations
New peers announce themselves
![Page 25: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/25.jpg)
Claiming the Name
Pick a name (user-specified?)
Put together a DNS A Record
Perform T_ANY query to find any other records with same name
Upon success (no conflicts), announce to the world who you are
![Page 26: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/26.jpg)
Clients and Services
Users care about relevant services not all that are available
Printer around the corner
My wife’s Excellent iTunes Music Collection
SSH into development server
![Page 27: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/27.jpg)
dns service discovery (DNS-SD)
No changes to DNS structures
Use DNS PTR queries to find SRV records that match service instance pattern
<instance>._protoname._transport.<domain>
Use TXT records for parameters
![Page 28: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/28.jpg)
DNS-SD Goals
Service Instance Enumeration
Service Name Resolution
Somewhat persistent
Here today, here tomorrow
Simple to implement
![Page 29: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/29.jpg)
DNS-SD Service Instance
Browsing Service Instances
“Leaves in a tree”
<domain>.<service>.<instance>
Name compression in responses
![Page 30: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/30.jpg)
DNS-SD Txt Records
Up to 65535 bytes
Packed representation of zero or more strings
![Page 31: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/31.jpg)
DNS-SD TXT Records (Cont)
Name=Value Pairs
Not present
No value (“Debug”)
Empty value (“Debug=”)
Non-Empty value (“Debug=verbose”)
![Page 32: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/32.jpg)
DNS-SD Query Example
_ftp._tcp.example.org
_http._tcp.example.org
_ipp._tcp.example.org
_daap._tcp.Carini.local
_tivo_servemedia._tcp.Carini.local
![Page 33: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/33.jpg)
DNS-SD Meta-Query
_services._dns-sd._udp.<domain>
Returns a list of PTR records matching service type
![Page 34: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/34.jpg)
Registered DNS-SD Services
http://www.dns-sd.org/ServiceTypes.html
MYOB Adobe Axis Video Cameras
Bootstrap Protocol Server Oracle Cluster Topology Server CodeWarrior
Elgato EyeHome ebXML Messaging/Registry FAXstf
Roxio ToastAnywhere H.323 A/V Communication Setup Protocol
SubEthaEdit
Kerberos Administration LDAP NFS
Network Time Protocol PostgreSQL Server JINI Servicees
PowerEasy POS Session Initiation Protocol Skype
SliMP3 Server Interfaces Sun Grid Engine Sybase Server
![Page 35: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/35.jpg)
Bonjour(aka Rendezvous)
(aka Opentalk)
![Page 36: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/36.jpg)
Bonjour
History
Open Source
Apple’s Use of Bonjour
Products
Tools
![Page 37: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/37.jpg)
History
AppleTalk released initially in mid-80’s
Very popular on smallish networks
Part of what made Macs ‘just work’
Apple wanted to replace functionality with protocol that fits in modern networks (i.e. IP-based)
![Page 38: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/38.jpg)
Open Source
Apple wants to encourage the use of Bonjour so it open sourced it
Includes support for OS X, Windows, Windows CE, Linux, VxWorks
http://developer.apple.com/networking/bonjour
![Page 39: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/39.jpg)
Apple’s use of Bonjour
Name Service
AppleTalk Filing Protocol (AFP) _afpovertcp._tcp
Network File System (NFS) _nfs._tcp
WebDAV File System (WEBDAV) _webdav._tcp
File Transfer Protocol (FTP) _ftp._tcp
Secure Shell (SSH) _ssh._tcp
Remote AppleEvents _eppc._tcp
Hypertext Transfer Protocol (HTTP)
_http._tcp
Trivial File Transfer Protocol (TFTP)
_tftp._udp
Remote Login (TELNET) _telnet._tcp
Remote Audio Output Protocol (RAOP)
_raop._tcp
Name Service
Line Printer Daemon (LPD/LPR) _printer._tcp
Internet Printing Protocol (IPP) _ipp._tcp
PDL Data Stream (Port 9100) _pdl-datastream._tcp
Remote I/O USB Printer Protocol _riousbprint._tcp
Digital Audio Access Protocol (DAAP)
_daap._tcp
Digital Photo Access Protocol (DPAP)
_dpap._tcp
iChat Instant Messaging Protocol _presence._tcp
Airport Base Station _airport._tcp
Xserver RAID _xserveraid._tcp
Apple Remote Desktop (ARD) _net-assistant._tcp
![Page 40: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/40.jpg)
products
TiVo, Asterisk VOIP PBX
Printers (HP, Brother, Epson, Xerox, Lexmark, Canon)
SubEthaEdit, Growl
Axis Network Cameras
Oracle, Roxio Toast Anywhere
![Page 41: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/41.jpg)
Bonjour Browser Demo
![Page 42: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/42.jpg)
JmDNS
![Page 43: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/43.jpg)
JmDNS
Open Source project started by Arthur van Hoff while at Strangeberry
Renamed from JRendezvous for legal reasons, moved to SourceForge and taken over by Rick Blair and Werner Randelshofer
Pure-Java implementation of ZeroConf
![Page 44: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/44.jpg)
JmDNS (cont)
Progress has slowed but it is relatively stable and useful
Passes Apple’s Rendezvous (Bonjour) Conformance tests
Supports service registration and discovery
![Page 45: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/45.jpg)
JmDNS Class
Main entry point to the JmDNS subsystem
import javax.jmdns.JmDNS;...JmDNS jmdns = new JmDNS();System.out.println(”Host: “ + jmdns.getHostName() );System.out.println(”Interface: “ + jmdns.getInterface() );
ServiceInfo si[] = jmdns.list(”_http._tcp.local.”);
jmdns.addServiceTypeListener( new MyServiceTypeListener() );
![Page 46: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/46.jpg)
ServiceInfo Class
Encapsulates info about a JmDNS Service
import javax.jmdns.ServiceInfo;...ServiceInfo System.out.println(”Host: “ + jmdns.getHostName() );System.out.println(”Interface: “ + jmdns.getInterface() );
ServiceInfo si[] = jmdns.list(”_http._tcp.local.”);
System.out.println(”Service 0 : “ + si[ 0 ].getServer() + “--” + si[ 0 ].getPort() + “--” + si[ 0 ].getNiceTextString() );
![Page 47: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/47.jpg)
Listener Interfaces
ServiceListener
Additions, Removals
ServiceTypeListener
New service type discovery
Both listen for ServiceEvents
![Page 48: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/48.jpg)
Basic JmDNS Examples
![Page 49: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/49.jpg)
Using a Service w/ JmDNSExample
![Page 50: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/50.jpg)
Registering a Service w/
JmDNS Example
![Page 51: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/51.jpg)
FOAFfinger Example
![Page 52: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/52.jpg)
What’s a FOAF?“The Friend of a Friend (FOAF) project is about creating a Web of machine-readable homepages describing people, the links between them and the things they create and do.”
![Page 53: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/53.jpg)
FOAF
Based on RDF and is used to express things like:
“My name is...”
“I work for...”
“I am interested in...”
“Here’s my goofy picture...”
![Page 54: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/54.jpg)
FOAF and WebPages
FOAF can help capture relationships, links, etc. for finding resources of interest, like-minded individuals, etc.
Think Orkut + Craig’s List
![Page 55: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/55.jpg)
FOAFFinger
Damian Steer put together a JmDNS-based app to find people on local links
Uses a custom application protocol: _foafcon._tcp.local.
Reuses HTTP for transport -- good idea!
![Page 56: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/56.jpg)
Brainstorming
![Page 57: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/57.jpg)
References
Cheshire, Steinberg, “Zero Configuration Networking: The Definitive Guide”, O’Reilly and Associates, 2005.
http://www.zeroconf.org
http://www.multicastdns.org
http://www.dns-sd.org
http://jmdns.sourceforge.net
http://developer.apple.com/networking/bonjour
http://www.foaf-project.org/
http://rdfweb.org/people/damian/foaffinger
http://tivohme.sourceforge.net/
http://avahi.org
![Page 58: JmDNS : Service Discovery for the 21st Century](https://reader034.vdocuments.us/reader034/viewer/2022051323/5480d287b4af9f3f5d8b4581/html5/thumbnails/58.jpg)
Examples
Examples:
http://www.bosatsu.net/talks/JmDNS-Examples.zip
Questions/Feedback: