Use this framework to select the appropriate address space for your deployment before implementation:
| Tiny Network |
1-50 |
8-bit (256) |
Custom protocols, I²C addresses |
Acceptable |
| Small Home/Building |
50-200 |
16-bit (65K) |
Zigbee short addresses, BACnet MS/TP |
50% at 300 devices |
| Campus/District |
200-50,000 |
32-bit (4.3B) |
LoRaWAN DevAddr, IPv4 private |
50% at 77K devices |
| City/Enterprise |
50K-1M |
64-bit (1.8×10^19) |
BLE MAC, EUI-64 |
50% at 5 billion devices |
| Global IoT |
1M+ |
128-bit (3.4×10^38) |
IPv6, UUID |
Collision impossible |
Step-by-Step Selection Process:
1. Estimate Maximum Device Count (with 5-year growth)
Current devices: _____
Growth rate: _____ % per year
5-year projection: Current × (1 + rate)^5
Safety factor: 2× projection
Maximum devices: _____
2. Apply Birthday Problem Safe Count Formula
Safe Count = sqrt(Address Space) × 0.85
For your max devices, find minimum address space where:
Max Devices < Safe Count
3. Check Protocol Compatibility
| Zigbee |
16-bit short |
Yes (use 64-bit EUI-64) |
| LoRaWAN |
32-bit DevAddr |
Limited (regional allocation) |
| Thread |
16-bit short |
Yes (IPv6 underneath) |
| BLE |
48-bit MAC |
No (hardware-assigned) |
4. Consider Collision Mitigation Strategy
| Prevention |
Coordinator assigns addresses |
Zigbee, star topologies |
Requires central coordination; single point of failure |
| Detection |
Duplicate Address Detection (DAD) |
IPv6 SLAAC, Thread |
Adds join latency (1-2 sec); network overhead |
| Larger Space |
Use 128-bit instead of 16-bit |
Any protocol with flexibility |
Storage overhead (16 bytes vs 2 bytes) |
| Hierarchical |
Divide address space by location |
Large deployments |
Requires careful planning; hard to reorganize |
5. Calculate Storage and Transmission Overhead
Address size impacts: - Memory: N devices × address_bytes × 2 (storage + routing tables) - Bandwidth: address_bytes per packet × packets_per_day
Example with 1,000 devices:
16-bit addresses: 2 bytes × 1,000 = 2 KB routing table
128-bit addresses: 16 bytes × 1,000 = 16 KB routing table
For sensor sending 100 packets/day:
16-bit: 200 bytes/day addressing overhead
128-bit: 1,600 bytes/day addressing overhead
6. Final Decision Matrix
Score each option (1-5, higher = better):
| Collision risk |
1 (high) |
3 (medium) |
5 (very low) |
5 (impossible) |
| Memory efficiency |
5 |
4 |
2 |
1 |
| Bandwidth efficiency |
5 |
4 |
2 |
1 |
| Future scalability |
1 |
3 |
5 |
5 |
| Implementation cost |
5 |
4 |
3 |
2 |
Choose the option with highest total score meeting your minimum collision risk requirement.
Real-World Example Decision:
Scenario: Smart warehouse, 500 current sensors, 20% annual growth, 5-year horizon.
Calculation:
Max devices = 500 × (1.2)^5 × 2 = 2,488 devices
16-bit safe count = sqrt(65,536) × 0.85 = 218 ✗ (too small)
32-bit safe count = sqrt(4.3B) × 0.85 = 55,700 ✓ (sufficient)
Decision: Use 32-bit addresses (LoRaWAN DevAddr or IPv4 private range).
Validation:
- Collision probability at 2,488 devices in 32-bit space: ~0.07% (acceptable)
- Routing table overhead: 2,488 × 4 bytes = 9.7 KB (manageable)
- Protocol: LoRaWAN supports 32-bit DevAddr natively ✓
This systematic approach prevents the “deploy and discover collision problems later” scenario that plagues many IoT projects.