Meshtastic Flooding Mesh Protocol Explained Understanding how Meshtastic actually routes messages helps you make better configuration decisions and troubleshoot problems faster. Flooding: The Core Mechanism Meshtastic uses a flooding broadcast approach to message delivery. When you send a message: Your node broadcasts the packet over LoRa Every node that receives it checks whether it has seen this packet before (via a packet ID hash) If not seen before: the node rebroadcasts the packet (with hop count decremented by 1) If seen before, or if hop count = 0: the node discards the packet This is called "flooding" because the packet spreads outward like a flood, covering every node in range up to the hop limit. Every node participates in delivery - there's no designated router. Hop Count and Hop Limit Every Meshtastic packet carries a hop count. When a packet is first sent, it starts at the configured hop_limit (default: 3). Each time a node rebroadcasts the packet, it decrements the hop count. When hop count reaches zero, nodes still receive but don't rebroadcast. This means a hop_limit of 3 allows a message to be relayed through 3 intermediate nodes, reaching a destination 4 "hops" away from the source. # Check current hop limit: meshtastic --get lora.hop_limit # Change hop limit (3 is default, 7 is maximum): meshtastic --set lora.hop_limit 5 Duplicate Suppression Without duplicate suppression, flooding would create infinite loops - every node would keep rebroadcasting forever. Meshtastic prevents this by: Maintaining a "recently seen" packet ID cache (stored in RAM) Each packet has a unique ID (sender node ID + packet sequence number) If a node has seen a packet ID recently, it discards the duplicate without rebroadcasting Addressing: Broadcast vs Direct Meshtastic packets can be addressed two ways: Broadcast (channel messages) - Addressed to all nodes (0xFFFFFFFF). Every node in the network receives and can read the message. Direct (DM messages) - Addressed to a specific node ID. Only the destination node decodes the message content, but intermediate nodes still rebroadcast the packet (they just can't read it). Why Flooding Works Well for Small Networks For networks up to ~50-100 nodes, flooding is remarkably effective: No routing tables to maintain or synchronize Extremely simple - even new, unconfigured nodes automatically participate in delivery Redundant paths - if one relay node is down, another may bridge the gap Works well in dynamic environments where nodes join and leave frequently Flooding's Limitations in Large Networks As networks grow, flooding creates a "broadcast storm" problem: One message from one node may generate 3-7 retransmissions across the network Channel utilization increases with each new node; at high utilization, packets collide and delivery rates drop A 200-node network with active users can saturate the LoRa channel, causing significant packet loss This is why MeshCore's path-based routing scales better for large networks - but for most community networks under 100 active nodes, Meshtastic flooding works well.