DNP3
DNP3
DNP3
Índice
1 Historia
2 Seguridad
3 Detalles Técnicos
4 Nivel de enlace
5 Nivel de transporte
o 5.1 Datos transmitidos desde el nivel de aplicación hacia el nivel de enlace
o 5.2 Datos transmitidos desde el nivel de enlace hacia el nivel de aplicación
6 Nivel de aplicación
o 6.1 Modelo de Objetos en DNP3
7 Más información
8 Enlaces externos
Historia
Cuando la especificación IEC 60870-5 se encontraba aún en desarrollo y no había sido
estandarizada, surgió la necesidad de crear un estándar que permitiera la interoperatibilidad
entre componentes SCADA de diferentes fabricantes, con el objetivo de ser utilizado en el
sector eléctrico. De este modo, en 1993, GE-Harris Canada (anteriormente conocido como
Westronic, Inc.) tomó parte de lo que había desarrollado hasta el momento de las
especificaciones de IEC 60870-5 como base para el desarrollo de un sistema abierto que
satisficiera las necesidades del sector de automatización estadounidense.
Seguridad
Aunque el protocolo fue desarrollado en base a requisitos de gran fiabilidad, no se prestó
demasiada importancia a los aspectos de seguridad relacionada con los ataques de Hackers
u otros factores malintencionados que pudiesen interferir en el correcto comportamiento de
las comunicaciones entre los diversos sistemas de control. Esto supuso un importante error
de diseño.
Debido a que el protocolo puede utilizar los niveles de transporte y enlace proporcionados
por la suite TCP/IP, gran parte del problema de añadir un Sistema de Autenticación Seguro
quedaba resuelto.
Cabe destacar además que el protocolo DNP3 se menciona en el estándar IEEE 1379-2000,
el cual recomienda un conjunto de prácticas recomendables para la implementación de
enlaces de comunicación entre maestros SCADA - RTU/IED. Este estándar no sólo incluye
cifrado, sino toda una serie de prácticas que mejoran la seguridad frente a métodos
intrusivos conocidos.
Detalles Técnicos
El protocolo DNP3 presenta importantes funcionalidades que lo hacen más robusto,
eficiente y compatible que otros protocolos más antiguos, tales como Modbus, con la
contrapartida de resultar un protocolo mucho más complejo.
DNP3 es un protocolo de tres capas o niveles según el modelo OSI: nivel de enlace (Data
Link Layer), Nivel de Aplicación (Application Layer), y un tercer nivel de Transporte
(Transport Layer) que realmente no cumple con todas las especificaciones del modelo OSI,
y por lo cual se suele denominar pseudo-nivel de Transporte. Por este motivo suele referirse
a él como un protocolo de dos capas o niveles.
El formato de trama utilizado está basado en el FT3 recogido en las especificaciones IEC
60870-5 (es una redefinición de este formato, no una implementación idéntica), y hace uso
de la Comprobación de Redundancia Cíclica (CRC) para la detección de errores.
Cuando se transmiten datos, estos sufren las siguientes transformaciones al pasar por las
diferentes capas:
El nivel de enlace se encarga de extraer de las tramas recibidas los Segmentos que
son pasados al nivel de transporte.
El nivel de transporte lee la cabecera de los segmentos recibidos del nivel de enlace,
y con la información obtenida extrae y compone los fragmentos que serán pasados
al nivel de aplicación.
En el nivel de aplicación los fragmentos son analizados y los datos son procesados
según el modelo de objetos definido por las especificaciones del estándar.
Nivel de enlace
Los mensajes DNP3 a nivel de enlace se encuentran en bloques de no más de 292 bytes
denominados tramas. El formato de trama es similar al FT3, si bien presenta ciertas
diferencias.
Cabecera DNP3: son los diez primeros bytes de la trama, y está constituida por los
siguientes campos:
2 bytes de inicio (start bytes), cuyo valor es fijo. 0x05 (valor en hexadecimal) para
el primero y 0x64 para el segundo.
1 byte con el tamaño de la trama. Este valor no tiene en cuenta ni la cabecera, ni los
CRC.
1 byte con el código de control, que permite fijar los servicios del nivel de enlace, el
sentido del flujo, etc.
2 bytes con la dirección de destino, codificada en big-endian.
2 bytes con la dirección de origen, codificada en big-endian.
2 bytes de CRC.
Big-endian: Usando este criterio el sistema big-endian adoptado por Motorola entre otros, consiste en representar
los bytes en el orden "natural": así el valor hexadecimal 0x4A3B2C1D se codificaría en memoria en la secuencia
{4A, 3B, 2C, 1D}. En el sistema little-endian adoptado por Intel, entre otros, el mismo valor se codificaría como
{1D, 2C, 3B, 4A}, de manera que de este modo se hace más intuitivo el acceso a datos, porque se efectúa
fácilmente de manera incremental de menos relevante a más relevante (siempre se opera con incrementos de
contador en la memoria), en un paralelismo a "lo importante no es como empiezan las cosas, sino como acaban."
Datos.
Cada 16 bytes de datos, así como al final de la trama, se encontrarán 2 bytes de CRC.
El nivel de enlace en DNP es balanceado, de modo que tanto la estación controladora como
la controlada tienen responsabilidad tanto en los envíos de los datos como en la gestión
(establecimiento y liberación) del nivel de enlace (fuera del alcance de las especificaciones
del protocolo).
En este caso, el nivel de transporte se encarga de recomponer los fragmentos del nivel de
aplicación a partir de los segmentos que le proporciona el nivel de enlace. Para ello, recurre
a las cabeceras de transporte y al número de secuencia que identifica la posición de cada
segmento dentro del fragmento.
Nivel de aplicación
El nivel de aplicación se encarga de procesar los fragmentos que le pasa el nivel de
transporte, y obtener la información de control y monitorización en ellos encapsulados
atendiendo al modelo de datos.
Entre los servicios que proporciona este nivel, se encuentran la escritura y lectura de
valores, la congelación de contadores y la selección y ejecución de mandos. El código de
función es el que permite indicar qué operación debe realizarse en este nivel.
El modelo de objetos en DNP3 permite, en rasgos generales, definir los tipos de datos que
se manejarán en las diferentes transacciones entre estación controlada y estación
controlante. A pesar de ello, existen objetos orientados más bien a servicios a nivel de
aplicación que a formato de datos en sí, como pueden ser el objeto 60 (Objeto de Clase), o
el objeto 80 (indicaciones internas).
Mediante las denominadas variaciones, es posible establecer, además del tipo de dato
definido por el objeto, el formato del mismo (tamaño y formato de los valores, por
ejemplo).
Objeto 1 - Entradas digitales: este objeto hace referencia a las entradas digitales.
Permite la lectura de las mismas, mediante el código de función 1, o la asignación
de clase mediante el código de función 22 (códigos de función también soportados
por otros objetos como contadores o entradas analógicas).
Objeto 2 - Eventos de las entradas digitales: es importante destacar que DNP3
maneja los valores estáticos y sus eventos como objetos diferentes. Así, los eventos
de las entradas digitales (objeto 1) se agruparán en el objeto 2.
Objeto 12 - Mandos digitales: este objeto hace referencia a los controles digitales.
Mediante los códigos de función de selección, ejecución, selección y ejecución y
ejecución sin confirmación, se podrán realizar estas operaciones sobre los elementos
especificados bajo este objeto.
Objeto 20 - Contadores: mediante este objeto, DNP3 permite la lectura o
manipulación (congelación, reseteo, etc.) de contadores.
Objeto 22 - Eventos de contadores: este es el objeto utilizado para agrupar la
información relativa a eventos generados por contadores (objeto 20).
Objeto 30 - Entradas analógicas: los valores analógicos se agrupan bajo este
objeto.
Objeto 32 - Eventos de las entradas analógicas: este es el objeto utilizado para los
eventos de las entradas analógicas definidas mediante el objeto 30.
Objeto 41 - Mandos analógicos: este es el objeto utilizado para ejecutar mandos
analógicos o Set Points. Admite las mismas funciones que los mandos digitales.
Objeto 50 - Hora y fecha: la variación 1 de este objeto permite a la estación
controladora sincronizar a la estación controlada.
Objeto 60 - Objeto de clase: como se comentó más arriba, este objeto no distingue
exactamente entre un tipo de dato, sino más bien hace alusión a una serie de
servicios del nivel de aplicación. Dependiendo del código de función utilizado,
mediante este objeto la estación controlada puede realizar peticiones por clase, o
asignar clases a los eventos de los objetos estáticos configurados en la estación
controlada.
Las clases en DNP3 permiten agrupar los eventos en tres niveles diferentes (recurso útil
para priorizar el esquema de peticiones del maestro). Las peticiones por clase permiten el
polling por eventos. Un caso excepcional es una cuarta clase denominada clase 0, mediante
la cual el maestro puede solicitar al esclavo el envío de todos los valores estáticos
configurados en su base de datos.
Más información
IEC 60870-5
IEC 60870-5-101
IEC 60870-5-104
IEC 60870-5-103
IEC 61850
Enlaces externos
DNP Users Group
Visión general del protocolo DNP3
Simulador DNP3 Gratis
Protocolo DNP, implementaciones en microcontroladores