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

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

- Канонический URL: https://www.broadnet.me/ru/reference/sip-headers
- Язык: ru
- Последнее обновление: 2026-07-18
- Издатель: BroadNet (https://www.broadnet.me)

Основные заголовки SIP и что они делают: Via (с параметром branch) для маршрутизации ответов, From/To с тегами, Call-ID, CSeq, Contact, Max-Forwards и как из них идентифицируются диалоги и транзакции.

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

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

*Обязательные заголовки SIP (RFC 3261)*

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

## Via и параметр branch

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

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

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

*Что идентифицирует диалог против транзакции*

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

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

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

*Чтение ключевых заголовков INVITE*

```text
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.

## Источники

- [IETF RFC 3261 — Header fields (§20)](https://datatracker.ietf.org/doc/html/rfc3261#section-20)
- [IANA — SIP header field registry](https://www.iana.org/assignments/sip-parameters/sip-parameters.xhtml)

## См. также

- [Методы и запросы SIP](https://www.broadnet.me/ru/reference/sip-methods-and-requests)
- [Коды ответов SIP](https://www.broadnet.me/ru/reference/sip-response-codes)
- [Схема вызова SIP](https://www.broadnet.me/ru/reference/sip-call-flow)
- [SDP: Session Description Protocol](https://www.broadnet.me/ru/reference/sdp-session-description-protocol)
- [Voice API и SIP-транкинг](https://www.broadnet.me/ru/answers/voice-api-sip-trunking)
