Запросы SIP именуются методом. RFC 3261 определяет шесть: INVITE (начать сессию), ACK (подтвердить окончательный ответ на INVITE), BYE (завершить сессию), CANCEL (прервать ожидающий INVITE), REGISTER (зарегистрировать расположение) и OPTIONS (запросить возможности). RFC-расширения добавляют INFO, PRACK, UPDATE, SUBSCRIBE/NOTIFY, REFER, MESSAGE и PUBLISH.
Шесть основных методов
RFC 3261 определяет основной набор запросов, поддерживаемый каждой реализацией SIP. INVITE устанавливает сессию и несёт начальное предложение SDP. ACK подтверждает окончательный ответ на INVITE — он необычен тем, что это запрос, завершающий трёхстороннее рукопожатие INVITE, а не ожидающий собственного ответа. BYE завершает установленную сессию. CANCEL прерывает INVITE, ещё не получивший окончательного ответа (вызов ещё звонит). REGISTER сообщает registrar, где достижим пользователь. OPTIONS запрашивает возможности узла и широко переиспользуется как лёгкий keepalive.
| Метод | Назначение | Примечание |
|---|---|---|
| INVITE | Начать сессию | Передаёт предложение SDP (offer); создаёт диалог |
| ACK | Подтвердить окончательный ответ на INVITE | Завершает трёхстороннее рукопожатие INVITE |
| BYE | Завершить установленную сессию | Отправляется любой из сторон диалога |
| CANCEL | Отменить ожидающий INVITE | Только до окончательного ответа (вызов ещё идёт) |
| REGISTER | Зарегистрировать местоположение Contact пользователя | Периодически обновляется (Expires) |
| OPTIONS | Запрос возможностей | Часто используется повторно как keepalive / проверка работоспособности |
Почему ACK и CANCEL особенные
Два основных метода ведут себя не как остальные. ACK — это не обычная пара запрос/ответ: он подтверждает окончательный ответ на INVITE и не несёт собственного ответа. Для 2xx он отправляется из конца в конец как отдельная транзакция; для сбоя не-2xx он генерируется от перехода к переходу внутри транзакции INVITE. CANCEL имеет смысл, только пока INVITE ещё ожидает — как только приходит окончательный ответ, используйте BYE. Правильная работа с этими двумя — суть корректного конечного автомата SIP.
Распространённые методы-расширения
Помимо шести основных, набор методов-расширений обрабатывает обмен сообщениями, события и изменения по ходу вызова. SUBSCRIBE/NOTIFY реализуют framework событий (присутствие, индикация ожидающих сообщений, состояние диалога). REFER инициирует перевод вызова. MESSAGE несёт мгновенные сообщения / SMS-поверх-SIP. UPDATE изменяет сессию до её полного установления (ранние медиа). PRACK надёжно подтверждает предварительные ответы. INFO несёт информацию по ходу сессии, такую как DTMF. PUBLISH передаёт состояние события на сервер.
| Метод | RFC | Назначение |
|---|---|---|
| INFO | RFC 6086 | Информация в ходе сеанса (например, цифры DTMF) |
| PRACK | RFC 3262 | Надежное подтверждение предварительных (1xx) ответов |
| UPDATE | RFC 3311 | Изменение сессии до окончательного ответа (ранние медиа) |
| SUBSCRIBE / NOTIFY | RFC 6665 | Подписка на события и уведомления (presence, MWI) |
| REFER | RFC 3515 | Запросить перевод на другую сторону |
| MESSAGE | RFC 3428 | Мгновенные сообщения / обмен сообщениями в режиме page-mode |
| PUBLISH | RFC 3903 | Отправить состояние события (например, presence) на сервер |
Строка запроса в канале
Запрос SIP начинается со строки запроса: метод, Request-URI (текущее назначение) и версия SIP. Далее следуют заголовки и опциональное тело. В примере — начало INVITE к вызываемому; Request-URI переписывается прокси по мере маршрутизации запроса, тогда как заголовок To остаётся неизменным как логическая цель.
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 затем сообщают о ходе переведённого вызова обратно инициатору перевода.
Технические характеристики источника
На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)