World Wide Conferencing Protocol
links will appear here some time 'soon'.
    The World Wide Conferencing Protocol is a highly scalable distributed protocol for text-based realtime conferencing. A preliminary version has been presented at the student's conference Gronics '95 in march 1995, Groningen, The Netherlands. The paper is available as postscript, and soon also as plaintext.
    This document describes the design, specification and internal working of the protocol. It is a bit outdated; more formal specs can be found on this page.
Contents
  1. Introduction
  2. Model
  3. Design Objectives
    1. Scalability
    2. Robustness
    3. Maintainability
    4. Distribution
  4. Design Decisions
    1. Internal Representations
    2. Channel Membership
    3. Routing
  5. Protocol Architecture
  6. Protocol Specification
    1. Specification method
    2. Network Interface Layer
    3. Multicast Layer
    4. Client Layers
    5. Server Layer
  7. Algorithms
    1. Routing Algorithms
    2. Rerouting Algorithm
    3. Sum Algorithm
  8. Protocol implementation
  9. Still to do
  10. Why have I done all this work!?

Introduction

As the Internet becomes available to the masses, the need for online conferencing systems grows. This need is fulfilled by the design of small-scale multimedia conferencing systems, but another type of system is desired: a world spanning system that allows people from around the world to meet and exchange thoughts, opinions and culture, or to cooperate for their profession or in their spare time. Such systems already exist, like IRC. However, they tend to scale bad, in bandwidth usage, CPU usage as well as memory usage. The objective of this project is to design a highly scalable protocol that can be used to setup a large system for realtime text-based conferencing. It should be easy to extend the protocol for other media, like audio and video. The principles needed to create a highly scalable distributed system shall be developed on the fly. Some of these principles can be deployed in other distributed systems as well.

This work has been conducted by Gerrit Hiddink in his spare time. If you would like to sponsor this work, donate something, hire me or if you want to know more, contact me

Model

The target protocol assumes a network of nodes that keep and exchange state information, and clients that connect to nodes to make use of their service. The node contains, amongst others, a conferencing server. The connections between nodes are called links. Clients are programs that run on the computer of the user that wants to be involved in a conversation.
The network connections are reliable point to point connections. Each network node has a unique address within that network. A node may have connections on different types of networks, so that information can travel from one network to another.
Conversations take place in channels. A channel has a unique symbolic name, which is used to refer to it. A client can join a channel, after which all events on that channel are sent to the client by the server the client is connected to, and everything the client does on the channel is sent to all clients on the channel. An event can be a client joining or leaving a channel, or a client saying something on a channel. A client can join more than one channel at a time.
A special type of channel is the newschannel, which are meant for news distribution or other one-way traffic. In these channels, senders are distinguished from receivers, in that receivers cannot cause any public event on a channel.
Clients can also send private messages to eachother, invite eachother to join channels, or ignore all events from another client.

Design Objectives

Scalability

One of the main objectives is scalability. In spite of the fact that a large part of scalability properties are caused by the way the protocol is implemented, the protocol still has to be inherently scalable. Its bandwidth consumption, as well as its processing power needs and memory consumption have to scale well with the total number of users, channels and nodes participating in the target system. All of these resources should scale linear or less to any of the mentioned parameters.

Robustness

The object protocol has to be able to cope with network outages, without a disruption of the offered service. This implies that the routing mechanisms have to be able to reroute traffic via backup routes when main routes become invalid. If, due to disconnecting links, the network of nodes becomes partitioned then the service will be disrupted. The disruption, however, will only involve users originating from a part of the network that is not connected to the client experiencing the disruption. Also, when a node (silently) crashes, causing several routes to become invalid, the disruptions in the service will only involve users from the crashing node.

Maintainability

Are there any maintainability constraints to the design of the protocol?

Distribution

The protocol should be distributed, in that it runs on multiple processing units that communicate through communication links. Whenever the load of the processing units becomes too high, it should be possible to add extra units to reduce the load of individual units.

Network Independency

The protocol should be designed such that an implementation can be made independent of the network it runs on.

Design Decisions

