Sip标头理解

时间:2019-05-16 02:21:47

标签: networking network-programming sip

我已经阅读了多个来源,但我有一些不确定的问题,我不确定是正确的吗?

考虑以下Alice(Alice@TMC.com)的简单呼叫流程<-> Bob(Bob@TMC.com)

enter image description here

鉴于爱丽丝已经注册了3个设备,鲍勃已经注册了2个设备

爱丽丝设备

 1. Alice@client.ANC.com
 2. Alice@192.168.1.1:43085
 3. Alice@192.168.0.100:5060

鲍勃设备

 1. Bob@client.ANC.com
 2. Bob@192.168.0.100:5060

现在进入通话流程。 Alice(来自Alice@client.ANC.com的人决定呼叫BOB。

  1. (在第一回合中)进行从Alice到Bob的调用时,请求-URI将是代理或bob。 [Ref](https://www.quora.com/What-is-the-difference-between-request-URI-and-to-tag-in-SIP-request-messages

  2. Alice从其设备Alice@client.ANC.com进行了呼叫,因此我们假设联系人头出现在SIP请求中。但是当BOB在200 OK响应中输入其联系人HEADER i.e Bob@client.ANC.com时。为什么必须将路由定向到代理(参考图片)

由于BOB知道ALICE的位置,为什么不能将其直接发送给ALICE?因为该请求具有Alice Contact标头。

3 个答案:

答案 0 :(得分:0)

我的答案:

  1. Request-URI的值取决于所使用的路由类型:松散路由或严格路由。由于SipV2 SIP支持松散路由,因此这是首选方法。这意味着第一回合中的Request-URI将包含Bob的AOR,例如Bob@anc.com。
  2. SIP响应必须通过与SIP请求相同的路径(相反的方向)(使用Via标头)。这意味着必须将200 OK响应发送到代理。代理将分别向Alice发送200 OK响应(这可能是同一条消息)。

对话被确认后,并且(如果)爱丽丝和鲍勃从对方那里可以知道对方的联系地址,则在该对话框中,直接向彼此发送新的SIP请求。

我希望有帮助。

答案 1 :(得分:0)

代理可以是任何类型的i.w.无状态/全状态/ B2BUA。代理可以维护邀请事务,并清除事务200OK必须遍历该代​​理。

当代理也想接收响应时,它将在VIA标头中添加自己的IP。 Bob的200OK响应将使用VIA标头遍历与INVITE相同的路径进行响应。

因此,在您的情况下,Bob收到了带有Via标头的INVITE消息,例如(via:proxy; alice),因此200Ok将发送到Proxy。然后代理将删除它自己的通行证,然后将其通过爱丽丝转发到下一个(在这种情况下)。

正如Bucq所述,从ACK开始,进一步的请求可以直接遍历ex。

答案 2 :(得分:0)

  

由于BOB知道ALICE的位置,为什么不能将30 < currentTemp < targetTemp - 5响应直接发送给ALICE?由于该请求具有Alice Contact标头。

实际上,您所说的 BOB 是用户Bob在200 OK中为域SIP registrar注册的设备。 如果Bob设备直接将答案发送给Alice设备(即anc.com),则入站代理将无法contact-address挂起CANCEL到其他Bob设备,因为{{ 1}}响应是入站代理的触发器。

  

(在第一回合中)(从爱丽丝到鲍勃)进行呼叫时,请求-URI是代理服务器还是鲍勃的请求?

使用定义“正确”方式路由的松散路由,request-uri必须是目标地址,例如用户地址(即SIP INVITE)或用户设备(即200 ok)或addres-of-record e164兼容地址或用户contact-address(不确定是否全部)。

在您的情况下,该地址必须是bob用户地址(bob@anc.com),并且不是代理人