10  ::: {style=“overflow-x: auto;”}

title: “Transport Decision Framework” difficulty: intermediate —

In 60 Seconds

Three questions guide 90% of IoT transport protocol decisions: (1) Can I tolerate data loss? (2) Is the device battery-powered? (3) Does it transmit frequently? If yes to all three, use UDP. If data loss is catastrophic (firmware, financial), use TCP. This chapter provides a systematic decision framework with comparison matrices and pitfall avoidance to prevent costly design mistakes.

Key Concepts
  • Decision Tree for Protocol Selection: Start with device constraints (MCU RAM < 64 KB → UDP-only) → data reliability (commands → TCP/Confirmed UDP; telemetry → UDP) → latency (real-time < 100 ms → UDP) → security (production → TLS/DTLS) → data rate
  • RAM Requirement by Protocol: Raw UDP socket: ~2 KB; CoAP with DTLS: ~20 KB; MQTT over TCP with TLS: ~60–80 KB; HTTP REST with TLS: ~80–120 KB; guide for protocol feasibility on constrained MCUs
  • Data Volume Analysis: Calculate monthly data volume: payload_size × messages_per_day × 30 × (1 + overhead_factor); overhead_factor: UDP/CoAP = 0.4, TCP/MQTT = 0.6, TCP/HTTP = 1.2
  • Latency Budget Allocation: Application latency SLO → allocate transport RTT (RTT = 40–60% of SLO), server processing (20–30%), sensor/actuator (10–20%); if RTT > 60% of SLO, consider UDP
  • QoS Mapping: Application data criticality → transport guarantee: critical (commands, alarms) → TCP or CoAP Confirmable; non-critical (telemetry, status) → UDP or CoAP Non-Confirmable
  • Security Requirement Mapping: Public internet → TLS/DTLS mandatory; private LAN → application-layer authentication sufficient; cellular IoT → DTLS or TLS with session resumption
  • Total Cost of Ownership Factors: Module cost impact (+$2–5 for TLS hardware acceleration), data plan cost (UDP saves 30–60% vs TCP for constrained devices), development cost (MQTT ecosystem vs raw UDP)
  • Multi-Hop Transport Consideration: Direct device-to-cloud (single hop) vs device-to-gateway-to-cloud (two hops) changes transport requirements: local hop can use UDP, WAN hop may need TCP for reliability through NAT
Learning Objectives

By the end of this section, you will be able to:

  • Apply a systematic decision framework to select the optimal transport protocol for a given IoT scenario
  • Diagnose and correct common transport protocol pitfalls such as Nagle delay, UDP ordering assumptions, and TCP connection overhead
  • Evaluate real-world IoT scenarios using detailed trade-off matrices to justify protocol choices
  • Calculate per-message overhead and daily energy consumption to compare UDP and TCP quantitatively
  • Design hybrid transport strategies (CoAP CON, FEC, QUIC) when single-protocol trade-offs are unacceptable
  • Distinguish between situations requiring TCP reliability and those where UDP efficiency is preferable

With several transport protocols to choose from, this framework helps you make the right choice systematically. It is like a decision tree: answer questions about your requirements (reliability, speed, security, device constraints) and the framework guides you to the best protocol for your situation.

“Ninety percent of transport protocol decisions come down to three questions,” said Max the Microcontroller. “Can I tolerate lost data? Am I battery-powered? Do I transmit frequently? If yes to all three, use UDP.”

“Let me show you the pitfalls,” warned Sammy the Sensor. “One common mistake is using TCP for everything because it is ‘reliable.’ But on a lossy wireless link with 10 percent packet loss, TCP’s retransmission cascade drains batteries 8 times faster than UDP!”

“Another mistake is using plain UDP for critical data,” added Lila the LED. “If your smoke detector sends a fire alarm over UDP with no retry logic, and the packet gets lost – that is a life-safety failure. Critical messages need either TCP or application-layer acknowledgments.”

“The framework helps you avoid these mistakes,” concluded Bella the Battery. “Map your requirements to the decision tree, and you will pick the right protocol every time. Real-world deployments often use different protocols for different data flows – UDP for sensor telemetry and TCP for firmware updates, running side by side.”

10.1 Prerequisites

Before diving into this chapter, you should be familiar with:


10.2 Quick Decision Tree

