%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
graph LR
subgraph MAIL["Postal Service Analogy"]
direction TB
M1["How far?"]
M2["How heavy?"]
M3["How fast?"]
M4["Who delivers?"]
end
subgraph IOT["IoT Protocol Selection"]
direction TB
I1["Range needed?"]
I2["Battery life?"]
I3["Data rate?"]
I4["Infrastructure?"]
end
subgraph EXAMPLES["Matching Examples"]
direction TB
E1["Local letter β BLE<br/>Same neighborhood"]
E2["Express parcel β Wi-Fi<br/>Fast but expensive"]
E3["Overseas economy β LoRa<br/>Slow but cheap, long distance"]
E4["Priority mail β NB-IoT<br/>Reliable, tracked"]
end
M1 -.-> I1
M2 -.-> I2
M3 -.-> I3
M4 -.-> I4
I1 --> E1
I2 --> E2
I3 --> E3
I4 --> E4
style MAIL fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
style IOT fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
style EXAMPLES fill:#2C3E50,stroke:#16A085,stroke-width:2px,color:#fff
style M1 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style M2 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style M3 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style M4 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style I1 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style I2 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style I3 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style I4 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style E1 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style E2 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style E3 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style E4 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
82 Protocol Selection: Systematic Framework
82.1 Learning Objectives
By the end of this chapter, you will be able to:
- Apply Systematic Selection: Use a structured three-step framework to choose appropriate IoT protocols
- Define Requirements: Create a comprehensive requirements matrix for your IoT project
- Eliminate Non-Viable Options: Use decision trees to quickly narrow down protocol candidates
- Compare Finalists: Evaluate remaining protocols using weighted criteria
This Chapter Series: - Protocol Selection Framework - Overview and index - The Challenge - Understanding trade-offs - Anti-Patterns and Tradeoffs - Common mistakes - Selection Scenarios - Real-world examples
Networking Protocols: - LPWAN Fundamentals - Low-power wide-area - LoRaWAN Overview - LoRa selection criteria - LPWAN Comparison - Technology trade-offs - Bluetooth Overview - BLE selection - Zigbee - Mesh networking
82.2 Step 1: Define Application Requirements
Create a requirements matrix:
| Requirement | Constraint | Rationale |
|---|---|---|
| Range | Indoor 30m OR Outdoor 5km | Deployment area |
| Update Interval | Every 5 min, 15 min, 1 hour | Data freshness needs |
| Payload Size | 10 bytes, 100 bytes, 1 KB | Sensor data volume |
| Battery Life | 3 months, 1 year, 5 years | Maintenance budget |
| Device Count | 10, 100, 10,000 | Scalability needs |
| Budget | $10/device, $50/device | Cost constraints |
| Latency | <100ms, <1s, >1min acceptable | Real-time requirements |
82.3 Step 2: Eliminate Non-Viable Protocols
Use this systematic decision tree to narrow down protocol options:
Decision Tree Logic:
Question 1: Whatβs the required range? - <100m indoors: Wi-Fi, BLE, Zigbee, Thread - 100m-1km: LoRa (private gateway), Wi-Fi (mesh) - >1km: LoRaWAN, NB-IoT, Sigfox, cellular
Question 2: Whatβs the power budget? - Mains powered: Any protocol works - Battery, 1-2 years: BLE, Zigbee, Thread, LoRa - Battery, 5+ years: LoRaWAN, NB-IoT, Sigfox
Question 3: Whatβs the data rate? - >1 Mbps (video/audio): Wi-Fi, LTE - 10-500 kbps (frequent sensor data): BLE, NB-IoT, Wi-Fi - <10 kbps (periodic sensor data): LoRa, Sigfox, NB-IoT
Question 4: Infrastructure preference? - No infrastructure (peer-to-peer): BLE, Zigbee - Local gateway: LoRa (private), Wi-Fi - Carrier network (no gateway): NB-IoT, Sigfox, LTE-M
Letβs walk through a complete decision process for vineyard monitoring.
Initial Requirements: - Coverage Area: 50 hectares (500,000 mΒ²) hilly terrain with elevation changes up to 100m - Node Count: 200 soil moisture/temperature sensors distributed across vineyard blocks - Power Source: Solar panel (5W) + battery, target 5-year maintenance-free operation - Data Volume: 4 readings per hour, 20 bytes each (moisture %, temperature, battery voltage) - Latency Tolerance: Data freshness within 1 hour is acceptable - Budget: β¬50 per sensor node, total infrastructure budget β¬5,000 - Environment: Outdoor, weather-exposed, temperature -10Β°C to +45Β°C
Step 1: Elimination by Range
Question: Can protocol reach 50 hectares from central point?
- Wi-Fi β (Outdoor range ~100m, would need 20+ access points = β¬3,000+)
- Bluetooth β (Range 10-50m, would need 100+ gateways, not feasible)
- Zigbee β (Mesh helps but 100m hop limit Γ terrain = poor reliability)
- NB-IoT β (1-10km range covers entire farm from single cell tower)
- LoRaWAN β (2-15km range, 1-2 gateways cover 50 hectares even with hills)
- Sigfox β (3-50km range, excellent coverage but check network availability)
Remaining candidates: NB-IoT, LoRaWAN, Sigfox
Step 2: Elimination by Battery Life
Calculate yearly energy consumption for 4 readings/hour:
NB-IoT calculation: - Active transmit: 200mW Γ 5 seconds = 1,000 mWs = 0.28 mWh per message - Messages per year: 4/hour Γ 24 Γ 365 = 35,040 messages - Yearly consumption: 35,040 Γ 0.28 mWh = 9,811 mWh = 9.8 Wh/year - 5-year total: 49 Wh - Battery required: ~10,000 mAh at 3.7V = 37 Wh (insufficient, needs solar top-up)
LoRaWAN calculation: - Active transmit: 20mW Γ 2 seconds = 40 mWs = 0.011 mWh per message - Messages per year: 35,040 (same frequency) - Yearly consumption: 35,040 Γ 0.011 mWh = 385 mWh = 0.385 Wh/year - 5-year total: 1.9 Wh - Battery required: 2,000 mAh at 3.7V = 7.4 Wh (comfortable 5+ year life with solar backup)
Sigfox calculation: - Active transmit: 10mW Γ 2 seconds = 20 mWs = 0.006 mWh per message - Message limit: 140 messages/day max = 51,100/year - Our need: 35,040/year (within limits) - Yearly consumption: 35,040 Γ 0.006 mWh = 210 mWh = 0.21 Wh/year - 5-year total: 1.05 Wh (excellent battery life)
Battery verdict: - NB-IoT β οΈ (Marginal, needs larger battery or more solar capacity) - LoRaWAN β (Excellent 5+ year life) - Sigfox β (Best battery life)
Remaining candidates: LoRaWAN, Sigfox (NB-IoT possible but power-constrained)
Step 3: Cost Analysis (5-year TCO)
LoRaWAN costs: - Infrastructure: 2 gateways Γ β¬1,250 = β¬2,500 (one-time) - Gateway installation: β¬500 (mast, power, weatherproofing) - Network server: Self-hosted open source (ChirpStack) = β¬0 ongoing - 5-year total: β¬3,000 (β¬15 per sensor over 5 years)
Sigfox costs: - Infrastructure: β¬0 (uses existing Sigfox network) - Subscription: β¬1.50 per device per year Γ 200 devices Γ 5 years = β¬1,500 - Activation: β¬10 per device Γ 200 = β¬2,000 (one-time) - 5-year total: β¬3,500 (β¬17.50 per sensor over 5 years)
NB-IoT costs (if pursued): - Infrastructure: β¬0 (uses cellular network) - Subscription: β¬3 per device per year Γ 200 devices Γ 5 years = β¬3,000 - Activation: β¬5 per device Γ 200 = β¬1,000 - 5-year total: β¬4,000 (β¬20 per sensor over 5 years)
Step 4: Feature Comparison
| Feature | LoRaWAN | Sigfox | NB-IoT |
|---|---|---|---|
| Bidirectional | Yes (8 downlinks/day) | Limited (4/day) | Yes (unlimited) |
| Message size | 51-242 bytes | 12 bytes | 1,600 bytes |
| Our need | 20 bytes β | 20 bytes β οΈ (needs optimization) | 20 bytes β |
| Firmware updates | Possible (slow) | No | Yes |
| Network ownership | You own it | Vendor dependency | Carrier dependency |
| Coverage guarantee | Self-controlled | Check Sigfox map | Check carrier |
| Duty cycle limits | 1% (enough for 4/hr) | 140 msgs/day (enough) | Unlimited |
Final Decision: LoRaWAN β
Justification: 1. Cost: Lowest 5-year TCO (β¬15/sensor vs β¬17.50 Sigfox vs β¬20 NB-IoT) 2. Battery: Excellent 5+ year life with modest solar backup 3. Range: 1-2 gateways cover 50 hectares with terrain 4. Flexibility: Owns infrastructure, no vendor lock-in 5. Message size: 20 bytes fits easily in 51-byte minimum 6. Bidirectional: Allows remote configuration and firmware updates 7. Scalability: Can add sensors without per-device fees
Implementation: - Gateway 1: Placed at highest point (vineyard hilltop), 10 dBi antenna - Gateway 2: Redundancy gateway at winery building, 5 dBi antenna - Sensor nodes: LoRa modules (SX1276), solar 5W + 2,500 mAh LiPo battery - Network server: ChirpStack on Raspberry Pi at winery - Data flow: Sensors β Gateways β ChirpStack β MQTT β Farm management system
Key Success Factors: - Site survey confirmed coverage before full deployment - Testing showed 7+ year battery life in practice (better than calculated) - Zero ongoing costs after infrastructure investment - Farmer owns and controls the entire system
82.4 Step 3: Compare Finalists
Example Comparison: Smart Parking Sensor
| Protocol | Range | Power | Data Rate | Infra Cost | Verdict |
|---|---|---|---|---|---|
| Wi-Fi | β Too short | β Too high | β Plenty | β Gateway per 20 spots | NO |
| BLE | β Too short | β Low | β Adequate | β Gateway needed | NO |
| LoRaWAN | β 2km+ | β 10-year battery | β 5 kbps enough | β 1 gateway/city block | YES |
| NB-IoT | β 10km+ | β 5-year battery | β 200 kbps | β οΈ $2/device/year | Maybe (cost) |
Winner: LoRaWAN for cost and battery life
82.5 Visual Protocol Comparison
For typical IoT scenarios, hereβs how major protocols compare across key dimensions:
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
graph TB
subgraph WEARABLE["Wearables & Personal"]
W1["Fitness tracker β BLE"]
W2["Smartwatch β BLE + Wi-Fi"]
W3["Medical patch β BLE"]
end
subgraph HOME["Smart Home"]
H1["Light bulbs β Zigbee/Thread"]
H2["Security camera β Wi-Fi"]
H3["Door lock β Zigbee/BLE"]
H4["Thermostat β Wi-Fi/Thread"]
end
subgraph INDUSTRIAL["Industrial & Agriculture"]
I1["Soil sensor β LoRaWAN"]
I2["Factory machine β Wi-Fi"]
I3["Asset tracker β NB-IoT"]
I4["Pipeline monitor β Sigfox"]
end
subgraph CITY["Smart City & Fleet"]
C1["Parking sensor β LoRaWAN"]
C2["Street light β LoRaWAN/NB-IoT"]
C3["Delivery truck β LTE-M"]
C4["Water meter β NB-IoT"]
end
style WEARABLE fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
style HOME fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
style INDUSTRIAL fill:#2C3E50,stroke:#16A085,stroke-width:2px,color:#fff
style CITY fill:#7F8C8D,stroke:#2C3E50,stroke-width:2px,color:#fff
style W1 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style W2 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style W3 fill:#fff,stroke:#E67E22,stroke-width:1px,color:#2C3E50
style H1 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style H2 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style H3 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style H4 fill:#fff,stroke:#16A085,stroke-width:1px,color:#2C3E50
style I1 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style I2 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style I3 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style I4 fill:#fff,stroke:#2C3E50,stroke-width:1px,color:#2C3E50
style C1 fill:#fff,stroke:#7F8C8D,stroke-width:1px,color:#2C3E50
style C2 fill:#fff,stroke:#7F8C8D,stroke-width:1px,color:#2C3E50
style C3 fill:#fff,stroke:#7F8C8D,stroke-width:1px,color:#2C3E50
style C4 fill:#fff,stroke:#7F8C8D,stroke-width:1px,color:#2C3E50
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
graph TB
subgraph CRITERIA["Weighted Scoring Criteria"]
direction LR
CR1["Range (25%)"]
CR2["Battery Life (30%)"]
CR3["Data Rate (15%)"]
CR4["Cost (20%)"]
CR5["Ecosystem (10%)"]
end
subgraph SCORES["Example: Agriculture Sensor Scoring"]
direction TB
subgraph LORA["LoRaWAN"]
L1["Range: 9/10 Γ 0.25 = 2.25"]
L2["Battery: 10/10 Γ 0.30 = 3.00"]
L3["Data: 4/10 Γ 0.15 = 0.60"]
L4["Cost: 9/10 Γ 0.20 = 1.80"]
L5["Eco: 7/10 Γ 0.10 = 0.70"]
LTOT["TOTAL: 8.35"]
end
subgraph NBIOT["NB-IoT"]
N1["Range: 10/10 Γ 0.25 = 2.50"]
N2["Battery: 7/10 Γ 0.30 = 2.10"]
N3["Data: 6/10 Γ 0.15 = 0.90"]
N4["Cost: 5/10 Γ 0.20 = 1.00"]
N5["Eco: 8/10 Γ 0.10 = 0.80"]
NTOT["TOTAL: 7.30"]
end
end
CRITERIA --> SCORES
LORA --> WINNER["Winner: LoRaWAN<br/>8.35 > 7.30"]
style CR1 fill:#16A085,stroke:#2C3E50,stroke-width:1px,color:#fff
style CR2 fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
style CR3 fill:#7F8C8D,stroke:#2C3E50,stroke-width:1px,color:#fff
style CR4 fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
style CR5 fill:#7F8C8D,stroke:#2C3E50,stroke-width:1px,color:#fff
style LTOT fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
style NTOT fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
style WINNER fill:#2C3E50,stroke:#16A085,stroke-width:3px,color:#fff
Protocol Trade-off Matrix:
| Protocol | Range | Power | Data Rate | Infrastructure | Best For |
|---|---|---|---|---|---|
| Wi-Fi | 50-100m | High (100-500mW) | High (1-100 Mbps) | Existing infra | High-bandwidth, mains-powered |
| BLE | 10-50m | Low (10-50mW) | Medium (1 Mbps) | Smartphone gateway | Wearables, beacons, proximity |
| Zigbee | 10-100m | Low (30mW) | Medium (250 kbps) | Coordinator + mesh | Home automation, sensors |
| Thread | 10-100m | Low (30mW) | Medium (250 kbps) | Border router | Matter/IP-based smart home |
| LoRaWAN | 2-15km | Very Low (20mW) | Low (0.3-50 kbps) | Gateway ($500) | Long-range sensors, rural |
| NB-IoT | 1-10km | Low (50-200mW) | Low (200 kbps) | Carrier network | Urban tracking, metering |
| Sigfox | 3-50km | Very Low (10mW) | Very Low (100 bps) | Carrier network | Simple sensors, global |
| LTE-M | 1-10km | Medium (100-500mW) | Medium (1 Mbps) | Carrier network | Mobile, voice, moderate data |
Scenario: Youβre designing an irrigation control system for a 200-hectare farm. Requirements: - 50 soil moisture sensors scattered across fields (200-800m from central building) - 10 irrigation valve controllers (200-1000m from building) - Sensors transmit: 12 bytes every 30 minutes (moisture, temperature, battery) - Valves receive: Commands occasionally (<10/day), respond with status (8 bytes) - Battery-powered sensors: Must last 3+ years without replacement - Budget: $150/device maximum (sensor + connectivity for 5 years)
Youβre considering: Wi-Fi mesh, LoRaWAN, or NB-IoT.
Think about: 1. Can Wi-Fi reliably reach 800m outdoors? Whatβs the infrastructure cost for mesh repeaters? 2. How does LoRaWAN handle bidirectional valve control vs. sensor monitoring? 3. Whatβs the 5-year operational cost difference between LoRaWAN (gateway: $500 one-time) and NB-IoT ($3/device/year)?
Key Insights: - Wi-Fi: β Range maxes at ~100m outdoors, would need 8+ mesh repeaters ($150 each) = $1,200 infrastructure - LoRaWAN: β 800m easily covered by 1-2 gateways ($500-1000), bidirectional works (Class C for valves), $1,000 total - NB-IoT: β Range excellent, bidirectional easy, BUT operational cost = 60 devices Γ $3/year Γ 5 years = $900 ongoing
Best Choice: LoRaWAN - One-time $1,000 infrastructure (2 gateways for redundancy) - Zero recurring costs (no subscriptions) - 10-year battery life on sensors - Class A for sensors (low power), Class C for valves (receive any time) - Total 5-year cost: $1,000 infrastructure + $0 ongoing = $1,000
Compare to NB-IoT: $900 + higher battery replacement (5 years vs 10) = $1,400+
Real-world lesson: Infrastructure costs seem high upfront, but subscription costs compound over time. For large deployments with stable locations, owned infrastructure (LoRa, Wi-Fi) often beats carrier networks (NB-IoT, LTE-M) on 5+ year TCO.
Use this checklist when designing your IoT system. Fill in your specific values to systematically narrow down protocol choices.
Step 1: Physical Requirements - [ ] Coverage area: _____ meters (indoor) OR _____ kilometers (outdoor) - [ ] Number of devices: Current: _____, Planned in 2 years: _____ - [ ] Device locations: Fixed / Mobile / Mixed - [ ] Environment: Indoor / Outdoor / Underground / Mixed - [ ] Physical obstacles: Walls / Buildings / Terrain / Water
Step 2: Power Requirements - [ ] Power source: Battery / Mains / Solar + Battery / Energy Harvesting - [ ] Battery life target: _____ months/years - [ ] Battery replacement acceptable?: Yes / No - [ ] Battery size constraint: _____ mAh maximum - [ ] Sleep mode possible?: Yes / No (duty cycle: _____%)
Step 3: Data Requirements - [ ] Payload size: _____ bytes per message - [ ] Message frequency: Every _____ seconds/minutes/hours - [ ] Daily data volume: _____ bytes per device per day - [ ] Bidirectional needed?: Yes (downlink frequency: _____) / No - [ ] Latency tolerance: Real-time (<100ms) / Interactive (<1s) / Delayed (>1min OK)
Step 4: Budget Constraints - [ ] Device hardware budget: β¬_____ per device - [ ] Infrastructure budget (gateways, installation): β¬_____ - [ ] Operational budget: β¬_____ per device per year (subscriptions, maintenance) - [ ] 5-year total cost of ownership: β¬_____ maximum - [ ] Development/integration budget: β¬_____
Step 5: Technical Constraints - [ ] Existing infrastructure: Wi-Fi / Cellular coverage / None - [ ] Integration requirements: Cloud platform: _____, Protocols: _____ - [ ] Security requirements: Encryption level: _____, Compliance: _____ - [ ] Reliability target: _____ % uptime required - [ ] Scalability needs: Can add devices without redesign? Yes / No
Step 6: Decision Worksheet
Based on your answers above, eliminate protocols:
| Protocol | Range OK? | Power OK? | Data Rate OK? | Cost OK? | Final? |
|---|---|---|---|---|---|
| Wi-Fi | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| Bluetooth | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| Zigbee | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| Thread | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| LoRaWAN | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| NB-IoT | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| Sigfox | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
| LTE-M | β Yes β No | β Yes β No | β Yes β No | β Yes β No | β Candidate |
Step 7: Prototype Validation
Before committing to large-scale deployment: - [ ] Coverage test: Verify range in actual environment (not just spec sheets) - [ ] Battery test: Measure actual power consumption over 1+ week - [ ] Interference test: Check performance with other devices nearby - [ ] Cost validation: Get real quotes for gateways, subscriptions, modules - [ ] Integration test: Confirm compatibility with your cloud/backend - [ ] Reliability test: Monitor uplink success rate over extended period - [ ] Scalability test: Test with 10+ devices to identify bottlenecks
Common Red Flags: - β οΈ No real-world testing before committing to 1,000+ device order - β οΈ Relying solely on coverage maps without site survey - β οΈ Ignoring total cost of ownership (TCO) beyond first year - β οΈ Choosing newest protocol without checking ecosystem maturity - β οΈ Single point of failure (one gateway, one carrier)
82.6 Summary
Key Takeaways:
- Three-Step Framework: Define requirements β Eliminate non-viable β Compare finalists
- Requirements Matrix: Document range, power, bandwidth, latency, cost, and scalability needs
- Decision Tree: Use four key questions (range, power, data rate, infrastructure) to eliminate protocols quickly
- Weighted Scoring: Quantify comparisons by assigning weights to criteria based on project priorities
- TCO Analysis: Always calculate 5-year total cost including hardware, infrastructure, and subscriptions
- Prototype First: Real-world testing reveals issues that specifications hide
82.7 Whatβs Next
In the next chapter, Anti-Patterns and Tradeoffs, youβll learn common mistakes to avoid in protocol selection and understand the key engineering tradeoffs between different protocol families.