VoIP
January 8

Протокол SIP

SIP (Session Initiation Protocol) - это протокол, используемый для установления, изменения и завершения мультимедийных сеансов, таких как VoIP-звонки, видеоконференции и обмен сообщениями. В SIP определено несколько типов сообщений, которые делятся на запросы и ответы.


1. Запросы SIP

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

Основные методы SIP:

  1. INVITE - Инициализация сеанса. Используется для начала вызова или установления соединения.
    Пример: приглашение абонента на голосовой или видеозвонок.
  2. ACK - Подтверждение успешного получения ответа на INVITE.
    Пример: завершение трехсторонней handshake-процедуры для установки соединения.
  3. BYE - Завершение сеанса. Используется для окончания вызова.
    Пример: завершение звонка.
  4. CANCEL - Отмена незавершенного запроса INVITE. Используется для прекращения вызова до его принятия.
    Пример: отмена вызова до того, как он был принят абонентом.
  5. OPTIONS - Запрос информации о возможностях конечного устройства или сервера (например, поддерживаемые кодеки).
    Пример: определение возможностей устройства перед вызовом.
  6. REGISTER - Регистрация устройства пользователя на SIP-сервере.
    Пример: устройство сообщает серверу о своем IP-адресе и порте для приема вызовов.
  7. INFO - Передача дополнительной информации во время активного сеанса, не изменяя его состояние.
    Пример: передача DTMF-тонов или сигналов.
  8. PRACK (Provisional Acknowledgment) - Подтверждение временного (1xx) ответа. Это опциональный метод.
    Пример: надежная доставка 1xx сообщений.
  9. SUBSCRIBE - Запрос подписки на изменения состояния ресурса.
    Пример: подписка на уведомления о статусе пользователя (онлайн/офлайн).
  10. NOTIFY - Уведомление об изменении состояния ресурса, на который подписан пользователь.
    Пример: уведомление об изменении статуса собеседника.
  11. PUBLISH - Публикация информации о состоянии ресурса.
    Пример: устройство сообщает свой текущий статус (доступен/недоступен).
  12. REFER - Направление получателя для выполнения действия, например, перенаправления вызова.
    Пример: переадресация звонка на другой номер.
  13. MESSAGE - Отправка текстовых сообщений между участниками.
    Пример: обмен короткими текстовыми сообщениями через SIP.
  14. UPDATE - Изменение параметров сеанса во время его активного состояния.
    Пример: изменение кодека во время звонка.
  15. PING - Проверка доступности устройства или сервера.
    Пример: проверка активности удаленного SIP-устройства.

2. Ответы SIP

Ответы в SIP делятся на 6 классов (по коду состояния, аналогично HTTP). Каждый ответ содержит код и текстовое описание.

Классы ответов:

  1. 1xx: Informational (Информационные)
    Уведомляют об обработке запроса.
    • 100 Trying — запрос обрабатывается.
    • 180 Ringing — вызываемое устройство звонит.
    • 183 Session Progress — передача прогресса установления соединения (например, плейбэк звука ожидания).
  2. 2xx: Success (Успех)
    Запрос выполнен успешно.
    • 200 OK — успешное завершение запроса (например, вызов принят).
  3. 3xx: Redirection (Перенаправление)
    Требуется дальнейшее действие.
    • 301 Moved Permanently — конечный узел переехал на другой адрес.
    • 302 Moved Temporarily — временный новый адрес.
  4. 4xx: Client Error (Ошибка клиента)
    Проблема с запросом со стороны клиента.
    • 400 Bad Request — некорректный запрос.
    • 401 Unauthorized — требуется аутентификация.
    • 403 Forbidden — доступ запрещен.
    • 404 Not Found — пользователь не найден.
    • 408 Request Timeout — запрос истек.
  5. 5xx: Server Error (Ошибка сервера)
    Проблема на стороне сервера.
    • 500 Server Internal Error — внутренняя ошибка сервера.
    • 503 Service Unavailable — сервис недоступен.
  6. 6xx: Global Failure (Глобальная ошибка)
    Запрос отклонен глобально.
    • 600 Busy Everywhere — все устройства абонента заняты.
    • 603 Decline — вызов отклонен.
    • 604 Does Not Exist Anywhere — пользователь не существует.

Пример SIP-сообщения

Запрос INVITE:

INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.2:5060
From: "Caller" <sip:caller@domain.com>;tag=12345
To: <sip:user@example.com>
Call-ID: 1122334455@domain.com
CSeq: 1 INVITE
Contact: <sip:caller@192.168.1.2>
Content-Type: application/sdp
Content-Length: 129

v=0
o=- 1122334455 1122334455 IN IP4 192.168.1.2
s=Session SDP
c=IN IP4 192.168.1.2
t=0 0
m=audio 49170 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000

Ответ 200 OK:

SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.2:5060
From: "Caller" <sip:caller@domain.com>;tag=12345
To: <sip:user@example.com>;tag=67890
Call-ID: 1122334455@domain.com
CSeq: 1 INVITE
Contact: <sip:user@192.168.1.3>
Content-Type: application/sdp
Content-Length: 129

v=0
o=- 1122334455 1122334455 IN IP4 192.168.1.3
s=Session SDP
c=IN IP4 192.168.1.3
t=0 0
m=audio 49170 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000

Этот список покрывает основные типы сообщений и примеры их использования в SIP.