SIP сообщения

SIP сообщения

 

В соответствии с архитектурой клиент сервер все сообщения подразделяются на запросы и ответы. Запросы передаются от клиента к серверу, ответы – от сервера к клиенту.
Для установления соединения вызывающий пользователь формирует SIP-запрос, в котором сообщает серверу адрес вызываемого пользователя, характеристики каналов. В обратном направлении от вызываемого абонента к вызывающему передается ответ на запрос, также с определенными параметрами.
Сообщения по протоколу SIP представляю набор текстовых строк, к которым применяется кодирование согласно рекомендации RFC 2279. В общем виде структура сообщения SIP состоит из трех основных элементов:
- Стартовая строка
- Заголовки
- Пустая строка
- Тело сообщения
Со стартовой строки начинаются все SIP сообщения. В стартовой строке для запроса указываются: тип запроса, адрес вызываемой стороны и версия протокола. В стартовой строке для ответа указываются: тип ответа, версия протокола.
В заголовке указывается информация необходимая для обработки сообщения, характеризирующая адресата и отправителя, а также направления передачи. Тип заголовка определяется его именем.
Не все SIP сообщения содержат тело сообщения. В сообщениях ACK, INVITE, OPTIONS, которые являются запросами, телом сообщения является описание сеанса связи в соответствии протоколу SDP. В сообщении BYE тело отсутствует. Ответы содержат тело сообщения, но его содержимое может носить разный характер.

Заголовки сообщений
Существует четыре типа SIP заголовков:
- Общие заголовки;
- Заголовки содержания – содержат данные о теле сообщения или же о инициаторе запроса (характерная особенность – начинаются с «Content») ;
- Заголовки запросов, содержат информацию о запросах;
- Заголовки ответов, содержат информацию о ответах.

Заголовок состоит из названия и значения заголовка, которое отделено двоеточием. Значение заголовка содержит данные. Сервер не обрабатывает неизвестные ему заголовки.
Приведем перечень наиболее часто используемых заголовков:
Call-ID – уникальны идентификатор сеанса связи, присваивается вызываемой стороной. Call-ID имеет структуру, согласно которой, содержит уникальное значение из букв и цифр и имя рабочей станции, присвоившей значение данного идентификатора. Разделено значение и имя станции символом «@».
To – заголовок, который определяет адресата. Указывается SIP-адрес , может указываться tag, характеризирующий конкретный терминал абонента, если имеется несколько терминалов с одним SIP URL. Метка tag добавляется терминалом абонента. Также в поле To может содержаться имя пользователя, для визуального отображения.
From – заголовок, характеризирующий вызывающего абонента. Структура поля From идентична структуре поля To.
CSeq – уникальный идентификатор запроса. Необходим для сопоставления запроса и ответа на него. Структурно состоит из натурального числа (1…232) и типа запроса. Сервер проверяет поле CSeq и принимает решение новый ли это запрос или нет.
Via – заголовок, описывающий путь следования запроса. Необходим для избегания петель и для тех случаев когда важно по какому пути передается запрос и ответ (при использовании Firewall). Заголовок Via содержит путь следования запроса. Каждый proxy-сервер добавляет свой адрес. Затем информация копируется и вставляется в заголовок Via ответа, а затем удаляется каждым proxy-сервером, через который проходит.
Record-route – заголовок, в который добавляется SIP URL proxy-сервер, Если необходимо что бы следующие запросы следовали через него.
Content-Type – характеризует формат описания сеанса связи.
Content-Length – содержит размер тела сообщения.

Запросы
Существует шесть основных типов запросов. Каждый имеет свой, достаточно широкий набор функций, с целью минимизации числа сообщений передаваемых между терминалами абонентов и серверами. Используя запросы абонент инициирует сеансы связи, передает информацию о местоположении, управляет параметрами текущих сеансов связи, заканчивает сеансы связи и прочее. Тип запроса определен в названии стартовой строки. Там же записан и адрес вызываемого оборудования.
INVITE – инициирует сеанс связи. Может переносить информацию необходимую для аутентификации пользователя на сервере. Переносит описания сеанса связи, его параметры. Указывается информация о типе принимаемой информации. В ответе будет указываться тип принимаемой и передаваемой информации.
ACK – указывает что ответ на INVITE получен. Может содержать обновленные описания сеанса связи. Используется только в связке с INVITE.
CANCEL – запрос отмены. Прерывает обслуживание запросов содержащих идентичные Call-ID, From, To, CSeq. Не влияет на те, которые уже были обслужены.
BYE – запрос на завершение сеанса связи. После принятия запроса на завершения сеанса связи, прекращается передача медийной информации. Ответом на запрос BYE является OK.
REGISTER – запрос регистрации, информирует сервер о своем местоположении. Задает период времени , в котором текущая регистрация действительна.
OPTIONS - запрос направленный на получение данных о оборудовании вызываемой стороны. В ответ передается информация о характеристиках терминала вызываемого пользователя.
Также был введен дополнительный запрос INFO. Его предназначение – передача данных для управления соединением непосредственно во время сеанса связи. Используется в случаях:
- передача сигнализации ТфОП, ISDN между шлюзами;
- передача DTMF во время сеанса;
- передача биллинговых сообщений.

