First cut at Overview finished.
[toils-of-ais:toils-of-ais.git] / text
1 = The Toils of AIS: A Case Study in Application Protocol Design And Analysis =
2 Eric S. Raymond <esr@thyrsus.com>
3 Kurt Schewhr <schwehr@ccom.unh.edu>
4
5 == Introduction ==
6
7 The authors have written several decoders for the rather complex AIS
8 protocol used by marine safety and navigation systems.  Based on this
9 experience, we put forward some lessons learned and design principles
10 that we think should be heeded in the extension of AIS and the design
11 of future application protocols.  We also offer pragmatic advice to
12 those implementing decoders for AIS and similar application
13 protocols.
14
15 == Overview of AIS ==
16
17 The Marine Automatic Identification System (AIS) is a software and
18 hardware protocol that allows ships to broadcast navigational and
19 other status information for use in collision avoidance, navigation,
20 and traffic management.  Early design work on it was done primarily
21 by the U.S. Coast Guard; it is now maintained by the Internatiuonal
22 Telecommunications Union in association with the International
23 Maritime Organization.
24
25 Both the design of AIS and the process by which it evolved are
26 representative of a large class of application protocols in the real
27 world, especially those concerned with geolocation and geographic
28 information systems. A marked feature of AIS, however, is that due to
29 the hazards of operation at sea the information it handles can be
30 immediately life-critical.  This gives software defects in decoders a
31 special significance and raises the stakes in our design analysis.
32
33 The physical layer of AIS uses a variant of TDMA packet radio to avoid
34 collisions among AIS transmitters serving either of two operating
35 frequencies. For our purposes, the physical layer can be largely
36 ignored and AIS viewed as a mechanism for passing around binary
37 datagrams in either an addressed or broadcast mode. (For AIS purposes
38 an "address" is a MMSI, a 9-digit numeric Mobile Marine Service
39 Identifier associated with a ship or shore station.)
40
41 The binary datagrams have a fixed header containing a type field
42 followed by information that varies by type in complex ways.
43 Payload information is encoded mainly as packed numeric bitfields
44 of lengths varying from 1 to 28; these may be interpreted as
45 boolean flags, unsigned or signed two's-complement big-endian integers,
46 indices into controlled vocabularies, or (implicitly, via scaling
47 formulas) as fixed-point real numbers.  Some messages have longer
48 regions that are interpreted as character strings or treated as
49 opaque binary blobs to be passed to from or to helper applications.
50
51 Typical data items to be extracted from AIS bitfields include
52 latitudes, longitudes, vessel course and speed, capabilities
53 of the transmitting vessel or station, and weather or 
54 safety conditions. Some message fields are passed solely for the
55 AIS system's own housekeeping functions.
56
57 In practice, software engineers are unlikely to encounter AIS
58 datagrams in raw binary form. AIS receivers commonly make them
59 available over RS422, RS232 and USB ports in an ASCII-armored
60 byte-stream form called AIVDM/AIVDO, a profile or variant of the NMEA
61 format commonly used in shipboard navigation and control systems.
62
63 The overall complexity of AIS is well indicated by the bulk of the
64 base specification, <<ITU1371>>.  In the current Version 4 there are
65 27 message types with lengths varying from 72 to 1008 bits, described
66 by 142 pages of dense standarsese. It is supplemented by two
67 International Marine Organization circulars (<<IMO236>> and
68 <<IMO289>>) defining 24 additional message subtypes in 78 additional
69 pages of standardsese.  
70
71 Overall, the design of AIS is optimized to make efficient use of
72 scarce radio bandwidth.  It is *not* optimized for simplicity of
73 decoding; this choice has associated downstream costs to which we
74 shall return later in the paper.
75
76 A programmer's-eye view of the details of AIS/AIVDM/AIVDO is
77 maintained by one of us at <<RAYMOND1>>. Since that document is
78 available from any browser, we choose not to burden this paper with
79 duplicative details about datagram formats.  We will refer to
80 <<RAYMOND1>> frequently, and readers might benefit from skimming it
81 before proceeding.
82
83 == References ==
84
85 [bibliography]
86 - [[[RAYMOND1]]] http://gpsd.berlios.de/standards/NMEA.txt[AIVDM/AIVDO 
87   Protocol Decoding]
88
89 - [[[ITU1371]]]
90   http://www.itu.int/rec/R-REC-M.1371-4-201004-I/en[ITU 
91   Recommendation on the Technical Characteristics for a Universal
92   Shipborne Automatic Identification System (AIS) using Time Division
93   Multiple Access in the Maritime Mobile Band]. 
94
95 - [[[IMO236]]] http://www.imo.org/includes/blastData.asp/doc_id=4503/236.pdf[IMO
96    Circular 236: Guidance on the Application of AIS Binary Messages (May 2004)]
97
98 - [[[IMO289]]]
99   http://vislab-ccom.unh.edu/~schwehr/papers/2010-IMO-SN.1-Circ.289.pdf[IMO
100   SN.1/Circ.289 GUIDANCE ON THE USE OF AIS APPLICATION-SPECIFIC MESSAGES 
101   (June 2010)]
102