If a message is not addressed to a node, and the node has not seen the packet ID before, the node should repeat it. Whether via the address in the cache or by broadcast, it should be passed on, and the hardware address added to the cache as the sender.
Each machine should keep a last known route cache. The exact format is up to the implementation, but it will need:
- hostname
- hardware address
- time when added to cache
It is recommended to keep the data in the cache for 30 seconds or so, then drop it, though being user-configurable is ideal.
When sending a message, check the cache for the given destination. If there is a hardware address in the cache for the destination, send the message straight to that address. Otherwise, broadcast the message.
Packets addressed to the broadcast address, an address beginning with the tilde character, `~`, ASCII 126, can optionally be received by all nodes of the same layer 2 network. While a node MAY forward a broadcast packet to other nodes, it SHOULD NOT, unless both sides of the forward are prepared to handle such a packet, to avoid it going around the entire layer 3 network.
Each node should send multicasts as layer 2 broadcasts, unless it is known (using the address cache) that all layer 3 destination addresses have to be sent to or forwarded by one layer 2 address.
When a multicast packet is forwarded, the addresses already seen SHOULD be removed from the packet when possible, using the address cache as a guide.
The same address MUST NOT be repeated in a multicast destination, but the duplicate MAY be ignored and just considered one, but also MAY br dropped as an invalid packet. A duplicate address MUST NOT be considered as two packets with the same contents to the same address.
A multicast packet SHOULD also be able to be broken up into multiple packets with the same contents (but they need different packet IDs!) with different addresses.
The address part of the packet has a furthur limitatation, the tidle character `~`, ASCII 126, may not be used as an address of a node, but is allowed in the address part as a seperator for multicast.
An address of 0 length (an empty address) MUST be considered invalid and dropped.