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

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/