Start Here: What Type of Data Are You Sending?

Step 1: Is this a one-time command or continuous stream?

  • One-time command (unlock door, turn on light) → Go to Step 2
  • Continuous stream (video, sensor data) → Go to Step 3
  • Large file transfer (firmware update, config) → Use TCP (guaranteed delivery essential)

Step 2: One-Time Command Decision

  • Critical (missed command = safety risk or significant cost) → TCP or UDP + CoAP CON
  • Non-critical (missed command = user retries) → UDP + CoAP NON

Step 3: Continuous Stream Decision

  • Real-time (latency under 100 ms, occasional loss OK) → UDP (possibly with FEC)
  • Recorded (data must be complete, latency not critical) → TCP

Step 4: Power Budget Check

  • Mains powered → TCP acceptable
  • Battery (daily recharge) → Prefer UDP; TCP acceptable for infrequent use
  • Battery (months/years)UDP only (TCP keep-alive significantly drains battery)

10.3 Detailed Scenario-Based Comparison

The following table compares TCP and UDP across real-world IoT scenarios with actual measurements and recommendations.

Scenario Data Type TCP Behavior UDP Behavior Recommendation Why?
Temperature sensor (every 30 sec) 10 bytes payload 3-way handshake (~216 bytes) + data (54 bytes) + 4-way FIN (~216 bytes) ≈ 486 bytes ~49x overhead Single datagram (38 bytes at IP layer) ~3.8x overhead UDP + CoAP NON Occasional missing reading OK, fresh data more valuable than old data
Door lock command 20 bytes payload Handshake + data + FIN ≈ 500 bytes ~25x overhead But guaranteed delivery Single datagram (48 bytes at IP layer) without confirmation = Risk! UDP + CoAP CON (app-layer ACK) Need confirmation but TCP overkill for single packet
Firmware update (500 KB) 512,000 bytes payload Automatic segmentation, in-order delivery, flow control, 5-10% overhead = ~550 KB Would need to implement: fragmentation, ordering, ACKs, retransmission = recreating TCP! TCP Large reliable transfer is exactly what TCP is designed for
Security camera (1080p) 1-5 Mbps stream Retransmits cause jitter (200 ms spikes), video freezes, poor UX Drops packets (1-5% loss), slight artifacts, smooth playback UDP + FEC Real-time video: fresh frame preferred over delayed perfect frame
MQTT telemetry (1 msg/min) 50 bytes payload Persistent connection: handshake once, send data (84 bytes), keep-alive every 60s (54 bytes) = 138 bytes/min One datagram per minute (80 bytes), no keep-alive = 80 bytes/min Depends on scale: fewer than 100 devices → TCP, more than 1000 devices → MQTT-SN (UDP) TCP scales poorly with many connections
Industrial sensor (100 Hz sampling) 4 bytes × 100/sec = 400 bytes/sec Head-of-line blocking: 1 lost packet delays all subsequent packets, latency spikes! Drops occasional packet (99% delivery still OK), consistent latency UDP 100 Hz real-time control: predictable latency over perfect delivery

:::

Key Insight: TCP overhead is not just bytes – it is round-trips and state! - TCP handshake: 1.5 round-trip times (RTT) before first data byte (SYN + SYN-ACK + ACK-with-data) - Battery-powered sensor (100–300 ms RTT on cellular): 150–450 ms wasted per connection setup - UDP: 0 RTT, first packet carries data immediately

Try It: Protocol Overhead Calculator

Adjust payload size and packet loss to see how TCP and UDP compare for your sensor scenario.

10.4 TCP vs UDP Trade-Off Matrix

