Открыть меню

Протоколы NDC и DDC

Создано 5 мая 2026 г. Обновлено 2 июн. 2026 г. 7 мин чтения

Справочная заметка ATM: Протоколы NDC и DDC.

Протоколы NDC и DDC

Обзор

NDC (NCR Direct Connect) — проприетарный протокол компании NCR для связи ATM с хостом.
DDC (Diebold Direct Connect) — аналогичный протокол Diebold, структурно схожий с NDC.

Оба протокола выполняют двойную функцию:

  1. Транзакционная: передача авторизационных запросов и ответов
  2. Управляющая (management): настройка ATM, управление экранами, конфигурацией, состоянием

Это отличает NDC/DDC от чистого ISO 8583, который отвечает только за транзакции.

[!warning] Нужен источник Полные спецификации NDC/DDC являются вендорскими и обычно недоступны публично. Детальные форматы сообщений ниже нужно проверять по официальной документации NCR/Diebold Nixdorf или внутренним материалам банка.


NDC — архитектура взаимодействия

graph LR
    ATM_APP["ATM Application\n(APTRA)"]
    NDC_DRV["NDC Driver\n(в составе ATM ПО)"]
    HOST["NDC Host\n(процессинг NCR или\nбанковский хост)"]

    ATM_APP <--> NDC_DRV
    NDC_DRV <-->|"NDC messages\nover TCP/TLS"| HOST

Важно: NDC — это протокол «хост управляет ATM». Хост посылает ATM экранные определения (screen definitions), параметры конфигурации, сценарии поведения. ATM «тупой» — он следует инструкциям хоста.


NDC — структура сообщения

Каждое NDC-сообщение — это ASCII-строка с разделителями:

<MSG_CLASS><FS><MSG_SUBCLASS><FS><DATA...><FS>...<ETX>

Где:

  • <FS> = Field Separator (ASCII 0x1C, \)
  • <ETX> = End of Text (ASCII 0x03)
  • <MSG_CLASS> — класс сообщения (1 символ)

Классы сообщений NDC

КлассСимволОписание
Transaction RequestTATM → Host: запрос транзакции
Transaction ReplyFHost → ATM: ответ на транзакцию
StatusSATM → Host: статус ATM
Status ReplyBHost → ATM: ответ на статус
Solicited Status(запрошенный)Host инициирует запрос статуса
Unsolicited Status(инициированный ATM)ATM сам сообщает об изменении
Configuration ID Load1Host → ATM: конфигурация
Screen Data Load5Host → ATM: загрузка экранов
State Table Load4Host → ATM: таблица состояний
Terminal Command2Host → ATM: команда терминалу

NDC State Machine (машина состояний)

NDC-протокол описывает поведение ATM через таблицу состояний (State Table).

Каждое состояние определяет:

  • Какой экран показать клиенту
  • Какие клавиши обрабатывать
  • В какое состояние переходить при каком вводе
stateDiagram-v2
    [*] --> State000 : Запуск ATM
    State000 : State 000\nCard Read
    State001 : State 001\nPIN Entry
    State002 : State 002\nTransaction Request\n(отправка на хост)
    State003 : State 003\nAmount Entry
    State004 : State 004\nDispense
    State005 : State 005\nReceipt Print
    State006 : State 006\nReturn Card
    StateErr : Error State

    State000 --> State001 : Card inserted OK
    State000 --> StateErr : Card read error
    State001 --> State003 : PIN OK
    State001 --> StateErr : PIN error
    State003 --> State002 : Amount selected
    State002 --> State004 : Host: Approved
    State002 --> StateErr : Host: Declined / Timeout
    State004 --> State005 : Cash dispensed
    State005 --> State006 : Receipt printed
    State006 --> [*] : Card ejected

Количество состояний: в реальных ATM-конфигурациях до 255 состояний. Таблица состояний загружается хостом при инициализации ATM.


NDC — Transaction Request (ATM → Host)

T \ T \ <LUNO> \ <DATE> \ <TIME> \ <SEQNO> \
<TRACK2> \ <OP-CODE> \ <AMOUNT-AUTH> \ <AMOUNT-DISP> \
<TRACK1> \ <PIN-BLOCK> \ <BUFFER-B> \ <BUFFER-C>
ПолеОписание
TMessage Class = Transaction
TMessage Sub-Class = Transaction Request
LUNOLogical Unit Number (ID терминала, до 8 знаков)
DATEYYMMDD
TIMEHHMMSS
SEQNOПорядковый номер транзакции
TRACK2Данные Track 2 карты
OP-CODEКод операции (например 1 = withdrawal)
AMOUNT-AUTHЗапрошенная сумма авторизации
AMOUNT-DISPСумма к выдаче
TRACK1Данные Track 1 (если есть)
PIN-BLOCKЗашифрованный PIN Block
BUFFER-BБуфер B (данные EMV/chip)
BUFFER-CБуфер C (данные EMV/chip, продолжение)

