啜headers 了解

Sip headers understanding

我一直在阅读多个来源,但我有一些疑虑我不确定是否正确?

考虑如下所示的 Alice (Alice@TMC.com) <-> Bob(Bob@TMC.com)

的简单呼叫流程

假设 Alice 已经注册了 3 个设备,bob 已经注册了 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. 当调用(从爱丽丝到鲍勃)(在第一段)时,请求 - URI 将是代理或鲍勃的请求。 [参考] (https://www.quora.com/What-is-the-difference-between-request-URI-and-to-tag-in-SIP-request-messages)

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

既然BOB知道ALICE的位置,为什么不能直接发给ALICE呢?因为请求有 Alice 联系人 header.

我的答案:

  1. Request-URI 的值取决于所使用的路由类型:松散路由或严格路由。由于 SipV2 SIP 支持松散路由,因此这是首选方式。这意味着第一条腿中的 Request-URI 将包含 Bob 的 AOR,在本例中为 Bob@TMC.com.
  2. SIP 响应必须与 SIP 请求(使用 Via headers)走相同的路径(方向相反)。这意味着必须将 200 OK 响应发送到代理。 Proxy 将向 Alice 发送一个单独的 200 OK 响应(这可以是相同的消息)。

当对话被确认并且(如果)Alice 和 Bob 知道彼此的联系地址时,他们可以从那里开始,在那个对话中,直接向对方发送新的 SIP 请求。

希望对您有所帮助。

代理可以是任何类型i.w。 stateless/statefull/B2BUA。 Proxy 可以维护 Invite 交易和清除交易 200OK 必须遍历该 Proxy。

当代理也想接收响应时,它会在 VIA header 中添加自己的 ip。来自 Bob 的 200OK 响应将使用 VIA header 遍历与 INVITE 响应相同的路径。

所以,在你的情况下,Bob 收到了 Via header 的 INVITE,比如(via: proxy; alice),所以 200Ok 将被发送到 Proxy。然后代理将删除它自己的 via 并将其转发给下一个 via,即在这种情况下是 Alice。

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

Why can't the 200 OK response be sent directly to the ALICE since the BOB knows about ALICE's location? Since the request had the Alice Contact header.

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

when the call (from Alice to Bob) is made(in the first leg) would the Request - URI would be that of proxy or bob?

对于以“正确”方式定义路由的松散路由,请求 uri 必须是目标地址,例如用户地址(即 addres-of-record)或用户设备(即 contact-address ) 或 tel:e164 兼容地址或用户 GRUU (不确定是否仅此而已)。

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