The difference between packets and frames is a common point of confusion for beginners. There is (and should be) no prefixed length field or similar in a packet; it is an abstract representation, already bounded by whatever memory structure it is held in. The payload length is directly inferrable from that.
A frame is an actual, physical instance of the bitstream that corresponds to that packet on some kind of wire/medium in some kind of encoding. It is up to the interface driver and physical interface to ensure the correct framing of a packet, so that it can correctly be encoded, decoded and delimited. This framing/deframing may happen multiple times over the physical data path.
Various Reticulum interface types use HDLC framing, for the simple reason that it is as close to an optimal framing methodology we can get. See:
99efa20b2cca9df14d30804f834b9808:/page/entry.mu`zim=wikipedia_en_all_nopic_2026-06.zim|entry_path=HDLC
Alternative node:
eb7ffc2aa94dd39cf671dabfc6112bf7:/page/entry.mu`archive_path=/storage/wikipedia_en_all_nopic_2026-03.zim|entry_path=HDLC
It is efficient, simple to implement, fast and self-healing. The "naive" method of prefixing a payload length field is not very robust, and prone to cascading failure on physical medium errors.
In some special cases, there may be good reasons for using other framing methods, but generally, there isn't.