Найти в Дзене

Сетевой протокол ModBus TCP/IP и как он работает?

Modbus TCP — это вариант промышленного протокола Modbus, адаптированный для работы поверх стеков TCP/IP и сетей Ethernet, который широко используется в АСУ ТП благодаря простоте, открытой спецификации и
хорошей совместимости устройств. Его основная задача — обеспечить обмен
регистровыми данными между клиентами (мастерами) и серверами (слейвами)
по IP‑сетям в формате «запрос‑ответ». Структура кадра (над TCP): В Modbus TCP фактический адрес передаётся как 16‑битное (иногда 0‑based)
значение, а «4xxxx» и т.п. чаще служат логической нотацией в
документации. Некоторые распространённые функции Modbus TCP: При ошибке сервер возвращает тот же код функции, но с установленным старшим битом (добавляется 0x80) и байтом кода исключения, описывающим тип ошибки (недопустимый код функции и т.п.). Исходная спецификация Modbus TCP не включает механизмы шифрования,
аутентификации и контроля целостности на уровне протокола. Это делает
системы уязвимыми к перехвату трафика, подделке команд и атакам
Оглавление

Modbus TCP — это вариант промышленного протокола Modbus, адаптированный для работы поверх стеков TCP/IP и сетей Ethernet, который широко используется в АСУ ТП благодаря простоте, открытой спецификации и
хорошей совместимости устройств. Его основная задача — обеспечить обмен
регистровыми данными между клиентами (мастерами) и серверами (слейвами)
по IP‑сетям в формате «запрос‑ответ».

на типичной схеме Modbus TCP показывают один или несколько ПЛК‑серверов, подключённых к промышленному коммутатору Ethernet, и SCADA/PC‑клиент, обменивающийся с ними Modbus‑запросами по сети.
на типичной схеме Modbus TCP показывают один или несколько ПЛК‑серверов, подключённых к промышленному коммутатору Ethernet, и SCADA/PC‑клиент, обменивающийся с ними Modbus‑запросами по сети.

История и область применения

На изображении представлена архитектура и основной стек протокола
На изображении представлена архитектура и основной стек протокола
  • Протокол Modbus был разработан компанией Modicon (ныне Schneider
    Electric) в 1979 году как простой протокол для ПЛК и других промышленных устройств.
  • ​В 1999 году появился Modbus TCP/IP (часто просто Modbus TCP) как
    расширение Modbus RTU для работы поверх Ethernet и TCP/IP с целью
    использовать стандартную сетевую инфраструктуру.
  • ​Сейчас Modbus TCP активно применяется в ПЛК, контроллерах привода,
    измерительных модулях, IoT‑шлюзах и SCADA‑системах в промышленности,
    энергетике, водоканалах, транспорте и др.

Архитектура и стек протокола

На диаграмме уровней обычно рисуют «пирог»: внизу Ethernet, выше IP, далее TCP, сверху — MBAP+Modbus PDU как часть прикладного протокола Modbus TCP.
На диаграмме уровней обычно рисуют «пирог»: внизу Ethernet, выше IP, далее TCP, сверху — MBAP+Modbus PDU как часть прикладного протокола Modbus TCP.

Modbus TCP логически находится на прикладном уровне поверх стандартного стека TCP/IP и Ethernet.

  • Физический/канальный уровень: как правило, Ethernet (100BASE‑TX, 1000BASE‑T и т.п.), обеспечивающий передачу кадров и базовый контроль ошибок.
  • Сетевой уровень: IP, отвечающий за адресацию и маршрутизацию пакетов между устройствами по IP‑адресам.
  • Транспортный уровень: TCP, обеспечивающий надёжную, ориентированную на соединение доставку
    сообщений, сегментацию, квитирование и повторную передачу.
  • Прикладной уровень: Modbus Application Protocol (MBAP) + PDU Modbus, реализующие командную модель чтения/записи регистров.

Клиент‑серверная модель

Схема взаимодействия показывает стрелки «запрос» (client → server) и «ответ» (server → client) в рамках существующего TCP‑соединения.
Схема взаимодействия показывает стрелки «запрос» (client → server) и «ответ» (server → client) в рамках существующего TCP‑соединения.

