2012-02-29 29 views

回答

7

联系人字段包含被叫方可以到达呼叫方以供未来请求使用的地址。例如,这是必要的,以便被叫方可以向主叫方发送BYE或重新邀请。

+0

谢谢。我在pjprojet中进行了测试。如果联系人字段如上所述,则被叫方发送的BYE无法到达主叫方。 – 2012-02-29 10:02:54

+1

这可能是因为联系人是私有LAN地址。如果您的被叫方在另一个网络中,则无法接通。这是SIP代理被使用的一件事情:他们坐在网络边界处,并且冲突联系人头部,以便对方能够到达所提及的地址。 – DarkDust 2012-02-29 10:07:49

+0

谢谢。在你的帮助下,我修复了这个问题。 – 2012-03-01 02:08:12

8

Contact头说:其中你是(或者说,你的用户代理),而来自于头说:你是谁

您可能有多个SIP设备都注册到相同的记录地址(您放在From标头中的URI)。

此外,注册请求使用Contact头来维护SIP的位置服务:它们让用户代理更新注册服务商的位置信息。 (如此一来,如果Alice呼叫Bob,则Contact头部需要处于2xx响应中,以便Alice可以将2xx的ACK路由到Bob。这指向DarkDust关于一些SIP代理变形的评论Contact header:如果它没有,你发现自己处于一个只有一半建立电话的不舒服的位置:Alice认为该电话的建立是因为她发送了她的ACK,但是Bob从未接收到它。替代联系人管理代理使用B2BUA作为网关;它不需要修改Contact头,因为头将指向B2BUA本身。)

针对Phoenix Luo的评论,由于在Contact头中使用LAN IP的缺点, RFC 5627描述了一个解决方案 - 使用glo在Contact头/ s中的可路由的用户代理URI (GRUUs)。

+0

在我参与的项目中,位置服务的代理将Record-route标头添加到Invite请求中。所以这个通话可以成功建立。但是,UAC无法像DarkDust所说的那样收到UAS的Bye请求。 – 2012-03-05 01:17:42

+0

是:将BYE发送到呼叫中的_user agent_,并且该用户代理由Contact标头标识,而不是From标头标识。这就是为什么我们不得不发明诸如RFC 5627(在会话发起协议(SIP)中获取和使用全局可路由用户代理URI(GRUUs))的原因) – 2012-03-05 11:14:17

+0

谢谢。我会仔细阅读文件。 – 2012-03-06 03:31:11

相关问题