DNP3 Message Structure Explained

By | November 1, 2025

DNP3 (Distributed Network Protocol) messages are built in multiple layers to ensure reliable communication between master stations and outstations (RTUs or IEDs) in SCADA systems.

Each layer adds its own control information, creating a message that can be verified, retransmitted, and correctly interpreted across noisy or unreliable communication links.

The Enhanced Performance Architecture (EPA)

DNP3 follows the IEC Enhanced Performance Architecture (EPA) model — a simplified 3-layer version of the OSI model consisting of:

LayerFunction
Application LayerCreates and interprets SCADA commands and data.
Data Link LayerFrames messages, handles addressing, and provides error detection.
Physical LayerDefines the medium (RS-232, Ethernet, radio, etc.) and signal transmission.

DNP3 also adds a pseudo-transport layer, which handles segmentation and reassembly of large messages.

Enhanced Performance Architecture (EPA)
Enhanced Performance Architecture (EPA)

Message Buildup Process

When a DNP3 message is sent, it passes downward through the layers:

  1. Application Layer: Creates the Application Protocol Data Unit (APDU) — the core data and commands.
  2. Pseudo-Transport Layer: Splits large APDUs into smaller Transport Protocol Data Units (TPDUs), each with a 1-byte header.
  3. Data Link Layer: Adds a 10-byte header and CRC checks to form Link Protocol Data Units (LPDUs).
  4. Physical Layer: Converts the data into a serial or network bit stream for transmission.
DNP3 protocol message buildup process
DNP3 protocol message buildup process

Application Layer (APDU)

The Application Layer handles actual SCADA data and command exchanges.
It builds Application Service Data Units (ASDUs) and wraps them with control headers to form APDUs.

Application message format and function codes
Application message format and function codes

APDU Components:

FieldPurpose
Application Control (AC)1-byte field controlling flow (FIR, FIN, CON bits, and sequence number).
Function Code (FC)Specifies the operation (READ, WRITE, SELECT, OPERATE, RESPONSE, etc.).
Data / ASDUContains DNP3 data objects (binary inputs, analogs, counters).
IIN (Internal Indications)Used only in responses to report device status.

Pseudo-Transport Layer

The pseudo-transport layer ensures large messages (up to 2048 bytes) can be divided into manageable fragments.

Transport protocol data unit
Transport protocol data unit

Each TPDU:

  • Has a 1-byte header with:
    • FIR (First Fragment)
    • FIN (Final Fragment)
    • 6-bit sequence counter (0–63)
  • Carries up to 249 bytes of data, fitting exactly within one DNP3 frame.
Transport header byte and control field
Transport header byte and control field

This allows error detection and retransmission per frame rather than per large message.

DNP3 uses the FT3 frame format (adapted from IEC 870-5-1).

Each frame contains a 10-byte fixed header and optional data blocks, each followed by a 16-bit CRC.

Standard DNP3 Frame Structure:

Data Link Layer (Frame Format)
Data Link Layer Frame Format
FieldBytesDescription
Start2Fixed 0x0564 pattern identifying frame start.
Length1Number of bytes following (excluding CRCs).
Control1Contains direction, function, and frame count bits.
Destination Address2Receiving device address.
Source Address2Sending device address.
Header CRC2Error check for the header.
User DataUp to 250Application data, divided into 16-byte blocks.
Block CRCs2 per blockError check per 16-byte data block.
Control byte
Control byte

Each frame may carry up to 250 bytes of data, giving a maximum total frame size of 292 bytes.

Error Detection and Reliability

DNP3 uses a 16-bit CRC (polynomial 0x3D65) for both headers and data blocks.
Every 16-byte block of data has its own CRC, allowing localized error correction.
If a CRC fails, the receiver discards the frame and requests retransmission.

Typical Message Example

Master Request → Outstation Response

StepMessage
1Master sends READ command (APDU) requesting binary inputs.
2Transport layer divides it into TPDUs and frames.
3Data Link layer adds FT3 headers, addressing, and CRCs.
4Outstation receives, validates CRC, reassembles data, and responds with RESPONSE APDU.

Summary

LayerMain RoleData UnitMax Size
ApplicationCommands & dataAPDU2048 bytes
Pseudo-TransportFragmentationTPDU250 bytes
Data LinkFraming & CRCLPDU292 bytes
PhysicalTransmissionBit stream

DNP3’s multi-layered structure, built with redundancy and CRC checking at every stage, ensures high reliability for SCADA communication — even over low-quality lines or radio links.

Author: Zakaria El Intissar

I'm an automation and industrial computing engineer with 12 years of experience in power system automation, SCADA communication protocols, and electrical protection. I build tools and write guides for Modbus, DNP3, IEC 101/104, and IEC 103 on ScadaProtocols.com to help engineers decode, analyze, and troubleshoot real industrial communication systems.

Leave a Reply

Your email address will not be published. Required fields are marked *