serval-dna/doc/Mesh-Datagram-Protocol.md

58 lines
2.7 KiB
Markdown
Raw Normal View History

Mesh Datagram Protocol (MDP)
============================
[Serval Project], May 2014
The [Mesh Datagram Protocol][MDP] is a network protocol developed for the
[Serval mesh network][], with characteristics that make it particularly
suitable for use in Ad Hoc wireless networks, which can suffer high levels of
packet loss due to weak signal, interference and congestion.
MDP carries [datagram][] packets sent from an originating node to a single
destination node or broadcast to all nodes, guaranteeing only that packet
contents will be verbatim if delivered. MDP is similar to [UDP][] in terms of
the service it provides to applications, but unlike UDP it uses a per-hop
[retransmission][] protocol and adaptive link-state routing to boost packet
delivery rates, which largely immunises it from the cumulative packet loss
effect typical of wireless networks. This means that its end-to-end packet
delivery rate remains usefully high despite adverse network conditions.
**Copyright 2014 Serval Project Inc.** All rights reserved. Licensing terms
to be announced.
Overlay Mesh
------------
MDP packets are transmitted over a network link using the [Overlay Mesh][]
packet format, which aggregates packets into *overlay frames* which are
designed to minimise packet size. Each overlay frame uses back references to
avoid repeating [SID][] addresses unnecessarily within the frame, and [SID
abbreviation][] to significantly shorten [SID][] addresses that have been used
in prior frames.
MDP Interface
-------------
The [Serval DNA][] daemon provides an interface that allows client applications
to send and receive individual MDP packets on the [Serval mesh network][]
without having to construct and disassemble Overlay Mesh frames on their own.
MDP API
-------
The MDP API is a [C language][] [API][] that an application can use to send and
receive MDP packets over the [Serval mesh network][] using the
[interface](#mdp-interface) provided by the [Serval DNA][] daemon.
[Serval Project]: http://www.servalproject.org/
[Serval mesh network]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:tech:mesh_network
[Serval DNA]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:servaldna:
[MDP]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:tech:mdp
[datagram]: http://en.wikipedia.org/wiki/Datagram
[UDP]: http://en.wikipedia.org/wiki/User_Datagram_Protocol
[Overlay Mesh]: ./Overlay-Mesh.md
[SID]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:tech:sid
[SID abbreviation]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:tech:sid_abbreviation
[C language]: http://en.wikipedia.org/wiki/C_(programming_language)
[API]:http://en.wikipedia.org/wiki/Application_programming_interface