Simple Messaging Protocol

This protocol is intended to be used to implement thread-to-thread messaging locally or over the Internet. An IP protocol number has been registered with IANA (121). Read the full specification here. Send your comments here.

Hints for developers

Effecient memory usage

The SMP implementor should observe this to use memory effeciently:

In other cases, the receiving SMP must buffer or discard the message.

ACK handling

ACKs should be piggybacked on sends or replies if possible. Datagrams without data should only be sent if the sending SMP would time-out if it wouldn't receive the answer. In heavily loaded systems, this can mean most messages would only require 2 packets instead of 3.

Window handling

SMP doesn't use explicit windows since the amount of data to transfer in each connection is alway known in advance. To handle congestion properly, it would be advantagous to combine TCPs congestion handling with SMPs.

Supported environments

If you want to help and implement the protocol in some OS, send me a mail

A portable C++ version of the protocol is beeing designed. I'll primarily concentrate on providing a Windoze version. It will be somewhat limited at first, since I'll be using the winsock2 API to get raw IP support. Later, I might port it to a kernel-mode device-driver.

Performance

The performance test I've run so far seems very promising. On 400MHz pentiums, SMP on RDOS severely outperforms Windoze-based named pipes by a factor 10. Actually, with 5 different senders, the protocol is able to use every ounce of possible performance a 10MB ethernet offers with a cheap NE2000 PCI ethernet card. The messured transaction rate was 1,000 transactions per second for each of the 5 senders.