BroadNet
SIP / VoIPЗапросы

Методы и запросы SIP

Обновлено 3 мин чтенияна основе стандартов
Прямой ответ

Запросы SIP именуются методом. RFC 3261 определяет шесть: INVITE (начать сессию), ACK (подтвердить окончательный ответ на INVITE), BYE (завершить сессию), CANCEL (прервать ожидающий INVITE), REGISTER (зарегистрировать расположение) и OPTIONS (запросить возможности). RFC-расширения добавляют INFO, PRACK, UPDATE, SUBSCRIBE/NOTIFY, REFER, MESSAGE и PUBLISH.

§01

Шесть основных методов

RFC 3261 определяет основной набор запросов, поддерживаемый каждой реализацией SIP. INVITE устанавливает сессию и несёт начальное предложение SDP. ACK подтверждает окончательный ответ на INVITE — он необычен тем, что это запрос, завершающий трёхстороннее рукопожатие INVITE, а не ожидающий собственного ответа. BYE завершает установленную сессию. CANCEL прерывает INVITE, ещё не получивший окончательного ответа (вызов ещё звонит). REGISTER сообщает registrar, где достижим пользователь. OPTIONS запрашивает возможности узла и широко переиспользуется как лёгкий keepalive.

Основные методы SIP (RFC 3261)
МетодНазначениеПримечание
INVITEНачать сессиюПередаёт предложение SDP (offer); создаёт диалог
ACKПодтвердить окончательный ответ на INVITEЗавершает трёхстороннее рукопожатие INVITE
BYEЗавершить установленную сессиюОтправляется любой из сторон диалога
CANCELОтменить ожидающий INVITEТолько до окончательного ответа (вызов ещё идёт)
REGISTERЗарегистрировать местоположение Contact пользователяПериодически обновляется (Expires)
OPTIONSЗапрос возможностейЧасто используется повторно как keepalive / проверка работоспособности
§02

Почему ACK и CANCEL особенные

Два основных метода ведут себя не как остальные. ACK — это не обычная пара запрос/ответ: он подтверждает окончательный ответ на INVITE и не несёт собственного ответа. Для 2xx он отправляется из конца в конец как отдельная транзакция; для сбоя не-2xx он генерируется от перехода к переходу внутри транзакции INVITE. CANCEL имеет смысл, только пока INVITE ещё ожидает — как только приходит окончательный ответ, используйте BYE. Правильная работа с этими двумя — суть корректного конечного автомата SIP.

§03

Распространённые методы-расширения

Помимо шести основных, набор методов-расширений обрабатывает обмен сообщениями, события и изменения по ходу вызова. SUBSCRIBE/NOTIFY реализуют framework событий (присутствие, индикация ожидающих сообщений, состояние диалога). REFER инициирует перевод вызова. MESSAGE несёт мгновенные сообщения / SMS-поверх-SIP. UPDATE изменяет сессию до её полного установления (ранние медиа). PRACK надёжно подтверждает предварительные ответы. INFO несёт информацию по ходу сессии, такую как DTMF. PUBLISH передаёт состояние события на сервер.

Распространённые методы-расширения SIP
МетодRFCНазначение
INFORFC 6086Информация в ходе сеанса (например, цифры DTMF)
PRACKRFC 3262Надежное подтверждение предварительных (1xx) ответов
UPDATERFC 3311Изменение сессии до окончательного ответа (ранние медиа)
SUBSCRIBE / NOTIFYRFC 6665Подписка на события и уведомления (presence, MWI)
REFERRFC 3515Запросить перевод на другую сторону
MESSAGERFC 3428Мгновенные сообщения / обмен сообщениями в режиме page-mode
PUBLISHRFC 3903Отправить состояние события (например, presence) на сервер
§04

Строка запроса в канале

Запрос SIP начинается со строки запроса: метод, Request-URI (текущее назначение) и версия SIP. Далее следуют заголовки и опциональное тело. В примере — начало INVITE к вызываемому; Request-URI переписывается прокси по мере маршрутизации запроса, тогда как заголовок To остаётся неизменным как логическая цель.

Начало запроса INVITEtext
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP host.example.net;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob <sip:bob@example.com>
From: Alice <sip:alice@example.net>;tag=1928301774
Call-ID: a84b4c76e66710@host.example.net
CSeq: 314159 INVITE
Contact: <sip:alice@host.example.net>
Content-Type: application/sdp
Content-Length: 142
Часто задаваемые вопросы

Часто задаваемые вопросы

Каковы шесть основных методов SIP?

INVITE (начать сессию), ACK (подтвердить окончательный ответ на INVITE), BYE (завершить сессию), CANCEL (прервать ожидающий INVITE), REGISTER (зарегистрировать расположение пользователя) и OPTIONS (запросить возможности). Они определены в RFC 3261; всё остальное — расширения.

В чём разница между CANCEL и BYE?

CANCEL прерывает INVITE, ещё не получивший окончательного ответа — вызов, который ещё звонит. BYE завершает уже установленную сессию. Используйте CANCEL до ответа на вызов и BYE после; использование неверного оставляет конечный автомат в несогласованном состоянии.

Почему ACK не получает ответа?

ACK существует, чтобы подтвердить окончательный ответ на INVITE и завершить трёхстороннее рукопожатие, поэтому он определён как не имеющий собственного ответа. Для 2xx это отдельная сквозная транзакция; для сбоя он генерируется от перехода к переходу внутри транзакции INVITE.

Как отправляется DTMF в SIP?

Чаще всего как пакеты telephone-event RTP (RFC 4733) в медиапотоке и, как альтернатива, через сообщения SIP INFO, несущие цифры в тракте сигнализации. telephone-event RTP предпочтительнее, поскольку остаётся синхронным со звуком.

Какой метод переводит вызов?

REFER (RFC 3515). Он просит получателя инициировать новый запрос (обычно INVITE) к третьей стороне, названной в заголовке Refer-To, реализуя перевод вызова. Сообщения NOTIFY затем сообщают о ходе переведённого вызова обратно инициатору перевода.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

Запросите тестовый доступ с реальными тестовыми ключами: сначала отправьте их на свой подтвержденный номер, а затем, после утверждения вашей личности отправителя и маршрутов, переходите к использованию в производственной среде более чем в 200 странах.