При передаче сообщений SIP, завернутого в транспортный протокол UDP возникает опасность, что размер запроса или ответа превысит максимально допустимый для конкретной сети и произойдет разделение пакета. Что бы этого не случилось применяют сжатые формы имен заголовков. Сжатые имена заголовков выглядят следующим образом:
Сжатая форма имени Полная форма имени
с Content-Type
e Content- Encoding
f From
i Call-ID
m Contact (от "moved")
l Content-Length
s Subject
t To
v Via

Ответы
Ответ отсылается после принятия и обработки запроса. Существует шесть типов ответов. Тип ответа кодируется трехзначным числом. Первая цифра определяет к какой категории относится ответ, другие две цифры конкретизируют тип ответа. В общем случае ответ может быть информационным или финальным. Информационные сообщают что запрос обрабатывается. Информационным ответам сопоставляется код 1хх (например 100 Trying, 180 Ringing). Если ответ на запрос в течении определенного времени не получен, запрос считается утерянным. Финальным ответам соответствуют коды 2хх, 3хх, 4хх, 5хх, 6хх. Они используются для информировании о завершении обработки запроса по различным причинам.
Код 2хх означает что запрос корректно обработан (200 OK).
- 200 OK на запрос INVITE означает подтверждение принять участие в сеансе связи; в теле сообщения указываются параметры оборудования;
- 200 OK на запрос BYE подтверждение завершения сеанса связи, тело сообщения пустое;
- 200 OK на запрос CANCEL подтверждение отмены, тело пустое;
- 200 OK на запрос REGISTER подтверждение успешной регистрации;
- 200 OK на запрос OPTION в теле сообщения передается информация о параметрах оборудования.
Код Зхх предоставляет информацию о изменившемся местоположении вызываемого абонента, или подобную информацию, которая позволяет создать новый запрос на соединение :
- 300 Multiple Choices предоставляет несколько адресов которые согут быть использованы для соединения с вызываемым абонентом;
- 301 Moved Permanently сообщает что абонент не находится по указанному адресу ;
- ответ 302 Moved Temporary сообщает что абонент временно не доступен по указанному адресу.
Код 4хх предоставляет информацию что в запросе присутствует ошибка и без его изменения передача невозможна:
- 400 Bad Request информирует о наличии синтаксических ошибок;
- 401 Unauthorized информирует о необходимости авторизации;
- 403 Forbidden информирует, что сервер по каким-либо причинам не может ответить на запрос;
- 485 Ambiguous информирует о неоднозначности адреса в запросе;
- 486 Busy Here информирует о том что в настоящий момент вызываемый пользователь не может принять запрос.
Код 5хх предоставляют информацию о не способности сервера обработать запрос:
- 500 Server Internal Error информирует о не способности сервера обработать запрос по причине собственной ошибки;
- 501 Not Implemented информирует о не способности сервера обработать запрос по причине отсутствия функциональной возможности дать ответ на запрос;
- 502 Bad Gateway информирует о некорректном ответе от сервера на который был переадресован запрос;
- 503 Service Unavailable информирует о не способности сервера обработать запрос по причине перезагрузки или технических неполадок.
Коды 6хх предоставляют информацию о невозможности установления соединения с вызываемым абонентом:
- 600 Busy Everywhere информирует что абонент занят;
- 603 Decline информирует что вызываемый абонент не может принять вызов;
- 604 Does Not Exist Anywhere информирует что абонента не существует.

Запросы и ответы образуют SIP-транзакцию. Транзакция происходит между клиентом и сервером начиная с первого запроса и кончая финальным ответом. Если используется транспортный протокол TCP одна транзакция передается по одному TCP соединению.