NDC — Transaction Reply (Host → ATM)

F \ T \ <LUNO> \ <DATE> \ <TIME> \ <SEQNO> \
<FUNC-CODE> \ <SCREEN-NO> \ <DISP-DATA> \
<RECEIPT-NO> \ <AMOUNT-DISP> \ <TRACK2> \ <PIN-BLOCK>
ПолеОписание
FUNC-CODEКод функции хоста: D = диспенсировать, A = авторизовано без выдачи, N = отказ
SCREEN-NOНомер экрана для показа клиенту
DISP-DATAДанные для подстановки на экран (например сумма, баланс)
RECEIPT-NOНомер чека
AMOUNT-DISPСумма к диспенсированию

Function Codes:

КодДействие ATM
DDispense and print receipt
AApproved, no cash (balance inquiry)
NDecline, show error screen
FCardholder error (show specific screen)
ZTerminal error
UUnrecognized request (resend)

NDC — Status Messages

Solicited Status (запрос от хоста)

Хост запрашивает текущее состояние ATM:

Host → ATM: запрос статуса
ATM → Host: Status (S \ <LUNO> \ <STATUS-DESC>)

Unsolicited Status (ATM сам отправляет)

ATM сообщает хосту об изменении состояния:

sequenceDiagram
    participant ATM
    participant HOST

    ATM->>HOST: Unsolicited Status\nS \ ATM01 \ InService
    HOST-->>ATM: Status Reply B

    Note over ATM: Jam в диспенсере

    ATM->>HOST: Unsolicited Status\nS \ ATM01 \ DeviceFault\nCDM JAM
    HOST-->>ATM: Status Reply B
    HOST->>HOST: Alert: ATM01 Out of Service

Status Descriptor структура

S \ <LUNO> \ <DEVICE-STATUS> \ <SUPPLY-STATUS> \ 
<HARDWARE-ERROR> \ <SENSORS> \ <RESERVED>
ПолеЗначения
Device StatusIn Service, Out of Service, Supervisor
Supply StatusСостояние расходников (лента принтера, кассеты)
Hardware ErrorОписание ошибки устройства

NDC — Screen Definitions

Экраны ATM определяются хостом и загружаются через Screen Data Load (5):

5 \ <SCREEN-NUMBER> \ <SCREEN-TYPE> \ <TEXT-LINES> \
<GRAPHIC-DATA> \ <FUNCTION-KEY-DATA>
ПараметрОписание
Screen Number000–999
Screen TypeТип экрана (FDK, touch, audio)
Text LinesСтроки текста с подстановкой переменных
Function Key DataНазначение функциональных клавиш FDK

Подстановка переменных на экранах:

  • %A = Transaction Amount
  • %B = Account Balance
  • %Z = Custom data from host response

DDC — отличия от NDC

DDC (Diebold Direct Connect) структурно аналогичен NDC, но имеет отличия:

ПараметрNDCDDC
РазработчикNCRDiebold
Используется сNCR ATMDiebold ATM
ФорматASCII, FS-separatedASCII, FS-separated (схожий)
Управление состояниемState TableState Table (аналогичная концепция)
Коды операцийСобственныеСобственные (частично пересекаются)
Загрузка конфигурацииConfiguration ID LoadConfiguration Load (аналог)
EMV поддержкаЧерез Buffer B/CЧерез аналогичные буферы

[!warning] Документация DDC Полная спецификация DDC является проприетарной документацией Diebold Nixdorf и не находится в открытом доступе. Информация выше основана на общеизвестных отраслевых данных.


NDC/DDC и мультивендорное ПО

Современное ATM-ПО (KAL Kalignite, Diebold Vynamic, NCR APTRA) поддерживает оба протокола через абстрактный уровень:

graph TD
    APP["ATM Application\n(мультивендорное)"]
    ADAPTER["Protocol Adapter Layer"]
    NDC_DRV["NDC Driver"]
    DDC_DRV["DDC Driver"]
    ISO_GW["ISO 8583 Gateway"]
    HOST_NCR["NCR NDC Host"]
    HOST_DIE["Diebold DDC Host"]
    HOST_ISO["Universal ISO Host"]

    APP --> ADAPTER
    ADAPTER --> NDC_DRV --> HOST_NCR
    ADAPTER --> DDC_DRV --> HOST_DIE
    ADAPTER --> ISO_GW --> HOST_ISO

Связанные заметки

Источники

  • Нужен официальный публичный источник по конкретной версии NDC/DDC или внутренняя документация банка/вендора.

Ссылаются на эту заметку

Источник: публичный слой Obsidian Vault.