Жизненный цикл SIP-вызова: от INVITE до BYE
Мы уже разобрали структуру SIP-сообщений и типы запросов. Теперь посмотрим, как они складываются в полноценный звонок. Понимать жизненный цикл SIP-вызова — значит уметь диагностировать и управлять АТС.
Фазы SIP-вызова
Жизненный цикл SIP-вызова состоит из трёх основных фаз. Каждая включает обмен определёнными SIP-сообщениями:
- Установка вызова: Начало звонка и согласование параметров.
- Управление сессией: Обмен медиа-трафиком (голос, видео).
- Завершение вызова: Корректное окончание соединения.
Давай рассмотрим каждую фазу подробнее.
1. Установка вызова (Call Setup)
Эта фаза начинается, когда один абонент (UAC) звонит другому (UAS).
INVITE: UAC отправляетINVITEUAS'у, чтобы начать вызов. В нём — предложения по кодекам и другая информация о сессии (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, которые дают нам ценную информацию о статусе каждого шага.