One document matched: draft-cai-ssdp-v1-02.txt
Differences from draft-cai-ssdp-v1-01.txt
Internet Engineering Task Force Yaron Y. Goland
INTERNET DRAFT Ting Cai
Paul Leach
Ye Gu
Microsoft Corporation
Shivaun Albright
Hewlett-Packard Company
June 21, 1999
Expires December 1999
Simple Service Discovery Protocol/1.0
<draft-cai-ssdp-v1-02.txt>
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet- Drafts as
reference material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
The Simple Service Discovery Protocol (SSDP) provides a mechanism
where by network clients, with little or no static configuration,
can discover network services. SSDP accomplishes this by providing
for multicast discovery support as well as server based notification
and discovery routing.
1. Introduction
With the growing number of small peer-to-peer TCP/IP networks, such
as home or small office networks, users need a way to discover
resources in a network easily, quickly, dynamically, and without any
a priori knowledge. This document provides a discovery protocol
that meets this user requirement.
Goland et al. [Page 1]
INTERNET-DRAFT SSDP/V2 June 21, 1999
The proposed protocol is called the Simple Service Discovery
Protocol (SSDP).
SSDP provides support for services declaring their presence.
SSDP provides support for those seeking services to search for the
desired services.
SSDP provides support for subscription arbiters as defined in [GENA]
with limited SEARCH method support so allow clients to discover
services and receive service notifications.
2. Terminology
Client - A HTTP resource that makes use of a service.
Service - A HTTP resource that provides a service used by clients.
SSDP Proxy - A SSDP service that routes notifications from services
to clients, maintains a store reflecting the current state of
services in the system and allows clients to search that store in
order to ascertain information about the current state of the
system.
Service Type - A URI that identifies the nature of a service.
Service types can be very broad, for example, all SSDP compliant
services to very narrow, a particular batch of a particular model of
a particular product that comes in green. Service type URIs are
treated as opaque identifiers by the SSDP protocol.
Unique Service Name (USN) - An identifier that is unique across all
services for all time. It is used to uniquely identify a particular
service in order to allow services of identical service type to be
differentiated.
In addition, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
RFC 2119 [RFC2119].
3. SSDP Resources
3.1. Services
3.1.1. Overview
A non-SSDP proxy aware service is a very simple resource. When it
wakes up it sends a httpmu ssdp:alive NOTIFY message to the SSDP
reserved multicast channel and then it waits.
If it should receive a httpmu ssdp:discover SEARCH request over the
SSDP reserved multicast channel then it will check the ST header. If
Goland et al. [Page 2]
INTERNET-DRAFT SSDP/V2 June 21, 1999
the value in the ST header matches its service type then it will
send a httpmu response to the requestor.
If it should receive a httpmu ssdp:notproxyaware SEARCH request over
the SSDP reserved multicast channel then it will send a httpmu
response. The response is the exact same response it would have sent
for a matching ssdp:discover SEARCH request.
If the service sends out caching information, which it should, then
it will also send out a ssdp:alive NOTIFY request to the SSDP
reserved multicast channel before the expiration given in its
previous SEARCH responses and NOTIFY requests.
Finally, if the service is able, it will send out a ssdp:byebye
NOTIFY request to the SSDP reserved multicast channel before it goes
off-line.
3.1.2. Requirements
SSDP compliant services MUST have a USN and a service type URI.
SSDP compliant services SHOULD monitor the SSDP reserved multicast
channel for SEARCH requests.
SSDP compliant services that monitor the SSDP reserved multicast
channel MUST support ssdp:discovery and ssdp:notproxyaware SEARCH
request extensions sent over the SSDP reserved multicast channel.
SSDP compliant services SHOULD send out a ssdp:alive NOTIFY method
when they first join a new network.
SSDP services MUST NOT send out more than MAXNOTE NOTIFY requests a
minute to the SSDP reserved multicast channel.
[Ed. Note: The number 5 is totally arbitrary. But we need a very
hard limitation to keep the channel from getting overloaded. Anyone
who needs more than 5 notify requests a minute needs to be a proxy
aware service.]
3.2. Proxy Aware Services
3.2.1. Overview
A proxy aware service meets all the requirements for a non-proxy
aware service plus requires support for http in addition to httpmu,
is required to perform proxy detection, and support
ssdp:proxyawareservices SEARCHs.
See section .4.1 for information on proxy discovery.
If proxy detection fails then the SSDP aware services will act like
a non-proxy aware service until it hears a ssdp:alive NOTIFY request
Goland et al. [Page 3]
INTERNET-DRAFT SSDP/V2 June 21, 1999
from a proxy over the SSDP reserved multicast channel. In which case
it will act as specified below.
If there is a SSDP proxy in the network then the service will send
it a ssdp:alive NOTIFY request to provide the SSDP proxy with
information about itself.
Any further NOTIFY methods the service has to send out will be sent
directly to the SSDP proxy using http.
The service will continue to monitor the SSDP reserved multicast
channel in order to hear the proxy's regular announcements that it
is still functional. The server may optionally answer any SEARCH
requests it receives over the SSDP reserved multicast channel.
If the proxy should fail to send out its regularly ssdp:alive NOTIFY
request then the service will automatically fall back to using the
SSDP reserved multicast channel.
3.2.2. Requirements
Services which intend to send out a significant number of
notifications MUST support SSDP proxies as specified in section .0 as
well as all rules for non-proxy aware SSDP services.
A proxy aware service MUST follow all the rules for a non-proxy
aware service with the exception that they MUST support
ssdp:proxyawareservice SEARCH requests over the SSDP reserved
multicast channel rather than ssdp:notproxyaware SEARCH requests.
If a SSDP proxy is discovered then the service MUST send all NOTIFY
requests to the SSDP proxy using http. When a proxy is available the
service MAY continue to answer ssdp:discover requests sent over the
SSDP reserved multicast channel and MUST continue to answer
ssdp:proxyawareservice SEARCH requests sent over the SSDP reserved
multicast channel.
3.3. Clients
3.3.1. Overview
Upon waking up a client's first task is likely to be initializing
its cache in order to track services it is interested in.
The first step in initializing the cache is to find out if there is
a proxy. Therefore the client will perform proxy discovery as
specified in section .4.1.
The next step is to send out ssdp:discovery SEARCH requests for each
of the service types the client is interested in. If there is a
proxy then the client will use http to send the requests to the
Goland et al. [Page 4]
INTERNET-DRAFT SSDP/V2 June 21, 1999
proxy. If there is no proxy then the client will use httpmu to send
the requests to the SSDP reserved multicast channel.
Each response that has caching information, such as an expires
header or a cache-control: max-age will be put into the client's
cache.
The client will expect that services that sent out caching
information will send out ssdp:alive NOTIFY requests before the
cached information is set to expire. ssdp:alive NOTIFY requests
contain the same information as ssdp:discover SEARCH responses.
Therefore the client can use the ssdp:alive NOTIFY requests to keep
the cache up to date.
If there is a proxy then the client will get its notify requests
through the proxy. That is, the proxy will open a http connection to
the client and send it notifications. In order to let the proxy know
what notifications it is interested in the client will use the
[GENA] SUBSCRIBE method setting the NT header value equal to the
service types the client is interested in. The client will record
the timeout value returned in the SUBSCRIBE response so that it can
make sure to re-subscribe before its subscription expires.
When using a proxy the client will monitor the SSDP reserved
multicast channel in order to hear the SSDP proxy's ssdp:alive
NOTIFY requests. The client will ignore any other NOTIFY requests it
hears over the SSDP reserved multicast channel when it is using a
proxy.
If there isn't a proxy then the client will listen to the SSDP
reserved multicast channel in order to hear notifications from any
services that it may be interested in.
Proxy or not, the client can keep the cache up to date just by
initializing it with ssdp:discovery SEARCH requests and then
receiving appropriate ssdp:alive NOTIFY requests.
If the proxy should fail then the client will switch over to the
SSDP reserved multicast channel until it hears a ssdp:alive NOTIFY
request from a proxy. At that point it will repeat the cycle of
subscribing to the proxy.
3.3.2. Requirements
Clients MUST provide for SSDP proxy support as specified in section .
4.1.
If a SSDP proxy is present then the client SHOULD use the SUBSCRIBE
method as defined in [GENA] to subscribe to the proxy for all
service types the client wishes to receive notifications for. The NT
header of the SUBSCRIBE method is to be set to the service types the
client is interested in.
Goland et al. [Page 5]
INTERNET-DRAFT SSDP/V2 June 21, 1999
If a SSDP proxy is present then the client SHOULD send all
ssdp:discover, ssdp:notproxyaware and ssdp:proxyawareservice SEARCH
requests to the proxy using http rather than to the SSDP reserved
multicast channel using httpmu.
When a client is using a SSDP proxy it SHOULD NOT listen to any
NOTIFY requests it receives over the SSDP reserved multicast channel
other than those sent by the SSDP proxy. This prohibition is meant
to allow the proxy to tailor the information a client receives based
on the client's particular needs.
3.3.3. SUBSCRIBE example
SUBSCRIBE dude HTTP/1.1
Host: iamthedude:203
NT: <upnp:toaster>
Callback: <http://blah/bar:923>
Scope: <http://iamthedude/dude:203>
Timeout: Infinite
HTTP/1.1 200 O.K.
Subscription-ID: uuid:kj9d4fae-7dec-11d0-a765-00a0c91e6bf6
Timeout: Second-604800
3.4. ssdp:aproxy Service
3.4.1. Overview
When a SSDP proxy first wakes up or if it has lost a proxy election
then it is an un-elected proxy of service type ssdp:aproxy.
The ssdp:aproxy service's first action will be to perform a proxy
election. If the ssdp:aproxy service doesn't win the proxy election
then it will remain a ssdp:aproxy.
Other than performing proxy election a ssdp:aproxy is just like any
other proxy aware service, including the need to send out a
ssdp:alive NOTIFY request when it wakes up and answering
ssdp:discover and ssdp:proxyawareservices SEARCH requests.
3.4.2. Requirements
SSDP proxies are SSDP services of type ssdp:aproxy and MUST comply
with all requirements for SSDP proxy aware services.
All SSDP proxies MUST support the proxy election algorithm as
specified in .4.3.
Goland et al. [Page 6]
INTERNET-DRAFT SSDP/V2 June 21, 1999
3.5. ssdp:proxy Service
3.5.1. Overview
If a ssdp:aproxy wins the proxy election then it still remains a
ssdp:aproxy service. However it also takes on a new service type,
ssdp:proxy.
The main job of a ssdp:proxy service is to cache information
regarding the state of services in its assigned network. It does
this by sending out a ssdp:notproxyaware SEARCH request in order to
obtain information about all the non-proxy aware services. Then it
sends out a ssdp:alive NOTIFY request of notification type
ssdp:proxy. This will cause all the SSDP proxy aware services to
automatically send NOTIFY requests to the proxy informing the proxy
of their state.
Services that are not proxy aware will continue to send NOTIFY
requests to the SSDP reserved multicast channel. The ssdp:proxy is
responsible for listening to those NOTIFY requests and recording the
information as specified in section .4.2.
Services which are SSDP proxy aware will start to send all of their
NOTIFY requests directly to the proxy using http. As with services
that aren't SSDP proxy aware, the ssdp:proxy will be responsible for
recording the information the NOTIFY requests provide.
In addition to caching NOTIFY information the ssdp:proxy is also a
subscription arbiter, as defined in [GENA]. This means that the
ssdp:proxy will accept SUBSCRIBE requests from clients and will
route NOTIFY requests that it receives accordingly. When the proxy
announces itself with a ssdp:alive request all clients on the
network will automatically send their SUBSCRIBE requests to the
proxy.
The ssdp:proxy provides very basic SEARCH services, specifically it
supports ssdp:discover, ssdp:notproxyaware and
ssdp:proxyawareservice over http. Unlike a normal service the proxy
is able to answer these SEARCH requests with information for
services other than itself. This information is taken from the cache
it built up from the NOTIFY requests it has received. By mapping the
notification type of the NOTIFY request to service types the
ssdp:proxy is able to answer SEARCH requests for particular service
types. Unlike SEARCH requests over the SSDP multicast channel, which
only have one answer, the ssdp:proxy will often need to return
multiple responses to a single search request. As such some sort of
compound format is needed. The property search result format first
specified in [WEBDAV] and later adopted for SEARCH use in [DASL] is
used for this purpose.
Goland et al. [Page 7]
INTERNET-DRAFT SSDP/V2 June 21, 1999
3.5.2. Requirements
A ssdp:proxy service MUST also be a ssdp:aproxy service and follow
all the requirements for ssdp:aproxy services.
If the ssdp:aproxy service wins the proxy election then it MUST take
on the service type ssdp:proxy and all the requirements thereof as
specified in this document.
ssdp:proxy services are proxy aware services and MUST follow all the
requirements thereof. Note, however, that a ssdp:proxy does not have
to send out a proxy discovery request because the ssdp:proxy knows
through out of band means who the proxy is, i.e. itself.
Upon becoming a ssdp:proxy service type the ssdp:proxy MUST perform
a ssdp:notproxyaware SEARCH on the SSDP reserved multicast channel
as well as announce itself through a ssdp:alive NOTIFY request on
the SSDP reserved multicast channel.
All ssdp:alive NOTIFY requests of service type ssdp:proxy MUST
include a cache-control: max-age directive and a Location and/or AL
header with at least one http URL.
ssdp:proxy services MUST NOT provide answers to SEARCH requests
received through the SSDP reserved multicast channel with
information about any service but themselves.
All ssdp:proxy services MUST comply with all requirements for
subscription arbiters as defined in [GENA].
ssdp:proxy services MUST record all service information gained from
NOTIFY requests. If the ssdp:proxy does not have sufficient
resources to support the current load of services then it MUST send
out a ssdp:byebye announcement and cease to act as a ssdp:proxy. Any
SEARCH requests of type ssdp:discover, ssdp:notproxyaware or
ssdp:proxyawareservice which are sent to the location in the
ssdp:alive NOTIFY request MUST be answered based on the complete
dataset collected from the NOTIFY requests in addition to any extra
service information the ssdp:proxy may have available.
ssdp:proxy services MUST be able to map the value in the NT header
on a SUBSCRIBE request to the ST header value in both ssdp:discover
SEARCH and ssdp:alive/ssdp:byebye NOTIFY requests.
4. SSDP Algorithms
4.1. SSDP Proxy Support
Resources that support SSDP proxies MAY be configured using some
unspecified mechanism with the address of the SSDP proxy they are to
use. Resources that support SSDP proxies SHOULD be configured to
Goland et al. [Page 8]
INTERNET-DRAFT SSDP/V2 June 21, 1999
perform SSDP proxy discovery if the SSDP proxy they are configured
to use is not available.
If a resource that supports SSDP proxies has not been configured
with a SSDP proxy to support then it MUST perform discovery on
service type ssdp:proxy in order to determine if a SSDP proxy is
available.
Resources that support SSDP proxies MAY begin to make requests
directly to the reserved multicast channel after the first SSDP
proxy discovery request has failed without completing the full UDP
HTTP request cycle. This is often necessary because SSDP proxy
discovery can take some time and users are notoriously impatient.
Any time a SSDP proxy supporting resource receives a notification
that a SSDP proxy is available the resource MUST switch over to
using the SSDP proxy.
Resources that support SSDP proxies MUST monitor the reserved
multicast channel in order to listen for the SSDP proxy's
notifications. Resources that support SSDP proxies MUST support both
ssdp:alive and ssdp:byebye notification subtypes when sent by SSDP
proxies. Resources that support SSDP proxies MAY ignore any other
notification subtypes sent by the SSDP proxy.
If the time between required ssdp:alive notifications should pass
without receiving a notification then the resource MUST assume that
the proxy is dead and begin using the SSDP reserved multicast
channel.
Once a proxy has been declared dead the resource MUST assume that
the proxy has lost all subscription information for the resource. So
if the proxy comes back to life the resource will still have to
resubscribe.
The ssdp:alive notifications sent out by the SSDP proxy will include
all the addresses that the SSDP proxy can be accessed through. If
the current address the SSDP proxy supporting resource is using
doesn't match any of the listed addresses then the resource MUST
change to one of the listed addresses. So long as the USN in the
ssdp:alive notification is the same as the USN of the SSDP proxy the
resource is currently using there is no need to resubscribe.
If the USN of a ssdp:alive NOTIFY request from a ssdp:proxy service
is not the same as the USN of the ssdp:proxy the resource is
currently using then the resource MUST assume that the new proxy has
no knowledge of their subscriptions, notifications, etc.
Goland et al. [Page 9]
INTERNET-DRAFT SSDP/V2 June 21, 1999
4.2. Notification Caching
ssdp:alive NOTIFY requests contain at minimum a NT header, a NTS
header, a USN header, a Location and/or AL header and potentially a
HTTP cache control directive such as expires or cache-control: max-
age.
The NTS header, set to ssdp:alive, lets the receiver know that this
is a notification from a SSDP service.
The NT header specifies the type of service.
The USN header specifies the USN for the service.
The Location and/or AL header specifies locations at which the
service can be found.
Using the NT, USN and Location/AL values it is possible to create a
cache entry for the service keyed to its USN. The entry will
automatically be purged when the HTTP caching directive directs. If
no cache lifetime information is provided then the NOTIFY
information is to be discarded. Note, however, the ssdp:proxy
services will still be required to route the NOTIFY method as
specified for a subscription arbiter by [GENA].
Services keep caches which contain information about them up to date
by regularly sending out ssdp:alive NOTIFY requests before the
expiration of their previous ssdp:alive NOTIFY request.
Many services are best served by having extremely long expiration
periods. For example, a printer or scanner that is unlikely to be
moved very often will probably want to have an expiration period of
a week or more.
4.3. Proxy Election
4.3.1. Proxy Election Algorithm
The proxy election algorithm is based on the use of the proxy number
to determine which ssdp:aproxy should be the ssdp:proxy for the
local network. Proxy numbers are decimal numbers between 0.0 and 1.
The number 1 MUST NOT be configured by default into any device. It
is reserved for use by administrators to force a particular
ssdp:aproxy to always win election.
In the case of a tie the USN will break the tie. USNs are compared
by treating them as strings of bytes and comparing each byte in
network byte order. The first USN that has a larger byte value than
the other wins the comparison.
Proxy elections are carried out by sending out a SSDPC httpmu method
to the SSDP reserved multicast channel. As soon as the method is
Goland et al. [Page 10]
INTERNET-DRAFT SSDP/V2 June 21, 1999
sent a timer is set to PROXYWAIT seconds. If no counter challenge is
made before the timer expires then the challenger has won and MUST
send out a ssdp:alive NOTIFY request declaring themselves ssdp:proxy
with all the responsibilities that entails.
If a SSDPC request is received over the SSDP reserved multicast
channel before the time expires then the timer must be reset.
When a SSDPC request is received the receiver MUST compare the PN
value in the SSDPC request to its own. If the PN in the request is
higher then the receiver has lost the challenge. If the PN in the
request is lower then the receiver's then the receiver MUST send out
another challenge. The reason being that the only way that a
challenge with a lower PN could have been received is if there is
another challenge underway which could indicate network connectivity
problems. To be the safe side another set of challenges are issued.
Note that the re-broadcast could cause a cascade of new challenges
in the worst case. Finally, if the two PNs are equal then the USNs
are to be compared. If the challenger's USN is larger as previously
defined then the receiver has lost the challenge. If the USN is
smaller then the challenge should be repeated for the same reasons
as previously stated. If the two USNs are the same panic is probably
called for, as this should be statistically impossible.
On the off chance that the previous was somehow comprehensible the
following pseudo-code is offered to completely confuse the reader
and hopefully directly contradict the previous text.
Challenge(PN, USN) {
If (Challenge is not already underway)
Send a SSDPC method with PN & USN headers;
Proxy = Self;
Set Timer to ProxyWait Seconds;
While (Timer Isn't Up & Not Received a Message) {
If Received ssdp:alive NOTIFY from ssdp:aproxy {
If (Message.PN > PN) Proxy = Message;
If (Message.PN == PN) {
If (Message.USN > USN) {
Send a SSDPC method with PN & USN headers;
Proxy = Message;
}
ElseIf (Message.USN < USN)
Send a SSDPC method with PN & USN headers;
ElseIf (Message.USN == USN) PANIC;
}
If (message.PN < PN)
Send a SSDPC method with PN & USN headers;
Set Timer to ProxyWait Seconds;
Continue;
}
If (Time is Up) {
If (Proxy == Self) Declare Self Proxy;
Goland et al. [Page 11]
INTERNET-DRAFT SSDP/V2 June 21, 1999
Exit;
}
}
}
4.3.2. When Proxy Elections Occur
When a ssdp:aproxy service first connects to a new network, since it
is by definition a proxy aware service, it will perform proxy
discovery. If no response is received within the retry/time out
interval defined by [HTTPUDP] then the ssdp:aproxy MUST issue a
challenge.
Anytime a ssdp:aproxy receives a ssdp:alive NOTIFY request from a
ssdp:proxy with a PN/USN lower than its own, a challenge MUST be
issued.
Anytime a ssdp:proxy receives a ssdp:alive NOTIFY request from
another ssdp:proxy, indicating a network communication failure or a
buggy proxy, regardless of the PN/USN pair the receiving ssdp:proxy
MUST issue a challenge. This will hopefully allow buggy proxies to
recover and/or increase the chance of communicating over the
apparent network problem.
Anytime a ssdp:aproxy service, remember that ssdp:proxy services are
also ssdp:aproxy, receives a SSDPC request then the ssdp:aproxy MUST
enter challenge mode if it isn't already in it.
ssdp:proxy resources who loose an election MUST NOT issue a
ssdp:byebye NOTIFY request. This will cause needless proxy detection
requests by proxy aware services and clients. The proxy election
winner will issue a ssdp:alive NOTIFY request that will cause all of
the loosing proxy's clients and services to switch over.
5. SSDPC httpmu Method
The SSDPC httpmu method is sent to the SSDP reserved multicast
channel and MUST have two headers, PN and USN. There is no response
to the SSDPC method.
5.1. Example
SSDPC * HTTP/1.1
Host: SSDPreservedmulticastchannel
PN: 0.001
USN: someunique:idscheme3
Goland et al. [Page 12]
INTERNET-DRAFT SSDP/V2 June 21, 1999
6. SSDP SEARCH Extensions
6.1. ssdp:discover SEARCH Extension
The purpose of the ssdp:discover SEARCH method is to find out about
services available on a network.
The ssdp:discover SEARCH method is a SEARCH method which has been
extended using the mechanism defined in [MAN].
The ssdp:discover SEARCH methods MUST have a ST header. They MAY
have a body but the body MAY be ignored if not understood.
6.1.1. ssdp:discover over httpmu
Only services whose service type matches the value in the ST header
of a ssdp:discover SEARCH method MAY respond to a ssdp:discover
SEARCH method received of httpmu. All other resources MUST NOT
respond.
Services MUST only respond for themselves to ssdp:discover SEARCH
methods received over httpmu.
The response to a ssdp:discover SEARCH method received over the SSDP
reserved multicast channel is to be sent to the IP address and port
of the requestor. The response MUST include a ST header set to the
same service type as the request and a USN header containing the
service's USN. The response SHOULD include a Location and/or AL
header.
6.1.1.1. Example
M-SEARCH * HTTP/1.1
Host: reservedSSDPmulticastaddress
Man: ssdp:discovery
ST: ge:fridge
MM: 0
MX: 3
HTTP/1.1 200 OK
ST: upnp:blender
USN: uuid:abcdefgh-7dec-11d0-a765-00a0c91e6bf6
AL: <blender:ixl><http://foo/bar>
6.1.2. ssdp:discover over http
Services MAY respond for other services to ssdp:discover SEARCH
methods received over http. For example, this is how ssdp:proxies
behave.
Goland et al. [Page 13]
INTERNET-DRAFT SSDP/V2 June 21, 1999
The response to the ssdp:discover SEARCH method when sent over http
MUST comply with the response to the SEARCH method as specified in
[DASL].
The location provided for each service response MUST be the
service's USN. Each response MUST include the servicetype property
and SHOULD include the location property.
Support for ssdp:discover does not imply nor require support for
[WEBDAV] or [DASL].
Implementer's Note: DASL supports a very extensible response format
so it would be expected that additional responses of different types
might be mixed in with the service responses. As such it is
important to check the servicetype property for each response to
ensure that it is the service type that was requested.
6.1.2.1. Example
M-SEARCH /I/AM HTTP/1.1
Host: http://the/proxy
Man: ssdp:discovery
ST: upnp:blender
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: xxx
<?xml version="1.0"?>
<D:multistatus xmlns:D="DAV:" xmlns:S="ssdp:">
<D:response>
<D:href>uuid:kj9d4fae-7dec-11d0-a765-00a0c91e6bf6</D:href>
<D:propstat>
<D:prop>
<S:location><D:href>http://foo/bar</D:href></S:location>
<S:servicetype>
<D:href>upnp:blender</D:href>
</S:servicetype>
</D:prop>
</D:propstat>
</D:response>
<D:response>
<D:href>uuid:abcdefgh-7dec-11d0-a765-00a0c91e6bf6</D:href>
<D:propstat>
<D:prop>
<S:location>
<D:href>blender:ixl</D:href>
<D:href>http://foo/bar</D:href>
</S:location>
<S:servicetype>
<D:href>ge:fridge</D:href>
</S:servicetype>
Goland et al. [Page 14]
INTERNET-DRAFT SSDP/V2 June 21, 1999
</D:prop>
</D:propstat>
</D:response>
</D:multistatus>
6.2. ssdp:notproxyaware SEARCH Extension
The ssdp:notproxyaware SEARCH acts in the same manner as
ssdp:discover except that the ST header is not submitted and only
non-proxy aware SSDP services match the query.
6.3. ssdp:proxyawareservices SEARCH Extension
[Ed. Note: This was originally introduced for use with the proxy
free shut off algorithm which has since been taken out of the spec
and moved to the appendix. Its use is still mandated as I suspect it
is still useful. If this suspicion turns out to be erroneous then it
will be removed.]
The ssdp:proxyawareservices SEARCH acts in the same manner as
ssdp:discover except that the ST header is not submitted and only
proxy aware SSDP services match the query.
7. GENA Notification Subtypes
7.1.1. ssdp:alive
ssdp:alive notification subtype MUST NOT be used for notifications
from non-SSDP compliant services.
The NT header of a ssdp:alive NOTIFY method MUST be set to the
service type of the SSDP compliant service sending the request.
ssdp:alive notifications MUST include a USN header set to the value
of the service's USN.
ssdp:alive notifications SHOULD contain a Location and/or AL header.
If there is no DNS support available on the local network then at
least one location SHOULD be provided using an IP address for the
host.
ssdp:alive notifications SHOULD contain a cache-control: max-age
directive. Please refer to section .4.2 for details on caching
ssdp:alive notifications based on cache directives.
ssdp:alive notifications sent by ssdp:proxy services MUST include
the PN header.
Goland et al. [Page 15]
INTERNET-DRAFT SSDP/V2 June 21, 1999
7.1.1.1. Example
NOTIFY * HTTP/1.1
Host: reservedSSDPmulticastaddress
NT: blenderassociation:blender
NTS: ssdp:alive
USN: someunique:idscheme3
AL: <blender:ixl><http://foo/bar>
Cache-Control: max-age = 7393
This is a notification sent to the reserved SSDP multicast channel
announcing that a service of service type blenderassociation:blender
is alive and available for use at the locations blender:ixl and
http://foo/bar. Because the NOTIFY request was sent using httpmu
there is no response.
7.1.2. ssdp:byebye
ssdp:byebye notifications allow arbitrary services to inform clients
that the service is about to go off-line. Clients and SSDP Proxies
SHOULD remove the service's entry from their cache upon receiving a
ssdp:byebye notification.
ssdp:byebye notifications MUST set the NT header to their service
type and MUST include a USN header.
7.1.2.1. Example
NOTIFY /proxy/location HTTP/1.1
Host: ssdpproxy
NT: blenderassociation:blender
NTS: ssdp:byebye
USN: someunique:idscheme3
HTTP/1.1 200 O.K.
In this case the blender is SSDP proxy aware and has switched over
to using a SSDP proxy. Because the message was sent using http there
is a response.
8. SSDP properties
The following properties are returned in SSDP enhance SEARCH
responses sent across http.
8.1. servicetype Property
Name: servicetype
Namespace: SSDP:
Purpose: Specifies the service type of the associated service.
<!ELEMENT servicetype href>
Goland et al. [Page 16]
INTERNET-DRAFT SSDP/V2 June 21, 1999
The HREF XML element is defined in [WEBDAV].
8.2. location Property
Name: location
Namespace: SSDP:
Purpose: Specifies the location(s) at which the service can be
contacted.
<!ELEMENT location (href)*>
9. HTTP Headers
9.1. USN Header
USN = "USN" ":" AbsoluteURI; defined in section 3.2.1 of [RFC2068]
Contains a USN.
9.2. ST Header
ST = "ST" ":" AbsoluteURI
Contains a service type.
9.3. PN Header
PN = "PN" ":" ("1" | "0." 1*digit)
Contains a proxy number.
10. SSDP Reserved Multicast Channel
The SSDP reserved multicast channel will be a locally scoped
multicast address as defined in [RFC2365]. The actual address will
be issued by IANA.
11. Security Considerations
TBD.
12. IANA Considerations
To ensure correct interoperation based on this specification, IANA
must reserve the URI namespace starting with "ssdp:" for use by this
specification, its revisions, and related SSDP specifications.
Goland et al. [Page 17]
INTERNET-DRAFT SSDP/V2 June 21, 1999
13. Appendix - Constants
MAXPROX - Maximum number of SSDP proxy aware services allowed on a
proxy free network before SSDP services must be disabled.
PROXYWAIT - Number of seconds to wait before assuming one has won a
challenge.
14. Appendix - Proxy Free Shut Off
[Ed. Note: This is a really wacky algorithm that doesn't even work
all that well that was introduced to deal with concerns about
overload from SSDP proxy aware services on large networks with no
SSDP proxy support. I have removed it from the spec until we have a
better idea of the need for this algorithm. To make it really work
we would have to change it to have one of the services be elected as
a "shut off leader" who would then answer search requests for the
number of services on the network. This is just ugly. Let's hope we
don't need it.]
In certain circumstances a large number of SSDP proxy aware services
may be present on a network. However the network itself was never
meant to run SSDP.
For example, an administrator may purchase a large number of
printers that support many different access mechanisms including
SSDP. The administrator never intended for the printers to use SSDP
and certainly doesn't want to be bothered with have to explicitly
configure them to not use SSDP.
In such a case the desired behavior is for the SSDP proxy aware
services to de-active their SSDP support rather than flood the
network with large numbers of notifications.
The issue is of less relevance to non-SSDP proxy aware services as
these services are required to produce very few notifications and so
do not pose much of a threat to the network.
In order to detect when this situation has come to pass SSDP proxy
aware services that perform proxy discovery but fail to find a proxy
MUST perform a SEARCH for resources of type ssdp:proxyawareservice.
If the speed of the network divided by the number of responses
exceeds MAXPROX then the service MUST enter the wait state. In the
wait state the service MUST disable all SSDP functionality except
listening for a ssdp:alive notification from a SSDP proxy and
answering ssdp:proxyawareservice SEARCH requests sent across the
SSDP reserved multicast channel.
If there is a SSDP proxy but it subsequently dies without
replacement then services SHOULD wait for the amount of time
specified in the cache-control: max-age directive before assuming
Goland et al. [Page 18]
INTERNET-DRAFT SSDP/V2 June 21, 1999
that no proxy is coming back and executing the proxy free shut off
algorithm from the beginning.
[Ed. Note: There is a built in assumption here that non-proxy aware
services will have such a low rate of NOTIFY activity that it would
be almost impossible to put enough of them on a single local
multicast loop to cause a traffic overload. Such assumptions are
what administrative nightmares are made of so we may want to also
put in detection of non-proxy aware services and assign them an even
higher threshold, but a threshold none the less, to determine cut
off. The other possibility is to have a bandwidth based cut off, but
this requires knowing what the bandwidth of the underlying link is.]
15. Acknowledgements
This document is the result of enormous effort by a large number of
people including but not limited to: Munil Shah, Holly Knight, Peter
Ford, Mike Zintel, Pradeep Bahl, Paul Moore, Babak Jahromi, Brandon
Watson, Michel Guittet, Todd Fisher, and Craig White.
16. References
[GENA] J. Cohen, S. Aggarwal, Y. Y. Goland. General Event
Notification Architecture Base: Client to Arbiter. Internet Draft -
a work in progress, draft-cohen-gena-client-00.txt.
[MAN] H. Nielsen, P. Leach, S. Lawrence. Mandatory Extensions in
HTTP. Internet Draft - a work in progress, draft-frystyk-http-
mandatory-00.txt.
[HTTPUDP] Y. Y. Goland. Multicast and Unicast UDP HTTP Requests.
Internet Draft - a work in progress, draft-goland-http-udp-00.txt.
[RFC2365] D. Meyer. Administratively Scoped IP Multicast. RFC
2365, July 1998.
[RFC2396] T. Berners-Lee, R. Fielding and L. Masinter. Uniform
Resource Identifiers (URI): Generic Syntax. RFC 2396, August 1998.
[RFC2119] S. Bradner. Key words for use in RFCs to Indicate
Requirement Levels. RFC 2119, March 1997.
[RFC2068] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, and T.
Berners-Lee. Hypertext Transfer Protocol -- HTTP/1.1. RFC 2068,
January 1997.
[RFC2518] Y. Goland, E. Whitehead, A. Faizi, S. Carter, and D.
Jensen. HTTP Extensions for Distributed Authoring û WEBDAV. RFC
2518, February 1999.
Goland et al. [Page 19]
INTERNET-DRAFT SSDP/V2 June 21, 1999
17. Author's Addresses
Yaron Y. Goland, Ting Cai, Paul Leach, Ye Gu
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052
Email: {yarong, tingcai, paulle}@microsoft.com
Shivaun Albright
Hewlett-Packard Company
Roseville, CA
Email: SHIVAUN_ALBRIGHT@HP-Roseville-om2.om.hp.com
This document will expire in December 1999.
Goland et al. [Page 20]
| PAFTECH AB 2003-2026 | 2026-04-23 15:05:54 |