SITE MAP
NEWS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Гольдштейн Б.С., Зарубин А.А., Саморезов В.В.

 

  

 

Протокол SIP

Предисловие

Благодарим за помощь, оказанную в ходе написания книги, студентов СПбГУТ

Галактионова А.Н. и Спирина А.Н.

 

Содержание

Предисловие

 

1.  Общие принципы и возможности протокола

1.1.    Принципы протокола SIP

1.2.    Интеграция протокола SIP с IP-сетями

1.3.    Адресация в сетях SIP

 

 

2.       Протокол инициализации сессий (SIP)

 

2.1 Назначение и функциональность агента пользователя (UA)

2.1.1       Клиент агента пользователя (UAC)

2.1.1.1   Процедура посылки запросов

2.1.1.2   Процедура приема ответов

2.1.2       Сервер агента пользователя (UAS)

2.1.2.1   Процедура обработки запросов

2.1.2.2    Процедура посылки ответов

 

2.2     Сообщения протокола SIP

2.2.1       Структура сообщений

2.2.2       Заголовки сообщений

2.2.3       Назначение и формат запросов

2.2.4       Назначение и формат ответов на запросы

 

2.3     Процедуры управления соединением

2.3.1       Диалоги

2.3.1.1   Процедура создания диалога

2.3.1.2   Процедура посылки и приема запросов внутри диалога

2.3.1.3    Процедура завершения диалога

2.3.2       Транзакции

2.3.2.1   Процедуры функционирования клиентских транзакций

2.3.2.2   Процедуры функционирования серверных транзакций

2.3.3       Процедура регистрации

2.3.3.1   Процедура формирования запроса REGISTER

2.3.3.2   Процедура обработки запроса REGISTER

2.3.4       Процедура запроса информации о функциональных возможностях

2.3.4.1   Создание запроса OPTIONS

2.3.4.2   Обработка запроса OPTIONS

2.3.5       Процедура отмены запроса

2.3.5.1   Работа клиента

2.3.5.2   Работа сервера

2.3.6       Инициализация сессий

2.3.6.1   Процедуры функционирования UAC

2.3.6.2   Процедуры функционирования UAS

2.3.7       Процедуры модификации сессий

2.3.8       Процедуры разрушения сессий

 

2.4     Назначение и функциональность прокси-сервера

2.4.1       Функциональность прокси-сервер с сохранением состояний

2.4.1.1   Проверка правильности составления запроса

2.4.1.2   Предварительная обработка маршрутной информации

2.4.1.3   Определение адресов для пересылки

2.4.1.4   Пересылка запроса

2.4.1.5   Обработка ответов

2.4.1.6   Обработка таймера С

2.4.1.7   Обработка ошибок транспортного уровня

2.4.1.8   Обработка запросов CANCEL

2.4.2       Функциональность прокси-сервера без сохранения состояний

2.4.3       Работа с заголовком Route и полем Request-URI

2.4.4       Примеры

 

2.5     Назначение и функциональность сервера перенаправления

 

2.6     Процедуры функционирования НТТР аутентификации

2.6.1       Процедуры аутентификации «пользователь-пользователь»

2.6.2       Процедуры аутентификации «прокси-пользователь»

2.6.3       Схема аутентификации Digest

 

2.7     Защита содержимого тела сообщения средствами S/MIME

2.7.1       S/MIME сертификаты

2.7.2       Обмен ключами S/MIME

2.7.3       Защита тела сообщения

2.7.4       Защита SIP-сообщений средствами S/MIME (SIP-туннелирование)

2.7.4.1   Обеспечение целостности SIP-сообщений

2.7.4.2   Шифрование при туннелировании

 

2.8     Процедуры обеспечения безопасности

2.8.1       Типы угроз

2.8.1.1   Злоумышленная регистрация

2.8.1.2   Имитация сервера

2.8.1.3   Порча тела сообщения

2.8.1.4   Срыв сессий

2.8.1.5   Отказ в обслуживании

2.8.2 Механизмы обеспечения безопасности

2.8.2.1   Безопасность транспортного и сетевого уровней

2.8.2.2   Схема SIPS URI

2.8.2.3   HTTP аутентификация

2.8.2.4   S/MIME

2.8.3 Реализация механизмов обеспечения безопасности

2.8.3.1  Требования для разработчиков оборудования SIP

2.8.3.2   Решения по обеспечению безопасности

 

2.9     Алгоритмы установления соединения

2.9.1       Установление соединения с участием прокси-сервера

2.9.2       Установление соединения с участием сервера перенаправления

 

2.10  Транспортный уровень протокола SIP

2.10.1    Работа Клиента

2.10.1.1  Отсылка запросов

2.10.1.2  Получение ответов

2.10.2    Работа Сервера

2.10.2.1  Получение запросов

2.10.2.2  Отсылка ответов

2.10.3    Длина тела сообщения

2.10.4    Обработка ошибок

 

 

3.       Протокол SIP для телефонии (SIP-T)

 

3.1 Назначение и особенности протокола SIP-T

 

3.2 Сценарии организации взаимодействия

3.2.1 Применение SIP-T при транзите трафика (ТфОП-IP-ТфОП)

3.2.2 Процедуры организация связи из ТфОП в IP-сеть

3.2.3 Процедуры организация связи из IP-сети в ТфОП

 

3.3 Компоненты протокола SIPT

3.3.1 Использование протокола SIP

3.3.2 Процедуры инкапсуляции сигнальных сообщений

3.3.3 Процедуры трансляции сигнальных сообщений

3.3.4 Поддержка передачи сигнальных сообщений во время сеанса

 

3.4 Согласование содержимого сообщений протокола SIP

 

3.5 Процедуры обеспечения безопасности

 

3.6 Преобразование сигнальных протоколов ISUP и SIP

 

3.6.1 Общие принципы взаимодействия

 

3.6.2 Требования к протоколу SIP при взаимодействии с сетью ТфОП

3.6.2.1 Процедуры прозрачной передачи сообщений ISUP

3.6.2.2 Процедуры поддержки формата MIME

3.6.2.3 Процедуры передачи многочастотного набора DTMF

3.6.2.4 Процедуры обеспечения проключения голосовых трактов в предответном состоянии

3.6.2.5 Процедуры поддержки обмена транзакциями, не меняющими состояния конечного автомата

 протокола SIP, во время активной сессии

3.6.2.6 Поддержка механизмов обеспечения конфиденциальности

3.6.2.7 Процедуры обеспечения информации о причинах, вызвавших посылку запроса CANCEL

 

3.6.3 Преобразование сигнальных сообщений протокола ISUP в SIP

3.6.3.1 Процесс обмена сообщениями

3.6.3.2. Конечные автоматы SIP-T при взаимодействии ISUP-SIP

3.6.3.3 Примеры сценариев для случая соединения ТфОП – SIP

 

3.6.4 Преобразование SIP в ISUP

3.6.4.1 Процесс обмена сообщениями

3.6.4.2 Конечные автоматы SIP-T при взаимодействии SIP-ISUP

3.6.4.3 Примеры сценариев и сообщений для случая вызова SIP – ТфОП

 

3.6.5 Формирование телефонных URI

3.6.5.1 Процедура преобразования формата ISUP в формат tel URL 

3.6.5.2 Процедура преобразования формата tel URL в формат ISUP

 

Заключение

 

Глоссарий

 

Список литературы

 

 

Глава 1. Общие принципы и возможности протокола SIP

1.1 Принципы протокола SIP       

Протокол инициирования сеансов - Session Initiation Protocol является протоколом прикладного

 уровня и предназначается для организации, модификации и завершения сеансов связи:

мультимедийных конференций, телефонных соединений и распределения мультимедийной информации.

Протокол SIP разработан комитетом IETF, а спецификации протокола представлены в документе

 RFC 3261 [ ]. В основу протокола заложены следующие принципы:

Персональная мобильность пользователей. Пользователи могут перемещаться без

ограничений в пределах сети, поэтому услуги связи должны предоставляться им в

любом месте этой сети. Пользователю присваивается уникальный идентификатор,

а сеть предоставляет ему услуги связи вне зависимости от того, где он находится.

Для этого пользователь с помощью специального сообщения информирует сеть о

своих перемещениях.

Масштабируемость сети характеризуется, в первую очередь, возможностью

 увеличения количества элементов сети при её расширении. Серверная

структура сети, построенной на базе протокола SIP, в полной мере отвечает этому требованию.

Расширяемость протокола характеризуется возможностью дополнения

 протокола новыми функциями при введении новых услуг и его адаптации

 к работе с различными приложениями. Расширение функций протокола SIP

может быть произведено за счет введения новых заголовков  и типов сообщений.

Интеграция в стек существующих протоколов Интернет, разработанных IETF.

Протокол SIP является частью сложной архитектуры, разработанной

комитетом IETF. Эта архитектура включает в себя также протокол

резервирования ресурсов (Resource Reservation Protocol, RSVP; RFC 2205),

 транспортный протокол реального времени (Real-Time Transport Protocol,

 RTP; RFC 1889), протокол передачи потоков в реальном времени (Real-Time

Streaming Protocol, RTSP; RFC 2326), протокол описания параметров связи

 (Session Description Protocol, SDP; RFC 2327) и прочие. Однако функции

протокола SIP не зависят ни от одного из этих протоколов.

Взаимодействие с другими протоколами сигнализации. Протокол SIP

может быть использован совместно с протоколом Н.323. Возможно

 также взаимодействие протокола SIP с системами сигнализации

ТфОП - EDSS1 и ОКС №7. Для упрощения такого взаимодействия сигнальные

 сообщения протокола SIP могут переносить не только SIP-адрес, но и

телефонный номер формата Е.164 или любого другого формата.

Кроме того, протокол SIP, наравне с протоколами H.323 и ISUP,

может применяться для обеспечения функционирования устройств управления

 шлюзами, в этом случае он должен взаимодействовать с протоколом MGCP или MEGACO.

 

 

1.2  Интеграция протокола SIP с IP-сетями

Важной особенностью протокола SIP является его независимость от транспортных технологий.

 В качестве транспорта могут использоваться протоколы Х.25, Frame Relay, AAL5, IPX и др.

 Структура сообщений SIP не зависит от выбранной транспортной технологии.

Сигнальные сообщения SIP могут переноситься не только протоколом

транспортного уровня UDP, но и протоколом ТСР. Протокол UDP позволяет

быстрее, чем TCP, доставлять сигнальную информацию (даже с учетом

повторной передачи неподтвержденных сообщений), а также вести

 параллельный поиск местоположения пользователей и передавать

 приглашения к участию в сеансе связи в режиме многоадресной рассылки.

В свою очередь, протокол ТСР упрощает работу с межсетевыми экранами, а

также гарантирует надежную доставку данных. При использовании протокола

 ТСР разные сообщения, относящиеся к одному вызову, либо могут передаваться

по одному TCP-соединению, либо для каждого запроса и ответа на него может

 открываться отдельное TCP-соединение. На рисунке 1.1 показано место,

занимаемое протоколом SIP в стеке протоколов TCP/IP.

 

Рис. 1.1. Место протокола SIP в стеке протоколов TCP/IP.

 

По сети с маршрутизацией пакетов IP может передаваться пользовательская информация

практически любого вида: речь, видео и данные, а также любая их комбинация, называемая

мультимедийной информацией. При организации связи между терминалами пользователей

 необходимо известить встречную сторону, какого рода информация может приниматься

(передаваться),

 алгоритм ее кодирования и адрес, на который следует передавать информацию.

Таким образом, одним из обязательных условий организации связи при помощи протокола

SIP является обмен между сторонами данными об их функциональных возможностях.

 Для этой цели чаще всего используется протокол описания сеансов связи - SDP

(Session Description Protocol).

Поскольку в течение сеанса связи может производиться его модификация, предусмотрена

передача сообщений SIP с новыми описаниями сеанса средствами SDP.

Для передачи медиа информации комитет IETF предлагает использовать протокол RTP,

 но сам протокол SIP не исключает возможность применения для этих целей других протоколов.

В протоколе SIP не реализованы механизмы управления потоками информации и предоставления

гарантированного качества обслуживания. Кроме того,

протокол SIP не предназначен для передачи пользовательской информации, в его сообщениях

 может переноситься информация лишь ограниченного объема. При переносе через сеть слишком

большого сообщения SIP не исключена его фрагментация на уровне IP, что может повлиять на

 качество передачи информации.

Также, протокол SIP предусматривает организацию конференций трех видов:

q  в режиме многоадресной рассылки, когда информация передается на один multicast-адрес,

 а затем доставляется сетью конечным адресатам;

q  при помощи устройства управления конференции, к которому участники конференции передают

 информацию в режиме точка-точка, а оно, в свою очередь, обрабатывает ее (т.е. смешивает

или коммутирует) и рассылает участникам конференции;

q  путем соединения каждого пользователя с каждым в режиме точка-точка.

Протокол SIP дает возможность присоединения новых участников к уже существующему

сеансу связи, т.е. двусторонний сеанс может перейти в конференцию.

 

1.3  Адресация в сетях SIP

Для организации взаимодействия с существующими приложениями IP-сетей и для обеспечения

мобильности пользователей протокол SIP использует адрес, подобный адресу электронной почты.

В качестве адресов рабочих станций используются  специальные универсальные указатели

ресурсов - URL (Universal Resource Locators), так называемые SIP URL.

SIP-адреса бывают четырех типов:

q  имя@домен,

q  имя@хост,

q  имя@IP-адрес,

q  №телефона@шлюз.

Таким образом, адрес состоит из двух частей. Первая часть – это имя пользователя,

зарегистрированного в домене или на рабочей станции. Если вторая часть адреса

идентифицирует какой-либо шлюз, то в первой указывается телефонный номер абонента.

Во второй части адреса указывается имя домена, рабочей станции или шлюза.

 Для определения IP-адреса устройства необходимо обратиться к службе

доменных имен - Domain Name Service (DNS). Если же во второй части

SIP-адреса размещается IP-адрес, то с рабочей станцией можно связаться напрямую.

В начале SIP адреса ставится слово ’sip:’, указывающее, что это именно SIP-адрес,

т.к. бывают и другие (например, ‘tel:’). Ниже приводятся примеры SIP-адресов:

          sip: Alexander@niits.ru.

          sip: user1@192.168.0.215

          sip: 387-75-47@sip-gateway.ru

 

Глава 2. Протокол инициализации сессии (SIP)

 

Структура протокола SIP

 

SIP представляет собой многоуровневый протокол. Его функционирование описывается

 комплексом слабо связанных независимых этапов обработки. Если элемент сети SIP содержит

некий уровень, это означает, что он поддерживает группу правил, определённых для

 данного уровня. Однако не каждый элемент, работающий по протоколу SIP, содержит

 все уровни. Кроме того, элементы, специфицированные для работы в SIP, являются

 логическими, а не физическими. В действительности физический элемент SIP может

выполнять функции различных логических элементов в зависимости от возложенных

 на него обязанностей.

Нижний уровень SIP отвечает за синтаксис и кодирование. Кодирование определено с

использованием расширенной грамматики Backus-Naur Form (BNF).

 Полное BNF-описание для SIP содержится в RFC 3261, структура сообщений SIP будет

 рассмотрена в разделе 2.2.

Второй уровень программной реализации протокола является транспортным.

Он определяет, как клиент посылает запросы и принимает ответы и как сервер получает

 запросы и посылает ответы по сети. Транспортный уровень протокола описан в разделе 2.10.

Третий уровень – это уровень транзакций. Транзакция – это запрос, отосланный клиентской

 стороной с использованием транспортного уровня SIP серверной стороне, вместе со всеми

ответами на этот запрос, отосланными серверной стороной клиенту. Уровень транзакций

осуществляет  повторную передачу сообщений прикладного уровня, определяет соответствие

 ответов запросу и уведомляет верхний уровень проткокола в случае таймаута.

Любая операция, которую выполняет клиент агента пользователя (UAC), реализуется с

 помощью серии транзакций. Описание работы уровня транзакций приведено в параграфе

2.3.2. Агенты пользователя (UA) и прокси-серверы с сохранением состояний транзакций

 (stateful прокси-серверы) содержат уровень транзакций. В противоположность им

прокси-сервер без сохранения состояний  (stateless прокси-сервер) не включает

 уровня транзакций. Уровень транзакций имеет клиентскую часть, называемую клиентской

транзакцией и серверную часть, называемую серверной транзакцией. Каждая из них

представлена конечным автоматом (state machine), связанным с обработкой определённого

типа запроса.

Уровень, находящийся выше уровня транзакций, называется пользователем транзакций

(transaction user - TU). Каждый их объектов SIP, кроме stateless прокси-сервера, является

 пользователем транзакций. Когда TU желает отослать запрос, он создаёт отдельную клиентскую

 транзакцию и передаёт ей запрос вместе с IP-адресом, портом и типом транспортного протокола

для места назначения, которые определяют куда нужно отослать запрос. TU, который создал

клиентскую транзакцию, может также отменить её. Когда клиент отменяет транзакцию, он

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

состояние и этой передал транзакции ответ с определённым кодом ошибки. Это осуществляется

посредством запроса CANCEL, который создаёт свою собственную транзакцию, но выполняет

свои функции в отношении отменяемой транзакции (См параграф 2.3.5).

SIP элементы, которыми являются клиент и сервер агента пользователя, stateful и stateless

прокси-серверы и сервер регистрации, содержат программное обеспечение - ядро (core),

 которое отличает их друг от друга. Ядра, за исключением ядра stateless прокси-сервера,

являются пользователями транзакций (TU). Несмотря на то, что функционирование ядер

UAC и UAS зависит от типа запроса, существуют некоторые общие правила для всех типов

запросов. Эти правила описаны в разделе 2.1. Для UAC эти правила касаются процесса

 создания запроса, для UAS они касаются обработки запроса и создания ответа. Поскольку

регистрация играет важную роль в протоколе SIP, UAS, который может работать c запросом

REGISTER, имеет своё название – сервер регистрации (registrar). Раздел 2.3.3 описывает работу

ядер UAC и UAS для запроса REGISTER. В разделе 2.3.4. освещается работа UAC и UAS с запросом

 OPTIONS, используемого для получения информации о функциональных возможностях UA

 Остальные запросы, определённые в основной RFC для SIP (RFC 3261), отсылаются в

режиме диалога. Диалог представляет собой равноправное взаимодействие двух агентов

пользователя по протоколу SIP, которое длится определённое время. Диалог устанавливает

 последовательность сообщений между UA и обеспечивает верную маршрутизацию запросов.

 Запрос INVITE является единственным типом запроса, устанавливающим диалог, определённым

в рекомендации RFC 3261 (Однако впоследствии расширения протокола определили еще два

таких запроса – SUBSCRIBE и REFER). Когда UAC отсылает запрос в режиме диалога,

он помимо выполнения общих правил UAC, описанных в разделе 2.1, следует правилам для

работы с запросами в ходе диалога. Параграф 2.3.1 даёт понятие о диалогах и описывает

 процедуры их создания и поддержания в дополнение к процедурам создания запросов в

режиме диалога.

 Наиболее важный тип запроса в протоколе SIP – это INVITE, который устанавливает

сессию между участниками соединения. Сессия – это совокупность участников соединения и 

медиапотоков между ними, созданных с целью обмена информацией.  Параграф 2.3.6 описывает

 процедуры создания сессий, приводящие к созданию одного или более диалогов.

Параграф 2.3.7 повествует о том, как модифицируются параметры сессии путём применения

запроса INVITE в режиме диалога. В параграфе 2.3.8 отражено, как разрушается сессия.

 

2.1. Назначение и функциональность агента пользователя (UA)

 

Агент пользователя (UA) - это логический объект, который может выполнять как функции

клиента агента пользователя, так и функции сервера агента пользователя. В сети SIP он

 представляет оконечное оборудование абонента. Соответственно, агент пользователя

 состоит из клиента агента пользователя (UAC), генерирующего запросы, и сервера агента

пользователя (UAS), который формирует ответы. Работа UAC и UAS зависит от типа запроса

 и от того, происходит ли передача запроса или ответа в процессе диалога. Далее в этом

 разделе будет рассмотрена работа UAC и UAS вне диалога.

2.1.1. Клиент агента пользователя (UAC)

Клиент агент пользователя – это часть программного обеспечения агента пользователя,

 которая создает новые запросы, отправляет их и обрабатывает принятые ответы.

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

 сигнала из телефонной линии).

2.1.1.1. Создание запроса

 

Правильный запрос, составленный клиентом агента пользователя, должен включать стартовую

строку, содержащую тип запроса, поле Request-URI и версию SIP, и  следующий базовый набор

полей заголовков: To, From, CSeq, Call-ID, Max-Forwards и Via. Эти заголовки, как и Request-URI,

 обязательны для всех SIP-запросов. Данные шесть заголовков являются основными частями

 SIP-сообщения, поскольку совместно обеспечивают большинство требуемых сервисов по

маршрутизации сообщений, включающих адресацию сообщений, маршрутизацию ответов,

ограничение распространения сообщения, сохранение очередности сообщений и уникальную

идентификацию транзакций. В разделе 2.2.2 наряду с основными будут подробно рассмотрены

все существующие заголовки. 

Ниже будет рассмотрена работа UAC вне диалога. Примерами запросов, отсылаемых вне диалога,

 является запрос INVITE (См. раздел 2.3.1), устанавливающий сессию, и запрос OPTION для

запроса информации о функциональных  возможностях (См. раздел 2.3.4.)

 

 

Формирование поля Request-URI

 

Поле Request-URI указывает на пользователя или сервис, к которому адресован запрос.

Исходное значение поля Request-URI сообщения устанавливается таким же, как URI в поле To.

Исключение составляет тип запроса REGISTER; подробно процесс установки Request-URI для

сообщения REGISTER описан в  разделе 2.3.3. По причинам обеспечения анонимности (privacy)

или из соображений удобства может быть нежелательно устанавливать в полях Request-URI и To

одинаковые значения, особенно, если инициирующий UA предвидит, что Request-URI будет

изменён в процессе передачи.

В некоторых случаях наличие предустановленного маршрута может повлиять на Request-URI

сообщения. Предустановленный маршрут представляет собой упорядоченную

последовательность URI, которая идентифицируют последовательность  серверов, по которой

UAC пошлёт исходящие запросы вне диалога. Обычно предустановленный маршрут

 устанавливается в UA пользователем или поставщиком услуг (service provider), или же при

помощи других не SIP механизмов. Рекомендуется задавать в качестве предустановленного

маршрута один URI, соответствующий исходящему прокси-серверу.

При наличии предустановленного маршрута, должны выполняться процедуры по заполнению

 полей Request-URI и Route, детализированные в параграфе 2.3.1.2 (даже несмотря на то, что

диалога не существует) при использовании желаемого Request-URI в качестве URI удалённого

узла.

 

Формирование заголовка To

 

Поле заголовка To устанавливает желаемого логического получателя запроса - публичный адрес
 получателя (address-of-record) 
или ресурс, на который отправляется запрос. Значение заголовка может как быть, так и не быть
 конечным получателем запроса. 
Поле To может содержать SIP или SIPS URI. Схема SIPS означает, что ресурсы достижимы только 
при условии обеспечения 
безопасности (например, с помощью протокола TLS). 

При необходимости могут использоваться и другие URI-схемы (например, схема «tel» (RFC 2806)).

 Все реализации SIP должны поддерживать схему SIP URI, а любая реализация, которая поддерживает

протокол TLS, должна поддерживать схему SIPS URI. Поле To позволяет также отображать имя

пользователя.

Обычно поле заголовка To заполняется через интерфейс пользователя вручную или с использованием

адресной книги. Зачастую пользователь не вводит адреса полностью, а вместо этого вводит строку букв или цифр (например, «anton»);  UA сам решает как интерпретировать эту строку. Использование строки ввода для формирования пользовательской части SIP-адреса (user part) предполагает, что UA желает определить имя домена, находящееся по правую сторону от «@»  SIP URI (например, sip:anton@niits.ru). Использование строки ввода для формирования пользовательской части SIPS адреса подразумевает, что UA желает установить безопасное соединение, имя домена также определяется. Правая часть адреса может указывать домашний домен (home domain) инициатора запроса; в этом случае вызываемый пользователь также находится в данном домене. Тогда SIP элемент, ответственный за пересылку сообщений в данном домене осуществляет обработку исходящего запроса. Это необходимо для таких функций, как «быстрый вызов», которые требуют интерпретации части пользователя в домашнем домене.

Запросы вне диалога не должны содержать параметра «tag» в поле To. Параметр «tag» в заголовке To определяет конкретный терминал вызываемого пользователя (например домашний, рабочий или сотовый телефон) из терминалов зарегистрированных под одним SIP адресом. «Tag» заголовка To в совокупности с «tag» заголовка From и значением поля Call-ID идентифицирует диалог между двумя его участниками. Поскольку диалог не был установлен, «tag» в запросе отсутствует.

 

Пример поля заголовка To:

 

To: Anton <sip:anton@niits.ru>

 

Формирование заголовка From

 

Поле заголовка From содержит логический идентификатор инициатора сообщения, как правило, публичный

адрес вызывающего пользователя. Также как поле To оно содержит URI и, опционально, отображаемое

имя (display name), что удобно для вызываемого пользователя. Заголовок используется SIP-элементами

 для  того, чтобы определить правила обработки, применимые к запросу (например, автоматическое

 отклонение вызова). Важно, чтобы URI в заголовке From не содержал IP-адреса или FQDN (Fully Qualified

Domain Name) хоста, с которым работает UA, так как это не логические имена.

Заголовок From предусматривает присутствие отображаемого имени (display name).

UAC

 должен использовать отображаемое имя "Anonymous", если идентификационная информация

пользователя

(identity) неизвестна.

Обычно, поле заголовка From запросов, которые создаёт UA, заполняется на основании  значения,

предварительно определённого пользователем или администратором локального домена пользователя.

Если конкретный UA используется несколькими пользователями, он может иметь переключаемые профили,

 которые содержат URI, соответствующий конкретным пользователям. Получатели запросов могут

аутентифицировать инициатора запроса для того, чтобы убедиться, что они те, кого представляют

заголовки From их запросов.

Поле From должно содержать новый параметр «tag», созданный клиентом UA.

Примеры:

 

From: "Anton" <sips:anton@niits.ru> ;tag=a48s

From: sip:+79213434329@gateway.protei.ru;tag=887s

From: Anonymous <sip:c8oqz84zk7z@privacy.org>;tag=hyh8

 

Формирование заголовка Call-ID

 

Заголовок Call-ID – это уникальный идентификатор, объединяющий группу сообщений. Он должен совпадать

 для всех запросов и ответов, отправляемых любым из двух UA в процессе диалога.

При создании нового диалога, заголовок Call-ID должен быть выбран UAC как уникальный идентификатор.

Все SIP агенты пользователя должны иметь средства, чтобы гарантировать, что Call-ID, созданный ими,

 не будет случайно генерирован другим UA. Когда запросы отправляются повторно после получения ответа

 с кодом ошибки, требующего коррекции запроса, (например, запрос на предоставление отклика

аутентификации), эти повторные запросы не рассматриваются как новые и не нуждаются в новом

значении заголовка Call-ID (См. пункт «Обработка ответов класса 4хх» параграфа 2.1.1.2). 

При генерации значений Call-ID рекомендуется использовать случайные криптографические

 идентификаторы (по RFC 1750), их использование обеспечивает некоторую защиту от взлома сессий

и уменьшает вероятность возникновения коллизий Call-ID.  Реализации могут использовать форму

localid@host. Значения заголовка Call-ID чувствительны к регистру и должны сравниваться побайтно.

Пример:

 

Call-ID: f81d4fae-7dec-11d0-a765-00a0c91e6bf6@niits.ru

 

Формирование заголовка CSeq

 

Поле заголовка CSeq служит средством для идентификации и упорядочивания транзакций. Оно содержит

 порядковый номер и тип запроса. Для запросов вне диалога, кроме REGISTER, значение порядкового

 номера может быть произвольным. Величина порядкового номера выражается 32-разрядным целым

 числом и должна быть меньше, чем 231. Клиент может выбирать любой механизм для создания значений

 заголовка CSeq.

Пример:

 

CSeq: 4711 INVITE

 

Формирование заголовка Max-Forwards

 

Поле заголовка Max-Forwards служит для ограничения числа пересылок запроса на пути к месту

назначения. Оно состоит из целого числа, которое уменьшается на единицу при каждой пересылке.

 Если значение этого заголовка достигнет 0 до того, как запрос достигнет места назначения, это

 сообщение будет отклонено ответом с кодом ошибки 483 (Too Many Hops).

UAC должен вставлять заголовок Max-Forwards в каждый отправляемый запрос. Рекомендуемая величина

для его значения: 70. Величина выбрана достаточно большой, чтобы гарантировать, что запрос не будет

отброшен сетью SIP при отсутствии петель, но и не слишком большой, чтобы не загружать ресурсы

прокси-сервера при возникновении петли. Меньшие величины рекомендуется использовать с

осторожностью и только в сетях, где агенту пользователя известна топология сети.

 

Формирование заголовка Via

 

Поле заголовка Via указывает один из узлов, используемых для проведения транзакции и идентифицирует

 местоположение (location), куда должен быть отправлен ответ. SIP элемент, добавляет собственное

значение заголовка Via только после выбора следующего узла, которому будет передан запрос.

Когда UAC создает запрос, он должен вставить в него поле Via. Также необходимо указать название

протокола – SIP, и его версию - 2.0. Поле заголовка Via должно содержать параметр «branch». Этот

параметр используется для идентификации транзакции, созданной данным запросом. Он используется  и

клиентом, и сервером.

Значение параметра «branch» должно быть уникальным для всех запросов, отправляемых UA. 
Исключение составляют запрос CANCEL и запрос ACK на ответы, отличные от класса 2хх. 
Запрос CANCEL будет иметь то же значение параметра «branch», что и запрос, который он отменяет.
 Запрос ACK на ответ, отличный от класса 2хх также будет иметь тот же параметр «branch», 
что и INVITE, ответ на который он подтверждает. Уникальность этого параметра облегчает его 
использование в качестве идентификатора транзакции. Параметр «branch», вставляемый 
элементом сети SIP, должен всегда начинаться с "z9hG4bK". Эти семь символов, называемых
 «magic cookie», используют для того, чтобы серверы, получившие запрос, могли определить, 
что идентификатор транзакции уникален в мировом масштабе.  

Другие параметры заголовка Viamaddr», «ttl» и «sent-by») будут установлены во время

обработки запроса транспортным уровнем протокола SIP.

 

Формирование заголовка Contact

 

Поле заголовка Contact содержит SIP или SIPS URI, который может быть использован для связи с

 пользователем UA, пославшим сообщение (получатель может использовать этот адрес для

 своих будущих запросов). Этот заголовок должен присутствовать и содержать только один

 SIP или SIPS URI в любом запросе, результатом которого может стать установление диалога.

 Таким запросом, например, является INVITE. Для этих запросов масштаб заголовка Contact

должен быть глобальным, т.е. значение поля заголовка Contact содержит URI, на который UA

 желает получать запросы, и этот URI должен быть действительным, даже если используется

 в последующих запросах вне диалога.

Если поле Request-URI или первое значение заголовка Route содержит SIPS URI, поле Contact

 также должно содержать SIPS URI. Заголовок Route служит для принудительной маршрутизации

запроса в соответствии со списком прокси-серверов.

 

Формирование заголовков Supported и Require

 

Если UAC поддерживает расширения SIP определяющие новые функции для SIP элементов,

которые могут быть использованы сервером в ответах, UAC должен включить в запрос

заголовок Supported со списком идентификаторов (option tag) поддерживаемых функций.

Список оption-tag уникально идентифицирует новые функциональные возможности для SIP

 в соответствии с расширениями SIP, определёнными в дополнительных RFC. Это делается

для того, чтобы предотвратить требование серверов на то, чтобы клиенты реализовывали

не стандартизированные, определённые фирмой-производителем функции для того, чтобы

 получить обслуживание.   Расширения, описанные в RFC не имеющих статуса Standard,

 не используются в заголовке Supported  запроса, так как они зачастую используются 

для определения нестандартизованных расширений фирм-производителей.

Если UAC хочет потребовать, чтобы UAS понял расширение, которое UAC применит к

запросу для обработки запроса, он должен вставить в запрос поле заголовка Require,

 указывающее option-tag для этого расширения. Если UAC хочет применить расширение

 к запросу и потребовать, чтобы каждый пройденный прокси-сервер понимал  это расширение,

он должен вставить в запрос заголовок Proxy-Require, указывающий  option-tag для

этого расширения.

 

Дополнительные компоненты сообщения

 

После того, как создается новый запрос, и заголовки, описанные выше составляются должным

 образом, добавляются необязательные заголовки в соответствии с типом запроса.

SIP-запросы могут содержать закодированное MIME тело сообщения (См. Multipurpose Internet

 Mail Extensions Part Two: Media Types", RFC 2046). Независимо от типа тела, которое содержит

запрос, конкретные заголовки должны быть составлены так, чтобы описывать содержимое

 тела сообщения (заголовки Content-Disposition, Content-Encoding, Content-Language, Content-Length,

 Content-Type). См параграф 2.2.2).

 

 

Отправка запроса

 

При отправке запроса первоначально определяется место назначения. Если местная политика

безопасности не определена по-иному, адрес места назначения должен быть определен с

 применением DNS-процедур, описанных в RFC 3263: "SIP: Locating SIP Servers".  Если первым в

маршруте стоит strict router (прокси-сервер, удаляющий содержимое Request-URI при наличии

в сообщении заголовка Route), то вышеуказанные  DNS-процедуры должны быть применены к

полю Request-URI, содержащемуся в стартовой строке запроса. В противном случае эти

процедуры применяются к первому значению заголовка Route или к Request-URI, если

заголовок Route отсутствует. Эти процедуры устанавливают упорядоченную последовательность

состоящую из адреса, порта и типа транспортного протокола для запроса. Независимо от того,

какой URI используется в качестве входящего для процедур «Locating SIP Servers», если Request-URI

 указывает на SIPS ресурс, UAC должен выполнять эти процедуры, как если бы входящим URI был SIPS URI.

Местная политика может предусматривать наличие альтернативного набора мест назначения для

использования в запросах. Если Request-URI содержит SIPS URI, то соединение с любым

 альтернативным местом назначения должно проходить с использованием протокола TLS.

 Более того,  ограничений для альтернативных мест назначения не существует, если запрос

 не содержит заголовка Route. Это представляет собой упрощённую альтернативу

предустановленному маршруту, как способу указания исходящего прокси-сервера. Однако такой

 подход для конфигурирования исходящего прокси-сервера не рекомендуется, вместо этого лучше

использовать предустановленный маршрут с единственным URI. Если запрос содержит поле

заголовка Route, то он будет отправлен на сервер, определенный в верхнем значении Route,

но может быть направлен и на другой сервер, придерживающийся той же политики в отношении

 Route и Request-URI, что и UA. В частности, UA, сконфигурированный исходящим прокси-сервером,

 должен пытаться отправить запрос по адресу, указанному в первом значении поля заголовка Route,

вместо поддержки политики отправки всех сообщений исходящему прокси-серверу. Этим гарантируется,

 что исходящие прокси-серверы, которые не добавляют поле заголовка Record-Route, выпадут из

 маршрута последующих запросов. Оконечные точки, которые не могут определить первое значение

для поля заголовка Route, делегируют выполнение этой задачи исходящему прокси-серверу.

UAC должен следовать процедурам, определённым в "SIP: Locating SIP Servers", RFC 3263 для stateful

SIP элементов, посылая запросы по каждому адресу, пока не будет установлено соединение с сервером.

 Каждая попытка составляет новую транзакцию, и поэтому каждый новый запрос содержит заголовок

Via с новым параметром «branch» в первом значении.

2.1.1.2. Обработка ответов

 

Ответы сначала обрабатываются транспортным уровнем SIP, а потом направляются на уровень

 транзакций. Уровень транзакций производит их обработку и затем передаёт вышестоящему уровню –

уровню пользователя транзакций (transaction user, TU). Большая часть обработки ответов TU  зависит

 от типа запроса, на который был передан ответ. Однако некоторые основные этапы обработки не

зависят от типа запроса.

 

Ошибки уровня транзакций

 

В некоторых случаях, ответ, переданный уровнем транзакций, не является SIP сообщением,

это означает уведомление об ошибке уровня транзакций. Когда с уровня транзакций приходит

уведомление об ошибке истечения времени (timeout error), оно должно обрабатываться, как ответ

 с кодом 408 (Request Timeout). Когда с транспортного уровня SIP приходит сообщение о критической

ошибке (fatal transport error), то оно должно быть трактовано, как ответ 503 (Service Unavailable).

 Обычно это означает критическую ICMP-ошибку в протоколе UDP или нарушение соединения в TCP.

 

Неизвестные ответы

 

UAC должен расценивать любой неизвестный окончательный ответ, как эквивалентный x00 ответу

того же класса, и должен быть готов обрабатывать ответы x00 любого класса. Например, если UAC

получает неизвестный ответ с кодом 431, он делает вывод о том, что запрос содержал ошибку, и

трактует ответ, как 400 (Bad Request). UAC должен трактовать любой неизвестный предварительный

ответ, отличный от 100, как ответ с кодом 183 (Session Progress). UAC должен быть способен

 обрабатывать и 100, и 183 ответы.

 

Заголовки Via

 

Если в ответе представлено более одного значения поля заголовка Via, UAC должен отбросить

сообщение, так как в этом случае сообщение, по-видимому, было неправильно маршрутизировано

или искажено.

 

Обработка ответов класса 3хх

 

При поступлении ответа перенаправления (например, ответа с кодом 301), клиенты должны использовать

адрес (адреса) из поля Contact при составлении одного или нескольких новых запросов, основанных на

перенаправленном запросе. Клиент начинает работу  с начального списка адресов вызываемого

пользователя (target set), включающего только один URI - Request-URI оригинального запроса.

Если отправитель желает сформировать новые запросы после получения перенаправляющего ответа

класса 3хх на предшествующий запрос, он помещает новые адреса в target set. UAC может выбрать,

 какие из URI, расположенных в поле Contact, поместить в target set. Клиент, обрабатывающий ответы

 класса 3хх, не должен добавлять один и тот же URI в target set более одного раза. Если оригинальный

запрос содержит SIPS URI в Request-URI, клиент может перенаправить запрос на не SIPS URI, но должен

информировать пользователя о перенаправлении запроса не небезопасный URI.

По мере того, как target set растёт, UAC может генерировать новые запросы, используя адреса

выбранные из target set в любом порядке. Простейшим механизмом для этого является

упорядочивание в соответствии со значением параметра «q» каждого значения заголовка Contact.

Параметр «q» определяет приоритеты среди адресов, содержащихся в заголовке Contact

путём варьирования значения в пределах от 0 до 1.   Запросы могут генерироваться последовательно

или параллельно. Один подход состоит в обработке групп в порядке уменьшения значения параметра

 «q» последовательно и обработке адресов в каждой группе с определённым значением параметра

«q» параллельно. Другой подход предусматривает последовательную обработку в порядке

уменьшения значения параметра «q», произвольно выбирая между адресами с одинаковым значением q.

Если при обращении на контактный адрес из списка приходит ответ об ошибке, SIP элемент переходит

к следующему адресу в списке. Когда список заканчивается, запрос отбрасывается.

Ошибки определяются по кодам ответов (коды со значением более 399). Об ошибках, произошедших

при передаче по сети (ошибках транспортного уровня) пользователю транзакций (TU) сообщает

клиентская транзакция. Некоторые коды ответов показывают, что запрос может быть передан снова;

такие запросы не должны расцениваться как ошибки.

Когда приходит ошибка при обращении на определённый контактный адрес, клиент должен попытаться

 отослать запрос на следующий контактный адрес. Это повлечёт за собой создание новой клиентской

 транзакции для доставки нового запроса.

Для того, чтобы создать запрос на основании контактного адреса, полученного в ответе класса 3хх,

UAC должен полностью скопировать URI из списка адресов target set в Request-URI, за исключением

параметров «method-param» и «header». Параметры «header»  используются для создания значений

 полей заголовков для новых запросов, заменяя значения, связанные с перенаправленным запросом.

В некоторых случаях в контактном адресе (адресе, содержащемся в заголовке Contact) указываются

другие заголовки. Значения этих заголовков могут быть добавлены к  значениям заголовков в

оригинальном перенаправленном запросе. Как правило, если поле заголовка может принимать

 разделённый запятыми список значения параметров, то новое значение поля заголовка может

быть добавлено к любым существующим значениям оригинального перенаправленного запроса.

 Если же поле заголовка не поддерживает множественность значений, то  значение в оригинальном

перенаправленном запросе может быть перезаписано значением из контактного адреса. Например,

если контактный адрес возвращен со следующим значением:

 

sip:anton@niits.ru?Subject=organization&Call-Info=http://www.niits.ru,

 

то любое поле заголовка Subject в оригинальном перенаправленном запросе перезаписывается, но

HTTP URL просто добавляется к существующим значениям поля заголовка Call-Info.

Рекомендуется, чтобы UAC использовал поля заголовков To, From и Call-ID, применявшиеся в

перенаправленном запросе, но UAC, например, может обновить значение поля заголовка Call-ID

для новых запросов. В результате, сформированный новый запрос, отправляется с использованием

 новой клиентской транзакции и, следовательно, он будет иметь новое значение параметра «branch»

 в верхнем поле Via.

В остальном, запросы, отправленные при получении ответа перенаправления, будет иметь те же поля

заголовков и тела сообщения, что и оригинальный запрос.

В некоторых случаях, значения поля заголовка Contact могут запоминаться  клиентом временно или

постоянно в зависимости от кода ответа и присутствия интервала истечения времени действия.

 

Обработка ответов класса 4хх

 

Отдельные коды ответов класса 4xx требует особых действий от UA по обработке в не зависимости

от типа запроса, на который приходит ответ.

 

·       ответ с кодом 401 (Unauthorized) или 407 (Proxy Authentication Required) означает, что запрос

требует проведения процедур аутентификации. Получив ответ, UAC будет выполнять процедуру

аутентификации для последующего запроса.

·       Код ответа 413 (Request Entity Too Large) означает, что запрос содержит тело, слишком большой

длины, чтобы UAS мог его принять. При этом UAC заново передает запрос, убирая тело сообщения или уменьшая его.

·       Код ответа  415 (Unsupported Media Type) означает, что формат данных, содержащихся в запросе – тип

тела сообщения, не поддерживается UAS. В этом случае UAC должен заново отправить запрос, приняв во

 внимание список поддерживаемых типов в поле заголовка Accept , список поддерживаемых кодеков в поле

Accept-Encoding и список поддерживаемых языков в поле Accept-Language, содержащихся в ответе.

·       ответ с кодом 416 (Unsupported URI Scheme) означает, что тип URI, использованный в Request-URI, не

поддерживается сервером. В этом случае UAC должен заново послать запрос, используя SIP URI.

·       ответ с кодом 420 (Bad Extension) означает, что запрос содержит  заголовки Require или Proxy-Require,

 указывающие option-tag для функции, которая не поддерживается прокси-сервером или UAS. UAC в этом случае

 должен заново передать запрос, убрав из него все расширения, указанные в поле заголовка Unsupported ответа.

·       Ответ с кодом 494 (Security Agreement Required) передаётся сервером при выполнении процедуры выбора

 механизма обеспечения безопасности. Ответ должен включать заголовок Security-Server со списком механизмов

обеспечения безопасности, поддерживаемых сервером. UAC должен выбрать подходящий механизм безопасности и

 применить его при отсылке запроса.

 

Во всех описанных выше случаях, запрос передается заново с соответствующими изменениями. Новый запрос

составляет новую транзакцию и будет иметь такие же значения заголовков Call-ID, To и From, как и предыдущий

запрос, но заголовок CSeq должен содержать новый порядковый номер, который на единицу больше предыдущего.

При получении других ответов класса 4хх передача запроса может производиться заново в зависимости от типа

запроса и конкретного случая использования.

2.1.2. Сервер агента пользователя (UAS)

 

Сервер агента пользователя принимает запросы и генерирует ответы, основываясь на действиях пользователя,

полученных сообщениях, результатах выполнения программ или каких-либо других механизмах.

2.1.2.1. Процедура обработки запросов

 

При обработке сервером запроса вне диалога, выполняется набор процедур обработки, не зависимых от типа запроса. Заметим, что обработка запросов элементарна. Если запрос принимается, должны быть произведены любые связанные с ним изменения состояния соединения, если он отклоняется, ни одно из изменений производится не должно.

Серверы агента пользователя обрабатывают запросы пошагово, как указано в данном разделе

(то есть начиная с аутентификации, затем анализа типа запроса, полей заголовков и так далее).

 

Определение типа запроса

 

Когда запрос прошел аутентификацию (или она была пропущена), UAS должен выяснить тип запроса.

Если UAS определил, но не поддерживает тип запроса, он должен отправить ответ с кодом 405

(Method Not Allowed); в этом ответе должно присутствовать заголовок Allow, который содержит список типов

 запросов, поддерживаемых UAS.

В случае поддержки сервером типа запроса, обработка сообщения продолжается.

 

Определение типа заголовка

 

Если UAS не понимает заголовка, представленного в запросе, он должен игнорировать этот заголовок и продолжать

 обработку сообщения. UAS игнорирует все неопознанные заголовки, которые необязательны для обработки запроса.

 

Обработка полей To и Request-URI

 

В поле заголовка To вызывающий пользователь указывает адрес получателя запроса. UAS может поступать

произвольным образом при выработке решения о приёме запроса, заголовок To которого идентифицирует не

 данный UAS. Однако рекомендуется, чтобы UAS принимал запросы, даже если они содержат неизвестную схему URI

 (например, схему «tel») в поле To, или если поле To не адресует ни текущего, ни одного из существующих

 пользователей этого UAS. Если все же, UAS решает отклонить запрос, он должен создать ответ с кодом 403

(Forbidden) и передать его серверной транзакции (понятие серверной транзакции даётся в разделе 2.3.2)

 для отсылки.

Поле Request-URI идентифицирует UAS, который должен обработать запрос. Если в Request-URI используется схема

адресации, неподдерживаемая сервером, запрос должен быть отклонён и отправлен ответ с кодом 416

 (Unsupported URI Scheme). Если Request-URI не идентифицирует адрес, для которого UAS готов принять запрос,

 сообщение отбрасывается и отправляется ответ с кодом 404 (Not Found). Обычно, UA, который использует

сообщение REGISTER для связки публичного адреса пользователя (address-of-record) с конкретным контактным

адресом, должен опознавать запросы, Request-URI которых совпадает с его контактным адресом.

 Другие возможные источники для значения полученного Request-URI включают заголовки Contact запросов и

ответов, отправленных UA для установления или обновления параметров диалога.

 

Обработка одинаковых запросов

 

Если запрос не содержит параметра «tag» в поле заголовка To, ядро UAS (UAS core) должно проверить запрос на

предмет происходящих транзакций. Если «tag» заголовка From, заголовки Call-ID и CSeq точно совпадают с

 аналогичными полями, связанными с происходящей транзакцией, но запрос не соответствует этой транзакции,

ядро UAS должно составить ответ с кодом 482 (Loop Detected) и передать его серверной транзакции.

Одинаковые запросы могут придти на сервер более одного раза, следуя различными путями, вероятнее всего из-за

размножения запросов прокси-сервером. Ядро UAS обрабатывает первый такой запрос и отправляет

 ответ с кодом 482 (Loop Detected) на последующие запросы.

 

Обработка заголовка Require

 

После того, как UAS решает, что запрос предназначен для него, он приступает к анализу заголовка Require в случае

его наличия.

Поле заголовка Require используется UAC, чтобы сообщить UAS о SIP расширениях, которые должны поддерживаться

 UAS  для правильной обработки запроса.  Если UAS не понимает какого-либо идентификатора расширения option-tag,

 указанного в поле Require, он должен отослать ответ с кодом 420 (Bad Extension). UAS должен добавить в ответ

 заголовок Unsupported со списком непонятных опций, указанных в поле заголовка Require запроса.

Заметим, что заголовки Require и Proxy-Require не должны использоваться в запросе CANCEL, а также в запросе

ACK, отправляемом на ответ отличный от класса 2xx. Эти заголовки должны игнорироваться, даже если они имеются 

 в таких запросах.

Запрос ACK на ответ класса 2xx должен содержать только те значения Require и Proxy-Require, которые

 присутствовали начальном запросе, например:

 

 

UAC->UAS:

INVITE sip:vladimir@protei.ru SIP/2.0

      Require: 100rel

UAS->UAC:

SIP/2.0 420 Bad Extension

      Unsupported: 100rel

 

 

Эти действия гарантируют, что взаимодействие между клиентом и сервером будет проходить без задержек, когда все

опции (options) понятны обеим сторонам, и будет замедляться, только если существуют разногласия, как в

 приведенном выше примере. Для хорошо согласованной пары клиент-сервер взаимодействие происходит быстро,

так как не тратится время на механизмы согласования. К тому же, это устраняет проблемы, возникающие, когда

 клиент требует возможностей, которые сервер не поддерживает.

 

Обработка содержимого тела сообщения

 

Допустим, что UAS понимает все расширения, требуемые клиентом, тогда UAS изучает тело сообщения и поля

заголовков, которые описывают его. Если в сообщении содержится тело с непонятным типом

(указывается в Content-Type), языком (указывается в Content-Language) или кодеком

(указывается в Content-Encoding), и это тело является обязательным (указывается в Content-Disposition),

 UAS должен отбросить запрос и отправить ответ с кодом 415 (Unsupported Media Type). Ответ должен содержать

заголовок Accept со списком всех типов тел сообщения, которые понимает UAS, в случае наличия в запросе тел

 сообщения с типами, не поддерживаемыми сервером. Если запрос содержит типы кодеков содержимого, непонятные

 UAS, ответ должен содержать заголовок Accept-Encoding со списком кодировок, понятных UAS. Также если запрос

 имеет содержимое на непонятном для UAS языке, ответ должен содержать заголовок Accept-Language со списком

языков, понятных UAS. После этих проверок, тело обрабатывается в зависимости от типа запроса и типа тела.

 

Применение расширений

 

При формировании ответа UAS не должен использовать расширения, если поддержка этих расширений клиентом не

была указана в заголовке Supported запроса. Если требуемые расширения не поддерживаются, сервер должен

 опираться только на основные SIP-расширения и другие расширения, поддерживаемые клиентом. В редких случаях,

когда сервер не может обработать запрос без требуемого расширения, он может отправить ответ с кодом 421

(Extension Required). Этот ответ показывает, что правильный ответ не может быть сгенерирован без поддержки

определенного расширения. Требуемое расширение или расширения должны быть включены в поле Require ответа.

Любые расширения к ответам, кроме ответа с кодом 421, должны быть указаны в заголовке Require, включённом в

ответ. Сервер не должен применять расширения, не указанные в заголовке Supported запроса.

После того, как все вышеописанные действия выполнены, дальнейшая обработка запросов зависит от его типа.

 

2.1.2.2. Создание ответа

 

Когда UAS создаёт ответ на запрос, он следует общим процедурам, описанным ниже. Также может потребоваться

 выполнение дополнительных действий, которые зависят от конкретного кода ответа.

После завершения выполнения всех процедур, связанных с созданием ответа UAS возвращает ответ серверной

транзакции, от которой был получен запрос.

 

Отсылка предварительного ответа

 

Основное правило при генерации ответа, вне зависимости от типа запроса, состоит в том, что серверы UA должны

отправлять предварительные ответы только на запросы INVITE. При этом они должны как можно быстрее  создавать

 на запросы кроме INVITE  окончательные ответы.

При формировании ответа с кодом 100 (Trying) заголовок Timestamp (указывает, когда UAC отослал сообщение UAS)

 из запроса должен быть в точности скопировано в него. Это выполняется в целях оценки клиентом времени RTT.

 Если происходит задержка при генерировании ответа, UAS должен добавить значение задержки к значению,

содержащемуся в поле заголовка Timestamp в ответе. Это значение должно содержать разницу между временем

получения запроса и временем отправки ответа, выраженную в секундах.

 

Заголовки и параметры «tag»

 

Поле From ответа должно совпадать с аналогичным полем запроса, равно как и  поля Call-ID, Cseq и Via  ответа

должно совпадать с полями Call-ID, Cseq и Via запроса. Помимо этого значения поля Via должны совпадать со

 значениями поля Via в запросе  и должны сохранять порядок следования.

Если запрос содержал «tag» в поле To, то поле To в ответе должно совпадать с тем, что было в запросе.

В случае если поле To в запросе не содержит «tag»,  то URI в поле To ответа должен совпадать с URI в поле

To запроса; дополнительно, UAS должен добавить «tag» в поле To ответа (за исключением ответа с кодом 100

 (Trying), в котором «tag» может уже присутствовать). Тот же «tag» должен быть использован для всех ответов

на этот запрос, предварительных и окончательных (исключая ответ с кодом 100 (Trying)).

 

Действие UAS без сохранения состояний

 

UAS без сохранения состояний (stateless) – это UAS, который не запоминает состояния текущих транзакций.

Он нормально отвечает на запросы, но в отличие от UAS с сохранением состояний (stateful) не сохраняет состояния

транзакций после отправки ответов. Если stateless UAS получает повторно переданный запрос, он повторно

формирует ответ и повторно его отсылает так же, как это происходило при получении первого запроса. UAS

может быть stateless , только если обработка идентичных запросов одного типа приводит к генерации одинаковых

ответов. Stateless UAS не использует уровень транзакций: он принимает запрос напрямую от транспортного уровня

SIP и отправляет ответ также напрямую транспортному уровню.

Основная роль stateless UAS состоит в поддержке неаутентифицированных запросов, которые требуют передачи

ответа с запросом аутентификации. Если бы эти запросы поддерживались с сохранением состояния,

то возможные потоки злонамеренных  запросов, не содержащих отклика аутентификации, сопровождались

бы созданием большого числа транзакций, что в свою очередь могло бы замедлить или остановить обработку

 вызовов в UAS.

Наиболее важные функции stateless UAS перечислены ниже:

 

·        stateless UAS не должен отправлять предварительных (1xx) ответов

·        stateless UAS не должен повторно передавать ответы

·        stateless UAS должен игнорировать запросы ACK

·        stateless UAS должен игнорировать запросы CANCEL

·        параметры «tag» заголовка To должны формироваться для ответов таким образом – для одинаковых запросов

должна генерироваться одинаковые параметры «tag».

 

В остальном, stateless UAS работает так же как stateful UAS. Для каждого нового запроса UAS может выбрать, как

 работать – сохранением или без сохранения состояний.

 

2.2. Сообщения протокола SIP

2.2.1. Структура сообщений

Протокол SIP – это текстовый протокол, использующий набор символов ISO 10646 в кодировке UTF-8 (RFC 2279).

Сообщения протокола SIP представляют собой либо запрос от клиента серверу, либо ответ сервера клиенту.

Запросы и ответы используют один базовый формат сообщения, одинаковый, несмотря на различия в наборе

символов и синтаксисе. Сообщения обоих типов состоят из:

·       стартовой строки;

·       одного или нескольких полей заголовков;

·       пустой строки, обозначающей конец полей заголовков;

·       тела сообщения (необязательно).

 

                           

 

Рис 2.1 Структура сообщения протокола SIP

 

 

Стартовая строка, каждая строка поля заголовка и пустая строка должны быть завершены символами возврата

каретки и перевода строки (CRLF). Пустая строка должна быть независимо от того, присутствует тело сообщения

 или нет.

Стартовая строка представляет собой начальную строку любого SIP-сообщения. Если сообщение является

запросом, в этой строке указывается тип запроса, адресат и номер версии протокола. Если сообщение является

ответом на запрос, в стартовой строке указывается номер версии протокола, тип ответа и его короткая

расшифровка, предназначенная только для пользователя.

Заголовки сообщений служат для передачи информация об отправителе, адресате, пути следования и других

 сведений, т.е. переносят необходимую для обслуживания данного сообщения информацию. О типе заголовка

 можно узнать из его имени. За исключением различий в наборе символов, многие SIP-сообщения и синтаксис

 полей заголовков схожи с используемыми в HTTP/1.1, хотя SIP и не является расширением HTTP.

Сообщения  протокола SIP могут содержать так называемое тело сообщения. В запросах ACK, INVITE и OPTIONS

тело сообщения содержит описание сеансов связи, например, в формате протокола SDP, а запрос BYE не содержит

тело сообщения.

 

2.2.2. Заголовки сообщений

 

Формат заголовка

 

Поля заголовков SIP-сообщений похожи на поля заголовков HTTP-сообщений по синтаксису и семантике.

В частности, SIP поля заголовков соответствуют описаниям синтаксиса HTTP/1.1 для заголовков сообщений и

правилам для расширения полей заголовков на несколько строк.

 

Каждое поле заголовка состоит из имени поля, символа «двоеточие» и значения поля:

   Имя поля: значение поля

 

Формальная грамматика для полей заголовков позволяет использовать любое количество пробелов (SP) для

отделения двоеточия. Однако на деле стараются избегать  наличия пробелов между названием поля и двоеточием

и ограничиваются одним пробелом для отделения двоеточия от значения.

 

Subject:            уведомление

Subject      :      уведомление

Subject            :уведомление

Subject: уведомление

 

В приведенных выше примерах все строки равнозначны, но последняя предпочтительнее.

Поля заголовков могут быть расширены на несколько строк, когда каждая последующая строка отделяется

пробелом (SP) или символом горизонтальной табуляции (HT). Обрыв строки (line break) и пустое пространство

 (whitespase) расцениваются как один символ пробела SP. Следующие ниже строки эквивалентны.

 

Subject: Я знаю, что ты здесь, подними трубку!

Subject: Я знаю,

         что ты здесь,

         подними трубку!

 

Порядок следования заголовков не имеет значения. Однако рекомендуется размещать поля заголовков, которые

 требуются для обработки прокси-серверу (Via, Route, Record-Route, Proxy-Require, Max-Forwards, Proxy-Authorization

и другие), в начале сообщения для ускорения анализа и обработки. Важным является порядок следования ряда

заголовков с одинаковыми именами полей. Последовательности полей заголовков с одинаковыми именами могут

 содержаться в сообщении только в том случае, если содержимое поля представляет собой список значений,

 разделённых запятой. Возможно объединить такие заголовки в одну пару «имя поля: значение поля», не изменяя

семантики сообщения, путём добавления каждого последующего значения к первому значению поля заголовка;

при этом все значения должны быть отделены друг от друга запятой. Исключение составляют лишь заголовки

WWW-Authenticate, Authorization, Proxy-Authenticate, и Proxy-Authorization. Последовательности заголовков с

 такими именами также могут присутствовать в сообщении, но объединить их невозможно, поскольку грамматика

данных заголовков не придерживается общих правил для SIP-заголовков.

            Реализации должны быть способны обработать последовательности заголовков с одинаковым именами

 со значениями, представленными как в форме последовательности, разделённой запятыми, так и в виде

 «одно значение на строку».

            Примеры последовательностей заголовков, приведённые ниже, правомерны и эквивалентны.

 

      Route: <sip:anton@niits.ru>

      Subject: Уведомление

      Route: <sip:vladimir@protei.ru>

      Route: <sip:alexander@loniis.ru>

 

      Route: <sip:anton@niits.ru>, <sip:vladimir@protei.ru>

      Route: <sip:alexander@loniis.ru>

      Subject: Уведомление

 

      Subject: Уведомление

      Route: <sip:anton@niits.ru>, <sip:vladimir@protei.ru>,

             <sip:alexander@loniis.ru>

 

Следующие последовательности заголовков правомерны, но не равнозначны.

 

      Route: <sip:anton@niits.ru>

      Route: <sip:vladimir@protei.ru>

      Route: <sip:alexander@loniis.ru>

 

      Route: <sip:vladimir@protei.ru>

      Route: <sip:anton@niits.ru>

      Route: <sip:alexander@loniis.ru>

 

      Route: <sip:anton@niits.ru>,<sip:alexander@loniis.ru>,

             <sip:vladimir@protei.ru>

 

Формат значения заголовка зависит от имени заголовка. Это всегда будет последовательность текстовых октетов

 в UTF-8 кодировке или комбинация символьных фраз (tokens), пустого пространства (whitespace), разделительных

знаков и строк, заключённых в кавычки. Большинство существующих полей заголовков придерживаются общего

формата для значений, основанного на последовательности пар имя параметра – значение параметра,

 разделённых знаком точка с запятой.  

 

Имя поля: значение поля; имя параметра=значение параметра; имя параметра=значение параметра…

 

            Несмотря на то, что заголовок может включать неограниченное число параметров, одно и то же имя

параметра не может использоваться более одного раза.

            Для имён полей заголовков не имеет значение, в каком регистре они написаны. Значения полей, имена

параметров и значения параметров также регистронезависимы, если это не определено по-иному в описании

определённого заголовка. Если не определено иначе, значения, заключённые в кавычки, являются зависимыми

от регистра. Например,

 

Contact: <sip:anton@niits.ru>;expires=3600

 

эквивалентно

 

CONTACT: <sip:anton@niits.ru>;ExPiReS=3600

 

и

 

Content-Disposition: session;handling=optional

 

эквивалентно

 

content-disposition: Session;HANDLING=OPTIONAL

 

Два следующих поля заголовков не равнозначны.

 

Warning: 370 niits.ru "Требуется большая пропускная способность"

Warning: 370 niits.ru "ТРЕБУЕТСЯ БОЛЬШАЯ ПРОПУСКНАЯ СПОСОБНОСТЬ"

 

Некоторые заголовки имеют смысл только в запросах или ответах. Они называются заголовками запроса и

заголовками ответа, соответственно. Если заголовок появляется в сообщении не своей категории

(например, заголовок запроса в ответе), то он игнорируется.

При передаче сообщений протокола SIP, упакованных в сигнальные сообщения протокола UDP, существует

 вероятность того, что размер запроса или ответа превысит максимально-допустимый размер для данной сети,

 что приведет к фрагментации пакета. Для избежания этого используется сжатый формат имен основных заголовков,

 подобно тому, как это делается в протоколе SDP.  Ниже приведен список таких заголовков.

 

 
Таблица 2.1 Сжатые имена заголовков

 

   Сжатая форма имени

Полная форма имени

С

Content-Type

E

Content-Encoding

F

From

I

Call-ID

K

Supported

L

Content-Length

M

Contact (от “moved”)

S

Subject

O

Event

R

Refer-To

T

To

U

Allow-Events

V

Via

 

 

Типы заголовков

 

·       Accept

Заголовок Accept сообщает, тела сообщений каких типов, принимает клиент. Серверное приложение, которое может

 возвращать содержимое тела в разных форматах, должно проверить содержимое поля заголовка, чтобы принять

решение, кокой формат содержимого и соответственно тип тела сообщения следует использовать. Отсутствие

значений в заголовке Accept информирует  о том, что не поддерживаются никакие типы. Если в сообщении нет

 заголовка Accept, то сервер должен применить значение по умолчанию - application/sdp.

 

Accept: application/sdp;level=1, application/x-private, text/html

 

·       Accept-Encoding

Заголовок Accept-Encoding похож на Accept, он сообщает о поддерживаемых типах кодирования содержимого в

ответе. Наличие пустого заголовка в сообщении также допускается. Это равнозначно:  Accept-Encoding: identity,

 что значит: кодирование запрещено. Если заголовок отсутствует в сообщении, сервер устанавливает значение

по умолчанию - identity. В этом заключается некоторое расхождение с протоколом HTTP, где в случае отсутствия

заголовка может быть использован любой тип кодирования, но значение identity (отсутствие кодирования)

предпочтительнее.

Пример:

 

Accept-Encoding: gzip

 

·       Accept-Language

Заголовок Accept-Language используется в запросах, чтобы указать предпочтительные языки для ключевых фраз,

 описаний сеансов связи, оповещений о текущем состоянии, содержащихся в ответах в качестве тел сообщения.

В случае если заголовок отсутствует, сервер устанавливает, что клиент поддерживает все языки.

Правило упорядочивания языков в списке по предпочтительности базируется на параметре «q». Пример

 

Accept-Language: da, en-gb;q=0.8, en;q=0.7

 

·       Alert-Info

Заголовок Alert-Info, присутствующий в запросе INVITE, предписывает использование альтернативного сигнала

вызова для UAS. Когда заголовок содержится в ответе с кодом 180 (Ringing), он устанавливает альтернативный

сигнал КПВ для UAC. В основном этот заголовок вставляется прокси-сервером для обеспечения функции

отличительного звукового сигнала вызова. Пользователь должен иметь возможность отключить эту функцию.

 Это помогает избежать деструктивных последствий в случае использования данного заголовка SIP элементами,

 с которыми не были установлены доверительные отношения. Пример:  

 

Alert-Info: <http://www.niits.ru/sounds/moo.wav>

 

·       Allow

Заголовок Allow cодержит список типов запросов, поддерживаемых агентом пользователя, сформировавшим

сообщение. Все типы запросов, понимаемые UA, включая ACK и CANCEL, должны входить в этот список.

Отсутствие заголовка Allow не означает, что отсылающий сообщение UA не поддерживает никаких типов запросов;

 это подразумевает, что агент пользователя отправителя не желает передавать  информацию о том, какие типы

запросов он поддерживает.  

Применение заголовка Allow в ответах на запросы (за исключением ответов на запрос OPTION) приводит к

 уменьшению числа передаваемых сообщений. Пример:

 

Allow: INVITE, ACK, OPTIONS, CANCEL, BYE

                       

·       Allow-Events

Заголовок Allow-Events в случае присутствия содержит список, состоящий из идентификаторов функциональных

возможностей для информирования клиента о событиях определённого типа - event package, поддерживаемых

 клиентом (если посылается в запросе) или сервером (если посылается в ответе). Другими словами, оконечная точка,

 отсылающая заголовок Allow-Events, информирует, что она может  обрабатывать запросы SUBSCRIBE и создавать

 запросы NOTIFY для всех типов событий, идентифицированных с помощью event package в заголовке.

Терминал, поддерживающий один или несколько event package, должен помещать соответствующий заголовок

Allow-Events, указывающий все поддерживаемые типы событий (events), во все типы запросов, которые инициируют

 диалог, такие как INVITE, и в ответы на них, а также в ответы на запрос OPTIONS.

Заметим, что заголовок Allow-Events не должен вставляться прокси-серверами. Пример:

 

Allow-Events: refer

 

 

·       Authentication-Info

Заголовок Authentication-Info используется для взаимной аутентификации с использованием системы аутентификации

 HTTP Digest. UAS может включить данный заголовок в ответ класса 2хх на запрос, который был успешно

аутентифицирован, с использованием значения отклика, содержащимся в заголовке Authorization. Пример:

 

Authentication-Info: nextnonce="47364c23432d2e131a5fb210812c"

 

·       Authorization

Поле заголовка  Authorization содержит отклик аутентификации агента пользователя. Этот заголовок вместе с

заголовком Proxy-Authorization отступает от общих правил, касающихся множественности значений в поле

заголовка. Эти правила описаны в начале данного раздела. Заголовки с одинаковыми именами могут присутствовать

 в сообщении в любом количестве, но не могут объединяться в один общий заголовок, как это происходит с прочими

 заголовками. Более подробная информация о заголовке содержится  в разделе 2.6.3.

 

Authorization: Digest username="Anton", realm="niits.ru",

nonce="84a4cc6f3082121f32b42a2187831a9e",

response="7587245234b3434cc3412213e5f113a5432"

 

·       Call-ID

Заголовок Call-ID – уникальный идентификатор сеанса связи или всех регистраций отдельного клиента.

Значение идентификатору присваивает сторона, которая инициирует вызов. Возможна и такая ситуация:

к одной мультимедийной конференции относятся несколько соединений – все они будут иметь разные

идентификаторы Call-ID.

Заголовок состоит из буквенно-числового значения и имени рабочей станции, которая присвоила этому

идентификатору. Между ними должен стоять символ «@». Значения Call-ID регистрозависимы и могут

сравниваться побайтно. Примеры:

 

Call-ID: f81d4fae-7dec-11d0-a765-00a0c91e6bf6@loniis.ru

i:f81d4fae-7dec-11d0-a765-00a0c91e6bf6@192.0.2.4

 

·       Call-Info

Заголовок Call-Info содержит дополнительную информацию о вызывающем или вызываемом пользователе в

зависимости от того, где находится заголовок: в запросе или в ответе. Назначение URI, содержащегося в заголовке, описывается параметром «purpose». Значение этого параметра icon определяет изображение, предназначенное для визуального представления вызывающего или вызываемого пользователя. Значение info даёт общее описание пользователя, например, с помощью web-страницы. Значение card определяет электронную визитную карточку, содержащую имя пользователя, организацию, номер телефона, адрес электронной почты и т.д., например, карту формата Vcard ("vCard MIME Directory Profile", RFC 2426) или LDIF ("The LDAP Data Interchange Format (LDIF) – Technical Specification", RFC 2849).

Использование заголовка Call-Info может представлять угрозу безопасности пользователя.

Если вызываемый пользователь воспользуется URI, приведёнными злонамеренным пользователем, то он может

увидеть неприятную или оскорбительную информацию, получить доступ к опасным или нелегальным ресурсам и т.д.

 Поэтому, рекомендуется, чтобы UA представлял информацию в Call-Info только в том случае, если может

удостоверить подлинность SIP элемента, создавшего заголовок, и доверяет этому SIP элементу.

 Этот элемент не обязательно должен быть UA; заголовок может быть вставлен в запрос прокси-сервером.

 Пример:    

 

Call-Info: <http://www.serv1.niits.ru/anton/photo.jpg> ;purpose=icon,

           <http://www.serv1.niits.ru/anton/> ;purpose=info

 

·       Contact

Поле заголовка Contact несёт в себе URI, значение которого зависит от типа передаваемого запроса или ответа.

 Как правило в заголовке Contact находится текущий адрес пользователя, на который он может принимать входящие

сообщения. Заголовок Contact может содержать отображаемое имя (display name), адрес с его параметрами и

параметры заголовка.

Для заголовка Contact определены параметры «q» и «expires». Они используются только в случае, когда заголовок

присутствует в запросе REGISTER, ответе на него или в ответе класса 3хх.

Когда значение поля заголовка содержит отображаемое имя, URI со всеми его параметрами заключается в символы

«<» и «>». В противном случае все параметры, следующие за URI, будут трактоваться как параметры заголовка.

Отображаемым именем может быть комбинацией символьных фраз или строка, заключённая в кавычки, когда

существует необходимость в более длинной характеристике.

В случае, если URI содержит запятую, точку с запятой или вопросительный знак, он заключается в угловые скобки,

 даже если отображаемое имя отсутствует. Между отображаемым именем и «<» допускается наличие линейного

пробела (LWS). Эти правила действительны также в отношении заголовков To и From.

Заголовок Contact выполняет роль, похожую на роль заголовка Location в HTTP.  Однако заголовок протокола HTTP

 позволяет ввести только один адрес, не заключённый в кавычки. Поскольку URI могут содержать запятые и точки с

запятой в качестве скрытых знаков, они могут быть приняты за разграничители значений заголовков или параметров

 соответственно.

Пример:   

 

Contact: "Alexander" <sip:alexander@loniis.ru>

         ;q=0.7; expires=3600,

         "Alexander" <mailto:alexander@loniis.ru> ;q=0.1

 

 

·       Content-Disposition

Заголовок Content-Disposition описывает, как будет интерпретироваться клиентом или сервером агента пользователя

тело сообщения, или - для тел сообщений типа multipart (состоящих из нескольких частей) - часть тела сообщения.

Этот SIP заголовок дополняет информацию о типе тела сообщения, содержащуюся в заголовке Content-Type.

В протоколе SIP определено несколько значений для заголовка Content-Disposition. Значение session указывает,

что часть тела описывает сессию для вызова любой из двух сторон или для одностороннего проключения речевого

тракта в предответном состоянии. Значение render означает, что часть тела сообщения должна быть отражена на

дисплее или другим образом представлена пользователю. Если заголовок Content-Disposition утерян, то сервер

должен  для тел сообщения типа application/sdp определять значение Content-Dispositionsession, а для тел

остальных типов - значение render.

Значение icon указывает на то, что часть тела сообщения содержит изображение, пригодное для визуального

представления вызывающего или вызываемого пользователя; это изображение может быть использовано UA для

визуального информирования пользователя о полученном сообщении, помимо этого оно может удерживаться во

время диалога. Значение alert означает, что часть тела содержит аудиозапись которая должна быть предоставлена

 агентом пользователя для того, чтобы уведомить пользователя о получении запроса, как правило запроса, который

 инициирует диалог; например, это информационное тело может быть представлено в виде вызывного сигнала для

телефонного вызова после того, как  был отослан предварительный ответ с кодом 180 (Ringing).

Любые MIME тела со значением заголовка Content-Disposition, которое предписывает передачу содержимое

пользователю, может обрабатываться только, если сообщение было надлежащим образом аутентифицировано. 

Параметр «handling-param» описывает действия UAS при получении сообщения с непонятными  значениями

заголовков Content-Disposition и Content-Type. Для этого параметра существуют значения: optional и required.

Если значение параметра «handling-param» отсутствует, то по умолчанию должно подразумеваться значение

 required.   

В случае если заголовок Content-Disposition отсутствует, MIME-тип обуславливает значение по умолчанию для

Сontent-Disposition. В противном случае выставляется значение render. Пример:

 

     Content-Disposition: session

 

·       Content-Encoding

Заголовок Content-Encoding используется в качестве модификатора типов тела сообщения. Когда данный заголовок

присутствует, его значение указывает, какие дополнительные виды кодирования были применены к содержимому и

соответственно какие следует применить механизмы декодирования для получения тела сообщения типа,

обозначенного в поле заголовка Content-Type.

Первостепенно Content-Encoding предназначен для того, чтобы обеспечить компрессию тела сообщения с

возможностью последующего восстановления. Если содержимое было закодировано несколько раз, кодеки

содержимого должны быть перечислены в том порядке, в котором они применялись. Все значения поля заголовка

регистронезависимы.

Клиент может закодировать содержимое тела в запросах. Сервер может закодировать содержимое тела в ответах.

Причём, UAS должен использовать только типы кодирования, которые были перечисленные в поле заголовка 

Accept-Encoding запроса.

Пример:

 

Content-Encoding: gzip

 

 

·       Content-Language

Основное назначение заголовка Content-Language – определить и изменить содержимое тела сообщения в

соответствии с предпочтительным языком пользователя (имеется в виду национальный язык). Если тело сообщения

содержит информацию на конкретном языке, то это будет указано в заголовке. В случае отсутствия заголовка

Content-Language в сообщении подразумевается, что содержимое предназначено для пользователей любых

языковых групп. 

Заголовок Content-Language может применяться не только к текстовым телам, но и к телам других типов. 

Пример:

 

Content-Language: fr

 

·       Content-Length

Заголовок Content-Length указывает отображённый в десятичном виде размер тела сообщения, посланного

получателю, в байтах. Приложения должны помещать в данное поле размер тела сообщения, подлежащего отправке,

 не взирая на тип тела сообщения. Если в качестве транспорта выступает потоко-ориентированный протокол

(такой как TCP), заголовок Content-Length должен использоваться обязательно.  

Размер тела сообщения не учитывает пустой строки, отделяющей заголовки от тела сообщения. Разрешёнными

значениями для Content-Length является любое число, большее или равное нулю. Когда в передаваемом сообщении

тело отсутствует, в поле заголовка Content-Length выставляется ноль.  

Возможность не включать заголовок Content-Length в сообщение упрощает создание cgi-подобных сценариев,

которые динамически генерируют ответы.

Пример:

 

      Content-Length: 349

 

·       Content-Type

Заголовок Content-Type определяет тип тела сообщения, посланного получателю. Content-Type должен входить в

сообщение, если тело сообщения не пустое. Если же тело пустое, а Content-Type присутствует, он показывает,

что тело определённого типа имеет нулевую длину (например, пустой аудио-файл).

Примеры:

 

     Content-Type: application/sdp

    

c: text/html; charset=ISO-8859-4

 

·       CSeq

Заголовок CSeq - уникальный идентификатор запроса, относящегося к одному соединению. Он служит для корреляции

 запроса с ответом на него, а также для различия первоначальных запросов с переадресованными.

 Заголовок состоит из двух частей: натурального числа из диапазона чисел от 1 до 232 и типа запроса.

Часть типа запроса является регистрозависимой. Сервер должен проверять значение величины CSeq в

каждом принимаемом запросе, и считает его новым, если значение больше предыдущего. Этот заголовок копируется

из запроса в ответ.

Пример:

   CSeq: 4711 INVITE

 

·       Date

Заголовок Date содержит дату и время первой отправки сообщения. В отличие от HTTP/1.1, протокол SIP

 поддерживает самый новейший, среди описанных в RFC 1123, формат даты, он переводит любой часовой пояс к

стандарту GMT, хотя  RFC 1123 не запрещает использовать другие форматы. Поле заголовка Date может быть

 использовано любой оконечной системой без встроенных часов с автономным батарейным питанием для получения

информации о текущем времени. Однако это требует знания клиентами отклонения своих часовых поясов от GMT

Пример:

                         Date: Sat, 13 Nov 2010 23:29:00 GMT

 

·       Error-Info

Заголовок Error-Info является указателем на дополнительную информацию об ответе, содержащем код ошибки.

Возможности пользовательского интерфейса клиента SIP простираются от всплывающих рабочих окон и аудио в

программном клиенте на ПК до функции предоставления аудио для оконечных точек, соединённых через шлюзы.

Вместо того, чтобы принуждать генерирующий код ошибки сервер делать выбор между посылкой сообщения с кодом

ошибки и указанием причины, и воспроизведением звукового сигнала, существует возможность предусмотреть оба

 варианта в поле заголовка Error-Info. Впоследствии клиент самостоятельно решает, какой тип индикации ошибки

 предоставить вызывающему пользователю.

UAC обрабатывает SIP или SIPS URI в поле заголовка Error-Info также, как контактный адрес в заголовке Contact

перенаправляющего сообщения, и может сгенерировать новое сообщение INVITE, направляемое автоинформатору.

 Автоинформатор, предоставляющий вызывающему пользователю записанное уведомление, может находиться по

 адресу, использующему  схему адресации, отличную от «sip», например «tel».

Примеры:

                  SIP/2.0 404 The number you have dialed is not in service

        Error-Info: <sip:not-in-service-recording@niits.ru>

 

·       Event

В заголовке должен быть указан ровно один тип события (представленный в виде идентификатора - event package),

 на которое осуществляется подписка (subscription) или передаётся уведомление (notification).

В целях обеспечения соответствия сообщений NOTIFY и SUBSCRIBE значение типа события («event-type») и параметр

 «id» (в случае присутствия) сравниваются побайтно. Заголовок Event, содержащий параметр «id», никогда не будет

 соответствовать аналогичному заголовку без такого параметра. Остальные возможные параметры при сравнении

 не учитываются.

Пример.

 

Event: refer; id=1234

 

 

·       Expires

Заголовок Expires устанавливает время, по истечении которого сообщение или его содержимое станет

недействительным. Конкретное значение заголовка зависит от типа запроса.  Присутствует в запросах

REGISTER и INVITE. В запросе REGISTER указывает, сколько времени регистрация остается действительной.

В запросах INVITE он ограничивает количество времени, в течение которого URI будет оставаться действительным

на приемнике - оставаться в кэш-памяти. Если этот заголовок отсутствует, на сервере не будет осуществляться

 буферизация. Значение этого поля – количество секунд, выраженное в десятичном виде, в интервале

 между 0 и (232 –1), измеренное с момента получения запроса.

Пример:

                  Expires: 5

·       From

Заголовок From содержит URI отправителя запроса. Заметим, что адрес отправителя запроса может не совпадать с

 адресом инициатора диалога. Адрес из заголовка From запроса копируется  в одноимённый заголовок ответа.

Отображаемое имя должно информировать пользователя об инициаторе запроса. В случае если не удаётся

 установить личность вызывающего пользователя,  в качестве display name (отображаемого имени) фигурирует

«Anonymous».  В случае, если URI содержит запятую, точку с запятой или вопросительный знак, он заключается

в угловые скобки, даже если отображаемое имя отсутствует.

Два заголовка From считаются эквивалентными, когда совпадают их URI и параметры. При сравнении параметры

расширения, присутствующие лишь в одном из двух заголовков, во внимание не берутся. Это означает,

 что отображаемое имя и наличие либо отсутствие угловых скобок не влияют на результат сравнения.

Примеры:

 

    From: "Vladimir" <sip:vladimir@protei.ru> ;tag=a48s

 

    From: sip:+79213434329@gateway.protei.ru;tag=887s

   

 

·       In-Reply-To

В поле заголовка In-Replay-To перечисляются уникальные идентификаторы сеансов связи (Call-ID),

инициированных отправителями с данным пользователем. Эти идентификаторы по мере поступления буферизируются

 клиентом и впоследствии включаются в поле заголовка In-Replay-To в ответном вызове. Это позволяет системам

автоматического распределения вызовов маршрутизировать ответный вызов инициатору первого звонка.

Также это даёт возможность вызываемым пользователям отфильтровывать вызовы т.е. принимать только ответные

 вызовы от пользователей, с которыми ранее осуществлялись сеансы связи, инициированные самим вызываемым

пользователем. Однако, этот заголовок не является заменой аутентификации в запросах. 

Пример:

 

In-Reply-To: 70710@lonis.ru, 17320@loniis.ru

 

·       Max-Forwards

Заголовок Max-Forwards используется в любом типе SIP запросов, чтобы ограничить число серверов или шлюзов,

 через которые проходит запрос. Значение заголовка должно быть целым числом в пределах от 0 до 255,

отражающим оставшееся количество пересылок, которое разрешено осуществить сообщению.

 Это число уменьшается каждым сервером, который пересылает запрос дальше. В качестве первоначального

значения рекомендуется брать 70.

Заголовок Max-Forwards должен вставляться теми элементами, которые иначе не могут гарантировать обнаружение

 петли.

Пример:

                  Max-Forwards: 6

 

·       Min-Expires

Заголовок Min-Expires несёт в себе минимальный период обновления, который подходит для управляемых сервером

SIP элементов с временным состоянием. В первую очередь это относится к содержимому заголовков Contact,

которое сохраняет регистрирующий сервер registrar. Поле заголовка содержит десятичное целое число секунд

от 0 до (232 –1). Заголовок используется в ответе 423 (Interval Too Brief).

Пример:

         Min-Expires: 60

 

·       MIME-Version

Заголовок MIME-Version указывает версию стандарта MIME-информации,  помещённой в тело сообщения.

Пример:

          MIME-Version: 1.0

 

·       Organization

Заголовок Organization содержит название организации, к которой относится SIP-элемент, выдающий запросы или

ответы. Это поле заголовка может использоваться клиентским программным обеспечением для фильтрации вызовов.

Пример:

             Organization: Niits

 

·       Path

Между UA и сервером регистрации, исходя из особенностей топологии сети, может находиться один или несколько

 прокси-серверов. Запрос REGISTER должен проходить через эти прокси-серверы. Однако REGISTER не обеспечивает

механизма по обнаружению и записи последовательности этих посредников для дальнейшего использования.

Такой механизм  предоставляет заголовок Path. Заголовок используется в запросах REGISTER и ответах класса

2хх на них.

Поле заголовка Path может быть добавлено в запрос REGISTER любым SIP элементом, через который проходит

запрос. Значения заголовка Path размещаются в чёткой последовательности: по мере продвижения

прокси-серверами каждое новое значение добавляется сверху, смещая вниз все присутствующие значения.

Кроме того, также как в заголовке Route поля заголовка могут быть объединены. Сервер регистрации отображает в

 заголовке ответа на REGISTER все значения в обратном порядке, и указанные посредники доставляют ответ обратно

агенту пользователя. В итоге UA получает информацию об узлах, лежащих на пути отсылки сообщений регистрации,

и может в дальнейшем использовать её для своих задач.

Path отличается от Record-Route тем, что заголовок Path применяется в запросах REGISTER и ответах класса 2хх на

 него, которые передаются вне диалога в то время, как заголовок Record-Route используется только в режиме

 диалога. Более того, информация из  Record-Route используется только в рамках существующего диалога,

 а информация из Path – для использования в будущих диалогах.

Значения заголовка Path придерживаются синтаксиса, определённого для заголовка Route.

Поскольку заголовок Path является расширением SIP, поддержка этого заголовка агентом пользователя может

быть указана с помощью option-tag «path» в заголовке Supported. Пример:

 

Path: <sip:P3.niits.ru;lr>,<sip:P1.niits.ru;lr>

 

 

·       Priority

Заголовок Priority указывает на срочность запроса с точки зрения клиента. В нём содержится приоритет

 SIP-запроса для конечного пользователя или его UA. К примеру, содержимое поля данного заголовка влияет на

маршрутизацию вызова и процесс принятия его сервером. Сообщения, не содержащие заголовка Priority,

 расцениваются, как сообщение с приоритетом normal. Заголовок Priority никаким образом не воздействует на

использование коммуникационных ресурсов, например, на приоритет при пересылке пакетов маршрутизаторами.

Поле заголовка может содержать значения: non-urgent (несрочное), normal (нормальное), urgent (срочное) и

 emergency (экстренное); могут быть определены и  дополнительные значения. Рекомендуется, чтобы значение

emergency выставлялось только в случае экстренных вызовов на соответствующие службы.

Примеры: 

        Subject: У нас случился пожар!

        Priority: emergency

 

   или

 

        Subject: Планы на выходные

        Priority: non-urgent

 

 

·       Privacy

Существуют SIP-заголовки, содержимое которых агент пользователя не может самостоятельно скрыть от просмотра

 другими элементами сети, например зашифровать, поскольку их использование необходимо для маршрутизации

сообщений. Это могут сделать посредники, которые несут ответственность за передачу сообщений от и к

пользователю, активировавшему функцию анонимности. Агент пользователя должен иметь средства для того,

чтобы запросить такие сервисы обеспечения анонимности (privacy services). Для этой цели используется заголовок

Privacy. UA помещает в сообщение заголовок Privacy, когда существует необходимость воспользоваться сервисами

 анонимности, предоставляемыми сетью.

На сегодняшний день в поле заголовка могут находиться значения: header, session, user, none, critical. Значение

header означает, что пользователь запрашивает сокрытие тех заголовков (таких как Via и Contact), которые не могут

 быть полностью удалены из раздела идентифицирующей информации без вмешательства посредников.

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

например, содержится в SDP-теле, инициированной этим сообщением. Выполнение этого запроса приведёт к тому,

 что IP-адрес, с которого будет поступать трафик в ходе сессии, окажется замаскированным. Значение  user обычно

 выставляется теми прокси-серверами, у которых есть предварительная договорённость с пользователем для того,

 чтобы указать, что функции обеспечения анонимности уровня пользователя должны быть выполнены сетью,

предположительно потому, что агент пользователя не способен их выполнить. Сам агент пользователя может

помещать значение user только в запросы REGISTER. Значение none указывает, что выполнение функций по

обеспечению анонимности не требуется. Значение  critical сообщает, что функции по обеспечению анонимности

 сообщения должны быть обязательно выполнены, в противном случае запрос должен быть отклонён.

Когда заголовок сформирован, он должен состоять или из значения none или одного или более значений  user, header

и session, каждое из которых может быть указано единожды; значение (значения) может сопровождаться

индикатором  critical.

 

Privacy: none

 

 

·       Proxy-Authenticate

Заголовок Proxy-Authenticate содержит запрос аутентификации, состоящий из поля, отображающего схему

аутентификации, и ряд параметров, необходимый для проведения процедуры аутентификации с данным

прокси-сервером  для указанного Request-URI. Данный заголовок включается в состав ответа с кодом 407

(Proxy Authentication Required) или с кодом 401 (Unauthorized). Более подробная информация о заголовке

содержится  в разделе 2.6.3.

Пример:

        Proxy-Authenticate: Digest realm="niits.ru",

        qop="auth", nonce="f84f1cec41e6cbe5aea9c8e88d359",

        opaque="", stale=FALSE, algorithm=MD5

 

·       Proxy-Authorization

Заголовок Proxy-Authorization идентифицирует пользователя прокси-серверу, который требует аутентификации.

 Значение поля заголовка состоит из отклика аутентификации, содержащего информацию аутентификации агента

пользователя для прокси-сервера, обслуживающего область запрашиваемого ресурса. Если запрос

идентифицирован и область специфицирована, та же самая идентификационная информация может быть

 использована для других запросов, направляемых в данную область.

Proxy-Authorization  вместе с заголовком Authorization отступают от общих правил, касающихся множественности

 значений в поле заголовка. Заголовки с одинаковыми именами могут присутствовать в сообщении в любом

 количестве, но не могут объединяться в один общий заголовок, как это происходит с прочими заголовками. 

Более подробная информация о заголовке содержится  в разделе 2.6.3.

Пример:

  

  Proxy-Authorization: Digest username="Anton", realm="niits.ru",

  nonce="c60f3082ee1212b402a21831ae",

  response="245f23415f11432b3434341c022"

 

·       Proxy-Require

Заголовок Proxy-Require указывает функции прокси-сервера, которые должны им поддерживаться.

Пример:

                       Proxy-Require: 100rel

 

·       P-Asserted-Identity

Заголовок P-Asserted-Identity используется в сообщениях между логическими элементами SIP, между которыми

 существуют доверительные отношения (обычно между посредниками), для переноса информации,

удостоверяющей пользователя (как правило его публичного адреса). Значение заголовка состоит из URI и

 опционального отображаемого имени. URI может иметь схему sip, sips, или tel. Также возможно присутствие двух

значений в заголовке; тогда одно из них должно быть со схемой sip или sips, а второе – со схемой tel. Использование

 данного заголовка целесообразно только в пределах домена доверия (Trust Domain).

Прокси-сервер в домене доверия может получить сообщение от узла, с которым у него установлены доверительные

отношения и с которым не установлены. Во втором случае при условии, что прокси-сервер хочет добавить заголовок

 P-Asserted-Identity, он должен произвести процедуру аутентификации инициатора сообщения и после этого 

 поместить полученную информацию, идентифицирующую пользователя, в поле заголовка P-Asserted-Identity

сообщения. Если прокси-сервер получает сообщение от узла, которому доверяет, он может использовать

 информацию в заголовке P-Asserted-Identity, как если бы она аутентифицировала пользователя.

Прокси-сервер, отсылающий сообщение прокси-серверу или UA, c которым  у него не установлены доверительные

 отношения, должен удалить все значения заголовка P-Asserted-Identity, если вызывающий пользователь запросил

 обеспечение секретности для своей информации. Пример:

 

  P-Asserted-Identity: "Anton" <sip:anton@niits.ru>

  P-Asserted-Identity: tel:+79213434329

 

·       P-Preferred-Identity

Заголовок P-Preferred-Identity используется в сообщениях, которые агент пользователя отправляет

 прокси-серверу, с которым у него установлены доверительные отношения. Заголовок переносит информацию,

удостоверяющую пользователя, которую инициатор сообщения желает использовать в качестве значения

заголовка P-Asserted-Identity, которое  пользующийся доверием элемент вставит в сообщение. Заголовок

P-Preferred-Identity может состоять из одного значения и иметь схему sip, sips, или tel. Также возможно

присутствие двух значений в заголовке; тогда одно из них должно быть со схемой sip или sips, а второе – со схемой

tel. Пример.

 

P-Preferred-Identity: "Anton" <sip:anton@niits.ru>

 

·       P-Media-Authorization

Заголовок P-Media-Authorization предназначен для контроля доступа к услуге обеспечения QoS средствами SIP.

 Использование данного заголовка способствует предотвращению атак типа denial-of-service (отказ в обслуживании). Конечно для такой цели могло быть использовано тело сообщения, но при этом отсутствовала бы возможность сквозного шифрования тела. Заголовок P-Media-Authorization включается в сообщение прокси-сервером, осуществляющим контроль доступа к QoS, во все предварительные ответы (кроме ответа с кодом 100), первый надёжный 1хх или 2хх ответ и во все повторные передачи этого надёжного ответа для UAС или в запрос INVITE, ACK, UPDATE и PRACK - для UAS.

Заголовок P-Media-Authorization содержит один или более идентификаторов для предоставления доступа к QoS.

UA использует все идентификаторы из последнего полученного запроса/ответа от прокси-сервера,

предоставляющего доступ к QoS, при запросе резервирования ресурсов для медиапотоков, используемых в

ходе сессии (в случае использования протокола RSVP совместно с SIP идентификаторы, полученные в заголовке

 P-Media-Authorization  используются в сообщении PATH). Эти идентификаторы используются для

 санкционирования применения QoS для медиапотока (потоков). Заголовок P-Media-Authorization может быть

 использован только в SIP запросе или ответе, который допускает наличие offer или answer в теле сообщения

(SDP-предложение или SDP-ответ с  описанием сеанса связи). 

 

·       The P-Associated-URI

Этот заголовок, являясь расширением SIP, позволяет регистрирующему серверу возвращать агенту пользователя

список существующих контактных адресов для конкретного зарегистрированного публичного адреса. Заголовок

 P-Associated-URI содержится в ответе с кодом 200 (OK) на запрос REGISTER и содержит список контактных адресов.

Если registrar поддерживает данное расширение, он должен всегда вставлять заголовок P-Associated-URI в ответ

 200 (OK) на REGISTER не зависимо от того, какую процедуру осуществлял UA пользователя: регистрацию,

изменение регистрации или удаление регистрации и не зависимо от числа зарегистрированных контактных

 адресов для публичного адреса.

 

·       P-Called-Party-ID

Заголовок P-Called-Party-ID помещает прокси-сервер (обычно в запрос INVITE). В заголовок заносится значение

поля Request-URI из полученного прокси-сервером запроса (Это происходит до замены начального Request-URI

контактным адресом). В Request-URI, как известно, содержится публичный адрес вызываемого пользователя.

Поэтому, изучая содержимое заголовка P-Called-Party-ID, UAS определяет на какой публичный адрес было послано

 приглашение (например, пользователь может одновременно использовать личный и рабочий публичные адреса

для принятия приглашений к сеансу связи). Сервер может использовать эту информацию, для подачи пользователю

различных аудиовизуальных вызывающих сигналов в зависимости от того, на какой из публичных адресов

пользователя пришёл вызов. Пример

 

P-Called-Party-ID: sip:anton-work@niits.ru

 

·       P-Visited-Network-ID

Сети, построенные в соответствии с 3GPP (3rd Generation Partnership Progect), предусматривают так называемые

домашние сети (home network) и сети временного пребывания (visited network). Каждая домашняя сеть должна

 иметь роуминговые соглашения (roaming agreements) с одной или несколькими сетями временного пребывания.

 Наличие таких соглашений позволяет мобильному терминалу, покинувшему домашнюю сеть, использовать

 ресурсы, предоставляемые сетью временного пребывания в прозрачном режиме.

Одним из условий домашней сети для принятия сообщения регистрации от UA, переместившегося в одну из сетей

временного пребывания, это наличие роуминговых соглашений между домашней сетью и сетью, в которой

пребывает UA. Чтобы проверить это условие, необходимо передать информацию о сети временного пребывания

домашней сети. При наличии соглашений с сетью временного пребывания домашняя сеть предоставит

«блуждающему» UA требуемые сервисы.

Заголовок P-Visited-Network-ID используется для доставки идентификатора сети, где временно находится UA,

для сервера регистрации или домашнего прокси-сервера (home proxy); заголовок включает в запрос прокси-сервер

сети временного нахождения. Этот идентификатор должен быть известен и серверу регистрации, и домашнему

прокси-серверу домашнего домена, и прокси-серверам в сети временного нахождения UA. Как правило, заголовок

P-Visited-Network-ID используется для запроса REGISTER, хотя может применяться и в других запросах.

Для того, чтобы предотвратить конфликты, связанные с дублированием идентификаторов, значение заголовка

P-Visited-Network-ID должно выбираться с осторожностью. Идентификатор должен быть уникален в глобальном

масштабе. Пример.

 

P-Visited-Network-ID: "Visited network number 1"

·       P-Access-Network-Info

Когда  UA создаёт SIP запрос или ответ, и знает, что он  будет надёжно (с подтверждением) отослан SIP

прокси-серверу, который предоставляет услуги данному UA, он вставляет в сообщение заголовок

 P-Access-Network-Info. Этот заголовок содержит информацию о сети доступа, которую использует UA

для осуществления IP-взаимодействия. Как правило, заголовок игнорируется прокси-серверами, находящимися

между UA и SIP прокси-сервером, предоставляющим услуги. Прокси-сервер, предоставляющий услуги, может

 проверить заголовок P-Access-Network-Info и использовать информацию, содержащуюся там, для предоставления

услуг определённого типа в зависимости от значения заголовка. Некоторые услуги более или наоборот менее

 подходят для пользователя в зависимости от типа доступа; также некоторые услуги могут быть предоставлены с

бульшим качеством, когда прокси-сервер владеет детальной информацией о сети доступа (поскольку могут быть

адаптированы под конкретного пользователя). Перед тем, как переслать запрос дальше, этот прокси-сервер

удаляет заголовок  P-Access-Network-Info из сообщения. UA, предоставляющий информацию должен доверять

прокси-серверу, который предоставляет сервисы – только в этом случае гарантируется, что прокси-сервер

удалит заголовок перед пересылкой за пределы домена, в котором находится прокси-сервер и тем самым не

нарушит секретности переданной информации. Такой прокси-сервер обычно находится в домашней сети.  

 

·       P-Charging-Function-Addresses

В процесс предоставления доступа и обеспечения услуг вовлечено множество элементов распределенной

архитектуры сети. Существует необходимость передать каждому SIP прокси-серверу, вовлечённому в транзакцию,

  информацию об адресе элементов SIP сети, решающих задачи по начислению платы. Это требуется для передачи

 на них записей сгенерированных прокси-серверами. 

В 3GPP архитектуре определено два типа функциональных элементах, занимающихся начислением платы: Charging

Collection Function (CCF) и Event Charging Function (ECF). CCF используется при кредитной системе расчетов

 (postpaid),  ECF используется при авансовой системе (prepaid).

SIP прокси-сервер, который получает SIP запрос, может поместить в него заголовок P-Charging-Function-Addresses

перед тем как осуществить пересылку запроса, это возможно только если в запросе не было заголовка с таким

названием. Заголовок состоит из списка адресов одного или более элементов сети, ведущих начисление платы

ССF или ECF, куда прокси-сервер должен отослать информацию, касающуюся начисления платы. Прокси-сервер,

получивший сообщение с таким заголовком также будет знать, по какому адресу передавать записи, содержащие

 информацию для начисления платы. Агенты пользователя не должны осуществлять работу с данным заголовком.

 Пример.

 

P-Charging-Function-Addresses: ccf=192.1.1.1; ccf=192.1.1.2;

                                     ecf=192.1.1.3; ecf=192.1.1.4

 

 

  • P-Charging-Vector

Операторы должны иметь возможность начислять плату за предоставление услуг. Это требует определённой

координации действий сетевых элементов, таких как прокси-серверы, что выражается в корреляции записей

для начисления платы, сгенерированных разными элементами сети SIP, но относящихся к одной сессии.

 Корреляционная информация включает уникальный глобальный идентификатор (вектор) начисления платы,

который значительно упрощает билинговые функции.

Идентификатор начисления платы определён, как совокупность информации о начислении платы. Информация

может быть помещена в идентификатор несколькими сетевыми элементами (включая SIP прокси-серверы) и ими же

удалена. В идентификаторе содержится три типа корреляционной информации: значение IMS Charging Identity (ICID),

 адрес прокси-сервера, который создал это значение ICID и  Inter Operator Identifiers (IOI). ICID – значение,

идентифицирующее диалог или транзакцию вне диалога в целях начисления платы. Оно используется для

корреляции записей для начисления платы. ICID должен быть уникальным в глобальном масштабе. Для этого он

 должен включать две компоненты: локальное уникальное значение и доменное имя или IP-адрес SIP прокси-сервера,

 сгенерировавшего локальное значение. IOI идентифицирует обе сети, в которых находятся участники диалога или

 транзакции вне диалога.

Для переноса идентификатора определён заголовок  P-Charging-Vector. SIP прокси-сервер в случае отсутствия

заголовка P-Charging-Vector может поместить его самостоятельно в начальный запрос или ответ для диалога с

теми параметрами, которые ему доступны. SIP прокси-сервер, который получает запрос, содержащий заголовок

 P-Charging-Vector, может использовать значение ICID при создании новых записей для начисления платы.

Заголовок используется либо в пределах частного административного домена, либо между доменами, между

которыми установлены доверительные отношения. Пример.

 

P-Charging-Vector: icid-value=1234bc9876e;

                         icid-generated-at=192.0.6.8;

                         orig-ioi=home1protei.ru

 

 

·       P-DCS-Trace-Party-ID

В сети, предоставляющей услуги по передаче речевой информации, может быть предоставлена услуга трассировки

пришедшего запроса - Сustomer originated trace, которая обеспечивают вызываемой стороне возможность

обратиться к правоохранительным органам в случае злонамеренного телефонного вызова. В SIP эта услуга может

обеспечиваться независимо от идентификатора вызывающего пользователя и работать даже, когда пользователь

 запрашивает услугу анонимности. Для возможности инициирования услуги трассировки, используемой для

определения информации, идентифицирующей пользователя не пользующегося доверием UAC, в  запрос INVITE

  помещается дополнительный заголовок P-DCS-Trace-Party-ID. Заголовок P-DCS-Trace-Party-ID не присутствует в

 других запросах и ответах.

Элемент, адресованный значением поля Request-URI, выполняет определённые поставщиком услуг функции записи

и передачи правоохранительным органам информации, удостоверяющей вызывающего пользователя, которая

находится в заголовке P-DCS-Trace-Party-ID. UAC, с которым установлены доверительные отношения, не использует

 заголовок P-DCS-Trace-Party-ID.

 

 

  • P-DCS-OSPS

Некоторые вызовы имеют особые требования к обработке, которые не могут быть удовлетворены обычными

агентами пользователя. Например, когда пользователь занят вызовом, а в это время приходит другой вызов,

то такой вызов может быть отклонён с указанием занятости. Однако, некоторые виды услуг, предоставляемые 

операторами ТфОП, требуют особой обработки вызовов. В том числе сервисы «Проверка занятости линии» (BLV)

 и «Вмешательство в разговор в случае необходимости» (EI), инициированные оператором с Operator Services

 Position System (OSPS) на ТфОП. Для того, чтобы проинформировать SIP агента пользователя, что входящему

вызову должно быть придано особое значение, используется заголовок P-DCS-OSPS. Его значение указывает

на то, что запрашивается определённый способ обработки вызова.

На данное время существует три значения для данного заголовка: BLV (busy line verification), EI (emergency interrupt)

 и RING (operator ringback). Если при получении запроса INVITE, содержавшего в заголовке P-DCS-OSPS значение BLV

или EI,   пользователь решил принять вызов, UAS передаёт UAC ответ, c кодом,  указывающим на незанятость

абонента. Так как значения EI и RING передаются только в установленных диалогах они могут появляться в

запросах UPDATE. Заголовок P-DCS-OSPS не может быть послан в запросе от UAC, не пользующегося доверием.

Как правило заголовок вставляется контроллером медиа-шлюза (Media Gateway Controller). Пример.

 

P-DCS-OSPS: BLV

 

·       P-DCS-BILLING-INFO

В процессе предоставления услуг требуется производить сбор биллинговой информации и её доставку биллинговой

системе. Эту функцию может выполнить SIP прокси-сервер. Более того, прокси-серверы задействованные в вызове,

 между которыми существуют доверительные отношения, могут обмениваться биллинговой информацией,

относящейся к участникам вызова. Для записей об изменении состояния баланса (Accounting records)  необходимо

 иметь идентификатор, который связывает все записи об услугах, предоставленных в процессе конкретного вызова.

Заголовок P-DCS-BILLING-INFO содержит идентификатор, который может быть использован устройством,

 генерирующим учётные записи, для ассоциирования записей различного назначения, возможно от различных

источников, с информацией, касающейся снятия платы со счёта (billable account). Также заголовок содержит

информацию о состоянии счёта подписчика и другую информацию, необходимую для осуществления правильного

 биллинга обслуживания вызова. Этот заголовок используется только между прокси-серверами и пользующимися

доверием UA – применим только в сегменте сети с доверительными отношениями и должен быть удалён при выходе

 за пределы сегмента.

 

 

  • P-DCS-LAES и P-DCS-REDIRECT

Заголовок P-DCS-LAES содержит информацию, необходимую для выполнения легального электронного наблюдения

 (Lawfully Authorized Electronic Surveillance). Информация представляет собой адрес и порт устройства,

занимающегося электронным наблюдением, для доставки двустороннего потока сигнальных сообщений,

относящихся к этому вызову. Заголовок может также включать дополнительный адрес и порт для доставки элементу

сети SIP, занимающемуся наблюдением, медиа-информации, передающейся в ходе вызова. Этот заголовок

 используется только между прокси-серверами и агентами пользователя, между которыми установлены

доверительные отношения.

Заголовок P-DCS-Redirect содержит идентифицирующую вызов информацию, необходимую для поддержки 

требований легального электронного наблюдения для перенаправленных вызовов. Содержит первоначально

 указанный адрес, адрес перенаправленного запроса и количество предпринятых перенаправлений. 

Этот заголовок также используется только между прокси-серверами и  агентами пользователя, между которыми

установлены доверительные отношения.

 

·       RAck

Заголовок RAck помещается в запрос PRACK в целях обеспечения надежной доставки предварительных ответов.

 Он включает два численных значения и поле типа запроса. Первое значение - значение, взятое из поля заголовка

RSeq подтверждаемого предварительного ответа. Следующее значение и тип запроса копируются из поля заголовка

CSeq подтверждаемого ответа. Поле типа запроса в заголовке RAck чувствительно к смене регистра. Пример:

 

RAck: 776656 1 INVITE

 

·       Reason

Один и тот же SIP запрос может быть передан по различным причинам. Например, запрос CANCEL может отсылаться

прокси-сервером, размножающим запросы, если вызов состоялся на другой ветви или был прерван клиентом агентом

пользователя до ответа вызываемой стороны. Несмотря на то, что протокол и поведение системы одинаково в обоих

 случаях, смысл передаваемого сообщения может существенно различаться. В реализациях, которых не

предусмотрено расширение, связанное с заголовком Reason, при получении CANCEL по второй причине вызов может

 быть расценен как упущенный; в то же время этот запрос будет расценен также, если вызов будет принят на другом

терминале пользователя.

Для создания сервисов, часто необходимо знать причину отправки SIP-запроса. Такую информацию обеспечивает

 заголовок Reason. Заголовок Reason также предназначен для инкапсуляции кода окончательного ответа в

предварительный ответ. Это функция способствует решению проблемы, обозначаемой аббревиатурой HERFP

(Heterogeneous Error Response Forking Problem) - ситуации, когда  элемент, размножающий запросы, не может

отправить отклоняющий окончательный ответ, если не получил отклоняющий ответ с каждого из направлений,

по которому отправил запрос.

Заголовок Reason может содержаться в любом запросе, передаваемом в режиме диалога, в любом запросе CANCEL

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

параметром «cause», указывающим код SIP-ответа. Также значение может быть – «Q.850» с параметром «cause»,

информирующем о коде причины по которой было отослано сообщение в десятичном представлении в соответствии

с рекомендацией ITU-T Q.850 для систем сигнализации DSS1 и OKC№7 (подсистема ISUP).  SIP-сообщение может

содержать более одного значения поля заголовка Reason, однако в этом случае значения должны быть различны

 (например, одно SIP и другое Q.850). Реализации игнорируют значения заголовка Reason, которые им не понятны. 

Клиенты и серверы могут игнорировать этот заголовок, что не повлияет не процесс обработки. Пример.

 

Reason: SIP ;cause=200 ;text="Call completed elsewhere"

     Reason: Q.850 ;cause=16 ;text="Terminated"

 

 

·       Record-Route

Заголовок Record-Route вставляется прокси-серверами в запросы для того, чтобы последующие запросы в процессе

 диалога маршрутизировались через данные прокси-серверы.

Пример:

       Record-Route: <sip:serv10.protei.ru;lr>,

                     <sip:site3.niits.ru;lr>

 

  • Refer-To

Заголовок Refer-To применяется только в запросе REFER. Он указывает URI для передачи вызова (call transfer).

 Другими словами значение, содержащееся в заголовке, указывает адрес третьей стороны, с которой отправитель

предлагает связаться получателю запроса REFER. В заголовке может содержаться только одно значение.

Вместо Refer-To не может быть использован заголовок Contact, поскольку он является важной частью механизма

 Route/Record-Route, описанного в разделе 2.4.1, и не может указывать адрес места назначения для пересылки

вызова. Пример:

 

Refer-To: sip:alexander@loniis.ru

 

 

·       Reply-To

Заголовок Reply-To содержит логический обратный URI, который может отличаться от адреса в поле заголовка From.

Например, такой URI может использоваться для ответного звонка пользователя при упущенных вызовах и  вызовах,

 не завершившихся установлением связи. В случае, если пользователь желает оставаться анонимным, заголовок

 Reply-To либо должен быть исключён из запроса, либо помещён таким образом, чтобы не разглашать личные

 сведения. Если URI содержит запятую, точку с запятой или вопросительный знак, он заключается в угловые скобки,

 даже если отображаемое имя отсутствует.

Пример:

       Reply-To: Vladimir <sip:vladimir@protei.ru>

 

·       Require

Поле заголовка Require используется UAC для того, чтобы сообщить UAS перечень опций, которые должен

 поддерживать сервер для обработки запроса. Содержимое поля заголовка представляет собой список

идентификаторов новых функциональных возможностей (расширений)  option-tag; каждый них определяет одно из

SIP-расширений, необходимых для обработки сообщения.

Пример:

Require: 100rel

 

·       Retry-After

Заголовок Retry-After применяется в ответах с кодом 500 (Server Internal Error) или 503 (Service Unavailable), чтобы

проинформировать о том, на какой срок приостановлено обслуживание для вызывающего пользователя, или в

ответах 404 (Not Found), 413 (Request Entity Too Large), 480 (Temporarily Unavailable), 486 (Busy Here), 600 (Busy)

или 603 (Decline), чтобы указать, когда вызываемый пользователь будет снова доступен для вызова. Значения поля

 заголовка - любое положительное целое число секунд (в десятичном виде).

Параметр «duration» показывает интервал времени, в течение которого абонент сможет принять вызов после того,

 как освободится. Если данный параметр отсутствует, подразумевается, что обслуживание будет предоставлено

 без ограничения времени. Для указания времени предполагаемого обратного звонка может быть использован

 опциональный комментарий. 

Примеры:

         Retry-After: 18000;duration=3600

         Retry-After: 120 (I'm in a meeting)

 

·       Route

Заголовок Route служит для принудительной маршрутизации запроса в соответствии со списком прокси-серверов.

Процедуры, связанные с заголовком Route подробно рассмотрены в разделе 2.4.1.

Примеры:

                      Route: <sip:site5.niits.ru;lr>,

                <sip:serv3.protei.ru;lr>

 

·       RSeq

Заголовок RSeq используется в предварительных ответах для их надёжной транспортировки. Он содержит численное

 значение в интервале от 1 до (232-1). Каждый надёжно передаваемый предварительный ответ (информационный

 ответ с подтверждением) содержит RSeq с порядковым номером ответа. Значение заголовка RSeq в каждом

последующем надёжном предварительном ответе будет на единицу больше. Пример:

 

RSeq: 988789

 

  • Security-Client, Security-Server, Security-Verify

Заголовки могут быть использованы для того, чтобы реализовать механизмы обеспечения безопасности между

 UAC и другими логическими элементами SIP включая UAS, прокси-сервер и сервер регистрации, которые находятся

 на расстоянии одной пересылки от них. Эти новые возможности дополняют существующие методы выбора

 механизмов обеспечения безопасности между логическими элементами SIP

Клиент, желающий использовать данный механизм добавляет заголовок Security-Client в запрос, адресованный

 прокси-серверу, находящемуся на расстоянии одной пересылки. Заголовок будет содержать список всех

 механизмов безопасности, поддерживаемые клиентом. Сервер должен сформировать ответ с кодом 494

(Security Agreement Required)  и добавить в него заголовок Security-Server со списком механизмов безопасности,

которые он поддерживает. Список сервера не зависит от содержимого списка клиента. Когда клиент получает ответ

сервера, он выбирает механизм безопасности с наибольшим значением параметра «q» из тех, которые известны

 клиенту. Затем клиент применяет соответствующий механизм обеспечения безопасности.

      Все последующие SIP запросы, отсылаемые клиентом этому серверу, должны использовать выбранный

 механизм

 безопасности. Эти запросы должны содержать заголовок Security-Verify, который отражает список механизмов

безопасности сервера, полученный ранее в заголовке Security-Server. Сервер должен проверять соответствуют

ли механизмы безопасности, перечисленные в  Security-Verify входящих запросов, поддерживаемым механизмам

безопасности, указанным в статическом списке сервера.

На данное время определены следующие значения для заголовков: digest, tls, ipsec-ike, ipsec-man. Пример.

 

Security-Client: digest

 

Security-Server: tls;q=0.2

 

Security-Verify: ipsec-ike;q=0.1

 

 

·       Server

Поле заголовка Server содержит информацию о программном обеспечении, которое используется сервером для

 обработки запросов. Раскрытие конкретной версии программного обеспечения сервера может облегчить атаки

против программных продуктов, для которых известны уязвимые места. Разработчикам серверов рекомендуется

сделать включение этого поля конфигурируемой опцией.

Пример:

          Server: HomeServer v2

 

·       Service-Route                

Заголовок Service-Route, являющийся расширением протокола SIP, используется совместно с ответами на запрос

REGISTER для того, чтобы обеспечить механизм, с помощью которого регистрирующий сервер может

проинформировать агента пользователя о так называемом «сервисном маршруте» (service route) т.е.

маршруте, указывающем путь к серверам, предоставляющим услуги. Впоследствии UA может использовать

эту информацию при исходящем вызове для того, чтобы запросить предоставление определённых  услуг доменом,

 где находится используемый сервер регистрации. 

Заголовок Service-Route направляет запросы через конкретную последовательность прокси-серверов.

При использовании этого сервисного маршрута UA сможет воспользоваться услугами, предоставляемыми

прокси-серверами, связанными с сервером регистрации. Значения заголовка Service-Route должны

придерживаться синтаксиса, определённого для заголовка Route. В частности, значения должны содержать

параметр «lr».

В приведённом ниже примере представлена домашняя сеть, состоящая из регистрирующего сервера (R),

прокси-сервера, предоставляющего услуги HSP (home service proxy), базы данных (DBMS) и

 граничного прокси-сервера поставщика услуг, занимающегося маршрутизацией сообщений (P2).

UA1 через исходящий прокси-сервер P1 посылает сообщение REGISTER регистрирующему серверу;

тот помещает в ответ заголовок Service-Route, указывающий, что UA1 при исходящем вызове сможет

 воспользоваться предоставляемыми данным доменом услугами, если направит запрос, инициирующий соединение,

 через P2 и HSP – т.е. например, при отправке INVITE пользователю UA2 скопирует содержимое Service-Route в

заголовок Route. Пример.

 

      UA1----P1-----|    |--R-------|

                    |    |          |

                    P2---|         DBMS

                    |    |          |

      UA2-----------|    |--HSP-----|

 

Рис 2.2. Пример сети, использующей заголовок Service-Route

 

Service-Route: <sip:p2.home.protei.ru;lr>,

                  <sip:hsp.home.protei.ru;lr>

 

 

·       Subject

Заголовок Subject содержит дополнительную информацию о типе и характере сеанса связи, позволяя осуществлять

 фильтрацию вызов без анализа описания сессии.    

Примеры:

          Subject: Требуется техническое описание оборудования

          s: Техническая поддержка

 

·       Subscription-State

Заголовок Subscription-State содержится в сообщении NOTIFY и указывает статус подписки (subscription).

 Значение заголовка может быть active, pending либо terminated. Значение active указывает, что подписка была

 принята и авторизована. Значение pending означает, что подписка была получена, но не может быть принята

 или отклонена из-за недостатка информации. Значение terminated сообщает, что подписка окончена.

 Когда значение заголовка - active или pending, заголовок так же включает параметр «expires», указывающий

действительную продолжительность подписки; при этом подписчик должен скорректировать время действия

подписки в соответствии с полученным значением.

Когда значение заголовка – terminated, в заголовке также присутствует параметры «reason» и «retry-after»,

 информирующие о причине окончания подписки и времени, когда подписчик может попытаться создать новую

подписку. Пример:

 

Subscription-State: terminated;reason=noresource

 

 

·       Supported

Заголовок Supported содержит перечень всех расширений поддерживаемых UAC или UAS. Содержимое поля

заголовка представляет собой список идентификаторов option-tag, которые понимает UAC или UAS.

 Если поле заголовка пусто, значит ни одно расширение не поддерживается. Рекомендуется, чтобы данный

заголовок присутствовал во всех запросах и ответах, за исключением ACK.

Пример:

   Supported: sip-cc, sip-cc-02, timer

Приведенный заголовок указывает на поддержку возможностей управления вызовом по протоколу SIP и

таймера сеанса.

 

·       Timestamp

Заголовок Timestamp указывает, когда UAC отослал сообщение UAS. Заголовок позволяет расширениям или

 приложениям SIP получать оценку RTT (время двойного пробега). 

Пример:

         Timestamp: 54

 

·       To

Заголовок To определяет логического адресата запроса. В случае присутствия отображаемого имени, оно должно

быть с помощью пользовательского интерфейса предоставлено вызываемому пользователю. Параметр «tag»

является неотъемлемой частью механизма идентификации диалога.

Процедура сравнения заголовков To аналогична процедуре с заголовками From.

Примеры:

 

To: The Operator <sip:operator@server10.protei.ru>;tag=287447

t: sip:+79213434329@gateway.protei.ru

 

·       Unsupported

Заголовок Unsupported содержит перечень функциональных возможностей, неподдерживаемых UAS.

Добавляется в ответ с кодом 420 (Bad Extension).

Пример:

Unsupported: 100rel

 

·       User-Agent

Поле заголовка User-Agent несёт информацию о клиенте агента пользователя, инициирующего запрос.

Раскрытие конкретной версии программного обеспечения UA может облегчить атаки против программных продуктов,

для которых известны уязвимые места. Разработчикам UA рекомендуется сделать включение этого поля

настраиваемой опцией.

Пример:

          User-Agent: Softphone Beta1.5

 

·       Via

Поле заголовка Via содержит список элементов сети SIP, через которые запрос прошёл на данный момент.

Список нужен для того, чтобы избежать ситуаций, в которых запрос пойдёт по замкнутому пути, а также для тех

случаев, когда необходимо, чтобы запросы и ответы обязательно проходили по одному и тому же пути.

В результате заголовок отображается весь путь, пройденный запросом: каждый прокси-сервер добавляет поле со

 своим адресом. Параметр «branch» в поле заголовка Via выполняет функцию идентификатора транзакции и

 используется прокси-серверами для обнаружения петель.

Via содержит информацию о транспортном протоколе, посредством которого переносится сообщение, имя

клиентского хоста или сетевой адрес и, возможно, номер порта, на который является предпочтительным для

 приёма ответов. Также в поле заголовка могут присутствовать параметры: «maddr», «ttl», «received» и «branch».

Возможно использование следующих транспортных протоколов: UDP, TCP, TLS и SCTP (TLS означает TLS поверх TCP).

 Когда запрос отсылается на SIPS URI, указывается прикладной протокол – SIP, а транспортный протокол – TLS.

 

Via: SIP/2.0/UDP serv1.niits.ru:5060;branch=z9hG4bK87asdks7

Via: SIP/2.0/UDP 192.0.2.1:5060 ;received=192.0.2.207

     ;branch=z9hG4bK77asjd

 

В этом примере сообщение сформировано на терминале (multi-homed host) с двумя сетевыми адресами

192.0.2.1 и 192.0.2.207. Отправитель не был уверен, какой сетевой интерфейс необходимо использовать и указал

первый. Получив сообщение, узел serv1.niits.ru обнаружил несоответствие и добавил параметр к значению заголовка

Via, относящегося к предыдущей пересылке. Параметр содержит действительный адрес, с которого поступил пакет.

К сетевому или хост-адресу и номеру порта не предъявляется требований подчинения синтаксису SIP URI.

А именно, пробел не запрещается по обеим сторонам «:» или «/», как показано ниже:

 

    Via: SIP / 2.0 / UDP serv3.niits.ru: 4000;ttl=16

    ;maddr=224.2.0.1 ;branch=z9hG4bKa7c6a8dlze.1

  

Два заголовка Via считаются равными, если их значения: название прикладного протокола, версия протокола,

 используемый транспортный протокол, адрес и порт узла (например,

 в указанном выше примере это – SIP/2.0/UDP serv3.niits.ru:4000) - одинаковы, имеют один и тот же набор

 параметров, и значения параметров равны.

 

·       Warning

Заголовок Warning содержит дополнительную информацию как правило связанную с проблемами обработки

запроса сервером. Значения поля заголовка Warning отправляются вместе с ответами и содержат трёхзначный код,

 имя хоста и предупреждающий текст. Предупреждающий текст должен быть написан на национальном языке,

 наиболее лёгком для понимания конечного пользователя. Это решение может базироваться на любой доступной

 информации, такой как местоположение пользователя, поле заголовка Accept-Language запроса или поле заголовка

 Content-Language ответа.

Ниже представлены коды предупреждений (warn-code) с соответствующими уведомляющими текстами (warn-text) и

 расшифровка их значения. Эти предупреждения описывают сбои, вызванные неточным описанием сессии.

Все предупреждающие коды начинаются с цифры «3», это указывает на предупреждения, характерные для SIP.

 Предупреждения с 300 по 329 предназначены для проблем с ключевыми словами (keywords) в описании сессии,

с 330 по 339 относятся к основным сетевым сервисам, запрашиваемым в описании сессии, с 370 по 379 относятся

 к количественным параметрам качества обслуживания, также запрашиваемым в описании сессии,

 с 390 по 399 – разнообразные предупреждения, не подпадающие ни под одну из выше перечисленных категорий.

 

Таблица 2.2 Список предупреждений

Код предупреждения

Текст предупреждения

Расшифровка

300

Несовместимый сетевой протокол.

Один или несколько сетевых протоколов, указанных в описании сессии, не поддерживаются.

301

Несовместимые форматы сетевого адреса.

Один или несколько форматов сетевых адресов, указанных в описании сессии, не поддерживаются.

302

Несовместимый транспортный протокол.

Один или несколько транспортных протоколов, указанных в описании сессии, не поддерживаются.

303

Несовместимые единицы измерения пропускной способности.

Одна или несколько единиц измерения пропускной способности, указанных в описании сессии, были не поняты.

304

Тип медиа-информации не доступен.

Один или несколько типов медиа-информации, указанных в описании сессии, не доступны.

305

Несовместимый формат медиа-информации.

Один или несколько форматов медиа-информации, указанных в описании сессии, не доступны.

306

Атрибут не понят.

Один или несколько атрибутов медиа-информации, указанных в описании сессии, не поддерживаются.

307

Параметр описания сессии не понят.

Параметр, отличный от перечисленных выше не был понят.

330

Multicast-адресация не поддерживается.

В месте расположения пользователя multicast-адресация не поддерживается.

331

Unicast-адресация не поддерживается.

В месте расположения пользователя unicast-адресация не поддерживается (обычно, в связи с присутствием сетевого экрана – firewall).

370

Недостаточная пропускная способность.

Пропускная способность, указанная в описании сессии, или обусловленная медиа-информацией, превышает возможный предел.

399

Общее предупреждение.

В предупреждающем тексте может содержаться любая информация для оповещения пользователя или для записи в log-файл. Система, получившая такое предупреждение, не должна осуществлять никаких автоматических действий.

 

 

Дополнительные коды могут быть определены с согласия организации IANA.

Примеры:

      

       Warning: 307 serv1.niits.ru "Параметр сессии «example» не понят"

       Warning: 301 serv1.niits.ru "Несовестимый тип сетевого адреса «E.164»"

 

·       WWW-Authenticate

Заголовок WWW-Authenticate содержит запрос аутентификации, состоящий из поля, отображающего схему

аутентификации, и ряд параметров, необходимый для проведения процедуры аутентификации с данным

 прокси-сервером  для указанного Request-URI. Данный заголовок включается в состав ответа с кодом 407

 (Proxy Authentication Required) или с кодом 401 (Unauthorized). Более подробная информация о заголовке содержится

  в разделе 2.6.3.

Пример:

 

        WWW-Authenticate: Digest realm="niits.ru",

 qop="auth", nonce="f84f1cec41e6cbe5aea9c8e88d359",

         opaque="", stale=FALSE, algorithm=MD5

 

 

 

Информация о связи заголовков с запросами и ответами протокола SIPv2.0 и обработке их прокси-серверами

отображена в таблице 2.3. 

Столбец «Действия прокси-сервера» описывает операции, которые может произвести прокси-сервер над

 заголовком.

§  a

Прокси-сервер может объединять заголовки или добавлять их в случае отсутствия.

§  m

Прокси-сервер может изменить значение поля заголовка.

§  d

Прокси-сервер может удалить значение поля заголовка.

§  r

Прокси-сервер должен быть в состоянии прочитать заголовок, и соответственно заголовок не может быть

 закодирован.

 

Следующие шесть колонок устанавливают присутствие заголовков в сообщениях различного типа.

§  C

Потребность в наличии заголовка зависит от контекста сообщения.

§  M

Заголовок обязателен.

§  M*

Заголовок должен вставляться при отсылке, но клиенты/серверы должны быть готовы принять сообщение без

 данного заголовка.

§  O

Заголовок не обязателен.

§  T

Заголовок должен вставляться при отсылке, но клиенты/серверы должны быть готовы принять сообщение без

данного заголовка.

Если в качестве транспортного протокола используется потоко-ориентированный протокол, то заголовок должен

быть вставлен в сообщение при отсылке.

§  *

Требуется наличие заголовка в случае, когда тело сообщения не пустое.

§  F


 

Присутствие заголовка запрещено.

§  N/A

Присутствие заголовка не определено.


 

 

Таблица 2.3 Связь заголовков с запросами и ответами протокола SIPv2.0.

Название заголовка

Место использования заголовка

Действия прокси-сервера

ACK

BYE

CAN

INV

OPT

REG

IFO

SUB

NOT

PRK

UPD

REF

MSG

Accept

Заголовок  в запросах

-

F

O

F

O

M*

O

O

O

O

O

O

O

F

Accept

Заголовок  в ответах 2хх

-

F

F

F

O

M*

O

N/A

F

F

F

O

F

F

Accept

Заголовок  в ответе 415

-

F

C

F

C

C

C

N/A

O

O

C

C

C

M*

Accept-Encoding

Заголовок в запросах

-

F

O

F

O

O

O

O

O

O

O

O

O

F

Accept-Encoding

Заголовок  в ответах 2хх

-

F

F

F

O

M*

O

N/A

F

F

F

O

F

F

Accept-Encoding

Заголовок  в ответе 415

-

F

C

F

C

C

C

N/A

O

O

C

C

C

M*

Accept-Language

Заголовок  в запросах

-

F

O

F

O

O

O

O

O

O

O

O

O

F

Accept-Language

Заголовок в ответах 2хх

-

F

F

F

O

M*

O

N/A

F

F

F

O

F

F

Accept-Language

Заголовок  в ответе 415

-

F

C

F

C

C

C

N/A

O

O

C

C

C

M*

Alert-Info

Заголовок в запросах

a, r

F

F

F

O

F

F

N/A

F

F

F

F

F

F

Alert-Info

Заголовок в ответе 180

a, r

F

F

F

O

F

F

N/A

F

F

F

F

F

F

Allow

Заголовок  в запросах

-

F

O

F

O

O

O

N/A

O

O

O

O

O

O

Allow

Заголовок  в ответах 2хх

-

F

O

F

M*

M*

O

F

O

O

O

O

O

O

Allow

Заголовок  в ответах

-

F

O

F

O

O

O

N/A

O

O

O

O

O

O

Allow

Заголовок  в ответе 405

-

F

M

F

M

M

M

O

M

M

M

M

M

M

Allow-Events

Заголовок в запросах

-

O

O

F

O

O

O

N/A

O

O

O

N/A

N/A

N/A

Allow-Events

Заголовок в ответах 2хх

-

F

O

F

O

O

O

N/A

O

O

O

N/A

N/A

N/A

Allow-Events

Заголовок в ответе 489

-

F

F

F

F

F

F

F

M

M

F

F

F

N/A

Authentication-Info

Заголовок  в ответах 2хх

-

F

O

F

O

O

O

N/A

O

O

O

O

O

O

Authorization

Заголовок  в запросах

-

O

O

O

O

O

O

O

O

O

O

O

O

O

Call-ID

Общий заголовок/копируется из запросов в ответы

R

M

M

M

M

M

M

M

M

M

M

M

M

M

Call-Info

Общий заголовок

a, r

F

F

F

O

O

O

N/A

N/A

N/A

F

O

F

O

Contact

Заголовок  в запросах

-

O

F

F

M

O

O

O

M

M

F

M

M

F

Contact

Заголовок  в ответах 1хх

-

F

F

F

O

F

F

F

O

O

F

O

F

F

Contact

Заголовок  в ответах 2хх

-

F

F

F

M

O

O

F

M

O

F

M

M

F

Contact

Заголовок  в ответах 3хх

D

F

O

F

O

O

O

F

M

M

O

O

O

O

Contact

Заголовок  в ответе 485

-

F

O

F

O

O

O

F

O

O

O

O

O

O

Contact

Заголовок  в ответе 4xx-6xx

-

F

F

F

F

F

F

F

F

F

F

F

O

F

Content-Disposition

Заголовки содержания

-

O

O

F

O

O

O

N/A

O

O

O

O

O

O

Content-Encoding

Заголовки содержания

-

O

O

F

O

O

O

O

O

O

O

O

O

O

Content-Language

Заголовки содержания

-

O

O

F

O

O

O

N/A

O

O

O

O

O

O

Content-Length

Заголовки содержания

A, r

T

T

T

T

T

T

O

T

T

O

T

O

T

Content-Type

Заголовки содержания

-

*

*

F

*

*

*

*

*

*

*

*

*

*

Cseq

Общий заголовок/копируется из запросов в ответы

R

M

M

M

M

M

M

M

M

M

M

M

M

M

Date

Общий заголовок

A

O

O

O

O

O

O

O

O

O

O

O

O

O

Error-Info

Заголовок  в ответах 300-699

A

F

O

O

O

O

O

N/A

O

O

O

O

O

O

Event

Заголовок в запросах

-

F

F

F

F

F

F

F

M

M

F

F

N/A

N/A

Expires

Общий заголовок

-

F

F

F

O

F

O

O

O

F

F

F

O

O

Expires

Заголовок в ответе 2хх

-

F

F

F

O

F

O

O

M

F

F

F

F

O

From

Общий заголовок/ копируется из запросов в ответы

R

M

M

M

M

M

M

M

M

M

M

M

M

M

In-Reply-To

Заголовок  в запросах

-

F

F

F

O

F

F

N/A

F

F

F

F

F

O

Max-Forwards

Заголовок  в запросах

a, m, r

M

M

M

M

M

M

O

M

M

M

M

M

M

Min-Expires

Заголовок в ответе 423

-

F

F

F

F

F

M

N/A

M

F

F

F

F

N/A

MIME-Version

Общий заголовок

-

O

O

F

O

O

O

N/A

O

O

O

O

O

N/A

Organization

Общий заголовок

A, r

F

F

F

O

O

O

O

O

F

F

O

O

O

Path

Заголовок в запросах

a, r

F

F

F

F

F

O

F

F

F

F

F

F

F

Path

Заголовок в 2хх ответах

-

F

F

F

F

F

O

F

F

F

F

F

F

F

Priority

Заголовок  в запросах

a, r

F

F

F

O

F

F

O

O

F

F

F

F

O

Privacy

Общий заголовок

a, m, r, d

O

O

O

O

O

O

O

O

O

O

O

N/A

O

Proxy-Authenticate

Заголовок  в ответе 407

a, r

F

M

F

M

M

M

O

M

M

M

M

M

M

Proxy-Authenticate

Заголовок  в ответе 401

a, r

F

O

O

O

O

O

N/A

N/A

N/A

O

O

O

O

Proxy-Authorization

Заголовок  в запросах

d, r

O

O

F

O

O

O

O

O

O

O

O

O

O

Proxy-Require

Заголовок  в запросах

a, r

F

O

F

O

O

O

O

O

O

O

O

O

O

P-Access-Network-Info           

Общий заголовок

D, r

F

O

F

O

O

O

O

O

O

O

O

O

O

P-Asserted-Identity

Общий заголовок

A, d, r

F

O

F

O

O

F

F

O

O

F

F

O

N/A

P-Associated-URI      

Заголовок в ответах 2хх

-

F

F

F

F

F

O

F

F

F

F

F

F

F

P-Called-Party-ID      

Заголовок в запросах

A, m, r

F

F

F

O

O

F

F

O

F

F

F

O

O

P-Charging-Vector     

Общий заголовок

A, d,m,r

F

O

F

O

O

O

O

O

O

O

O

O

O

P-Charging-Function-Addresses         

Общий заголовок

A, d, r

F

O

F

O

O

O

O

O

O

O

O

O

O

P-DCS-Billing-Info

Общий заголовок

A, d, m, r

F

F

F

O

F

F

F

F

F

F

F

F

N/A

P-DCS-LAES

Общий заголовок

A, d, r

F

F

F

O

F

F

F

F

F

F

F

F

N/A

P-DCS-Redirect

Общий заголовок

A, d, r

F

F

F

O

F

F

F

F

F

F

F

F

N/A

P-DCS-OSPS

Заголовок в запросах

D, r

F

F

F

O

F

F

F

F

F

F

O

F

N/A

P-DCS-Trace-Party-ID

Заголовок в запросах

D, r

F

F

F

O

F

F

F

F

F

F

F

F

N/A

P-Media-Authorization

Заголовок в запросах

A, d

O

F

F

O

F

F

F

F

F

O

O

N/A

N/A

P-Media-Authorization

Заголовок в ответах 2хх

A, d

F

F

F

O

F

F

F

F

F