Для чего используется тег from в SIP-запросе?

У меня есть тривиальное сомнение относительно SIP. Я пробовал гуглить и ссылаться на многие книги, но все же не могу найти вескую причину для добавления тега from в SIP-запрос.

Пример SIP-запроса (снимок из rfc-3261)

INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob <sip:[email protected]>
From: Alice <sip:[email protected]>;tag=1928301774
Call-ID: [email protected]
CSeq: 314159 INVITE
Contact: <sip:[email protected]>
Content-Type: application//sdp
Content-Length: 142

Согласно rfc-3261:

Диалог можно идентифицировать с помощью тега from, to-tag и call-id.

Я знаю точную причину добавления to-tag и call-id. Чего я не знаю, так это

  1. Зачем нам нужен from-tag ?
  2. Каково было бы влияние, если бы тег from отсутствовал (при условии, что rfc-3261 не требует этого)?

person Ani    schedule 08.10.2014    source источник


Ответы (6)


[EDIT] О значении атрибута "tag" внутри поля заголовка From, вот ваш ответ: http://andrewjprokop.wordpress.com/2013/09/23/lets-play-sip-tag/

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

Подводя итог тому, что написал Эндрю Прокоп:

Наиболее очевидная проблема с использованием Call-ID для уникальной идентификации сообщения возникает при разветвлении вызовов. При разветвлении вызовов одно сообщение SIP Invite превращается в несколько сообщений Invite для разных пунктов назначения. Например, вы можете позвонить мне, Эндрю Прокоп, но разветвление вызовов может привести к тому, что сообщения с приглашением будут отправлены на все мои зарегистрированные конечные точки — мой смартфон, мой настольный телефон и мой компьютерный телефон. Этот единственный Call-ID был в порядке, когда это было одно приглашение, но это не так хорошо, когда их становится три. Здесь на помощь приходят теги.

Теги действительно довольно просты, но требуют небольшого пояснения. Цель тега — работать с Call-ID, чтобы сделать весь диалог уникальным, независимо от того, сколько раз сеанс может быть разветвлен. На самом деле, я должен был сказать теги, так как их два. Существует локальный тег (от тега), который назначается отправителем сообщения или UAC. Существует также удаленный тег (To tag), который назначается конечным получателем сообщения или UAS (User Agent Server). UAC помещает свой тег в заголовок From, а UAS помещает свой тег в заголовок To. Таким образом, когда сообщение покидает UAC, оно имеет один тег в заголовке From и не имеет тега в заголовке To. Когда UAS получает это сообщение и отвечает ответом SIP (например, 180 Ringing), он затем добавляет тег в заголовок To. Если несколько клиентов получили исходное сообщение, то все они добавили бы свои собственные определенные значения тегов. Другими словами, все эти SIP-сообщения будут иметь один и тот же тег «От», но в зависимости от того, кто отвечает, будут разные теги «Кому».

person Sébastien    schedule 09.10.2014
comment
Понял. Но вопрос о теге из заголовка. Зачем нам нужен from-tag ? - person Ani; 09.10.2014
comment
Да. Я исправил свой ответ, чтобы иметь дело с конкретным тегом в поле «Из заголовка SIP». - person Sébastien; 09.10.2014
comment
Даже это объяснение не дало ответа на вопрос. На том же сайте (andrewjprokop.wordpress.com/2013/ 23.09/lets-play-sip-tag), я задал следующий вопрос (15 сентября 2014 г. - 13:42), на который даже Андрей Прокоп не нашел готового ответа. Отличное объяснение. Этот пост объяснил причину To-tag. Как насчет From-тега? Зачем нам это нужно? Из этого объяснения я понимаю, что to-tag и call-id могут однозначно идентифицировать диалог. Если да, то зачем нам тег from? - person Ani; 09.10.2014
comment
From используется для идентификации пользователя, отправившего запрос. From-tag используется для уникальной идентификации отправителя запроса, поскольку у одного пользователя может быть несколько конечных точек. To-tag, та же идея. Пожалуйста, уточните, что здесь непонятно. Если этот тег лишний, уточните контекст и поток. - person Sébastien; 10.10.2014
comment
Да, ты прав. From-tag используется для уникальной идентификации отправителя запроса, поскольку у одного пользователя может быть несколько конечных точек. Было бы очень полезно, если бы вы могли упомянуть сценарий, в котором тег from используется для идентификации отправителя, без которого свойство уникальности сообщения прекращается. Я не могу придумать реалистичный пример для этого. - person Ani; 14.10.2014

