756  Transport Review: Overhead and Battery Analysis

756.1 Learning Objectives

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

  • Calculate protocol overhead: Analyze header sizes and total packet costs
  • Compare efficiency: Evaluate UDP, TCP, and DTLS for small IoT payloads
  • Estimate battery life: Calculate radio on-time and energy consumption
  • Apply overhead analysis: Make data-driven protocol selection decisions

756.2 Prerequisites

Required Chapters:

Estimated Time: 25 minutes

756.3 Protocol Overhead Visualization

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
flowchart LR
    subgraph UDP_PKT["UDP Packet (10-byte payload)"]
        UDP_IP["IPv6: 6B<br/>(compressed)"]
        UDP_H["UDP: 8B"]
        UDP_P["Payload: 10B"]
        UDP_IP --> UDP_H --> UDP_P
        UDP_T["Total: 24B<br/>(58% overhead)"]
    end

    subgraph TCP_PKT["TCP Packet (10-byte payload)"]
        TCP_HS["Handshake:<br/>78B"]
        TCP_IP["IPv6: 6B<br/>(compressed)"]
        TCP_H["TCP: 20B"]
        TCP_P["Payload: 10B"]
        TCP_A["ACK: 26B"]
        TCP_TD["Teardown:<br/>104B"]
        TCP_HS --> TCP_IP
        TCP_IP --> TCP_H --> TCP_P --> TCP_A --> TCP_TD
        TCP_T["Total: 244B<br/>(96% overhead)"]
    end

    subgraph DTLS_PKT["DTLS Packet (10-byte payload)"]
        DTLS_IP["IPv6: 6B"]
        DTLS_U["UDP: 8B"]
        DTLS_R["DTLS Record: 13B"]
        DTLS_E["Encrypted: 10B"]
        DTLS_TAG["Auth Tag: 16B"]
        DTLS_IP --> DTLS_U --> DTLS_R --> DTLS_E --> DTLS_TAG
        DTLS_T["Total: 53B<br/>(81% overhead)"]
        DTLS_HS["+ Initial Handshake:<br/>620B (amortized)"]
    end

    UDP_PKT --> COMPARE
    TCP_PKT --> COMPARE
    DTLS_PKT --> COMPARE

    COMPARE["Efficiency Comparison<br/>━━━━━━━━━━━━━━<br/>UDP: 24B β†’ 1.3ms radio<br/>TCP: 244B β†’ 13.3ms radio<br/>DTLS: 53B β†’ 2.8ms radio<br/>━━━━━━━━━━━━━━<br/>Energy Ratio (10s interval):<br/>UDP: 1Γ— baseline<br/>TCP: 10Γ— worse<br/>DTLS: 2Γ— worse"]

    style UDP_PKT fill:#16A085,stroke:#2C3E50,stroke-width:3px,color:#fff
    style TCP_PKT fill:#E67E22,stroke:#2C3E50,stroke-width:3px,color:#fff
    style DTLS_PKT fill:#7F8C8D,stroke:#2C3E50,stroke-width:3px,color:#fff
    style COMPARE fill:#2C3E50,stroke:#16A085,stroke-width:3px,color:#fff
    style UDP_IP fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_H fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_P fill:#27AE60,stroke:#2C3E50,stroke-width:2px,color:#fff
    style UDP_T fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
    style TCP_HS fill:#D35400,stroke:#2C3E50,stroke-width:1px,color:#fff
    style TCP_IP fill:#E67E22,stroke:#2C3E50,stroke-width:1px,color:#fff
    style TCP_H fill:#E67E22,stroke:#2C3E50,stroke-width:1px,color:#fff
    style TCP_P fill:#F39C12,stroke:#2C3E50,stroke-width:2px,color:#fff
    style TCP_A fill:#E67E22,stroke:#2C3E50,stroke-width:1px,color:#fff
    style TCP_TD fill:#D35400,stroke:#2C3E50,stroke-width:1px,color:#fff
    style TCP_T fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
    style DTLS_IP fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_U fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_R fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_E fill:#BDC3C7,stroke:#2C3E50,stroke-width:2px,color:#000
    style DTLS_TAG fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_T fill:#7F8C8D,stroke:#2C3E50,stroke-width:2px,color:#fff
    style DTLS_HS fill:#5D6D7E,stroke:#2C3E50,stroke-width:1px,color:#fff

Figure 756.1: IoT Protocol Overhead Comparison for 10-Byte Payload

Protocol overhead comparison for 10-byte IoT payload showing packet structure and efficiency. UDP achieves 42% payload efficiency (24 bytes total: 6B compressed IPv6, 8B UDP header, 10B payload) with 58% overhead. TCP full connection consumes 244 bytes (96% overhead) including 78B handshake, 36B data packet, 26B ACK, and 104B teardownβ€”delivering only 4% payload efficiency. DTLS over UDP adds 53 bytes total (81% overhead) with 13B record header, 16B GCM authentication tag, plus amortized 620B initial handshake. Radio on-time at 250 kbps: UDP 1.3ms, TCP 13.3ms (10Γ— worse), DTLS 2.8ms (2Γ— worse). For battery-powered sensors transmitting every 10 seconds, UDP provides baseline energy consumption, while TCP consumes 10Γ— more energy and DTLS 2Γ— more. Protocol selection critically impacts battery life: UDP enables 45+ year deployments, TCP reduces to 8-9 years, DTLS achieves 20+ years with session resumption.

