Сообщения протокола SIP (запросы и ответы), представляют собой последовательности текстовых строк, закодированных в соответствии с документом RFC 2279. Структура и синтаксис сообщений SIP идентичны используемым в протоколе HTTP (рис. 3).
Стартовая строка |
Заголовки |
Пустая строка |
Тело сообщения |
Рис. 3. Структура сообщений протокола SIP
Запрос протокола SIP, составленный клиентом агента пользователя UAC (User Agent Client), должен обязательно включать:
- стартовую строку Request-Line;
- шесть полей заголовков: To, From, CSeq, Call-ID, Max-Forwards и Via.
Стартовая строка Request-Line состоит из названия типа запроса, адрес запроса Request-URI и номера версии протокола, разделённых пробелом (рис. 4). Request-Line заканчивается символами возврата каретки и перевода строки (CRLF). Оба символа, вместе или по одиночке, не должны встречаться в других частях строки.
Тип запроса | Пробел | Request-URI | Пробел | Версия протокола | СRLF |
Рис 4. Структура строки Request-Line
В базовой рекомендации IETF RFC 3261 определено 6 типов запросов: REGISTER - для регистрации контактной информации, INVITE, ACK и СANCEL - для установление сессий, BYE - для завершения сессий и OPTIONS - для запроса информации о функциональных возможностях сервера. В настоящее время число запросов в протоколе SIP увеличено до 14. Сервер определяет тип принятого запроса по названию, указанному в стартовой строке.
|
|
Поле Request-URI - это SIP URI, указывающий на пользователя или сервис, к которому адресован запрос. Исходное значение поля Request-URI сообщения устанавливается таким же, как URI в поле To. При использовании предустановленного маршрута рекомендуется задавать один URI, соответствующий исходящему прокси-серверу. Поле Request-URI не должно содержать пробелов и управляющих символов, а также быть заключённым в угловые скобки «< >».
И запросы, и ответы содержат действующую версию SIP-протокола. Приложения, посылающие SIP-сообщения, должны в поле SIP-Version указывать SIP/2.0.
Пример стартовой строки:
ACK sip:alex@psuti.ru SIP/2.0
Ниже будет рассмотрено формирование заголовков SIP-запросов при работе UAC вне диалога. Примерами запросов, отсылаемых вне диалога, является запрос INVITE, устанавливающий сессию, и запрос OPTIONS для запроса информации о функциональных возможностях. SIP-запросы при работе UAC в режиме диалога должны содержать специальный параметр, определяющий конкретный терминал вызываемого пользователя.