node is identified by a globally unique 32bit digit.
  • A client is identified by the serverID of the server it is connected to, and a 16bit digit that is unique to the server.
  • A client has an attribute "nickname", which does not need to be unique.

    Channel membership

    A server that is interrested in receiving events on a certain channel (on behalf of one of its clients), requests this from the servers that also "carry" that channel. Any server that is not interrested in the channel, only knows that it exists and what its (permanent) characteristics are.

    Routing

    Inconsistent messages are bounced, so that the originating server can determine what went wrong and supply the destination server with information to make that particular part of state information consistent again.

    Protocol Architecture

    The functionality of the entire conferencing protocol has been seperated into three functional units:
    • The Network Interface Layer which takes care of opening, maintaining and closing connections, the actual sending and receiving of data on connections, and maintaining a database about the existing connections. These connections include all kinds of connections, for example with other nodes, or with clients or other entities.
    • The Multicast Layer uses the service of the NIL layer to offer a datagram multicast service. In order to route the datagrams, it also maintains routing information and exchanges routing control (signaling) messages with other MCAST peers. It allows datagrams to be unicast (to one node), multicast (to a group of nodes) or broadcast (to all nodes online). It also offers creation, manipulation and deletion of multicast groups.
    • Client layers take care of servicing an individual user via a client protocol. There is not yet a specific WWCP client protocol; for the time being, the client part of the IRC protocol. Client layers use the NIL layer to communicate, rather than the MCAST layer.
    • The Server Layer uses the MCAST layer to exchange information with groups of servers to implement a Conferencing application. To do this, it maintains a database of users, channels, and associations between users and channels. It offers functions (at a programming level) to change the database, and these functions are either activated by messages arriving from other servers (via the MCAST layer), or by messages received by one of the Client layers.
    There reason to choose this architecture, is to seperate the entire functionality of the protocol into a concerns. Each layer will maintain whatever information is necessary to fulfill its task (or better: to implement a service). It will hide the details of how it stores and retrieves the information, and even what kind of information it keeps. This seperation of concerns will help structuring the implementation, in making it modular, and making code as independent as possible. Thus, relatively small independent pieces of code are created; these are easy to write and to maintain.

    Protocol Specification

    Specification Method

    Several aspects need to be covered by a specification: the definition of the service the protocol offers, the underlying service it expects, and the behaviour of the protocol: what service primitives should occur under what conditions and with what internal state information; how is the state information changed when primitives occur. If data units are exchanged, then the syntax of this data needs to be specified too.
    In the following, for each protocol layer a formal specification of its service primitives are given, followed by a summary of the messages that are used by the layer. Finally, a behavioral description in English is given.

    Network Interface Layer

    • NIL_ConnReq (LinkID, Address)
      requests a connection to be made to the specified address. The value of the parameter LinkID belonging to the link that has been created, is determined during the interaction and can be used afterwards to refer to the link.

    • NIL_ConnInd (LinkID, NodeID)
      indicates that a link to the node with the specified ID has been made on the indicated link identifier.

    • NIL_DataReq (LinkID, Message)
      requests a message to be sent across the indicated link.

    • NIL_DataInd (LinkID, Message)
      indicates that a message has been received on the indicated link.

    • NIL_DiscReq (LinkID)
      requests the indicated link to be disconnected

    • NIL_DiscInd (LinkID)
      indicates that the specified link has been disconnected

    • NIL_SetQoS (LinkID, QoS)
      requests the Quality of Service of the specified link to be updated.

    Multicast Layer

    • MCAST_DataReq (Group, Message)
      requests the message to be sent to the indicated multicast group.

    • MCAST_DataInd (Server, Message, Broadcasted)
      indicates the arrival of a message from the indicated server. "Broadcasted" is a boolean that is set to TRUE if the message has been broadcasted, and FALSE otherwise.

    • MCAST_SumReq (Message, Reference)
      requests a Sum algorithm to be initiated by this node. The message is delivered to the other nodes, the replies are collected and processed, and the result is sent back using a MCAST_SumInd message.

    • MCAST_SumReply (Server, ll_Reference, Message)

    • MCAST_SumInd (Server, ll_Reference, Message, Reference)

    • MCAST_ConnInd (Server)

    • MCAST_Unreachable (Server)

    • MCAST_Register (Group, List of ServerID)

    • MCAST_Unregister (Group)

    • MCAST_GroupAdd (Group, ServerID)

    • MCAST_GroupDelete (Group, ServerID)

    • MCAST_Broadcast (Message)

    • MCAST_Route_Hint (Destination, Via)

    Client Layers

    Server Layer


    Algorithms

    Routing Algorithms

    Rerouting algorithms

    Sum Algorithm


    Protocol Implementation


    Still to do

    • eliminating the last scalability barriers by introducing routing hubs
    • enforcing a hierarchic channel namespace

    Why have I done all this work!?

    Uhm, somebody's got to do it...

  • (c) 1996 by G. Hiddink

    If you have any comments, please mail to grit@wwcn.student.utwente.nl