networking - SIP 标头理解
问题描述
我一直在阅读多个来源,我有一些我不确定是否正确的担忧?
考虑如下 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(fromAlice@client.ANC.com
决定打电话给 BOB.
当呼叫(从爱丽丝到鲍勃)(在第一段)进行时,请求 - URI 将是代理或鲍勃的。[参考](https://www.quora.com/What-is-the-difference-between-request-URI-and-to-tag-in-SIP-request-messages)
Alice 从其设备调用,
Alice@client.ANC.com
因此我们假设联系人标头出现在 SIP 请求中。但是当 BOBi.e Bob@client.ANC.com
在 200 OK 响应中进入它的联系人 HEADER 时。为什么必须将路由定向到代理(参考图片)
既然 BOB 知道 ALICE 的位置,为什么不能直接发送给 ALICE?因为该请求具有 Alice Contact 标头。
解决方案
我的回答:
- Request-URI 的值取决于使用的路由类型:松散路由或严格路由。由于 SipV2 SIP 支持松散路由,这是首选方式。这意味着第一段中的 Request-URI 将包含 Bob 的 AOR,在本例中为 Bob@TMC.com。
- SIP 响应必须经过与 SIP 请求相同的路径(方向相反)(使用 Via 标头)。这意味着必须将 200 OK 响应发送到代理。代理将向 Alice 发送单独的 200 OK 响应(这可以是相同的消息)。
当对话得到确认并且(如果)Alice 和 Bob 知道彼此的联系地址时,他们可以从那里开始,在该对话中,直接向彼此发送新的 SIP 请求。
我希望这会有所帮助。
推荐阅读
- c# - C#:递归方法期间的堆栈溢出异常
- r - 问题在离散数据上绘制连续数据,然后根据另一个离散数据使用线
- python - 将列表中的所有数据放入单独的 tkinter 标签
- python - 如何在满足if语句的循环内为列表中的每个项目保留单独的计数
- java - 递归调用导致 Java 堆栈溢出
- python - 在 pyqt5 中使用鼠标滚轮在 QGraphicsScene 上缩放图像
- java - 检查 Android Studio 中的电子邮件和用户名可用性(Firebase)
- android - 如果 ValueEventListener 没有从活动 onDestroy firebase 实时数据库中删除会发生什么
- javascript - 使用 javascript 抓取 Google 翻译 Chrome 扩展程序显示的 popup.html
- javascript - 如何在捕获时终止函数执行?