Кратко

  • Некоторые переходы CAS требовали реакции за десятки миллисекунд. RFC 3064 передал локальный протокол, таймеры и тайм-ауты шлюзу, оставив анализ цифр и решения более высокого уровня Call Agent.
  • rel и rlc освобождали телефонное плечо и возвращали транк в работу, но не удаляли пакетные соединения. Для этого требовалась отдельная операция DLCX.

Задержка управления не должна была стать телефонным состоянием

Channel Associated Signaling выражала занятие, ответ, приостановку и освобождение рядом с каналом. Если реакция требовалась за десятки миллисекунд, пересылка каждого изменения к удалённому Call Agent превращала задержку сети управления в часть телефонного автомата.

Опубликованный в феврале 2001 года RFC 3064 разделил функции. Медиашлюз по возможности исполнял низкоуровневый CAS, его таймеры и тайм-ауты. Call Agent анализировал цифры, выбирал назначение и управлял соединениями. Близость давала шлюзу право уложиться в срок, а не право решать судьбу всего вызова.

Шесть пакетов покрывали разные интерфейсы: MS для базового MF CAS, DT для DTMF и импульсного набора, BL для PBX/FXS, DO для FXO, MD для EANA/EAIN Feature Group D и MO для операторских служб. Реестр IANA подтверждает выделение шести имён версии 0, но не реализацию в конкретном устройстве и не современное использование.

Общий интерфейс не отменял физическую конфигурацию

Call Agent мог использовать один сценарий для wink start и immediate start: шлюз скрывал локальную последовательность и сообщал общее событие setup. Но тип транка по-прежнему настраивался в шлюзе вне MGCP, а контроллер должен был знать пакет и направление.

Направление ответственности сохранялось и в терминах. Signal был командой от Call Agent, event — наблюдением шлюза. 200 OK подтверждал приём одного шага. Завершение передачи цифр позже приходило как operation complete, а ответ удалённой стороны был ещё одним фактом.

Успешная команда поэтому не доказывала завершённый набор, ответ абонента, полезный медиапоток или разговор людей. Состояния с отметкой S можно было аудировать, но они отвечали на узкие вопросы: начался ли вызов и свободно ли телефонное плечо для нового вызова? Текущий снимок не восстанавливал всю причинную историю.

Освобождались два разных объекта

rel означал не только on-hook, а отказ от телефонного плеча и освобождение его ресурсов. Это могла быть команда Call Agent или событие после удалённого on-hook либо локальной неисправности. rlc затем подтверждал полное освобождение транка.

Спецификация сразу ограничивала этот вывод: rel не подразумевал удаление соединений. Чтобы освободить весь вызов вместе с пакетными соединениями, Call Agent должен был отдельно или одновременно выполнить DLCX.

Свободный транк и удалённое соединение — состояния разных объектов. Линия может стать доступной, пока соединение остаётся в шлюзе. Соединение можно удалить до завершения освобождения удалённой линии. Поэтому квитанции rlc и DLCX не заменяют друг друга.

При glare обе стороны одновременно занимают двунаправленный транк. Шлюз мог применить локально настроенное, вплоть до отдельного DS0, правило и сообщить аварийное освобождение. Тогда rlc завершал переход ресурсов, хотя не обязательно отражал буквальный удалённый on-hook. Состояние ресурса не было рассказом о намерении человека.

RFC 3064 имел статус Informational. Примечание IESG говорило о тогдашнем внедрении в нескольких продуктах и одновременно указывало на последующую работу Megaco и ITU-T SG16. Более поздние RFC дают контекст жизненного цикла, но не доказывают сегодняшнее распространение и не меняют исходную семантику задним числом.

Исторический принцип прост: действие с коротким сроком нужно выполнять рядом с оборудованием, решение широкого масштаба — там, где видна вся транзакция, а изменение каждого объекта должно иметь отдельное подтверждение. Миллисекунды принадлежали шлюзу. Итог вызова не принадлежал ему одному.

Источники