SIP请求中from-tag的用途是什么?

时间:2014-10-08 18:46:47

标签: sip sip-server opensips

我对SIP有一个微不足道的疑问。 我尝试使用谷歌搜索和推荐很多书籍,但我仍然无法找到在SIP请求中添加from-tag的充分理由。

示例SIP请求(来自rfc-3261的快照)

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

根据rfc-3261:

可以使用from-tag,to-tag和call-id来识别对话框。

我知道添加to-tag和call-id的确切原因。我不知道的是,

  1. 为什么我们需要from-tag?
  2. 如果没有from-tag会有什么影响(假设 rfc-3261没有强制要求)?

6 个答案:

答案 0 :(得分:4)

<强> [编辑] 关于标题字段中属性“tag”的含义From,这是您的答案:http://andrewjprokop.wordpress.com/2013/09/23/lets-play-sip-tag/

删除标记只会邀请服务器将邮件视为重复邮件。

恢复Andrew Prokop所写的内容:

  

使用Call-ID唯一标识a的最明显问题   消息产生于呼叫分叉。在呼叫分叉中,单个SIP   Invite消息被转换为多个Invite消息到不同的消息   目的地。例如,你可以打电话给我,Andrew Prokop,但是打电话   分叉可能会导致邀请消息发送到我所有已注册的消息   端点 - 我的智能手机,我的桌面电话和我的PC电话。那   当它是一个邀请时,单个Call-ID很好,但它并不是那么好   当它变成三个。这是标签的来源。

     

标签非常简单,但需要一些解释。该   标记的目标是使用Call-ID进行整个对话   无论会话分叉多少次都是唯一的。其实,   我应该说标签,因为有两个。有本地标签   (来自标签)由消息发送者或UAC分配。   还有最终分配的远程标签(To标签)   消息的收件人或UAS(用户代理服务器)。 UAC提出   From标头中的标签和UAS将其标签放在To标头中。   因此,当一条消息离开UAC时,它在From标题中有一个标记   To标头中没有标签。当UAS收到该消息时   然后用SIP响应(例如180响铃)作出响应,然后添加   To标头的标签。如果多个客户收到原件   然后他们都会添加自己的特定标记值。在   换句话说,所有这些SIP消息将具有相同的From标签,但是   根据响应者的不同,会有不同的To标签。

答案 1 :(得分:2)

@Ani,这是一个现实的例子,您可以说为什么真正需要“ From-tag”。如果是re-INVITE,则当从初始INVITE的被叫方/终止号码完成此操作时,将交换To和From头,因此From标记和To-Tag。

示例链接:Example re-invite flow

假设A发送初始INVITE到B,从标头带有A的标签(本地标签),到标头带有B的标签(远程标签)。接受呼叫之后,B向A发送重新邀请,在此重新邀请中,From Header具有B的带有B标记的Sip uri,而TO Header具有A的带有A标记的Sip uri。现在,在这种情况下,B的标签变为本地标签,而A的标签变为远程标签。

现在,如果您认为如果初始INVITE本身中没有From-tag,则re-INVITE中将没有To-Tag,并且很难识别收件人。

答案 2 :(得分:1)

From Tag是UAC的Dialog标识符,而不是Call-Id。它们结合起来为对话提供了独特的性质。

其他用例

  1. Hair-pinning / Tromboning - 虽然服务不同,但它们都依赖FROM标签来区分基于Dialog标签的呼叫方向。

  2. 发送多个INVITE用于与PSTN互通,其中IAM和SAM中的后续数字在INVITE和相同的FROM报头中携带。帮助下游网关匹配特定对话框。 RFC 3578有更多细节。因此,在这种情况下,同一呼叫的FROM标签有助于GW确定如何处理包含更多数字的INVITE。

答案 3 :(得分:0)

&#34;从&#34;字段用于请求发起人信息。

试试此PDF http://www.sipknowledge.com/rfc3261_explained_light.zip

第8.1.1.3节&#34;来自&#34;

此外,第8.3.1节说,From字段是强制性的,作为任何SIP请求中的基本块之一。

答案 4 :(得分:0)

首先,我也在寻找相同的答案。 是的,CALL-ID有作用。 但是From&To标记用于处理SIP进度。 SIP呼叫中包括了许多新功能。

但是3个必需的:(可能有很多)

  1. 如果发件人地址可以出现在其他用户代理客户端针对同一呼叫生成的请求中,则呼叫者必须在“发件人”字段中插入标签参数。

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

  1. 最新:JOIN标头使用FROM&TO标签进行验证。假设有两个人在通话,而另一个人想加入通话。

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.
    

答案 5 :(得分:0)

就像收件人一样。呼叫发起者可以有多个设备。笔记本电脑上的 IP 电话、呼叫处理代理或 IP 通信器。与呼叫不同的标签可以帮助识别呼叫来自的设备。同样如上所述,它可以帮助回拨原始设备,以防接收方回拨发起方。