summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3259.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3259.txt')
-rw-r--r--doc/rfc/rfc3259.txt2187
1 files changed, 2187 insertions, 0 deletions
diff --git a/doc/rfc/rfc3259.txt b/doc/rfc/rfc3259.txt
new file mode 100644
index 0000000..41c6414
--- /dev/null
+++ b/doc/rfc/rfc3259.txt
@@ -0,0 +1,2187 @@
+
+
+
+
+
+
+Network Working Group J. Ott
+Request for Comments: 3259 TZI, Universitaet Bremen
+Category: Informational C. Perkins
+ USC Information Sciences Institute
+ D. Kutscher
+ TZI, Universitaet Bremen
+ April 2002
+
+
+ A Message Bus for Local Coordination
+
+Status of this Memo
+
+ This memo provides information for the Internet community. It does
+ not specify an Internet standard of any kind. Distribution of this
+ memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+Abstract
+
+ The local Message Bus (Mbus) is a light-weight message-oriented
+ coordination protocol for group communication between application
+ components. The Mbus provides automatic location of communication
+ peers, subject based addressing, reliable message transfer and
+ different types of communication schemes. The protocol is layered on
+ top of IP multicast and is specified for IPv4 and IPv6. The IP
+ multicast scope is limited to link-local multicast. This document
+ specifies the Mbus protocol, i.e., message syntax, addressing and
+ transport mechanisms.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 1.1 Mbus Overview . . . . . . . . . . . . . . . . . . . . . . . 3
+ 1.2 Purpose of this Document . . . . . . . . . . . . . . . . . . 5
+ 1.3 Areas of Application . . . . . . . . . . . . . . . . . . . . 5
+ 1.4 Terminology for requirement specifications . . . . . . . . . 6
+ 2. Common Formal Syntax Rules . . . . . . . . . . . . . . . . . 6
+ 3. Message Format . . . . . . . . . . . . . . . . . . . . . . . 7
+ 4. Addressing . . . . . . . . . . . . . . . . . . . . . . . . . 9
+ 4.1 Mandatory Address Elements . . . . . . . . . . . . . . . . . 10
+ 5. Message Syntax . . . . . . . . . . . . . . . . . . . . . . . 11
+ 5.1 Message Encoding . . . . . . . . . . . . . . . . . . . . . . 11
+ 5.2 Message Header . . . . . . . . . . . . . . . . . . . . . . . 11
+ 5.3 Command Syntax . . . . . . . . . . . . . . . . . . . . . . . 12
+
+
+
+Ott, et. al. Informational [Page 1]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ 6. Transport . . . . . . . . . . . . . . . . . . . . . . . . . 13
+ 6.1 Local Multicast/Broadcast . . . . . . . . . . . . . . . . . 14
+ 6.1.1 Mbus multicast groups for IPv4 . . . . . . . . . . . . . . . 15
+ 6.1.2 Mbus multicast groups for IPv6 . . . . . . . . . . . . . . . 15
+ 6.1.3 Use of Broadcast . . . . . . . . . . . . . . . . . . . . . . 16
+ 6.1.4 Mbus UDP Port Number . . . . . . . . . . . . . . . . . . . . 16
+ 6.2 Directed Unicast . . . . . . . . . . . . . . . . . . . . . . 16
+ 7. Reliability . . . . . . . . . . . . . . . . . . . . . . . . 18
+ 8. Awareness of other Entities . . . . . . . . . . . . . . . . 20
+ 8.1 Hello Message Transmission Interval . . . . . . . . . . . . 21
+ 8.1.1 Calculating the Interval for Hello Messages . . . . . . . . 22
+ 8.1.2 Initialization of Values . . . . . . . . . . . . . . . . . . 23
+ 8.1.3 Adjusting the Hello Message Interval when the Number of
+ Entities increases . . . . . . . . . . . . . . . . . . . . . 23
+ 8.1.4 Adjusting the Hello Message Interval when the Number of
+ Entities decreases . . . . . . . . . . . . . . . . . . . . . 23
+ 8.1.5 Expiration of hello timers . . . . . . . . . . . . . . . . . 23
+ 8.2 Calculating the Timeout for Mbus Entities . . . . . . . . . 24
+ 9. Messages . . . . . . . . . . . . . . . . . . . . . . . . . . 24
+ 9.1 mbus.hello . . . . . . . . . . . . . . . . . . . . . . . . . 24
+ 9.2 mbus.bye . . . . . . . . . . . . . . . . . . . . . . . . . . 25
+ 9.3 mbus.ping . . . . . . . . . . . . . . . . . . . . . . . . . 25
+ 9.4 mbus.quit . . . . . . . . . . . . . . . . . . . . . . . . . 26
+ 9.5 mbus.waiting . . . . . . . . . . . . . . . . . . . . . . . . 26
+ 9.6 mbus.go . . . . . . . . . . . . . . . . . . . . . . . . . . 27
+ 10. Constants . . . . . . . . . . . . . . . . . . . . . . . . . 27
+ 11. Mbus Security . . . . . . . . . . . . . . . . . . . . . . . 28
+ 11.1 Security Model . . . . . . . . . . . . . . . . . . . . . . . 28
+ 11.2 Encryption . . . . . . . . . . . . . . . . . . . . . . . . . 28
+ 11.3 Message Authentication . . . . . . . . . . . . . . . . . . . 29
+ 11.4 Procedures for Senders and Receivers . . . . . . . . . . . . 30
+ 12. Mbus Configuration . . . . . . . . . . . . . . . . . . . . . 31
+ 12.1 File based parameter storage . . . . . . . . . . . . . . . . 33
+ 12.2 Registry based parameter storage . . . . . . . . . . . . . . 34
+ 13. Security Considerations . . . . . . . . . . . . . . . . . . 34
+ 14. IANA Considerations . . . . . . . . . . . . . . . . . . . . 35
+ 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 35
+ A. About References . . . . . . . . . . . . . . . . . . . . . . 37
+ B. Limitations and Future Work . . . . . . . . . . . . . . . . 37
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 38
+ Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 39
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 2]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+1. Introduction
+
+ The implementation of multiparty multimedia conferencing systems is
+ one example where a simple coordination infrastructure can be useful:
+ In a variety of conferencing scenarios, a local communication channel
+ can provide conference-related information exchange between co-
+ located but otherwise independent application entities, for example
+ those taking part in application sessions that belong to the same
+ conference. In loosely coupled conferences such a mechanism allows
+ for coordination of application entities, e.g., to implement
+ synchronization between media streams or to configure entities
+ without user interaction. It can also be used to implement tightly
+ coupled conferences enabling a conference controller to enforce
+ conference wide control within an end system.
+
+ Conferencing systems such as IP telephones can also be viewed as
+ components of a distributed system and can thus be integrated into a
+ group of application modules: For example, an IP telephony call that
+ is conducted with a stand-alone IP telephone can be dynamically
+ extended to include media engines for other media types using the
+ coordination function of an appropriate coordination mechanism.
+ Different individual conferencing components can thus be combined to
+ build a coherent multimedia conferencing system for a user.
+
+ Other possible scenarios include the coordination of application
+ components that are distributed on different hosts in a network, for
+ example, so-called Internet appliances.
+
+1.1 Mbus Overview
+
+ Local coordination of application components requires a number of
+ different interaction models: some messages (such as membership
+ information, floor control notifications, dissemination of conference
+ state changes, etc.) may need to be sent to all local application
+ entities. Messages may also be targeted at a certain application
+ class (e.g., all whiteboards or all audio tools) or agent type (e.g.,
+ all user interfaces rather than all media engines). Or there may be
+ any (application- or message-specific) subgrouping defining the
+ intended recipients, e.g., messages related to media synchronization.
+ Finally, there may be messages that are directed at a single entity:
+ for example, specific configuration settings that a conference
+ controller sends to a particular application entity, or query-
+ response exchanges between any local server and its clients.
+
+ The Mbus protocol as defined here satisfies these different
+ communication needs by defining different message transport
+ mechanisms (defined in Section 6) and by providing a flexible
+ addressing scheme (defined in Section 4).
+
+
+
+Ott, et. al. Informational [Page 3]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Furthermore, Mbus messages exchanged between application entities may
+ have different reliability requirements (which are typically derived
+ from their semantics). Some messages will have a rather transient
+ character conveying ephemeral state information (which is
+ refreshed/updated periodically), such as the volume meter level of an
+ audio receiver entity to be displayed by its user interface agent.
+ Certain Mbus messages (such as queries for parameters or queries to
+ local servers) may require a response from the peer(s), thereby
+ providing an explicit acknowledgment at the semantic level on top of
+ the Mbus. Other messages will modify the application or conference
+ state and hence it is crucial that they do not get lost. The latter
+ type of message has to be delivered reliably to the recipient,
+ whereas messages of the first type do not require reliability
+ mechanisms at the Mbus transport layer. For messages confirmed at
+ the application layer it is up to the discretion of the application
+ whether or not to use a reliable transport underneath.
+
+ In some cases, application entities will want to tailor the degree of
+ reliability to their needs, others will want to rely on the
+ underlying transport to ensure delivery of the messages -- and this
+ may be different for each Mbus message. The Mbus message passing
+ mechanism specified in this document provides a maximum of
+ flexibility by providing reliable transmission achieved through
+ transport-layer acknowledgments (in case of point-to-point
+ communications only) as well as unreliable message passing (for
+ unicast, local multicast, and local broadcast). We address this
+ topic in Section 4.
+
+ Finally, accidental or malicious disturbance of Mbus communications
+ through messages originated by applications from other users needs to
+ be prevented. Accidental reception of Mbus messages from other users
+ may occur if either two users share the same host for using Mbus
+ applications or if they are using Mbus applications that are spread
+ across the same network link: in either case, the used Mbus multicast
+ address and the port number may be identical leading to reception of
+ the other party's Mbus messages in addition to the user's own ones.
+ Malicious disturbance may happen because of applications multicasting
+ (e.g., at a global scope) or unicasting Mbus messages. To eliminate
+ the possibility of processing unwanted Mbus messages, the Mbus
+ protocol contains message digests for authentication. Furthermore,
+ the Mbus allows for encryption to ensure privacy and thus enable
+ using the Mbus for local key distribution and other functions
+ potentially sensitive to eavesdropping. This document defines the
+ framework for configuring Mbus applications with regard to security
+ parameters in Section 12.
+
+
+
+
+
+
+Ott, et. al. Informational [Page 4]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+1.2 Purpose of this Document
+
+ Three components constitute the message bus: the low level message
+ passing mechanisms, a command syntax and naming hierarchy, and the
+ addressing scheme.
+
+ The purpose of this document is to define the protocol mechanisms of
+ the lower level Mbus message passing mechanism which is common to all
+ Mbus implementations. This includes the specification of
+
+ o the generic Mbus message format;
+
+ o the addressing concept for application entities (note that
+ concrete addressing schemes are to be defined by application-
+ specific profiles);
+
+ o the transport mechanisms to be employed for conveying messages
+ between (co-located) application entities;
+
+ o the security concept to prevent misuse of the Message Bus (such as
+ taking control of another user's conferencing environment);
+
+ o the details of the Mbus message syntax; and
+
+ o a set of mandatory application independent commands that are used
+ for bootstrapping Mbus sessions.
+
+1.3 Areas of Application
+
+ The Mbus protocol can be deployed in many different application
+ areas, including but not limited to:
+
+ Local conference control: In the Mbone community a model has arisen
+ whereby a set of loosely coupled tools are used to participate in
+ a conference. A typical scenario is that audio, video, and shared
+ workspace functionality is provided by three separate tools
+ (although some combined tools exist). This maps well onto the
+ underlying RTP [8] (as well as other) media streams, which are
+ also transmitted separately. Given such an architecture, it is
+ useful to be able to perform some coordination of the separate
+ media tools. For example, it may be desirable to communicate
+ playout-point information between audio and video tools, in order
+ to implement lip-synchronization, to arbitrate the use of shared
+ resources (such as input devices), etc.
+
+ A refinement of this architecture relies on the presence of a
+ number of media engines which perform protocol functions as well
+ as capturing and playout of media. In addition, one (or more)
+
+
+
+Ott, et. al. Informational [Page 5]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ (separate) user interface agents exist that interact with and
+ control their media engine(s). Such an approach allows
+ flexibility in the user-interface design and implementation, but
+ obviously requires some means by which the various involved agents
+ may communicate with one another. This is particularly desirable
+ to enable a coherent response to a user's conference-related
+ actions (such as joining or leaving a conference).
+
+ Although current practice in the Mbone community is to work with a
+ loosely coupled conference control model, situations arise where
+ this is not appropriate and a more tightly coupled wide-area
+ conference control protocol must be employed. In such cases, it
+ is highly desirable to be able to re-use the existing tools (media
+ engines) available for loosely coupled conferences and integrate
+ them with a system component implementing the tight conference
+ control model. One appropriate means to achieve this integration
+ is a communication channel that allows a dedicated conference
+ control entity to "remotely" control the media engines in addition
+ to or instead of their respective user interfaces.
+
+ Control of device groups in a network: A group of devices that are
+ connected to a local network, e.g., home appliances in a home
+ network, require a local coordination mechanism. Minimizing
+ manual configuration and the the possibility to deploy group
+ communication will be useful in this application area as well.
+
+1.4 Terminology for requirement specifications
+
+ In this document, the key words "MUST", "MUST NOT", "REQUIRED",
+ "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
+ and "OPTIONAL" are to be interpreted as described in RFC 2119 [1] and
+ indicate requirement levels for compliant Mbus implementations.
+
+2. Common Formal Syntax Rules
+
+ This section contains definitions of common ABNF [13] syntax elements
+ that are later referenced by other definitions in this document:
+
+ base64 = base64_terminal /
+ ( 1*(4base64_CHAR) [base64_terminal] )
+
+ base64_char = UPALPHA / LOALPHA / DIGIT / "+" / "/"
+ ;; Case-sensitive
+
+ base64_terminal = (2base64_char "==") / (3base64_char "=")
+
+ UPALPHA = %x41-5A ;; Uppercase: A-Z
+
+
+
+
+Ott, et. al. Informational [Page 6]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ LOALPHA = %x61-7A ;; Lowercase: a-z
+
+
+ ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
+
+ CHAR = %x01-7E
+ ; any 7-bit US-ASCII character,
+ excluding NUL and delete
+
+ OCTET = %x00-FF
+ ; 8 bits of data
+
+ CR = %x0D
+ ; carriage return
+
+ CRLF = CR LF
+ ; Internet standard newline
+
+ DIGIT = %x30-39
+ ; 0-9
+
+ DQUOTE = %x22
+ ; " (Double Quote)
+
+ HTAB = %x09
+ ; horizontal tab
+
+ LF = %x0A
+ ; linefeed
+
+ LWSP = *(WSP / CRLF WSP)
+ ; linear white space (past newline)
+
+ SP = %x20
+ ; space
+
+ WSP = SP / HTAB
+ ; white space
+
+ Taken from RFC 2234 [13] and RFC 2554 [14].
+
+3. Message Format
+
+ An Mbus message comprises a header and a body. The header is used to
+ indicate how and where a message should be delivered and the body
+ provides information and commands to the destination entity. The
+ following pieces of information are included in the header:
+
+
+
+
+Ott, et. al. Informational [Page 7]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ A fixed ProtocolID field identifies the version of the message bus
+ protocol used. The protocol defined in this document is
+ "mbus/1.0" (case-sensitive).
+
+ A sequence number (SeqNum) is contained in each message. The
+ first message sent by a source SHOULD set SeqNum to zero, and it
+ MUST increment by one for each message sent by that source. A
+ single sequence number is used for all messages from a source,
+ irrespective of the intended recipients and the reliability mode
+ selected. The value range of a sequence number is (0,4294967295).
+ An implementation MUST re-set its sequence number to 0 after
+ reaching 4294967295. Implementations MUST take into account that
+ the SeqNum of other entities may wrap-around.
+
+ SeqNums are decimal numbers in ASCII representation.
+
+ The TimeStamp field is also contained in each message and SHOULD
+ contain a decimal number representing the time of the message
+ construction in milliseconds since 00:00:00, UTC, January 1, 1970.
+
+ A MessageType field indicates the kind of message being sent. The
+ value "R" indicates that the message is to be transmitted reliably
+ and MUST be acknowledged by the recipient, "U" indicates an
+ unreliable message which MUST NOT be acknowledged.
+
+ The SrcAddr field identifies the sender of a message. This MUST
+ be a complete address, with all address elements specified. The
+ addressing scheme is described in Section 4.
+
+ The DestAddr field identifies the intended recipient(s) of the
+ message. This field MAY be wildcarded by omitting address
+ elements and hence address any number (including zero) of
+ application entities. The addressing scheme is described in
+ Section 4.
+
+ The AckList field comprises a list of SeqNums for which this
+ message is an acknowledgment. See Section 7 for details.
+
+ The header is followed by the message body which contains zero or
+ more commands to be delivered to the destination entity. The syntax
+ for a complete message is given in Section 5.
+
+ If multiple commands are contained within the same Mbus message
+ payload, they MUST to be delivered to the Mbus application in the
+ same sequence in which they appear in the message payload.
+
+
+
+
+
+
+Ott, et. al. Informational [Page 8]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+4. Addressing
+
+ Each entity in the message has a unique Mbus address that is used to
+ identify the entity. Mbus addresses are sequences of address
+ elements that are tag/value pairs. The tag and the value are
+ separated by a colon and tag/value pairs are separated by whitespace,
+ like this:
+
+ (tag:value tag:value ...)
+
+ The formal ABNF syntax definition for Mbus addresses and their
+ elements is as follows:
+
+ mbus_address = "(" *WSP *1address_list *WSP ")"
+ address_list = address_element
+ / address_element 1*WSP address_list
+
+ address_element = address_tag ":" address_value
+
+ address_tag = 1*32(ALPHA)
+
+ address_value = 1*64(%x21-27 / %x2A-7E)
+ ; any 7-bit US-ASCII character
+ ; excluding white space, delete,
+ ; control characters, "(" and ")"
+
+ Note that this and other ABNF definitions in this document use the
+ non-terminal symbols defined in Section 2.
+
+ An address_tag MUST be unique within an Mbus address, i.e., it MUST
+ only occur once.
+
+ Each entity has a fixed sequence of address elements constituting its
+ address and MUST only process messages sent to addresses that either
+ match all elements or consist of a subset of its own address
+ elements. The order of address elements in an address sequence is
+ not relevant. Two address elements match if both their tags and
+ their values are equivalent. Equivalence for address element and
+ address value strings means that each octet in the one string has the
+ same value as the corresponding octet in the second string. For
+ example, an entity with an address of:
+
+ (conf:test media:audio module:engine app:rat id:4711-1@192.168.1.1)
+
+ will process messages sent to
+
+ (media:audio module:engine)
+
+
+
+
+Ott, et. al. Informational [Page 9]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ and
+
+ (module:engine)
+
+ but must ignore messages sent to
+
+ (conf:test media:audio module:engine app:rat id:123-4@192.168.1.1
+ foo:bar)
+
+ and
+
+ (foo:bar)
+
+ A message that should be processed by all entities requires an empty
+ set of address elements.
+
+4.1 Mandatory Address Elements
+
+ Each Mbus entity MUST provide one mandatory address element that
+ allows it to identify the entity. The element tag is "id" and the
+ value MUST be be composed of the following components:
+
+ o The IP address of the interface that is used for sending messages
+ to the Mbus. For IPv4 this is the address in dotted decimal
+ notation. For IPv6 the interface-ID-part of the node's link-local
+ address in textual representation as specified in RFC 2373 [3]
+ MUST be used.
+
+ In this specification, this part is called the "host-ID".
+
+ o An identifier ("entity-ID") that is unique within the scope of a
+ single host-ID. The entity comprises two parts. For systems
+ where the concept of a process ID is applicable it is RECOMMENDED
+ that this identifier be composed using a process-ID and a per-
+ process disambiguator for different Mbus entities of a process.
+ If a process ID is not available, this part of the entity-ID may
+ be randomly chosen (it is recommended that at least a 32 bit
+ random number is chosen). Both numbers are represented in decimal
+ textual form and MUST be separated by a '-' (ASCII x2d) character.
+
+ Note that the entity-ID cannot be the port number of the endpoint
+ used for sending messages to the Mbus because implementations MAY use
+ the common Mbus port number for sending to and receiving from the
+ multicast group (as specified in Section 6).
+
+ The complete syntax definition for the entity identifier is as
+ follows:
+
+
+
+
+Ott, et. al. Informational [Page 10]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ id-element = "id:" id-value
+
+ id-value = entity-id "@" host-id
+
+ entity-id = 1*10DIGIT "-" 1*5DIGIT
+
+ host-id = (IPv4address / IPv6address)
+
+ Please refer to [3] for the productions of IPv4address and IPv6address.
+
+ An example for an id element:
+
+ id:4711-99@192.168.1.1
+
+5. Message Syntax
+
+5.1 Message Encoding
+
+ All messages MUST use the UTF-8 character encoding. Note that US
+ ASCII is a subset of UTF-8 and requires no additional encoding, and
+ that a message encoded with UTF-8 will not contain zero bytes.
+
+ Each Message MAY be encrypted using a secret key algorithm as
+ defined in Section 11.
+
+5.2 Message Header
+
+ The fields in the header are separated by white space characters,
+ and followed by CRLF. The format of the header is as follows:
+
+ msg_header = "mbus/1.0" 1*WSP SeqNum 1*WSP TimeStamp 1*WSP
+ MessageType 1*WSP SrcAddr 1*WSP DestAddr 1*WSP AckList
+
+ The header fields are explained in Message Format (Section 3). Here
+ are the ABNF syntax definitions for the header fields:
+
+ SeqNum = 1*10DIGIT ; numeric range 0 - 2^32-1
+
+ TimeStamp = 1*13DIGIT
+
+ MessageType = "R" / "U"
+
+ ScrAddr = mbus_address
+
+ DestAddr = mbus_address
+
+
+
+
+
+
+Ott, et. al. Informational [Page 11]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ AckList = "(" *WSP *1(1*DIGIT *(1*WSP 1*10DIGIT)) *WSP ")"
+
+ See Section 4 for a definition of "mbus_address".
+
+ The syntax definition of a complete message is as follows:
+
+ mbus_message = msg_header *1(CRLF msg_payload)
+
+ msg_payload = mbus_command *(CRLF mbus_command)
+
+ The definition of production rules for an Mbus command is given in
+ Section 5.3.
+
+5.3 Command Syntax
+
+ The header is followed by zero, one, or more, commands to be
+ delivered to the Mbus entities indicated by the DestAddr field. Each
+ command consists of a command name that is followed by a list of
+ zero, or more parameters and is terminated by a newline.
+
+ command ( parameter parameter ... )
+
+ Syntactically, the command name MUST be a `symbol' as defined in the
+ following table. The parameters MAY be any data type drawn from the
+ following table:
+
+ val = Integer / Float / String / List /
+ Symbol / Data
+
+ Integer = *1"-" 1*DIGIT
+
+ Float = *1"-" 1*DIGIT "." 1*DIGIT
+
+ String = DQUOTE *CHAR DQUOTE
+ ; see below for escape characters
+
+ List = "(" *WSP *1(val *(1*WSP val)) *WSP ")"
+
+ Symbol = ALPHA *(ALPHA / DIGIT / "_" / "-" /
+ ".")
+
+ Data = "<" *base64 ">"
+
+ Boolean values are encoded as an integer, with the value of zero
+ representing false, and non-zero representing true.
+
+
+
+
+
+
+Ott, et. al. Informational [Page 12]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ String parameters in the payload MUST be enclosed in the double quote
+ (") character. Within strings, the escape character is the backslash
+ (\), and the following escape sequences are defined:
+
+ +----------------+-----------+
+ |Escape Sequence | Meaning |
+ +----------------+-----------+
+ | \\ | \ |
+ | \" | " |
+ | \n | newline |
+ +----------------+-----------+
+
+ List parameters do not have to be homogeneous lists, i.e., they can
+ contain parameters of different types.
+
+ Opaque data is represented as Base64-encoded (see RFC 1521 [7])
+ character strings surrounded by "< " and "> "
+
+ The ABNF syntax definition for Mbus commands is as follows:
+
+ mbus_command = command_name arglist
+
+ command_name = Symbol
+
+ arglist = List
+
+ Command names SHOULD be constructed hierarchically to group
+ conceptually related commands under a common hierarchy. The
+ delimiter between names in the hierarchy MUST be "." (dot).
+ Application profiles MUST NOT define commands starting with "mbus.".
+
+ The Mbus addressing scheme defined in Section 4 allows specifying
+ incomplete addresses by omitting certain elements of an address
+ element list, enabling entities to send commands to a group of Mbus
+ entities. Therefore, all command names SHOULD be unambiguous in a
+ way that it is possible to interpret or ignore them without
+ considering the message's address.
+
+ A set of commands within a certain hierarchy that MUST be understood
+ by every entity is defined in Section 9.
+
+6. Transport
+
+ All messages are transmitted as UDP messages, with two possible
+ alternatives:
+
+
+
+
+
+
+Ott, et. al. Informational [Page 13]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ 1. Local multicast/broadcast:
+ This transport class MUST be used for all messages that are not
+ sent to a fully qualified target address. It MAY also be used for
+ messages that are sent to a fully qualified target address. It
+ MUST be provided by conforming implementations. See Section 6.1
+ for details.
+
+ 2. Directed unicast:
+ This transport class MAY be used for messages that are sent to a
+ fully qualified destination address. It is OPTIONAL and does not
+ have to be provided by conforming implementations.
+
+ A fully qualified target address is an Mbus address of an existing
+ Mbus entity in an Mbus session. An implementation can identify an
+ Mbus address as fully qualified by maintaining a list of known
+ entities within an Mbus session. Each known entity has its own
+ unique, fully qualified Mbus address.
+
+ Messages are transmitted in UDP datagrams, a maximum message size of
+ 64 KBytes MUST NOT be exceeded. It is RECOMMENDED that applications
+ using a non host-local scope do not exceed a message size of the link
+ MTU.
+
+ Note that "unicast", "multicast" and "broadcast" mean IP Unicast, IP
+ Multicast and IP Broadcast respectively. It is possible to send an
+ Mbus message that is addressed to a single entity using IP Multicast.
+
+ This specification deals with both Mbus over UDP/IPv4 and Mbus over
+ UDP/IPv6.
+
+6.1 Local Multicast/Broadcast
+
+ In general, the Mbus uses multicast with a limited scope for message
+ transport. Two different Mbus multicast scopes are defined, either
+ of which can be configured to be used with an Mbus session:
+
+ 1. host-local
+
+ 2. link-local
+
+ Participants of an Mbus session have to know the multicast address in
+ advance -- it cannot be negotiated during the session since it is
+ already needed for initial communication between the Mbus entities
+ during the bootstrapping phase. It also cannot be allocated prior to
+ an Mbus session because there would be no mechanism to announce the
+ allocated address to all potential Mbus entities. Therefore, the
+ multicast address has to be assigned statically. This document
+ defines the use of statically assigned addresses and also provides a
+
+
+
+Ott, et. al. Informational [Page 14]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ specification of how an Mbus session can be configured to use non-
+ standard, unassigned addresses (see Section 12).
+
+ The following sections specify the use of multicast addresses for
+ IPv4 and IPv6.
+
+6.1.1 Mbus multicast groups for IPv4
+
+ For IPv4, a statically assigned, scope-relative multicast address as
+ defined by RFC 2365 [11] is used. The offset for the scope relative
+ address for Mbus is 8 (MBUS, see
+ http://www.iana.org/assignments/multicast-addresses [19]).
+
+ Different scopes are defined by RFC 2365 [11]. The IPv4 Local Scope
+ (239.255.0.0/16) is the minimal enclosing scope for administratively
+ scoped multicast (as defined by RFC 2365 [11]) and not further
+ divisible -- its exact extent is site dependent.
+
+ For the IPv4 Local Scope, applying the rules of RFC 2365 [11] and
+ using the assigned offset of 8, the Mbus multicast address is
+ therefore 239.255.255.247.
+
+ For IPv4, the different defined Mbus scopes (host-local and link-
+ local) are to be realized as follows:
+
+ host-local multicast: Unless configured otherwise, the assigned
+ scope-relative Mbus address in the Local Scope (239.255.255.247 as
+ of RFC 2365 [11]) MUST be used. Mbus UDP datagrams SHOULD be sent
+ with a TTL of 0.
+
+ link-local multicast: Unless configured otherwise, the assigned
+ scope-relative Mbus address in the Local Scope (239.255.255.247 as
+ of RFC 2365 [11]) MUST be used. Mbus UDP datagrams SHOULD be sent
+ with a TTL of 1.
+
+6.1.2 Mbus multicast groups for IPv6
+
+ IPv6 has different address ranges for different multicast scopes and
+ distinguishes node local and link local scopes, that are implemented
+ as a set of address prefixes for the different address ranges (RFC
+ 2373 [3]). The link-local prefix is FF02, the node-local prefix is
+ FF01. A permanently assigned multicast address will be used for Mbus
+ multicast communication, i.e., an address that is independent of the
+ scope value and that can be used for all scopes. Implementations for
+ IPv6 MUST use the scope-independent address and the appropriate
+ prefix for the selected scope. For host-local Mbus communication the
+ IPv6 node-local scope prefix MUST be used, for link-local Mbus
+ communication the IPv6 link-local scope prefix MUST be used.
+
+
+
+Ott, et. al. Informational [Page 15]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ The permanent IPv6 multicast address for Mbus/Ipv6 is
+ FF0X:0:0:0:0:0:0:300.
+
+ FF0X:0:0:0:0:0:0:300 SHOULD be used for Mbus/IPv6 where the X in FF0X
+ indicates that the scope is not fixed because this is an all scope
+ address. This means, for node-local scope, FF01:0:0:0:0:0:0:300
+ SHOULD be used and for link-local scope FF02:0:0:0:0:0:0:300 SHOULD
+ be used. See RFC 2375 [4] for IPv6 multicast address assignments.
+
+ If a single application system is distributed across several co-
+ located hosts, link local scope SHOULD be used for multicasting Mbus
+ messages that potentially have recipients on the other hosts. The
+ Mbus protocol is not intended (and hence deliberately not designed)
+ for communication between hosts not on the same link. See Section 12
+ for specifications of Mbus configuration mechanisms.
+
+6.1.3 Use of Broadcast
+
+ In situations where multicast is not available, broadcast MAY be used
+ instead. In these cases an IP broadcast address for the connected
+ network SHOULD be used for sending. The node-local broadcast address
+ for IPv6 is FF01:0:0:0:0:0:0:1, the link-local broadcast address for
+ IPv6 is FF02:0:0:0:0:0:0:1. For IPv4, the generic broadcast address
+ (for link-local broadcast) is 255.255.255.255. It is RECOMMENDED
+ that IPv4-implementations use the generic broadcast address and a TTL
+ of zero for host-local broadcast.
+
+ Broadcast MUST NOT be used in situations where multicast is available
+ and supported by all systems participating in an Mbus session.
+
+ See Section 12 for configuring the use of broadcast.
+
+6.1.4 Mbus UDP Port Number
+
+ The registered Mbus UDP port number is 47000.
+
+6.2 Directed Unicast
+
+ Directed unicast (via UDP) to the port of a specific application is
+ an alternative transport class to multicast. Directed unicast is an
+ OPTIONAL optimization and MAY be used by Mbus implementations for
+ delivering messages addressed to a single application entity only --
+ the address of which the Mbus implementation has learned from other
+ message exchanges before. Note that the DestAddr field of such
+ messages MUST be filled in properly nevertheless. Every Mbus entity
+ SHOULD use a single unique endpoint address for sending messages to
+ the Mbus multicast group or to individual receiving entities. A
+
+
+
+
+Ott, et. al. Informational [Page 16]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ unique endpoint address is a tuple consisting of the entity's IP
+ address and a UDP source port number, where the port number is
+ different from the standard Mbus port number.
+
+ Messages MUST only be sent via unicast if the Mbus target address is
+ unique and if the sending entity can verify that the receiving entity
+ uses a unique endpoint address. The latter can be verified by
+ considering the last message received from that entity.
+
+ Note that several Mbus entities, say within the same process, may
+ share a common transport address; in this case, the contents of
+ the destination address field is used to further dispatch the
+ message. Given the definition of "unique endpoint address" above,
+ the use of a shared endpoint address and a dispatcher still allows
+ other Mbus entities to send unicast messages to one of the
+ entities that share the endpoint address. So this can be
+ considered an implementation detail.
+
+ Messages with an empty target address list MUST always be sent to all
+ Mbus entities (via multicast if available).
+
+ The following algorithm can be used by sending entities to determine
+ whether an Mbus address is unique considering the current set of Mbus
+ entities:
+
+ let ta=the target address;
+ iterate through the set of all
+ currently known Mbus addresses {
+ let ti=the address in each iteration;
+ count the addresses for which
+ the predicate isSubsetOf(ta,ti) yields true;
+ }
+
+ If the count of matching addresses is exactly 1 the address is
+ unique. The following algorithm can be used for the predicate
+ isSubsetOf, that checks whether the second message matches the
+ first according to the rules specified in Section 4. (A match
+ means that a receiving entity that uses the second Mbus address
+ must also process received messages with the first address as a
+ target address.)
+
+ isSubsetOf(addr a1,a2) yields true, iff
+ every address element of a1 is contained
+ in a2's address element list.
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 17]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ An address element a1 is contained in an address element list if
+ the list contains an element that is equal to a1. An address
+ element is considered equal to another address element if it has
+ the same values for both of the two address element fields (tag
+ and value).
+
+7. Reliability
+
+ While most messages are expected to be sent using unreliable
+ transport, it may be necessary to deliver some messages reliably.
+ Reliability can be selected on a per message basis by means of the
+ MessageType field. Reliable delivery is supported for messages with
+ a single recipient only; i.e., to a fully qualified Mbus address. An
+ entity can thus only send reliable messages to known addresses, i.e.,
+ it can only send reliable messages to entities that have announced
+ their existence on the Mbus (e.g., by means of mbus.hello() messages
+ as defined in Section 9.1). A sending entity MUST NOT send a message
+ reliably if the target address is not unique. (See Section 6 for the
+ specification of an algorithm to determine whether an address is
+ unique.) A receiving entity MUST only process and acknowledge a
+ reliable message if the destination address exactly matches its own
+ source address (the destination address MUST NOT be a subset of the
+ source address).
+
+ Disallowing reliable message delivery for messages sent to multiple
+ destinations is motivated by simplicity of the implementation as well
+ as the protocol. The desired effect can be achieved at the
+ application layer by sending individual reliable messages to each
+ fully qualified destination address, if the membership information
+ for the Mbus session is available.
+
+ Each message is tagged with a message sequence number. If the
+ MessageType is "R", the sender expects an acknowledgment from the
+ recipient within a short period of time. If the acknowledgment is
+ not received within this interval, the sender MUST retransmit the
+ message (with the same message sequence number), increase the
+ timeout, and restart the timer. Messages MUST be retransmitted a
+ small number of times (see below) before the transmission or the
+ recipient are considered to have failed. If the message is not
+ delivered successfully, the sending application is notified. In this
+ case, it is up to the application to determine the specific actions
+ (if any) to be taken.
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 18]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Reliable messages MUST be acknowledged by adding their SeqNum to the
+ AckList field of a message sent to the originator of the reliable
+ message. This message MUST be sent to a fully qualified Mbus target
+ address. Multiple acknowledgments MAY be sent in a single message.
+ Implementations MAY either piggy-back the AckList onto another
+ message sent to the same destination, or MAY send a dedicated
+ acknowledgment message, with no commands in the message payload part.
+
+ The precise procedures are as follows:
+
+ Sender: A sender A of a reliable message M to receiver B MUST
+ transmit the message either via IP-multicast or via IP-unicast,
+ keep a copy of M, initialize a retransmission counter N to '1',
+ and start a retransmission timer T (initialized to T_r). If an
+ acknowledgment is received from B, timer T MUST be cancelled and
+ the copy of M is discarded. If T expires, the message M MUST be
+ retransmitted, the counter N MUST be incremented by one, and the
+ timer MUST be restarted (set to N*T_r). If N exceeds the
+ retransmission threshold N_r, the transmission is assumed to have
+ failed, further retransmission attempts MUST NOT be undertaken,
+ the copy of M MUST be discarded, and the sending application
+ SHOULD be notified.
+
+ Receiver: A receiver B of a reliable message from a sender A MUST
+ acknowledge reception of the message within a time period T_c <
+ T_r. This MAY be done by means of a dedicated acknowledgment
+ message or by piggy-backing the acknowledgment on another message
+ addressed only to A.
+
+ Receiver optimization: In a simple implementation, B may choose to
+ immediately send a dedicated acknowledgment message. However, for
+ efficiency, it could add the SeqNum of the received message to a
+ sender-specific list of acknowledgments; if the added SeqNum is
+ the first acknowledgment in the list, B SHOULD start an
+ acknowledgment timer TA (initialized to T_c). When the timer
+ expires, B SHOULD create a dedicated acknowledgment message and
+ send it to A. If B is to transmit another Mbus message addressed
+ only to A, it should piggy-back the acknowledgments onto this
+ message and cancel TA. In either case, B should store a copy of
+ the acknowledgment list as a single entry in the per-sender copy
+ list, keep this entry for a period T_k, and empty the
+ acknowledgment list. In case any of the messages kept in an entry
+ of the copy list is received again from A, the entire
+ acknowledgment list stored in this entry is scheduled for (re-)
+ transmission following the above rules.
+
+
+
+
+
+
+Ott, et. al. Informational [Page 19]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Constants and Algorithms: The following constants and algorithms
+ SHOULD be used by implementations:
+
+ T_r=100ms
+
+ N_r=3
+
+ T_c=70ms
+
+ T_k=((N_r)*(N_r+1)/2)*T_r
+
+8. Awareness of other Entities
+
+ Before Mbus entities can communicate with one another, they need to
+ mutually find out about their existence. After this bootstrap
+ procedure that each Mbus entity goes through all other entities
+ listening to the same Mbus know about the newcomer and the newcomer
+ has learned about all the other entities. Furthermore, entities need
+ to be able to to notice the failure (or leaving) of other entities.
+
+ Any Mbus entity MUST announce its presence (on the Mbus) after
+ starting up. This is to be done repeatedly throughout its lifetime
+ to address the issues of startup sequence: Entities should always
+ become aware of other entities independent of the order of starting.
+
+ Each Mbus entity MUST maintain the number of Mbus session members and
+ continuously update this number according to any observed changes.
+ The mechanisms of how the existence and the leaving of other entities
+ can be detected are dedicated Mbus messages for entity awareness:
+ mbus.hello (Section 9.1) and mbus.bye (Section 9.2). Each Mbus
+ protocol implementation MUST periodically send mbus.hello messages
+ that are used by other entities to monitor the existence of that
+ entity. If an entity has not received mbus.hello messages for a
+ certain time (see Section 8.2) from an entity, the respective entity
+ is considered to have left the Mbus and MUST be excluded from the set
+ of currently known entities. Upon the reception of a mbus.bye
+ message the respective entity is considered to have left the Mbus as
+ well and MUST be excluded from the set of currently known entities
+ immediately.
+
+ Each Mbus entity MUST send hello messages to the Mbus after startup.
+ After transmission of the hello message, it MUST start a timer after
+ the expiration of which the next hello message is to be transmitted.
+ Transmission of hello messages MUST NOT be stopped unless the entity
+ detaches from the Mbus. The interval for sending hello messages is
+ dependent on the current number of entities in an Mbus group and can
+ thus change dynamically in order to avoid congestion due to many
+ entities sending hello messages at a constant high rate.
+
+
+
+Ott, et. al. Informational [Page 20]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Section 8.1 specifies the calculation of hello message intervals that
+ MUST be used by protocol implementations. Using the values that are
+ calculated for obtaining the current hello message timer, the timeout
+ for received hello messages is calculated in Section 8.2. Section 9
+ specifies the command synopsis for the corresponding Mbus messages.
+
+8.1 Hello Message Transmission Interval
+
+ Since the number of entities in an Mbus session may vary, care must
+ be taken to allow the Mbus protocol to automatically scale over a
+ wide range of group sizes. The average rate at which hello messages
+ are received would increase linearly to the number of entities in a
+ session if the sending interval was set to a fixed value. Given an
+ interval of 1 second this would mean that an entity taking part in an
+ Mbus session with n entities would receive n hello messages per
+ second. Assuming all entities resided on one host, this would lead
+ to n*n messages that have to be processed per second -- which is
+ obviously not a viable solution for larger groups. It is therefore
+ necessary to deploy dynamically adapted hello message intervals,
+ taking varying numbers of entities into account. In the following,
+ we specify an algorithm that MUST be used by implementors to
+ calculate the interval for hello messages considering the observed
+ number of Mbus entities.
+
+ The algorithm features the following characteristics:
+
+ o The number of hello messages that are received by a single entity
+ in a certain time unit remains approximately constant as the
+ number of entities changes.
+
+ o The effective interval that is used by a specific Mbus entity is
+ randomized in order to avoid unintentional synchronization of
+ hello messages within an Mbus session. The first hello message of
+ an entity is also delayed by a certain random amount of time.
+
+ o A timer reconsideration mechanism is deployed in order to adapt
+ the interval more appropriately in situations where a rapid change
+ of the number of entities is observed. This is useful when an
+ entity joins an Mbus session and is still learning of the
+ existence of other entities or when a larger number of entities
+ leaves the Mbus at once.
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 21]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+8.1.1 Calculating the Interval for Hello Messages
+
+ The following variable names are used in the calculation specified
+ below (all time values in milliseconds):
+
+ hello_p: The last time a hello message has been sent by a Mbus
+ entity.
+
+ hello_now: The current time
+
+ hello_d: The deterministic calculated interval between hello
+ messages.
+
+ hello_e: The effective (randomized) interval between hello messages.
+
+ hello_n: The time for the next scheduled transmission of a hello
+ message.
+
+ entities_p: The numbers of entities at the time hello_n has been last
+ recomputed.
+
+ entities: The number of currently known entities.
+
+ The interval between hello messages MUST be calculated as follows:
+
+ The number of currently known entities is multiplied by
+ c_hello_factor, yielding the interval between hello messages in
+ milliseconds. This is the deterministic calculated interval, denoted
+ hello_d. The minimum value for hello_d is c_hello_min which yields
+
+ hello_d = max(c_hello_min,c_hello_factor * entities * 1ms).
+
+ Section 8 provides a specification of how to obtain the number of
+ currently known entities. Section 10 provides values for the
+ constants c_hello_factor and c_hello_min.
+
+ The effective interval hello_e that is to be used by individual
+ entities is calculated by multiplying hello_d with a randomly chosen
+ number between c_hello_dither_min and c_hello_dither_max as follows:
+
+ hello_e = c_hello_dither_min +
+ RND * (c_hello_dither_max - c_hello_dither_min)
+
+ with RND being a random function that yields an even distribution
+ between 0 and 1. See also Section 10.
+
+ hello_n, the time for the next hello message in milliseconds is set
+ to hello_e + hello_now.
+
+
+
+Ott, et. al. Informational [Page 22]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+8.1.2 Initialization of Values
+
+ Upon joining an Mbus session a protocol implementation sets
+ hello_p=0, hello_now=0 and entities=1, entities_p=1 (the Mbus entity
+ itself) and then calculates the time for the next hello message as
+ specified in Section 8.1.1. The next hello message is scheduled for
+ transmission at hello_n.
+
+8.1.3 Adjusting the Hello Message Interval when the Number of Entities
+ increases
+
+ When the existence of a new entity is observed by a protocol
+ implementation the number of currently known entities is updated. No
+ further action concerning the calculation of the hello message
+ interval is required. The reconsideration of the timer interval
+ takes place when the current timer for the next hello message expires
+ (see Section 8.1.5).
+
+8.1.4 Adjusting the Hello Message Interval when the Number of Entities
+ decreases
+
+ Upon realizing that an entity has left the Mbus the number of
+ currently known entities is updated and the following algorithm
+ should be used to reconsider the timer interval for hello messages:
+
+ 1. The value for hello_n is updated by setting hello_n = hello_now +
+ (entities/entities_p)*(hello_n - hello_now)
+
+ 2. The value for hello_p is updated by setting hello_p = hello_now -
+ (entities/entities_p)*(hello_now - hello_p)
+
+ 3. The currently active timer for the next hello messages is
+ cancelled and a new timer is started for hello_n.
+
+ 4. entities_p is set to entities.
+
+8.1.5 Expiration of hello timers
+
+ When the hello message timer expires, the protocol implementation
+ MUST perform the following operations:
+
+ The hello interval hello_e is computed as specified in Section
+ 8.1.1.
+
+ 1. IF hello_e + hello_p <= hello_now THEN a hello message is
+ transmitted. hello_p is set to hello_now, hello_e is
+ calculated again as specified in Section 8.1.1 and hello_n is
+ set to hello_e + hello_now.
+
+
+
+Ott, et. al. Informational [Page 23]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ 2. ELSE IF hello_e + hello_p > hello_now THEN hello_n is set to
+ hello_e + hello_p. A new timer for the next hello message is
+ started to expire at hello_n. No hello message is transmitted.
+
+ entities_p is set to entities.
+
+8.2 Calculating the Timeout for Mbus Entities
+
+ Whenever an Mbus entity has not heard for a time span of
+ c_hello_dead*(hello_d*c_hello_dither_max) milliseconds from another
+ Mbus entity it may consider this entity to have failed (or have quit
+ silently). The number of the currently known entities MUST be
+ updated accordingly. See Section 8.1.4 for details. Note that no
+ need for any further action is necessarily implied from this
+ observation.
+
+ Section 8.1.1 specifies how to obtain hello_d. Section 10 defines
+ values for the constants c_hello_dead and c_hello_dither_max.
+
+9. Messages
+
+ This section defines some basic application-independent messages that
+ MUST be understood by all implementations; these messages are
+ required for proper operation of the Mbus. This specification does
+ not contain application-specific messages. These are to be defined
+ outside of the basic Mbus protocol specification in separate Mbus
+ profiles.
+
+9.1 mbus.hello
+
+ Syntax:
+ mbus.hello()
+
+ Parameters: - none -
+
+ mbus.hello messages MUST be sent unreliably to all Mbus entities.
+
+ Each Mbus entity learns about other Mbus entities by observing their
+ mbus.hello messages and tracking the sender address of each message
+ and can thus calculate the current number of entities.
+
+ mbus.hello messages MUST be sent periodically in dynamically
+ calculated intervals as specified in Section 8.
+
+ Upon startup the first mbus.hello message MUST be sent after a delay
+ hello_delay, where hello_delay be a randomly chosen number between 0
+ and c_hello_min (see Section 10).
+
+
+
+
+Ott, et. al. Informational [Page 24]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+9.2 mbus.bye
+
+ Syntax: mbus.bye()
+
+ Parameters: - none -
+
+ An Mbus entity that is about to terminate (or "detach" from the Mbus)
+ SHOULD announce this by transmitting an mbus.bye message. The
+ mbus.bye message MUST be sent unreliably to all entities.
+
+9.3 mbus.ping
+
+ Syntax: mbus.ping()
+
+ Parameters: - none -
+
+ mbus.ping can be used to solicit other entities to signal their
+ existence by replying with an mbus.hello message. Each protocol
+ implementation MUST understand mbus.ping and reply with an mbus.hello
+ message. The reply hello message MUST be delayed for hello_delay
+ milliseconds, where hello_delay be a randomly chosen number between 0
+ and c_hello_min (see Section 10). Several mbus.ping messages MAY be
+ answered by a single mbus.hello: if one or more further mbus.ping
+ messages are received while the entity is waiting hello_delay time
+ units before transmitting the mbus.hello message, no extra mbus.hello
+ message need be scheduled for those additional mbus.ping messages.
+
+ As specified in Section 9.1 hello messages MUST be sent unreliably to
+ all Mbus entities. This is also the case for replies to ping
+ messages. An entity that replies to mbus.ping with mbus.hello SHOULD
+ stop any outstanding timers for hello messages after sending the
+ hello message and schedule a new timer event for the subsequent hello
+ message. (Note that using the variables and the algorithms of
+ Section 8.1.1 this can be achieved by setting hello_p to hello_now.)
+
+ mbus.ping allows a new entity to quickly check for other entities
+ without having to wait for the regular individual hello messages. By
+ specifying a target address the new entity can restrict the
+ solicitation for hello messages to a subset of entities it is
+ interested in.
+
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 25]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+9.4 mbus.quit
+
+ Syntax:
+ mbus.quit()
+
+ Parameters: - none -
+
+ The mbus.quit message is used to request other entities to terminate
+ themselves (and detach from the Mbus). Whether this request is
+ honoured by receiving entities or not is application specific and
+ not defined in this document.
+
+ The mbus.quit message can be multicast or sent reliably via unicast
+ to a single Mbus entity or a group of entities.
+
+9.5 mbus.waiting
+
+ Syntax:
+ mbus.waiting(condition)
+
+ Parameters:
+
+ symbol condition
+ The condition parameter is used to indicate that the entity
+ transmitting this message is waiting for a particular event to
+ occur.
+
+ An Mbus entity SHOULD be able to indicate that it is waiting for a
+ certain event to happen (similar to a P() operation on a semaphore
+ but without creating external state somewhere else). In conjunction
+ with this, an Mbus entity SHOULD be capable of indicating to another
+ entity that this condition is now satisfied (similar to a semaphore's
+ V() operation).
+
+ The mbus.waiting message MAY be broadcast to all Mbus entities, MAY
+ be multicast to an arbitrary subgroup, or MAY be unicast to a
+ particular peer. Transmission of the mbus.waiting message MUST be
+ unreliable and hence MUST be repeated at an application-defined
+ interval (until the condition is satisfied).
+
+ If an application wants to indicate that it is waiting for several
+ conditions to be met, several mbus.waiting messages are sent
+ (possibly included in the same Mbus payload). Note that mbus.hello
+ and mbus.waiting messages may also be transmitted in a single Mbus
+ payload.
+
+
+
+
+
+
+Ott, et. al. Informational [Page 26]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+9.6 mbus.go
+
+ Syntax:
+ mbus.go(condition)
+
+ Parameters:
+
+ symbol condition
+ This parameter specifies which condition is met.
+
+ The mbus.go message is sent by an Mbus entity to "unblock" another
+ Mbus entity -- which has indicated that it is waiting for a certain
+ condition to be met. Only a single condition can be specified per
+ mbus.go message. If several conditions are satisfied simultaneously
+ multiple mbus.go messages MAY be combined in a single Mbus payload.
+
+ The mbus.go message MUST be sent reliably via unicast to the Mbus
+ entity to unblock.
+
+10. Constants
+
+ The following values for timers and counters mentioned in this
+ document SHOULD be used by implementations:
+
+ +-------------------+------------------------+--------------+
+ |Timer / Counter | Value | Unit |
+ +-------------------+------------------------+--------------+
+ |c_hello_factor | 200 | - |
+ |c_hello_min | 1000 | milliseconds |
+ |c_hello_dither_min | 0.9 | - |
+ |c_hello_dither_max | 1.1 | - |
+ |c_hello_dead | 5 | - |
+ +-------------------+------------------------+--------------+
+
+ T_r=100ms
+
+ N_r=3
+
+ T_c=70ms
+
+ T_k=((N_r)*(N_r+1)/2)*T_r
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 27]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+11. Mbus Security
+
+11.1 Security Model
+
+ In order to prevent accidental or malicious disturbance of Mbus
+ communications through messages originated by applications from other
+ users, message authentication is deployed (Section 11.3). For each
+ message, a digest MUST be calculated based on the value of a shared
+ secret key value. Receivers of messages MUST check if the sender
+ belongs to the same Mbus security domain by re-calculating the digest
+ and comparing it to the received value. The messages MUST only be
+ processed further if both values are equal. In order to allow
+ different simultaneous Mbus sessions at a given scope and to
+ compensate defective implementations of host local multicast, message
+ authentication MUST be provided by conforming implementations.
+
+ Privacy of Mbus message transport can be achieved by optionally using
+ symmetric encryption methods (Section 11.2). Each message MAY be
+ encrypted using an additional shared secret key and a symmetric
+ encryption algorithm. Encryption is OPTIONAL for applications, i.e.,
+ it is allowed to configure an Mbus domain not to use encryption. But
+ conforming implementations MUST provide the possibility to use
+ message encryption (see below).
+
+ Message authentication and encryption can be parameterized: the
+ algorithms to apply, the keys to use, etc. These and other
+ parameters are defined in an Mbus configuration object that is
+ accessible by all Mbus entities that participate in an Mbus session.
+ In order to achieve interoperability conforming implementations
+ SHOULD use the values provided by such an Mbus configuration.
+ Section 12 defines the mandatory and optional parameters as well as
+ storage procedures for different platforms. Only in cases where none
+ of the options mentioned in Section 12 is applicable alternative
+ methods of configuring Mbus protocol entities MAY be deployed.
+
+ The algorithms and procedures for applying encryption and
+ authentication techniques are specified in the following sections.
+
+11.2 Encryption
+
+ Encryption of messages is OPTIONAL, that means, an Mbus MAY be
+ configured not to use encryption.
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 28]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Implementations can choose between different encryption algorithms.
+ Every conforming implementation MUST provide the AES [18] algorithm.
+ In addition, the following algorithms SHOULD be supported: DES [16],
+ 3DES (triple DES) [16] and IDEA [20].
+
+ For algorithms requiring en/decryption data to be padded to certain
+ boundaries octets with a value of 0 SHOULD be used for padding
+ characters.
+
+ The length of the encryption keys is determined by the currently used
+ encryption algorithm. This means, the configured encryption key MUST
+ NOT be shorter than the native key length for the currently
+ configured algorithm.
+
+ DES implementations MUST use the DES Cipher Block Chaining (CBC)
+ mode. DES keys (56 bits) MUST be encoded as 8 octets as described in
+ RFC 1423 [12], resulting in 12 Base64-encoded characters. IDEA uses
+ 128-bit keys (24 Base64-encoded characters). AES can use either
+ 128-bit, 192-bit or 256-bit keys. For Mbus encryption using AES only
+ 128-bit keys (24 Base64-encoded characters) MUST be used.
+
+11.3 Message Authentication
+
+ For authentication of messages, hashed message authentication codes
+ (HMACs) as described in RFC 2104 [5] are deployed. In general,
+ implementations can choose between a number of digest algorithms.
+ For Mbus authentication, the HMAC algorithm MUST be applied in the
+ following way:
+
+ The keyed hash value is calculated using the HMAC algorithm
+ specified in RFC 2104 [5]. The specific hash algorithm and the
+ secret hash key MUST be obtained from the Mbus configuration (see
+ Section 12).
+
+ The keyed hash values (see RFC 2104 [5]) MUST be truncated to 96
+ bits (12 octets).
+
+ Subsequently, the resulting 12 octets MUST be Base64-encoded,
+ resulting in 16 Base64-encoded characters (see RFC 1521 [7]).
+
+ Either MD5 [15] or SHA-1 [17] SHOULD be used for message
+ authentication codes (MACs). An implementation MAY provide MD5,
+ whereas SHA-1 MUST be implemented.
+
+ The length of the hash keys is determined by the selected hashing
+ algorithm. This means, the configured hash key MUST NOT be shorter
+ than the native key length for the currently configured algorithm.
+
+
+
+
+Ott, et. al. Informational [Page 29]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+11.4 Procedures for Senders and Receivers
+
+ The algorithms that MUST be provided by implementations are AES and
+ SHA-1.
+
+ See Section 12 for a specification of notations for Base64-strings.
+
+ A sender MUST apply the following operations to a message that is to
+ be sent:
+
+ 1. If encryption is enabled, the message MUST be encrypted using the
+ configured algorithm and the configured encryption key. Padding
+ (adding extra-characters) for block-ciphers MUST be applied as
+ specified in Section 11.2. If encryption is not enabled, the
+ message is left unchanged.
+
+ 2. Subsequently, a message authentication code (MAC) for the
+ (encrypted) message MUST be calculated using the configured HMAC-
+ algorithm and the configured hash key.
+
+ 3. The MAC MUST then be converted to Base64 encoding, resulting in 16
+ Base64-characters as specified in Section 11.3.
+
+ 4. At last, the sender MUST construct the final message by placing
+ the (encrypted) message after the base64-encoded MAC and a CRLF.
+ The ABNF definition for the final message is as follows:
+
+ final_msg = MsgDigest CRLF encr_msg
+
+ MsgDigest = base64
+
+ encr_msg = *OCTET
+
+ A receiver MUST apply the following operations to a message that it
+ has received:
+
+ 1. Separate the base64-encoded MAC from the (encrypted) message and
+ decode the MAC.
+
+ 2. Re-calculate the MAC for the message using the configured HMAC-
+ algorithm and the configured hash key.
+
+ 3. Compare the original MAC with re-calculated MAC. If they differ,
+ the message MUST be discarded without further processing.
+
+ 4. If encryption is enabled, the message MUST be decrypted using the
+ configured algorithm and the configured encryption key. Trailing
+ octets with a value of 0 MUST be deleted. If the message does not
+
+
+
+Ott, et. al. Informational [Page 30]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ start with the string "mbus/" the message MUST be discarded
+ without further processing.
+
+12. Mbus Configuration
+
+ An implementation MUST be configurable by the following parameters:
+
+ Configuration version
+
+ The version number of the given configuration entity. Version
+ numbers allow implementations to check if they can process the
+ entries of a given configuration entity. Version number are
+ integer values. The version number for the version specified
+ here is 1.
+
+ Encryption key
+
+ The secret key used for message encryption.
+
+ Hash key
+
+ The hash key used for message authentication.
+
+ Scope
+
+ The multicast scope to be used for sent messages.
+
+ The above parameters are mandatory and MUST be present in every Mbus
+ configuration entity.
+
+ The following parameters are optional. When they are present they
+ MUST be honored. When they are not present implementations SHOULD
+ fall back to the predefined default values (as defined in Transport
+ (Section 6)):
+
+ Address
+
+ The non-standard multicast address to use for message
+ transport.
+
+ Use of Broadcast
+
+ It can be specified whether broadcast should be used. If
+ broadcast has been configured implementations SHOULD use the
+ network broadcast address (as specified in Section 6.1.3)
+ instead of the standard multicast address.
+
+
+
+
+
+Ott, et. al. Informational [Page 31]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ Port Number
+
+ The non-standard UDP port number to use for message transport.
+
+ Two distinct facilities for parameter storage are considered: For
+ Unix-like systems a per-user configuration file SHOULD be used and
+ for Windows-95/98/NT/2000/XP systems a set of registry entries is
+ defined that SHOULD be used. For other systems it is RECOMMENDED
+ that the file-based configuration mechanism is used.
+
+ The syntax of the values for the respective parameter entries remains
+ the same for both configuration facilities. The following defines a
+ set of ABNF (see RFC 2234 [13]) productions that are later re-used
+ for the definitions for the configuration file syntax and registry
+ entries:
+
+ algo-id = "NOENCR" / "AES" / "DES" / "3DES" / "IDEA" /
+ "HMAC-MD5-96" / "HMAC-SHA1-96"
+
+ scope = "HOSTLOCAL" / "LINKLOCAL"
+
+ key = base64
+
+ version_number = 1*10DIGIT
+
+ key_value = "(" algo-id "," key ")"
+
+ address = IPv4address / IPv6address / "BROADCAST"
+
+ port = 1*5DIGIT ; values from 0 through 65535
+
+ Given the definition above, a key entry MUST be specified using this
+ notation:
+
+ "("algo-id","base64string")"
+
+ algo-id is one of the character strings specified above. For algo-
+ id=="NOENCR" the other fields are ignored. The delimiting commas
+ MUST always be present though.
+
+ A Base64 string consists of the characters defined in the Base64
+ char-set (see RFC 1521 [7]) including all possible padding
+ characters, i.e., the length of a Base64-string is always a multiple
+ of 4.
+
+ The scope parameter is used to configure an IP-Multicast scope and
+ may be set to either "HOSTLOCAL" or "LINKLOCAL". Implementations
+ SHOULD choose an appropriate IP-Multicast scope depending on the
+
+
+
+Ott, et. al. Informational [Page 32]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ value of this parameter and construct an effective IP-Address
+ considering the specifications of Section 6.1.
+
+ The use of broadcast is configured by providing the value "BROADCAST"
+ for the address field. If broadcast has been configured,
+ implementations SHOULD use the network broadcast address for the used
+ IP version instead of the standard multicast address.
+
+ The version_number parameter specifies a version number for the used
+ configuration entity.
+
+12.1 File based parameter storage
+
+ The file name for an Mbus configuration file is ".mbus" in the user's
+ home-directory. If an environment variable called MBUS is defined
+ implementations SHOULD interpret the value of this variable as a
+ fully qualified file name that is to be used for the configuration
+ file. Implementations MUST ensure that this file has appropriate
+ file permissions that prevent other users to read or write it. The
+ file MUST exist before a conference is initiated. Its contents MUST
+ be UTF-8 encoded and MUST comply to the following syntax definition:
+
+ mbus-file = mbus-topic LF *(entry LF)
+
+ mbus-topic = "[MBUS]"
+
+ entry = 1*(version_info / hashkey_info
+ / encryptionkey_info / scope_info
+ / port_info / address_info)
+
+ version_info = "CONFIG_VERSION=" version_number
+
+ hashkey_info = "HASHKEY=" key_value
+
+ encrkey_info = "ENCRYPTIONKEY=" key_value
+
+ scope_info = "SCOPE=" scope
+
+ port_info = "PORT=" port
+
+ address_info = "ADDRESS=" address
+
+ The following entries are defined: CONFIG_VERSION, HASHKEY,
+ ENCRYPTIONKEY, SCOPE, PORT, ADDRESS.
+
+ The entries CONFIG_VERSION, HASHKEY and ENCRYPTIONKEY are mandatory,
+ they MUST be present in every Mbus configuration file. The order of
+ entries is not significant.
+
+
+
+Ott, et. al. Informational [Page 33]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ An example for an Mbus configuration file:
+
+ [MBUS]
+ CONFIG_VERSION=1
+ HASHKEY=(HMAC-MD5-96,MTIzMTU2MTg5MTEy)
+ ENCRYPTIONKEY=(DES,MTIzMTU2MQ==)
+ SCOPE=HOSTLOCAL
+ ADDRESS=224.255.222.239
+ PORT=47000
+
+12.2 Registry-based parameter storage
+
+ For systems lacking the concept of a user's home-directory as a place
+ for configuration files the suggested database for configuration
+ settings (e.g., the Windows9x, Windows NT, Windows 2000, Windows XP
+ registry) SHOULD be used. The hierarchy for Mbus related registry
+ entries is as follows:
+
+ HKEY_CURRENT_USER\Software\Mbus
+
+ The entries in this hierarchy section are:
+
+ +---------------+--------+----------------+
+ |Name | Type | ABNF production|
+ +---------------+--------+----------------|
+ |CONFIG_VERSION | DWORD | version_number |
+ |HASHKEY | String | key_value |
+ |ENCRYPTIONKEY | String | key_value |
+ |SCOPE | String | scope |
+ |ADDRESS | String | address |
+ |PORT | DWORD | port |
+ +---------------+--------+----------------+
+
+ The same syntax for key values as for the file based configuration
+ facility MUST be used.
+
+13. Security Considerations
+
+ The Mbus security mechanisms are specified in Section 11.1.
+
+ It should be noted that the Mbus transport specification defines a
+ mandatory baseline set of algorithms that have to be supported by
+ implementations. This baseline set is intended to provide reasonable
+ security by mandating algorithms and key lengths that are considered
+ to be cryptographically strong enough at the time of writing.
+
+ However, in order to allow for efficiency it is allowable to use
+ cryptographically weaker algorithms, for example HMAC-MD5 instead of
+
+
+
+Ott, et. al. Informational [Page 34]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ HMAC-SHA1. Furthermore, encryption can be turned off completely if
+ privacy is provided by other means or not considered important for a
+ certain application.
+
+ Users of the Mbus should therefore be aware of the selected security
+ configuration and should check if it meets the security demands for a
+ given application. Since every implementation MUST provide the
+ cryptographically strong algorithm it should always be possible to
+ configure an Mbus in a way that secure communication with
+ authentication and privacy is ensured.
+
+ In any way, application developers should be aware of incorrect IP
+ implementations that do not conform to RFC 1122 [2] and do send
+ datagrams with TTL values of zero, resulting in Mbus messages sent to
+ the local network link although a user might have selected host local
+ scope in the Mbus configuration. When using administratively scoped
+ multicast, users cannot always assume the presence of correctly
+ configured boundary routers. In these cases the use of encryption
+ SHOULD be considered if privacy is desired.
+
+14. IANA Considerations
+
+ The IANA has assigned a scope-relative multicast address with an
+ offset of 8 for Mbus/IPv4. The IPv6 permanent multicast address is
+ FF0X:0:0:0:0:0:0:300.
+
+ The registered Mbus UDP port number is 47000.
+
+15. References
+
+ [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [2] Braden, R., "Requirements for Internet Hosts -- Communication
+ Layers", STD 3, RFC 1122, October 1989.
+
+ [3] Hinden, R. and S. Deering, "IP Version 6 Addressing
+ Architecture", RFC 2373, July 1998.
+
+ [4] Hinden, R. and S. Deering, "IPv6 Multicast Address
+ Assignments", RFC 2375, July 1998.
+
+ [5] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC: Keyed-Hashing
+ for Message Authentication", RFC 2104, February 1997.
+
+ [6] Resnick, P., Editor, "Internet Message Format", RFC 2822, April
+ 2001.
+
+
+
+
+Ott, et. al. Informational [Page 35]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+ [7] Borenstein, N. and N. Freed, "MIME (Multipurpose Internet Mail
+ Extensions) Part One: Mechanisms for Specifying and Describing
+ the Format of Internet Message Bodies", RFC 1521, September
+ 1993.
+
+ [8] Schulzrinne, H., Casner, S., Frederick, R. and V. Jacobsen,
+ "RTP: A Transport Protocol for Real-Time Applications", RFC
+ 1889, January 1996.
+
+ [9] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg,
+ "SIP: Session Initiation Protocol", RFC 2543, March 1999.
+
+ [10] Handley, M. and V. Jacobsen, "SDP: Session Description
+ Protocol", RFC 2327, April 1998.
+
+ [11] Meyer, D., "Administratively Scoped IP Multicast", BCP 23, RFC
+ 2365, July 1998.
+
+ [12] Balenson, D., "Privacy Enhancement for Internet Electronic
+ Mail: Part III: Algorithms, Modes, and Identifiers", RFC 1423,
+ February 1993.
+
+ [13] Crocker, D. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", RFC 2234, November 1997.
+
+ [14] Myers, J., "SMTP Service Extension for Authentication", RFC
+ 2554, March 1999.
+
+ [15] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, April
+ 1992.
+
+ [16] U.S. DEPARTMENT OF COMMERCE/National Institute of Standards and
+ Technology, "Data Encryption Standard (DES)", FIPS PUB 46-3,
+ Category Computer Security, Subcategory Cryptography, October
+ 1999.
+
+ [17] U.S. DEPARTMENT OF COMMERCE/National Institute of Standards and
+ Technology, "Secure Hash Standard", FIPS PUB 180-1, April 1995.
+
+ [18] Daemen, J.D. and V.R. Rijmen, "AES Proposal: Rijndael", March
+ 1999.
+
+ [19] IANA, "Internet Multicast Addresses", URL
+ http://www.iana.org/assignments/multicast-addresses, May 2001.
+
+ [20] Schneier, B., "Applied Cryptography", Edition 2, Publisher John
+ Wiley & Sons, Inc., status: non-normative, 1996.
+
+
+
+
+Ott, et. al. Informational [Page 36]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+Appendix A. About References
+
+ Please note that the list of references contains normative as well as
+ non-normative references. Each Non-normative references is marked as
+ "status: non-normative". All unmarked references are normative.
+
+Appendix B. Limitations and Future Work
+
+ The Mbus is a light-weight local coordination mechanism and
+ deliberately not designed for larger scope coordination. It is
+ expected to be used on a single node or -- at most -- on a single
+ network link.
+
+ Therefore the Mbus protocol does not contain features that would be
+ required to qualify it for the use over the global Internet:
+
+ There are no mechanisms to provide congestion control. The issue
+ of congestion control is a general problem for multicast
+ protocols. The Mbus allows for un-acknowledged messages that are
+ sent unreliably, for example as event notifications, from one
+ entity to another. Since negative acknowledgements are not
+ defined there is no way the sender could realize that it is
+ flooding another entity or congesting a low bandwidth network
+ segment.
+
+ The reliability mechanism, i.e., the retransmission timers, are
+ designed to provide effective, responsive message transport on
+ local links but are not suited to cope with larger delays that
+ could be introduced from router queues etc.
+
+ Some experiments are currently underway to test the applicability of
+ bridges between different distributed Mbus domains without changing
+ the basic protocol semantics. Since the use of such bridges should
+ be orthogonal to the basic Mbus protocol definitions and since these
+ experiments are still work in progress there is no mention of this
+ concept in this specification.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 37]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+Authors' Addresses
+
+ Joerg Ott
+ TZI, Universitaet Bremen
+ Bibliothekstr. 1
+ Bremen 28359
+ Germany
+
+ Phone: +49.421.201-7028
+ Fax: +49.421.218-7000
+ EMail: jo@tzi.uni-bremen.de
+
+
+ Colin Perkins
+ USC Information Sciences Institute
+ 3811 N. Fairfax Drive #200
+ Arlington VA 22203
+ USA
+
+ EMail: csp@isi.edu
+
+
+ Dirk Kutscher
+ TZI, Universitaet Bremen
+ Bibliothekstr. 1
+ Bremen 28359
+ Germany
+
+ Phone: +49.421.218-7595
+ Fax: +49.421.218-7000
+ EMail: dku@tzi.uni-bremen.de
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 38]
+
+RFC 3259 A Message Bus for Local Coordination April 2002
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2002). All Rights Reserved.
+
+ This document and translations of it may be copied and furnished to
+ others, and derivative works that comment on or otherwise explain it
+ or assist in its implementation may be prepared, copied, published
+ and distributed, in whole or in part, without restriction of any
+ kind, provided that the above copyright notice and this paragraph are
+ included on all such copies and derivative works. However, this
+ document itself may not be modified in any way, such as by removing
+ the copyright notice or references to the Internet Society or other
+ Internet organizations, except as needed for the purpose of
+ developing Internet standards in which case the procedures for
+ copyrights defined in the Internet Standards process must be
+ followed, or as required to translate it into languages other than
+ English.
+
+ The limited permissions granted above are perpetual and will not be
+ revoked by the Internet Society or its successors or assigns.
+
+ This document and the information contained herein is provided on an
+ "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+ TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+ HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ott, et. al. Informational [Page 39]
+