SIP (Session Initiation Protocol)

  • Михаил
  • 12 мин. на прочтение
  • 59
  • 03 Feb 2018
  • 03 Feb 2018

С английского «протокол установления сеанса». Пользователи сети Интернет уже не раз использовал приложения для голосовой связи через мобильный интернет на основе протокола SIP. Этот протокол имеет широкую область применения: от видеоконференций вплоть до онлайн-игр. С помощью СИП-телефонии устройства настраивают корректную связь для обмена данными по следующей цепочке: клиент → сервер → клиент. Таким образом, устройства лучше взаимодействуют друг с другом и организовывают качественную коммуникацию по принципу чередования вопросов и ответов. 
 

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

В протоколе SIP структура сообщений следующая

 

Стартовая строка в запросах содержит тип запроса, указание адресата и номер версии протокола, а в ответах — номер версии протокола, идентификатор и расшифровку статуса обработки запроса. Заголовки сообщения содержат данные, важные для передачи пакетов. Вот наиболее часто используемые.

 To - используется для идентификации адресата в формате протокола SIP в одном из форматов:

имя@IР-адрес
имя@домен
имя@хост
№телефона@шлюз

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

From - используется для идентификации отправителя запроса. Структура аналогична полю То.

Call-ID - уникальный идентификатор сеанса связи или всех регистраций отдельного клиента. Его значение задается стороной, инициирующей вызов. Содержит буквенно-числовое значение, символ-разделитель (@) и имя рабочей станции, которая присвоила это значение (например, 123abc@site.domen.ru). Следует указать, что если с одной мультимедийной конференцией связано несколько соединений, то каждое из них будет иметь собственный Call-ID.

CSeq - уникальный идентификатор запроса, связанного с одним соединением. Используется для корреляции запросов и ответов. Содержит числовое значение (от 1 до 232) и текстовое указание типа запроса (например, 2 INVITE).

Via - используется для настройки маршрутизации пакетов. В одних случаях, для избегания зацикливания пути следования запроса, в других случаях — для обязательного прохождения запросов и ответов по одному и тому же пути (например, при использовании брандмауэров). На пути следования запрос может проходить через ряд прокси-серверов, и каждый из них выполняет прием, обработку и перенаправление запроса к следующему прокси-серверу. При этом сервер дополняет содержимое данного заголовка указанием своего адреса. Это происходит до тех пор, пока запрос не достигает адресата. Таким образом, заголовок Via указывается весь путь, пройденный запросом. Содержимое полей заголовка Via копируется из запросов в соответствующие им ответы. И на пути следования ответов каждый сервер удаляет поле Via со своим именем.

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

Content-Type - указывает формат, в котором описан сеанс связи (например, SDP). Само же описание сеанса содержится в теле сообщения.

Content-Length - указывает длину тела сообщения.

 

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

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

  • непосредственно между пользователями сети;
  • с участием сервера переадресации;
  • с участием прокси-сервера.

Принципиальное различие в способе поиска и приглашения к вызову пользователя. В первом случае, вызывающий пользователь должен знать текущий адрес вызываемой стороны. Во втором же, он устанавливает соединение самостоятельно, а сервер переадресации только преобразует постоянный адрес вызываемого пользователя в текущий. И, наконец, в последнем случае, функции поиска и приглашения к вызову берет на себя прокси-сервер, в то время как вызывающей стороне достаточно знать только лишь постоянный SIP-адрес вызываемого абонента.

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

И все же, автор предлагает ознакомиться более детально именно с простейшими сценариями, поскольку они являются базовыми для стандартных вызовов в SIP-сети.

 

Соединение SIP с участием прокси-сервера

Данный сценарий предусматривает следующую последовательность операций

Администратор сети сообщает адрес этого сервера пользователям. Вызывающий пользователь передает запрос INVITE (5) на адрес прокси-сервера и порт 5060, используемый по умолчанию. В запросе пользователь указывает известный ему адрес вызываемого пользователя. Прокси-сервер запрашивает текущий адрес вызываемого пользователя у сервера определения местоположения (2), который и сообщает ему этот адрес (3). Далее прокси-сервер передает запрос INVITE непосредственно вызываемому оборудованию (4). Опять в запросе содержатся данные о функциональных возможностях вызывающего терминала, но при этом в запрос добавляется поле Via с адресом прокси-сервера для того, чтобы ответы на обратном пути шли через него. После приема и обработки запроса вызываемое оборудование сообщает своему пользователю о входящем вызове, а встречной стороне передает ответ 180 Ringing (5), копируя в него из запроса поля То, From, Call-ID, CSeq и Via. После приема вызова пользователем встречной стороне передается сообщение 200 OK (6), содержащее данные о функциональных возможностях вызываемого терминала в формате протокола SDP. Терминал вызывающего пользователя подтверждает прием ответа запросом АСК (7). На этом фаза установления соединения закончена и начинается разговорная фаза.

По завершении разговорной фазы одной из сторон передается запрос BYE (8), который подтверждается ответом 200 OK (9).

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

 

Полный мануал по SIP протоколу.