Aspect TCP Advantage UDP Advantage When It Matters Most
Reliability Automatic retransmission, In-order delivery, No data loss No guarantees, Packet loss (1-10%), Out-of-order delivery TCP: Financial transactions, firmware updates; UDP: Sensor readings (next reading overwrites)
Latency Retransmissions add jitter (50-500ms spikes), Head-of-line blocking Consistent low latency, No waiting for retransmits TCP: Acceptable for human interaction; UDP: Critical for real-time control, gaming, VoIP
Throughput Congestion control optimizes throughput, Flow control prevents overwhelming Can congest network, No automatic throttling TCP: Large file transfers, bulk data; UDP: Small messages, pre-determined rate
Power Consumption 3-way handshake wastes power, Keep-alive packets drain battery, Connection state requires RAM No connection overhead, No keep-alive, Minimal state TCP: Mains-powered devices OK; UDP: Battery-powered devices critical
Complexity Handles all edge cases automatically, Mature implementations Application must handle reliability if needed, More code to write/debug TCP: Rapid development, reliability critical; UDP: Custom reliability needs (CoAP)
Scalability Server maintains state per connection, 10K connections = 40MB+ RAM Stateless (connectionless), 1M+ “connections” possible TCP: <1000 clients fine; UDP: >10,000 clients need stateless
Firewall/NAT Easier through firewalls (stateful tracking), Port forwarding straightforward Many firewalls block UDP, NAT timeouts (30-60 sec) TCP: Enterprise deployments; UDP: May need NAT keep-alive tricks

How to Use This Matrix:

  1. Identify your top 2 priorities from the left column (e.g., Power Consumption + Latency)
  2. Check which protocol has advantages for those aspects
  3. Verify you can accept the trade-offs for the chosen protocol
  4. Consider hybrid approaches if trade-offs are unacceptable

10.5 Hybrid Approaches: Best of Both Worlds

Hybrid Strategy When to Use Example Implementation Benefit
UDP + Application-Layer ACK Need reliability without TCP overhead CoAP Confirmable messages: Send over UDP, wait for ACK, retry 2-4 times with exponential backoff 80% of TCP reliability with 20% of TCP overhead
TCP + UDP dual path Critical + real-time data Smart car: Send emergency brake command via both TCP (reliable) and UDP (fast). First to arrive triggers action. Reliability of TCP, latency of UDP
UDP with Forward Error Correction (FEC) Streaming with lossy links Video codec sends 10% redundant parity data. Receiver reconstructs up to 10% lost packets without retransmission. Smooth streaming despite packet loss
QUIC (UDP-based but TCP-like) Need TCP features with UDP speed Modern web browsers, mobile apps. QUIC provides reliability, flow control, but faster handshake (0-RTT) Combines benefits, but complex to implement
Short-lived TCP connections Occasional reliable transfers, battery-powered Send data over TCP, immediately close. 50 times per day acceptable. 50,000 times per day kills battery. Reliability when needed, low average power
MQTT-SN (UDP-based MQTT) Pub/sub telemetry at scale on constrained networks Zigbee/Thread networks use MQTT-SN over UDP. Gains pub/sub semantics without TCP overhead. IoT-optimized publish-subscribe

10.6 Real-World Decision Examples

Example 1: Smart Agriculture Soil Sensors

  • Requirement: 500 sensors, battery-powered (5-year life), reading every 15 minutes
  • Decision: UDP + CoAP NON (non-confirmable)
  • Reasoning: Missing 1% of readings acceptable (next reading in 15 min), TCP keep-alive would drain battery in months
  • Alternative rejected: TCP - Battery life reduced from 5 years to 6 months due to connection overhead

Example 2: Industrial Machine Diagnostics

  • Requirement: Predict bearing failure, 1000 Hz vibration sampling, <10ms latency
  • Decision: UDP (raw datagrams)
  • Reasoning: Real-time control loop needs consistent latency, TCP retransmits cause 200ms spikes (unacceptable)
  • Alternative rejected: TCP - Head-of-line blocking causes latency jitter, missing failure prediction window

Example 3: Smart Home Firmware Updates

  • Requirement: Distribute 5 MB firmware to 50 smart bulbs
  • Decision: TCP (HTTP download)
  • Reasoning: 100% reliability required (corrupted firmware bricks device), TCP handles all edge cases
  • Alternative rejected: UDP - Would need to implement chunking, ACKs, retransmission, reassembly = reinventing TCP

Example 4: Video Doorbell

  • Requirement: 1080p stream to smartphone, real-time (low latency), mains-powered
  • Decision: UDP + FEC (Forward Error Correction)
  • Reasoning: Low latency critical for conversation, 2-3% packet loss acceptable with FEC reconstruction
  • Alternative rejected: TCP - Retransmissions cause video freezing (poor UX), 500ms jitter breaks real-time feel

