Жизненный цикл SIP-вызова: от INVITE до BYE - Asterisk и FreePBX: От GUI к Глубокому Администрированию и Оптимизации - Qpel.AI

Жизненный цикл SIP-вызова: от INVITE до BYE

Мы уже разобрали структуру SIP-сообщений и типы запросов. Теперь посмотрим, как они складываются в полноценный звонок. Понимать жизненный цикл SIP-вызова — значит уметь диагностировать и управлять АТС.

Фазы SIP-вызова

Жизненный цикл SIP-вызова состоит из трёх основных фаз. Каждая включает обмен определёнными SIP-сообщениями:

  1. Установка вызова: Начало звонка и согласование параметров.
  2. Управление сессией: Обмен медиа-трафиком (голос, видео).
  3. Завершение вызова: Корректное окончание соединения.

Давай рассмотрим каждую фазу подробнее.

1. Установка вызова (Call Setup)

Эта фаза начинается, когда один абонент (UAC) звонит другому (UAS).

  • INVITE: UAC отправляет INVITE UAS'у, чтобы начать вызов. В нём — предложения по кодекам и другая информация о сессии (SDP).
  • 100 Trying: UAS или прокси-сервер сразу отвечает 100 Trying. Это подтверждает получение INVITE и показывает, что запрос обрабатывается. Это информационный ответ.
  • 180 Ringing / 183 Session Progress: Если UAS начинает звонить абоненту, он может отправить 180 Ringing. Если нужно передать ранние медиа (гудки, голосовое сообщение), используется 183 Session Progress с SDP.
  • 200 OK (для INVITE): Когда вызываемый абонент поднимает трубку, UAS отправляет 200 OK в ответ на INVITE. Это финальный ответ с окончательными параметрами сессии (SDP) от UAS.
  • ACK: UAC подтверждает получение 200 OK с помощью ACK. С этого момента сессия установлена, и начинается обмен медиа-трафиком.

Важно: ACK всегда идёт напрямую от UAC к UAS, даже если INVITE проходил через прокси-серверы.

2. Управление сессией (Session Management)

После 200 OK и ACK начинается обмен медиа-трафиком. SIP здесь — сигнальный протокол, управляющий сессией. Сам медиа-трафик (голос, видео) передаётся по RTP (Real-time Transport Protocol).

  • UPDATE / PRACK / REFER / INFO: Во время разговора могут использоваться другие SIP-методы для изменения параметров сессии (например, переключение кодека, перевод вызова).
    • UPDATE: Меняет параметры сессии без изменения состояния диалога (например, кодек).
    • PRACK (Provisional ACKnowledgement): Подтверждает получение надёжных промежуточных ответов (1xx с заголовком Require: 100rel).
    • REFER: Используется для перевода вызова.
    • INFO: Передаёт информацию в рамках установленной сессии (например, DTMF-сигналы).

3. Завершение вызова (Call Teardown)

Когда один из участников заканчивает вызов, начинается фаза завершения.

  • BYE: Один из участников отправляет BYE другому, чтобы завершить сессию.
  • 200 OK (для BYE): Получатель BYE отвечает 200 OK, подтверждая завершение. Медиа-трафик прекращается, сессия закрыта.

Пример последовательности SIP-сообщений

Представим, что абонент А (192.168.1.10) звонит абоненту Б (192.168.1.20) через Asterisk (192.168.1.1):

sequenceDiagram
    participant A as Абонент А (UAC)
    participant Asterisk as Asterisk (Proxy/UAS)
    participant B as Абонент Б (UAS)

    A->>Asterisk: INVITE (А звонит Б)
    Asterisk-->>A: 100 Trying
    Asterisk->>B: INVITE (Asterisk звонит Б)
    B-->>Asterisk: 100 Trying
    B-->>Asterisk: 180 Ringing
    Asterisk-->>A: 180 Ringing
    B->>Asterisk: 200 OK (Б поднял трубку)
    Asterisk->>A: 200 OK (А получил ответ)
    A->>Asterisk: ACK (А подтвердил)
    Asterisk->>B: ACK (Asterisk подтвердил Б)
    Note over A,B: RTP (Медиа-трафик: разговор)
    A->>Asterisk: BYE (А завершает вызов)
    Asterisk->>B: BYE (Asterisk завершает вызов Б)
    B-->>Asterisk: 200 OK (Б подтвердил BYE)
    Asterisk-->>A: 200 OK (А получил подтверждение)
    Note over A,B: Сессия завершена

Совет: При диагностике проблем с вызовами, всегда держи эту последовательность в голове. Отсутствие сообщения или неверный ответ сразу укажет на проблему.

Понимание этого жизненного цикла критически важно для анализа логов Asterisk и сетевого трафика. В следующем разделе мы углубимся в коды ответов SIP, которые дают нам ценную информацию о статусе каждого шага.