[aprssig] APRS protocol replacement ideas: protobuf

Lynn W Deffenbaugh (Mr) KJ4ERJ at arrl.net
Sat Feb 12 17:19:26 EST 2022


I'm only going to weigh in on protobufs with a single comment:   
Non-readable by mere humans therefore harder to diagnose for 
non-technical users.  Human readability is one thing that the current 
APRS payloads (excluding Mic-E, which I also don't care for) has going 
for it.

Oh, and picture just how mangled a protobuf would be if someone is 
running PassAll in their TNC or has bit-errors being introduced by RFI 
along their serial cable.

Lynn (D) - KJ4ERJ - Author of APRSISCE for Windows Mobile and Win32




On 2/12/2022 4:00 PM, Heikki Hannikainen wrote:
> On Sat, 12 Feb 2022, Andrew Pavlin via aprssig wrote:
>
>> If we start using a more verbose protocol, then we have longer 
>> packets, and more likelihood of a single bit error that makes the 
>> whole thing useless.
>
> I'm not going to advocate for creating yet another encoding of APRS, 
> due to the obvious practical issues (backwards compatibility, legacy 
> fleet, fragmentation, etc), but for the sake of the argument, I'd like 
> to make a fair comparison based on actual data.
>
> A protobuf encoded packet format would be very similar in size than 
> the existing APRS encodings, if the same data is transmitted.
>
> It would also be extensible, and have higher resolution for the 
> numeric fields, without being much larger. If for some reason a new 
> protocol would be needed, for LoRa or some other new development where 
> there wouldn't be such backwards compatibility requirements, I think 
> it'd make a great contestant!
>
> I spent some 30 minutes doing a little demo which encodes equivalent 
> info using protobuf and compares the lengths with Mic-E and 
> uncompressed formats. The code is here, the .proto file is the schema:
>
>    https://github.com/hessu/aprs-protobuf-test
>
> $ python3 test.py
> Protobuf: b'\n\x0f\rj\xa6pB\x15T\xae\xc1A\x18y 
> \x8e\x02\x12\x02/>\x18\xef\xab\xa0\x90\x06R\x17Hessu, https://aprs.fi/'
> Len: 52
> Plain: b'@191500h6016.25N/02421.91E$270/052 Hessu, https://aprs.fi/!wPv!'
> Len: 63
> Mic-E: b'`w(mpSU>/\'"4.}Hessu, https://aprs.fi/!wbC!'
> Len: 42
> Mic-E with timestamp: b'@191500h`w(mpSU>/\'"4.}Hessu, 
> https://aprs.fi/!wbC!'
> Len: 50
>
> Mic-E is shorter than the Protocol Buffers message, protobuf is 
> shorter than uncompressed. The protobuf messages are not ASCII, the 
> non-printable bytes are shown in hexadecimal (\x18 is one byte of 
> 0x18). The Mic-E packets have one escaped single quote too, but none 
> of those escapes are included in the length measurements, they're done 
> on raw bytes.
>
> The first Mic-E packet doesn't have a timestamp - if one would be 
> added (so that recipients can better filter out-of-order & duplicate 
> packets), it would be 8 bytes longer, 50 bytes. The uncompressed and 
> protobuf versions have a timestamp. The APRS timestamp only contains 
> hours, minutes and seconds. The protobuf version has an unix 
> timestamp, accurate to the second, with full date in it too.
>
> On the other hand, the protobuf packet has much more precision and 
> range - coordinates are 32-bit floating point, speed is an unscaled 
> integer that can go to rocket speeds without loosing precision, and so 
> on. If the !DAO! extension would be dropped, Mic-E would be 5 bytes 
> shorter. Byonics sends !DAO!, Kenwood probably doesn't, Yaesu doesn't.
>
> I think that 10 bytes could be sacrificed, if for that we get the 
> precision, the possibility to extend easily, and most importantly, 
> remove the need to implement custom encoders and decoders by hand. 10 
> bytes is some 67 milliseconds at 1200 bit/s.
>
> In any case, with similar data contents, comparable packet length. The 
> protobuf packet could be made shorter by reducing data precision and 
> some custom encoding, but then the encoding & decoding would require 
> some more lines of custom code.
>
>> So, don't look at protobufs as a savior. If anything, it will allow 
>> the packets to grow rapidly with extra optional fields, so that the 
>> channel is clogged faster with longer transmissions and more collisions.
>
> On the other hand, there is nothing in the current APRS protocol which 
> would prevent people from making silly long transmissions by using 
> large txdelays, VOX on a Baofeng with a 1-second tail, or just very 
> long comment strings and digipeater paths. Nothing prevents developers 
> from adding custom extensions in the end of the packet either, or 
> creating applications which are spammy, or users from configuring too 
> frequent or long transmissions.
>
> For channel clogging, I suspect things could be improved by 
> applications which simply would not let users configure too long 
> paths, too long comment strings, or too frequent transmissions.
>
>> And protobufs isn't self-describing at the wire level, any more than 
>> APRS or OpenTRAC is.
>
> Right; but on the upside, it can be described with a simple schema 
> file that is easy to share, and easy to convert to code which does 
> encoding and decoding.
>
> If a tight serialization is wanted, the format cannot be 
> self-describing. If it needs to be self-describing, it'll be more like 
> JSON or XML, and it'll be rather big.
>
> To me, protobuf doesn't seem much fatter than the current encodings. A 
> litle fatter than Mic-E or compressed, but that's because it has more 
> resolution in the numeric fields.
>
> No, I don't believe this is in any way practical for APRS today. This 
> is just an academic discussion, and food for thought if someone is 
> considering new a non-APRS protocol. :)
>
>   - Hessu, OH7LZB/AF5QT
>
>
> _______________________________________________
> aprssig mailing list
> aprssig at lists.tapr.org
> http://lists.tapr.org/mailman/listinfo/aprssig_lists.tapr.org





More information about the aprssig mailing list