Example 5: Smart Parking Sensors

  • Requirement: 10,000 sensors, report state change (car arrives/leaves), cellular connectivity
  • Decision: UDP + CoAP CON (confirmable)
  • Reasoning: State changes infrequent (1-20 per day), need confirmation, but cellular data costs make it important to minimize packets
  • Alternative rejected: TCP – 3-way handshake + FIN wastes cellular data, persistent connections impractical for 10,000 devices

10.7 Common Pitfalls

Pitfall: TCP Nagle Delay

The mistake: Sending small TCP packets without disabling Nagle’s algorithm, causing 40-200ms delays as TCP waits to batch data before transmission.

Symptoms:

  • Button presses take 100-200ms to register on remote device
  • Real-time control feels “laggy” or “sluggish”
  • Small sensor readings arrive in bursts instead of continuously
  • Latency varies unpredictably between 1ms and 200ms

Why it happens: Nagle’s algorithm (RFC 896) improves TCP efficiency by buffering small packets until either: - A full MSS (Maximum Segment Size, ~1460 bytes) accumulates - The previous packet’s ACK arrives (up to 200ms delayed ACK timer)

The fix:

// Disable Nagle's algorithm for low-latency IoT
int sock = socket(AF_INET, SOCK_STREAM, 0);
int flag = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag));

// Now small packets send immediately
send(sock, sensor_data, 10, 0);  // Sends NOW, not after 200ms
# Python equivalent
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

Prevention: Always set TCP_NODELAY for interactive IoT applications.

Pitfall: UDP Packet Ordering Assumption

The mistake: Assuming UDP packets arrive in the same order they were sent, then processing them sequentially without sequence numbers.

Symptoms:

  • Sensor graphs show impossible jumps (future reading appears before past)
  • Commands execute in wrong order (unlock before authenticate)
  • Data reassembly produces garbage (file chunks out of order)
  • Application works on localhost but fails across networks

Why it happens: UDP provides no ordering guarantees: - Packets may take different network paths with different latencies - Routers may queue packets differently based on instantaneous load - Wi-Fi and cellular networks especially prone to reordering

The fix: Always include monotonic sequence numbers in UDP payloads:

typedef struct {
    uint32_t sequence_number;  // Monotonically increasing
    uint32_t timestamp_ms;     // For timing/staleness checks
    uint8_t  payload[MAX_PAYLOAD];
} udp_message_t;

Prevention: Implement a reorder buffer with timeout for missing packets. Consider CoAP which has built-in message IDs.

Pitfall: TCP Connection Overhead for Infrequent Messages

The mistake: Establishing a new TCP connection for each sensor reading on devices that transmit infrequently (every 5-60 minutes), wasting 70-90% of transmitted bytes on connection setup and teardown.

The fix: Calculate your connection overhead ratio and choose appropriately:

Interval Strategy Rationale
Less than 30 seconds Persistent TCP Keep-alive cost is less than reconnection cost
30 seconds to 5 minutes Persistent TCP with aggressive timeout Balance connection maintenance vs setup
5 to 30 minutes UDP + CoAP Connection overhead exceeds data benefit; use stateless
More than 30 minutes UDP + CoAP CON Application-level reliability without TCP connection weight
Pitfall: Not Using Header Compression on Constrained Networks

The mistake: Deploying IoT applications over 6LoWPAN, LoRaWAN, or other constrained networks without enabling header compression, transmitting full 48-60 byte IPv6/UDP headers when 6-12 bytes would suffice.

6LoWPAN Header Compression (RFC 6282 IPHC):

Header Type Uncompressed Compressed Savings
IPv6 header 40 bytes 2-3 bytes (link-local) 92-95%
IPv6 header 40 bytes 7-12 bytes (global) 70-82%
UDP header 8 bytes 2-4 bytes 50-75%
IPv6 + UDP 48 bytes 4-16 bytes 67-92%

Impact: Without compression, a 10-byte sensor reading over 6LoWPAN/IPv6 becomes 58 bytes - 83% overhead. With proper IPHC compression, the same reading is 16-20 bytes - 38-50% overhead.

When designing IoT systems, transmission frequency determines the optimal transport strategy. This framework helps you choose:

Transmission Interval Protocol Choice Reasoning Example Use Case
< 30 seconds UDP or UDP+CoAP Connection overhead exceeds data; keep-alive wastes battery Environmental sensors (temp every 10s)
30 sec - 2 min UDP+CoAP CON Balance reliability with low overhead Smart meters (readings every minute)
2 min - 10 min Short-lived TCP Connection cost amortizes over fewer transmissions Parking sensors (state change every 5 min)
10 min - 1 hour Short-lived TCP Handshake overhead negligible compared to sleep time Agricultural sensors (hourly readings)
> 1 hour Short-lived TCP or MQTT/TLS Security handshake cost becomes acceptable Monthly firmware updates
Continuous stream Persistent TCP Connection cost paid once, used continuously Video surveillance, audio streaming

Overhead Calculation Formula:

Cost per message (short-lived TCP) = Handshake + Data + Teardown
Cost per message (persistent TCP)  = Data + (Keep-alive bytes / messages_per_keep-alive_interval)

Break-even: short-lived wins when keep-alive cost exceeds reconnection cost
  i.e., when: (keep-alive bytes / interval) > (handshake + teardown bytes / msg_interval)

Example with 50ms RTT, 60-second keep-alive interval, 1 message per second:
  Short-lived: 3 RTT overhead = 3 × 50ms = 150ms extra latency + ~480 bytes per message
  Persistent:  keep-alive = 54 bytes / 60 messages = 0.9 bytes overhead per message

Persistent wins for high-frequency (many messages per keep-alive interval).
Short-lived wins for very infrequent messages (e.g., 1 per 30+ minutes).

Decision Tree:

  1. Is data loss acceptable?
    • YES → Consider UDP
    • NO → TCP or UDP+CoAP CON
  2. What is transmission frequency?
    • Every < 30s → UDP (keep-alive overhead too high)
    • Every 30s-10min → Short-lived TCP (balance point)
    • Continuous → Persistent TCP (amortize handshake)
  3. What is network RTT?
    • < 50ms (local) → TCP overhead acceptable
    • 50-200ms (Internet) → UDP preferred for frequent transmissions
    • 200ms (satellite) → UDP strongly preferred

  4. What is packet loss rate?
    • < 1% → TCP works well
    • 1-10% → TCP acceptable with tuning
    • 10% → UDP + app-layer retry (TCP retransmission storm)

Real-World Example:

Scenario: Smart building with 500 sensors, 100ms RTT, 2% packet loss

Option A: Persistent TCP (Keep-alive every 60s)

Per sensor overhead:
- Keep-alive: 54 bytes every 60s = 0.9 bytes/sec
- Connection state: 4 KB RAM per sensor
Total gateway RAM: 500 × 4 KB = 2 MB

Throughput: No wait for handshake on each message
Battery impact: Wake for keep-alive 12×/day = 12× radio-on events

Option B: Short-lived TCP (New connection per message, every 10s)

Per sensor overhead:
- Handshake: 150ms every 10s = 1.5% time overhead
- No connection state between messages = 0 bytes RAM
Total gateway RAM: Only active connections (~5 concurrent)

Throughput: 150ms latency added per message
Battery impact: Radio-on for handshake + data = 6× readings/min

Option C: UDP + CoAP CON (Confirmable message every 10s)

Per sensor overhead:
- No handshake, single round-trip for ACK = 100ms
- No connection state = 0 bytes RAM
Total gateway RAM: Application state only

Throughput: 100ms latency for ACK wait
Battery impact: Radio-on for send + wait ACK = minimal

Verdict: For this scenario, UDP+CoAP CON wins because: - 500 sensors × 4KB = 2MB RAM saved (no persistent state) - 100ms vs 150ms latency (33% faster than short-lived TCP) - Fewer battery wake events than keep-alive - Handles 2% packet loss with selective retry (no TCP cascade)

Try It: Connection Strategy Advisor

Enter your deployment parameters to receive a protocol recommendation based on transmission frequency, RTT, and loss rate.

10.8 Comprehensive Knowledge Check

10.9 Transport Protocol Design Principles

Qualitative frameworks are useful, but engineering decisions require numbers. The collapsible section below quantifies the 3-question framework so you can calculate the exact overhead and battery impact for your specific scenario – payload size, loss rate, transmission frequency, and link speed.

Quantify the decision framework for a sensor transmitting \(N\) times per day with payload \(P\) bytes and packet loss rate \(L\).