@Ani, вот один реалистичный пример, когда вы можете сказать, почему действительно требуется «From-tag». В случае повторного INVITE, когда это было сделано с вызываемого/завершающего номера из исходного INVITE, происходит обмен заголовками To и From, и, таким образом, тегом From и тегом To-Tag.

Пример ссылки: Пример -пригласить поток

Предположим, A отправляет начальное INVITE на B, From заголовок имеет тег A (локальный тег), To Header имеет тег B (удаленный тег). позже, после того, как вызов принят, B отправляет повторное INVITE в A, в этом повторном INVITE From Header имеет sip uri B с тегом B, а заголовок TO имеет sip uri A с тегом A. Теперь для этого случая тег B становится локальным тегом, а тег A становится удаленным тегом.

Теперь, если вы думаете, что если From-тег не был в самом первоначальном ПРИГЛАШЕНИИ, то в повторном ПРИГЛАШЕНИИ не будет To-Tag, и будет трудно идентифицировать получателя.

person Soniya    schedule 29.07.2019

From Tag — это идентификатор UAC для Диалога, отличный от Call-Id. Вместе они придают диалогу уникальный характер.

Другие варианты использования

  1. Заколка / Тромбонинг — хотя это разные услуги, обе они полагаются на тег FROM, чтобы различать направление вызова на основе тегов Dialog.

  2. Отправка нескольких INVITE для взаимодействия с PSTN, где IAM и последующие цифры в SAM переносятся в INVITE и в том же заголовке FROM. Помогает нижестоящим шлюзам соответствовать конкретным диалогам. RFC 3578 содержит более подробную информацию. Таким образом, в этом случае тег FROM для того же вызова помогает GW определить, как обрабатывать сообщение INVITE, содержащее дополнительные цифры.

person Rajesh    schedule 16.10.2014

Поле «От» предназначено для информации об инициаторе запроса.

Попробуйте этот PDF-файл http://www.sipknowledge.com/rfc3261_explained_light.zip

Раздел 8.1.1.3 «От кого»

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

person J C    schedule 08.10.2014

Прежде всего, я также искал ответ на то же самое. Да, CALL-ID служит определенной цели. Но тег From & To используется для обработки SIP-авансов. Как много новых функций, включенных в вызов SIP.

Но нужно 3 :(можно много)

  1. Если адрес From может появляться в запросах, сгенерированных другими клиентами агента пользователя для того же вызова, вызывающий абонент ДОЛЖЕН вставить параметр тега в поле From.

https://www.ietf.org/rfc/rfc2543.txt

  1. Последнее: заголовок JOIN использует теги FROM и TO для проверки. Предположим, разговаривают 2 человека, и еще один хочет ПРИСОЕДИНИТЬСЯ к разговору.

RFC3911 — заголовок «Присоединение» протокола инициации сеанса (SIP) https://www.rfc-editor.org/rfc/rfc3911.txt

  1. используется для проверки последующего запроса: -

    11.5 Получение последующих запросов

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

    1.   If the Call-ID is new, the request is for a new call,
         regardless of the values of the To and From header fields.
    
    2.   If the Call-ID exists, the request is for an existing call.
         If the To, From, Call-ID, and CSeq values exactly match
         (including tags) those of any requests received previously,
         the request is a retransmission.
    
    3.   If there was no match to the previous step, the To and From
         fields are compared against existing call leg local and
         remote addresses. If there is a match, and the CSeq in the
         request is higher than the last CSeq received on that leg,
         the request is a new transaction for an existing call leg.
    
person Sridhar Kumar N    schedule 31.08.2019

Как и получатель. У отправителя вызова может быть несколько устройств. IP-телефон, агент обработки вызовов или IP-коммуникатор на ноутбуке. Отличие от тегов от вызова может помочь определить устройство, с которого поступает вызов. Кроме того, как упоминалось выше, это может помочь перезвонить исходному устройству, если получатель перезвонит отправителю.

person Ashish Vashisht    schedule 25.12.2020