Modbus TCP использует модель клиент–сервер (client–server), которая соответствует master–slave в классическом Modbus.

  • Modbus TCP‑клиент
  • Инициирует TCP‑соединения с серверами и формирует Modbus‑запросы.
  • Обычно это SCADA‑сервер, HMI‑панель, ПК‑приложение или верхнеуровневый контроллер.
  • Modbus TCP‑сервер
  • Слушает порт 502/TCP, принимает запросы, обращается к локальным регистрам и формирует ответы.
  • Типичные серверы — ПЛК, модули ввода‑вывода, интеллектуальные датчики, интеллектуальные приводы.
  • Соединение
  • Клиент устанавливает TCP‑соединение с сервером по порту 502 и посылает серии Modbus‑кадров до закрытия соединения.
  • Возможна работа с несколькими параллельными соединениями для повышения производительности и отказоустойчивости.

Формат кадра Modbus TCP

Диаграмма кадра обычно рисуется как последовательность прямоугольников: «Transaction ID», «Protocol ID», «Length», «Unit ID», «Function Code», «Data» с указанием размеров в байтах.
Диаграмма кадра обычно рисуется как последовательность прямоугольников: «Transaction ID», «Protocol ID», «Length», «Unit ID», «Function Code», «Data» с указанием размеров в байтах.

Кадр Modbus TCP состоит из заголовка MBAP и PDU с Modbus‑командой.

Структура кадра (над TCP):

  • MBAP Header (7 байт)
    Transaction Identifier (2 байта) — идентификатор транзакции для сопоставления запросов и ответов.
  • Protocol Identifier (2 байта) — для Modbus TCP всегда 0.
  • Length (2 байта) — количество байт, следующих после этого поля (Unit ID + PDU).
  • Unit Identifier (1 байт) — адрес «подчинённого» устройства за шлюзом (например, Modbus RTU‑устройств за Ethernet–RS‑485‑шлюзом).
  • PDU (Protocol Data Unit)
    Function Code (1 байт) — код функции (операции), которую должен выполнить сервер.
  • Data — параметр(ы) запроса, например начальный адрес и количество регистров, либо полезные данные для записи.

Адресное пространство и типы данных

На картинке адресного пространства обычно располагают четыре блока: Coils, Discrete Inputs, Input Registers, Holding Registers с указанием диапазонов адресов и типовых применений.
На картинке адресного пространства обычно располагают четыре блока: Coils, Discrete Inputs, Input Registers, Holding Registers с указанием диапазонов адресов и типовых применений.

Modbus организует данные в виде наборов регистров различных типов.

  • Coils (0xxxx) — дискретные выходы (1 бит), доступные на чтение и запись, часто управляют реле, выходами ПЛК.
  • Discrete Inputs (1xxxx) — дискретные входы (1 бит), только чтение, отражают состояние датчиков и входных клемм.
  • Input Registers (3xxxx) — входные регистры (16 бит), только чтение для аналоговых значений, измерений и т.п.
  • Holding Registers (4xxxx) — удерживаемые регистры (16 бит), чтение/запись, используются для параметров, установок и измерений.

В Modbus TCP фактический адрес передаётся как 16‑битное (иногда 0‑based)
значение, а «4xxxx» и т.п. чаще служат логической нотацией в
документации.

Основные коды функций

Таблица с двумя столбцами — «Function Code» и «Описание», где функции 01/03/05/06/15/16/23 отмечены как наиболее типичные, часто оформляется как визуальная схема.
Таблица с двумя столбцами — «Function Code» и «Описание», где функции 01/03/05/06/15/16/23 отмечены как наиболее типичные, часто оформляется как визуальная схема.

Коды функций определяют операции, которые клиент запрашивает у сервера.

Некоторые распространённые функции Modbus TCP:

  • 01 (Read Coils) — чтение состояния выходных дискретных линий (coils).
  • 02 (Read Discrete Inputs) — чтение дискретных входов.
  • 03 (Read Holding Registers) — чтение 1–125 (или 1–123) регистров хранения.
  • 04 (Read Input Registers) — чтение входных регистров.
  • 05 (Write Single Coil) — запись одного coil.
  • 06 (Write Single Register) — запись одного holding‑регистра.
  • 15 (Write Multiple Coils) — запись группы coils.
  • 16 (Write Multiple Registers) — запись нескольких holding‑регистров.
  • 23 (Read/Write Multiple Registers) — комбинированная операция чтения и записи holding‑регистров (доступна только в Modbus TCP).

При ошибке сервер возвращает тот же код функции, но с установленным старшим битом (добавляется 0x80) и байтом кода исключения, описывающим тип ошибки (недопустимый код функции и т.п.).

Пример обмена запрос‑ответ