UDP cost per message (IP + UDP header = 28 bytes; accounts for retransmission at application layer on loss): \[ C_{\text{UDP}} = (P + 28) \times (1 + L) \text{ bytes} \]

At 10% loss (\(L = 0.1\)), \(P = 10\): \(C_{\text{UDP}} = (10 + 28) \times 1.1 = 41.8 \text{ bytes/effective message}\)

TCP cost per message (new connection per reading; TCP/IP header = 40 bytes minimum): \[ C_{\text{TCP}} = 216 \text{ (3-way handshake)} + (P + 40) + 216 \text{ (4-way FIN)} \approx P + 472 \text{ bytes} \]

For \(P = 10\): \(C_{\text{TCP}} \approx 482 \text{ bytes}\) (using typical segment sizes; exact value varies by OS/MTU)

Overhead ratio: \[ \frac{C_{\text{TCP}}}{C_{\text{UDP}}} = \frac{482}{41.8} \approx 11.5\times \]

Battery life impact (200 mA TX current, 1 Mbps link, \(N = 1440\) readings/day):

Daily TX time: UDP \(= \frac{41.8 \times 8 \times 1440}{10^6} \approx 482 \text{ ms}\), TCP \(= \frac{482 \times 8 \times 1440}{10^6} \approx 5{,}550 \text{ ms}\)

Daily TX energy: UDP \(= 200 \times \frac{0.482}{3{,}600} \approx 0.027 \text{ mAh}\), TCP \(= 200 \times \frac{5.55}{3{,}600} \approx 0.308 \text{ mAh}\)

Decision threshold: When sleep current dominates (\(E_{\text{sleep}} \gg E_{\text{TX}}\)), protocol choice matters less for total battery life. When \(N > 1000\) readings/day or when TX energy is significant, UDP reduces per-transmission radio energy by \(\approx 11\times\) compared to short-lived TCP.

Real-World Data Points:

  • Temperature sensor (every 10s, dominant sleep current): UDP extends radio-active time by ~11x vs short-lived TCP per transmission; total battery life improvement depends on sleep-to-active duty cycle
  • Firmware update (monthly, 1 MB): TCP essential (ordering + reliability)
  • Smart doorbell (video): UDP + RTP (timeliness prioritized over perfection)
  • Payment terminal (transaction): TCP critical (zero loss tolerance)

10.10 Summary

Key Takeaways

Decision Framework (in order):

  1. Apply the 3-question filter: loss tolerance, battery constraint, transmission frequency
  2. Use the scenario comparison table and trade-off matrix for detailed analysis
  3. Consider hybrid approaches (CoAP CON, FEC, QUIC) when a single protocol does not fit
  4. Quantify overhead and power impact – do not rely on intuition alone

Protocol Selection Summary:

  • UDP: telemetry, real-time streams, power-constrained, high-frequency sensors
  • TCP: firmware updates, configuration, financial transactions, large reliable transfers
  • UDP + CoAP CON: sporadic critical commands needing reliability without TCP overhead
  • DTLS over UDP: security on battery-powered devices where TLS/TCP is too costly

Pitfall Checklist:

  • Set TCP_NODELAY for any interactive or low-latency TCP application
  • Add monotonic sequence numbers to every UDP message payload
  • Enable 6LoWPAN IPHC header compression on IEEE 802.15.4 / LoRaWAN networks
  • Avoid new TCP connections for readings sent less than once every 5 minutes – use UDP + CoAP instead

10.12 What’s Next?

Use the decision framework from this chapter as a foundation for the following topics:

Topic Description Link
Transport Protocols Overview Return to the hub for all transport protocol chapters transport-protocols.html
Transport Fundamentals Deep-dive into TCP and UDP mechanisms underpinning the decision framework transport-protocols-fundamentals.html
DTLS Security Apply DTLS to secure UDP-based protocols on battery-constrained devices transport-protocols-dtls.html
TCP Optimizations Configure TCP_NODELAY, window scaling, and congestion control for IoT transport-protocols-optimizations.html
CoAP Fundamentals See the decision framework in action: CoAP maps directly to UDP + CoAP CON/NON patterns ../app-protocols/coap-fundamentals.html
MQTT Protocol Understand when MQTT over TCP is preferable to MQTT-SN over UDP at scale ../app-protocols/mqtt.html