Distributed Network Protocol Version 3 (DNP3) is an open, reliable industrial communication protocol designed primarily for electric utilities, water treatment, oil and gas, and other critical infrastructure requiring reliable Supervisory Control and Data Acquisition (SCADA) over long-distance and often unreliable communication links.
Distributed Network Protocol Version 3 (DNP3) is an open, reliable industrial communication protocol designed primarily for electric utilities, water treatment, oil & gas, and other critical infrastructure requiring reliable Supervisory Control and Data Acquisition (SCADA).
Unlike Modbus, DNP3 was specifically designed for telemetry over unreliable communication links, making it ideal for long-distance communications using:
DNP3 is widely deployed throughout electrical transmission and distribution networks and is one of the most common protocols used in modern SCADA systems.
Earlier SCADA protocols suffered from limitations including:
DNP3 was designed to provide:
DNP3 is commonly used in:
Typical devices include:
A typical DNP3 SCADA deployment connects a central master station to multiple remote outstations over a wide-area communication network.
SCADA Master
│
Ethernet / Radio / Cellular
│
------------------------------
RTU / Gateway
│
------------------------------
PLCs / IEDs / Relays
│
Sensors & Actuators
One master generally communicates with many remote stations.
DNP3 uses a master-outstation architecture. Instead of "Master" and "Slave", DNP3 terminology uses Master Station and Outstation.
Master Station
↓
Outstation
The master:
The outstation:
Unlike Modbus, outstations can report events without requiring continuous polling.
DNP3 supports a wide range of communication media:
The original implementation runs directly over RS-232 or RS-485 using the DNP3 Data Link Layer.
Also known as DNP3 TCP, this variant encapsulates DNP3 packets inside TCP for integration into modern Ethernet SCADA systems.
Default TCP port: 20000
DNP3 loosely follows the OSI model.
| OSI Layer | DNP3 |
|---|---|
| Application | DNP3 Application Layer |
| Transport | DNP3 Transport Layer |
| Data Link | DNP3 Data Link |
| Physical | RS-232, RS-485, Ethernet |
Typical polling sequence:
Master ↓ Read Request ↓ Outstation ↓ Returns Current Values ↓ Stores Events ↓ Master Requests Events ↓ Only Changed Values Returned
One of DNP3's biggest improvements over Modbus is event-driven reporting. Instead of sending all values repeatedly:
Temperature = 50°C No change ↓ No transmission Temperature = 60°C ↓ Only change transmitted
Advantages include:
DNP3 can send unsolicited responses. Instead of waiting for polling:
Breaker Trips ↓ RTU Immediately Sends Event ↓ Master Receives Alarm
This significantly improves alarm response times.
Every event may include:
The master periodically synchronizes clocks across the network. This is critical for:
Unlike Modbus registers, DNP3 organizes information into objects.
Example: Breaker Status — Open / Closed
Examples: Voltage, Current, Temperature, Pressure
Examples: Energy Usage, Flow Totals
Examples: Open Breaker, Close Breaker, Start Pump, Stop Pump
DNP3 data is organized into standard object groups:
| Group | Description |
|---|---|
| Binary Inputs | Digital status |
| Binary Outputs | Commands |
| Analog Inputs | Measurements |
| Analog Outputs | Setpoints |
| Counters | Energy totals |
| Time Objects | Clock synchronization |
| Device Attributes | Device information |
Static data represents the current value. Example: Pump Running.
Event data records only changes. Example:
Stopped ↓ Started ↓ Stopped
The master can request:
DNP3 divides events into priority classes, allowing the master to poll different classes at different rates.
| Class | Description |
|---|---|
| Class 0 | Static data |
| Class 1 | High priority events |
| Class 2 | Medium priority events |
| Class 3 | Low priority events |
For example, the master may poll:
This reduces network traffic while ensuring critical events are reported promptly.
DNP3 includes robust mechanisms for reliable delivery over noisy links:
Making it highly reliable over noisy communication links.
Traditional DNP3 had no authentication or encryption, making it vulnerable to:
To address this, the protocol was enhanced with Secure Authentication (DNP3-SA).
Key security features include:
DNP3-SA authenticates control commands before they are executed, helping prevent unauthorized operations. However, it does not encrypt all traffic; confidentiality typically requires additional measures such as VPNs or secure network architectures.
The IEC 62351 series defines cybersecurity measures for power system communications, including DNP3.
Relevant protections include:
Utilities commonly implement DNP3-SA together with IEC 62351 guidance to strengthen security across SCADA environments.
DNP3 is frequently deployed within Industrial Automation and Control Systems (IACS) covered by IEC 62443. IEC 62443 does not replace DNP3; instead, it provides security requirements for systems using DNP3.
Key recommendations include:
Monitor for:
Maintain an inventory of:
| Feature | DNP3 | Modbus |
|---|---|---|
| Designed for SCADA | Yes | Originally no |
| Event reporting | Yes | No |
| Time stamps | Yes | No |
| Unsolicited messaging | Yes | No |
| Class polling | Yes | No |
| Data objects | Yes | Registers only |
| Reliable over radio | Excellent | Limited |
| Secure Authentication | Yes (DNP3-SA) | No native equivalent |
| Complexity | Higher | Lower |
| Bandwidth efficiency | High | Lower |
A simplified view of the DNP3 packet structure shows how each layer contributes to reliable delivery, sequencing, and application-level interpretation.
+------------------------------------------------------+ | Data Link Header | +------------------------------------------------------+ | CRC | +------------------------------------------------------+ | Transport Header | +------------------------------------------------------+ | Application Header | +------------------------------------------------------+ | Function Code | +------------------------------------------------------+ | Object Header(s) | +------------------------------------------------------+ | Data Objects | +------------------------------------------------------+ | CRC | +------------------------------------------------------+
SCADA Master
│
Read Class 1 Events
│
▼
Remote RTU
│
Changed Analog Values
Binary Alarms
Counter Updates
│
▼
Master Updates HMI
Historian Stores Events
Operator Receives Alarm