Последовательная диаграмма с двумя вертикальными линиями (Client и Server) и стрелками «Read Holding Registers Request» и «Read Holding Registers Response» в рамках одного TCP‑сеанса.
Последовательная диаграмма с двумя вертикальными линиями (Client и Server) и стрелками «Read Holding Registers Request» и «Read Holding Registers Response» в рамках одного TCP‑сеанса.

Типичный цикл Modbus TCP выглядит следующим образом.

  1. Клиент устанавливает TCP‑соединение с IP‑адресом сервера по порту 502.
  2. Клиент формирует запрос, например «прочитать 10 holding‑регистров, начиная с адреса 40001», то есть функцию 03, стартовый адрес и количество
    регистров.
  3. Запрос инкапсулируется в MBAP‑заголовок (transaction ID, protocol ID=0, length и unit ID) и отправляется по TCP.
  4. Сервер читает локальные регистры, формирует ответ с тем же transaction ID и возвращает значения в поле Data.
  5. Клиент парсит ответ, сопоставляет его по transaction ID с запросом и обновляет свои внутренние переменные или интерфейс.

Особенности по сравнению с Modbus RTU

Сравнительная таблица RTU vs TCP по транспортному уровню, контролю ошибок, адресации и формату кадра часто приводится как визуальный слайд.
Сравнительная таблица RTU vs TCP по транспортному уровню, контролю ошибок, адресации и формату кадра часто приводится как визуальный слайд.

Modbus TCP сохраняет логическую модель Modbus RTU, но меняет транспорт и формат кадра.

  1. Транспорт
    Modbus RTU использует последовательные линии (RS‑485/RS‑232) и собственный CRC‑контроль, а Modbus TCP — Ethernet/TCP/IP и полагается на контроль ошибок TCP и Ethernet.
  2. Адресация
    В RTU каждому ведомому назначается адрес 1–247, тогда как в TCP основная
    адресация идёт по IP‑адресу, а поле Unit ID часто используется для
    доступа к RTU‑устройствам через шлюзы.
  3. Формат кадра
    В Modbus RTU есть старт/стоп‑условия и CRC в конце кадра, а в Modbus TCP
    кадр начинается с MBAP‑заголовка и не содержит CRC, потому что этим
    занимается стек TCP/Ethernet.
  4. Broadcast
    Широковещательная функция Modbus (адрес 0) не используется в Modbus TCP, так как протокол основан на соединениях.

Безопасность Modbus TCP

Типичная схема «классической» сети с Modbus TCP и второй — с добавлением TLS‑шлюза, межсетевых экранов и сегментации, подчёркивающих защиту трафика.
Типичная схема «классической» сети с Modbus TCP и второй — с добавлением TLS‑шлюза, межсетевых экранов и сегментации, подчёркивающих защиту трафика.

Исходная спецификация Modbus TCP не включает механизмы шифрования,
аутентификации и контроля целостности на уровне протокола. Это делает
системы уязвимыми к перехвату трафика, подделке команд и атакам типа
replay, особенно в небезопасных или общих сетях.

Подходы к усилению безопасности:

  • Modbus/TCP Security с TLS
    Modbus‑организация опубликовала спецификацию Modbus Security, которая инкапсулирует Modbus TCP в TLS с применением сертификатов X.509 для аутентификации и защиты целостности.
  • Лёгковесные криптографические расширения
    Предлагаются схемы, добавляющие аутентификацию, шифрование и защиту от повторов на уровне полезной нагрузки Modbus TCP с использованием лёгких алгоритмов (например, SM‑семейство, ASCON и др.), чтобы минимизировать задержки и нагрузку на ПЛК.
  • Сетевые механизмы защиты
    Фильтрация трафика, сегментация сети, использование eBPF для контроля и фильтрации Modbus TCP‑сообщений, а также IDS/IPS, нацеленные на промышленные протоколы.

Заключение

-12

Modbus TCP остаётся одним из самых распространённых и надёжных промышленных протоколов благодаря своей простоте, открытой спецификации и широкой поддержке оборудования различных производителей. Он эффективно решает задачи обмена данными между ПЛК, контроллерами и SCADA‑системами по стандартным сетям Ethernet, обеспечивая совместимость и
масштабируемость промышленных сетей. Однако изначально протокол не предусматривает встроенных механизмов безопасности, что требует дополнительных мер защиты при работе в открытых или общих сетях. С развитием технологий появляются новые решения, включающие шифрование и аутентификацию, что делает Modbus TCP актуальным и для современных требований к безопасности промышленных систем.