Introduction
One of the things that was important to get working this time around with my Linux TNC Node interface was the concept of a “NET/ROM”. Perhaps naively in a post-internet world, my mind jumped to this being a gateway between nodes available via radio and via the internet, meaning I could connect to any BBS around the world that is using “netrom”. The reality is a lot more complex.
According to the Linux Programmers Manual (man netrom)
“NET/ROM is a protocol used extensively by radio amateurs. The Linux NET/ROM protocol family permits access to these protocols via the standard networking socket metaphor.”
It would appear that NET/ROM is a protocol, not a gateway, and it overlays on top of AX/25 to provide a network stack. Poking around online, the Linux Amateur Radio AX.25 HOWTO says as much:
“The NET/ROM protocol is an attempt at a full network protocol and uses AX.25 at its lowest layer as a datalink protocol. It provides a network layer that is an adapted form of AX.25. The NET/ROM protocol features dynamic routing and node aliases.”
So what is NET/ROM?
Network Theory
If you’re familiar with any contemporary computer networking theory, you will be familiar with the OSI Model, This places the ax.25 protocol at layer 2 (data link layer) and NET/ROM at layer 3 (network layer).
Having established that NET/ROM is a layer 3 protocol, what does it do? That seemed to be a much harder question to answer on the Internet but I finally came up with an excellent article from the UK’s Online Amateur Radio Community:

- AX.25 is derived from the HDLC Protocol.
- NET/ROM adds network and transport headers to the ax.25 frame that contains
- Source and destination node information
- End-to end error and flow control
Notably, the network header is used to generate dynamic routing tables which are broadcast across the radio network, much in the same way BGP, OSPF, and RIPv2 routing protocols are used in modern networks. This allows individual nodes to make routing decisions when trying to connect to a destination, rather than manually connecting through digipeaters.
A routing broadcast to nodes can look a bit like this:
With packet sizes usually defaulting to 256 bytes and a speed of 1200 bps, as a packet network grows, having all NET/ROM nodes broadcasting regularly would saturate the packet frequency with routing packets, which is more commonly known as not having enough bandwidth. By default, routing broadcasts will happen every 60 mins (1 hour). Depending on the size and density of the packet network, this interval may be increased to reduce the amount of routing packets being broadcast over time (man netromd).
ROSE Protocol
If you have gotten this far and done a bit of online searching, it is inevitable that you will have come across ROSE routing protocol, often seen as ROSE/FPAC.
ROSE is also a network layer protocol, but it’s routing is statically generated – that is, someone manually configures the routing information. This has the advantage of being able to ensure reliable links are used to route node connections, but has the disadvantage of not being able to automatically update when new nodes come online in the network.
Summary
NET/ROM is a protocol used by radio amateurs, overlaying on top of AX.25 frame to provide a network stack. It enables communication between nodes via radio, not a gateway to the internet. The network header is used to generate dynamic routing tables, similar to BGP, OSPF, and RIPv2, enabling individual nodes to make routing decisions.
ROSE is a statically generated routing protocol, ensuring reliable links but lacking automatic updates for new nodes.
Other Reading
A couple of other excellent documents come from the official specification of AX.25 from TAPR and NotBlackMagic’s pages that take deeper dives on the network theory of AX.25:
- https://web.archive.org/web/20241218125034/http://www.tapr.org/pdf/AX25.2.2.pdf
- https://web.archive.org/web/20240912112159/https://notblackmagic.com/bitsnpieces/ax.25/
AMPR also have an excellent ax.25/netrom primer for beginners written by N1URO:
