BroadNet
SIP / VoIPСообщения

Заголовки SIP: Via, From, To, Call-ID, CSeq, Contact

Обновлено 3 мин чтенияна основе стандартов
Прямой ответ

Шесть заголовков обязательны в каждом запросе SIP: Via (записывает путь и несёт branch транзакции), From и To (логические стороны, с тегами), Call-ID (уникальный идентификатор вызова), CSeq (порядковый номер плюс метод) и Max-Forwards (ограничение переходов). Вместе Call-ID, тег From и тег To идентифицируют диалог.

§01

Шесть обязательных заголовков

RFC 3261 требует шесть полей заголовков в каждом запросе. Via прослеживает маршрут запроса и сообщает ответам, как вернуться. From и To идентифицируют логического инициатора и цель запроса. Call-ID — это глобально уникальный токен, общий для всех сообщений одного вызова. CSeq упорядочивает запросы внутри диалога и именует метод. Max-Forwards — это убывающий счётчик переходов, предотвращающий петли. Опустите любой из них — и сообщение недопустимо.

Обязательные заголовки SIP (RFC 3261)
ЗаголовокНазначение
ViaЗаписывает каждый хоп; ответы проходят по нему обратно. Содержит branch транзакции
FromЛогический инициатор; содержит тег
ToЛогический получатель; получает тег в ответе
Call-IDГлобально уникальный идентификатор всего вызова
CSeqПорядковый номер + метод; упорядочивает запросы внутри диалога
Max-ForwardsОграничение на количество переходов (обычно 70); предотвращает образование маршрутных петель
§02

Via и параметр branch

Каждый прокси, пересылающий запрос, вставляет собственный заголовок Via сверху, строя стек, по которому ответы спускаются обратно — ответ маршрутизируется исключительно следованием списку Via, поэтому он повторяет путь запроса. Параметр branch в Via идентифицирует транзакцию; начиная с RFC 3261, он должен начинаться с фиксированного magic cookie z9hG4bK, отмечающего branch как глобально уникальный и совместимый с RFC 3261. Сопоставление ответов и повторных передач с нужной транзакцией зависит от этого значения.

§03

Теги, диалоги и транзакции

Идентичность диалога собирается из трёх частей: Call-ID плюс тег в From и тег в To. Вызывающий задаёт тег From, когда отправляет INVITE; вызываемый добавляет тег To в своём ответе, и в этот момент диалог полностью идентифицирован для обеих сторон. Каждый последующий внутридиалоговый запрос (re-INVITE, BYE) несёт все три, поэтому он связан с нужным вызовом. Транзакции, напротив, сопоставляются по branch в Via и методу — более тонкая гранулярность, чем диалог.

Что идентифицирует диалог против транзакции
Область действияИдентифицируется по
Диалог (вызов)Call-ID + From-tag + To-tag
Транзакция (запросы + ответы)branch из Via + метод запроса
Упорядочивание запросов в диалогеНомер CSeq (увеличивается с каждым запросом)
§04

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

Помимо обязательных шести, несколько заголовков формируют маршрутизацию и возможности. Contact даёт прямой URI, по которому отправитель достижим для будущих запросов — критично в REGISTER и в сообщениях, устанавливающих диалог. Record-Route позволяет прокси оставаться в тракте сигнализации на весь диалог, а Route направляет последующие запросы через эти прокси. Expires ограничивает регистрацию или подписку. Allow, Supported и Require объявляют и согласуют возможности и расширения. Content-Type и Content-Length описывают тело (обычно SDP).

Чтение ключевых заголовков INVITEtext
Via: SIP/2.0/UDP pc.example.com;branch=z9hG4bK74bf9   ← transaction id
From: Alice <sip:alice@example.com>;tag=9fxced76sl    ← caller + From-tag
To:   Bob <sip:bob@biloxi.com>                        ← callee (To-tag added in reply)
Call-ID: 3848276298220188511@pc.example.com           ← whole-call id
CSeq: 1 INVITE                                        ← sequence + method
Contact: <sip:alice@pc.example.com>                   ← where to reach the caller
Max-Forwards: 70                                      ← hop limit
Часто задаваемые вопросы

Часто задаваемые вопросы

Что делает заголовок Via в SIP?

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

Что такое параметр branch z9hG4bK?

z9hG4bK — это обязательный magic cookie, с которого параметр branch SIP должен начинаться по RFC 3261. Он сигнализирует, что значение branch глобально уникально и совместимо с RFC 3261, и это ключ для сопоставления ответа с его транзакцией.

Как идентифицируется диалог SIP?

Сочетанием Call-ID, тега заголовка From и тега заголовка To. Вызывающий поставляет Call-ID и тег From в INVITE; вызываемый добавляет тег To в своём ответе. Все внутридиалоговые запросы несут те же три значения.

Для чего нужен заголовок CSeq?

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

В чём разница между Contact и To?

To — это логическая цель запроса, и она обычно не меняется. Contact — это конкретный URI, где отправитель фактически достижим для последующих запросов. Прокси маршрутизируют по To/Request-URI, но последующие внутридиалоговые запросы отправляются на Contact.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

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