2014-05-16 03:16:35 +00:00
|
|
|
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
|
2014-05-19 07:56:54 +00:00
|
|
|
the service it provides to applications, but it uses per-hop retransmission and
|
|
|
|
adaptive link-state routing to boost packet delivery rates, which largely
|
|
|
|
immunises it from the cumulative packet loss effect typical of multi-hop
|
|
|
|
wireless networks. This means that its end-to-end, multi-hop packet delivery
|
|
|
|
rate remains usefully high despite adverse network conditions.
|
2014-05-16 03:16:35 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2014-05-19 07:58:42 +00:00
|
|
|
-----
|
|
|
|
**Copyright 2014 Serval Project Inc.**
|
|
|
|
![CC-BY-4.0](./cc-by-4.0.png)
|
|
|
|
Available under the [Creative Commons Attribution 4.0 International licence][CC BY 4.0].
|
|
|
|
|
2014-05-16 03:16:35 +00:00
|
|
|
|
|
|
|
[Serval Project]: http://www.servalproject.org/
|
2014-05-21 07:59:22 +00:00
|
|
|
[CC BY 4.0]: ../LICENSE-DOCUMENTATION.md
|
2014-05-16 03:16:35 +00:00
|
|
|
[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
|