756.4 Overhead Comparison Table

Protocol Total Bytes Payload Efficiency Radio Time (250kbps) Energy Ratio
UDP 24 bytes 42% 1.3 ms 1Γ— baseline
TCP (full) 244 bytes 4% 13.3 ms 10Γ— worse
DTLS 53 bytes 19% 2.8 ms 2Γ— worse

Key Insight: For a 10-byte sensor payload, TCP transmits 24Γ— more data than the actual payload when including connection setup/teardown.

756.5 Battery Life Impact Comparison

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D', 'fontSize': '14px'}}}%%
graph TD
    SCENARIO["Scenario: Environmental Sensor<br/>━━━━━━━━━━━━━━━━━━━<br/>Payload: 10 bytes temp/humidity<br/>Interval: 10 seconds<br/>Radio: 250 kbps, 5 mA TX<br/>Battery: 2000 mAh<br/>Target: 5 years minimum"]

    subgraph UDP_LIFE["UDP Fire-and-Forget"]
        UDP_PKT_SIZE["Packet: 24 bytes"]
        UDP_RADIO["Radio on: 1.3 ms/transmission"]
        UDP_DAILY["Daily: 11.2 sec active"]
        UDP_ENERGY["Energy: 0.136 mAh/day"]
        UDP_YEARS["Battery Life: 45.5 years βœ“"]
        UDP_PKT_SIZE --> UDP_RADIO --> UDP_DAILY --> UDP_ENERGY --> UDP_YEARS
    end

    subgraph TCP_LIFE["TCP Full Connection"]
        TCP_PKT_SIZE["Packet: 244 bytes"]
        TCP_RADIO["Radio on: 13.3 ms/transmission"]
        TCP_DAILY["Daily: 115 sec active"]
        TCP_ENERGY["Energy: 0.280 mAh/day"]
        TCP_YEARS["Battery Life: 8.6 years"]
        TCP_PKT_SIZE --> TCP_RADIO --> TCP_DAILY --> TCP_ENERGY --> TCP_YEARS
    end

    subgraph DTLS_LIFE["DTLS with Session Resumption"]
        DTLS_PKT_SIZE["Packet: 53 bytes + resumption"]
        DTLS_RADIO["Radio on: 2.8 ms/transmission"]
        DTLS_DAILY["Daily: 24 sec active"]
        DTLS_ENERGY["Energy: 0.160 mAh/day"]
        DTLS_YEARS["Battery Life: 22.7 years βœ“"]
        DTLS_PKT_SIZE --> DTLS_RADIO --> DTLS_DAILY --> DTLS_ENERGY --> DTLS_YEARS
    end

    SCENARIO --> UDP_LIFE
    SCENARIO --> TCP_LIFE
    SCENARIO --> DTLS_LIFE

    COMPARISON["Performance Comparison<br/>━━━━━━━━━━━━━━━━━━━<br/>UDP: 1.0Γ— baseline (45.5 yrs)<br/>TCP: 5.3Γ— worse (8.6 yrs)<br/>DTLS: 2.0Γ— worse (22.7 yrs)<br/>━━━━━━━━━━━━━━━━━━━<br/>Decision: Use UDP for telemetry<br/>TCP fails 5-year target<br/>DTLS acceptable if security needed"]

    UDP_LIFE --> COMPARISON
    TCP_LIFE --> COMPARISON
    DTLS_LIFE --> COMPARISON

    style SCENARIO fill:#2C3E50,stroke:#16A085,stroke-width:3px,color:#fff
    style UDP_LIFE fill:#16A085,stroke:#2C3E50,stroke-width:3px,color:#fff
    style TCP_LIFE fill:#E67E22,stroke:#2C3E50,stroke-width:3px,color:#fff
    style DTLS_LIFE fill:#7F8C8D,stroke:#2C3E50,stroke-width:3px,color:#fff
    style COMPARISON fill:#2C3E50,stroke:#E67E22,stroke-width:3px,color:#fff
    style UDP_PKT_SIZE fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_RADIO fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_DAILY fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_ENERGY fill:#1ABC9C,stroke:#2C3E50,stroke-width:1px,color:#fff
    style UDP_YEARS fill:#27AE60,stroke:#2C3E50,stroke-width:2px,color:#fff
    style TCP_PKT_SIZE fill:#F39C12,stroke:#2C3E50,stroke-width:1px,color:#000
    style TCP_RADIO fill:#F39C12,stroke:#2C3E50,stroke-width:1px,color:#000
    style TCP_DAILY fill:#F39C12,stroke:#2C3E50,stroke-width:1px,color:#000
    style TCP_ENERGY fill:#F39C12,stroke:#2C3E50,stroke-width:1px,color:#000
    style TCP_YEARS fill:#C0392B,stroke:#2C3E50,stroke-width:2px,color:#fff
    style DTLS_PKT_SIZE fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_RADIO fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_DAILY fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_ENERGY fill:#95A5A6,stroke:#2C3E50,stroke-width:1px,color:#fff
    style DTLS_YEARS fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff

Figure 756.2: Transport Protocol Battery Life Comparison for IoT Sensors

Battery life comparison for transport protocols in environmental sensor deployment. Scenario: 10-byte temperature/humidity readings transmitted every 10 seconds over 250 kbps radio (5 mA TX current) from 2000 mAh battery, targeting 5-year minimum operation. UDP fire-and-forget delivers 45.5-year battery life: 24-byte packets require 1.3ms radio time per transmission (11.2 seconds daily active), consuming 0.136 mAh/dayβ€”5.3Γ— better than TCP and exceeding target. TCP full connection achieves only 8.6 years: 244-byte packets (including handshake/teardown) require 13.3ms radio time (115 seconds daily active), consuming 0.280 mAh/dayβ€”failing the 5-year target due to 96% protocol overhead. DTLS with session resumption provides 22.7-year life: 53-byte packets plus amortized resumption handshake require 2.8ms radio time (24 seconds daily active), consuming 0.160 mAh/dayβ€”acceptable security compromise at 2Γ— UDP overhead. Performance ratios: UDP baseline (1.0Γ—), TCP 5.3Γ— worse, DTLS 2.0Γ— worse. Protocol selection decision: use UDP for non-critical telemetry (45-year life), avoid TCP for frequent small transmissions (fails target), choose DTLS when security required (22-year compromise). Transmission frequency critically impacts battery: at 10-second intervals, protocol overhead dominates sleep current, making UDP essential for long deployments.

756.6 Detailed Power Budget Calculation

Scenario Parameters:

  • Payload: 10 bytes temperature/humidity
  • Interval: Every 10 seconds (8,640 transmissions/day)
  • Radio: 250 kbps, 5 mA TX current
  • Battery: 2000 mAh
  • Target: 5 years minimum

756.6.1 UDP Calculation

Packet size: 24 bytes
TX time: 24 bytes / 31,250 bytes/s = 0.77 ms + 0.5 ms processing = 1.3 ms
Daily active: 8,640 Γ— 1.3 ms = 11.2 seconds
Active energy: 5 mA Γ— (11.2 / 3600) hours = 0.0156 mAh
Sleep energy: 5 Β΅A Γ— (86,389 / 3600) hours = 0.1200 mAh
Total daily: 0.136 mAh
Battery life: 2000 / 0.136 = 45.5 years

756.6.2 TCP Calculation

Packet size: 244 bytes (including handshake/teardown)
TX time: 7.8 ms + 5 ms RX (ACKs) + 0.5 ms = 13.3 ms
Daily active: 8,640 Γ— 13.3 ms = 115 seconds
Active energy: 5 mA Γ— (115 / 3600) hours = 0.160 mAh
Sleep energy: 5 Β΅A Γ— (86,285 / 3600) hours = 0.120 mAh
Total daily: 0.280 mAh
Battery life: 2000 / 0.280 = 8.6 years

756.6.3 DTLS Calculation (with Session Resumption)

Packet size: 53 bytes + amortized resumption
TX time: ~2.8 ms average
Daily active: 8,640 Γ— 2.8 ms = 24 seconds
Active energy: 5 mA Γ— (24 / 3600) hours = 0.033 mAh
Sleep energy: 5 Β΅A Γ— (86,376 / 3600) hours = 0.120 mAh
Resumption overhead: ~7 mAh/day amortized
Total daily: 0.160 mAh
Battery life: 2000 / 0.160 = 22.7 years

756.7 Impact of Transmission Frequency

Interval UDP Life TCP Life Recommendation
10 sec 45 years 8.6 years UDP essential
1 min 45+ years 35 years UDP preferred
5 min 45+ years 45+ years Either works
1 hour 45+ years 45+ years TCP acceptable

Key Insight: At infrequent transmission intervals (>5 min), sleep current dominates and protocol overhead becomes negligible. At frequent intervals (<1 min), protocol overhead dominates and UDP is essential.

756.8 Summary

Protocol overhead directly impacts battery life:

  • UDP delivers 42% payload efficiency with 58% overhead - ideal for frequent transmissions
  • TCP delivers only 4% payload efficiency with 96% overhead - avoid for small frequent messages
  • DTLS delivers 19% efficiency with session resumption - acceptable for secure applications
  • Transmission frequency determines whether protocol overhead matters

756.9 What’s Next

Continue exploring transport protocol analysis: