网络元素
有一些实体帮助SIP创建其网络。在SIP中,每个网络元件由类似地址的 SIP URI (统一资源标识符)标识。以下是网络元素:
- 用户代理
- 代理服务器
- 注册服务器
- 重定向服务器
- 位置服务器
用户代理
它是端点和SIP网络的最重要的网络元件之一。端点可以启动,修改或终止会话。 用户代理是SIP网络中最智能的设备或网络元件。它可以是软电话,移动电话或笔记本电脑。
用户代理在逻辑上分为两个部分:
-
用户代理客户端(UAC) - 发送请求并接收响应的实体。
-
用户代理服务器(UAS) - 接收请求并发送响应的实体。
SIP基于客户端 - 服务器架构,其中呼叫者的电话充当发起呼叫的客户端,并且被叫者的电话充当响应呼叫的服务器。
代理服务器
它是从用户代理接收请求并将其转发给另一个用户的网络元素。
- 基本上代理服务器的作用就像一个路由器。
- 它具有一些智能来理解SIP请求并且在URI的帮助下向前发送它。
- 代理服务器位于两个用户代理之间。
- 源和目标之间最多可以有70个代理服务器。
有两种类型的代理服务器:
- 无状态代理服务器 - 它仅转发接收的消息。这种类型的服务器不存储呼叫或事务的任何信息。
- 状态代理服务器 - 此类型的代理服务器会跟踪收到的每个请求和响应,如果需要,将来可以使用它。如果没有来自另一方的响应,它可以重传请求。
注册服务器
注册服务器接受来自用户代理的注册请求。它帮助用户在网络中验证自己。它将URI和用户的位置存储在数据库中,以帮助同一域中的其他SIP服务器。
请看下面的示例,显示SIP注册的过程。
这里呼叫者想要注册到TMC域。因此它向TMC的注册服务器发送注册请求,并且服务器在授权客户端时返回200 OK响应。
重定向服务器
重定向服务器接收请求并在由注册器创建的位置数据库中查找请求的预期接收者。
重定向服务器使用数据库获取位置信息,并以3xx(重定向响应)向用户作出响应。我们将在本教程的后面讨论响应代码。
位置服务器
位置服务器向重定向和代理服务器提供关于呼叫者可能的位置的信息。只有代理服务器或重定向服务器可以联系位置服务器。下图描述了每个网络元素在建立会话时所扮演的角色。
SIP - 系统架构
SIP被构造为分层协议,这意味着其行为是根据一组相当独立的处理阶段来描述的,每个阶段之间只有松散的耦合。
-
SIP的最低层是其语法和编码。其编码使用扩充的背景 - 诺尔表单语法(BNF)指定。
-
第二层是传输层。它定义了客户端如何发送请求和接收响应,以及服务器如何通过网络接收请求和发送响应。所有SIP元素都包含传输层。
-
接下来是交易层。事务是由客户机事务(使用传输层)发送到服务器事务的请求,以及从服务器事务发送回客户机的对该请求的所有响应。用户代理客户端(UAC)完成的任何任务都使用一系列事务进行。无状态代理不包含事务层。
-
交易层上方的图层称为交易使用者。除了无状态代理,每个SIP实体都是事务用户。
SIP 代理和路由
我们知道,代理服务器可以是无状态的或有状态的。在本章中,我们将讨论更多关于代理服务器和SIP路由。
无状态代理服务器
无状态代理服务器简单地转发它接收的消息。这种服务器不存储任何呼叫或交易的信息。
- 无状态代理一旦转发就忘记SIP请求。
- 事务将通过无状态代理快速。
状态代理服务器
状态代理服务器跟踪它接收的每个请求和响应。如果需要,它可以使用未来存储的信息。如果它没有从另一方接收到响应,它可以重传请求。
- 状态代理在转发请求之后记住请求,因此它们可以使用它来提前路由。状态代理维护事务状态。事务意味着事务状态,而不是调用状态。
- 事务不像无状态的状态代理那么快。
- 如果需要,状态代理可以分叉和重传(例如,例如呼叫前转忙)。
Via和记录路由
记录路由
记录 - 路由报头被想要在相同呼叫id的后续请求的路径中的代理插入到请求中。然后由用户代理使用它来路由后续请求。
Via
Via头由服务器插入请求以检测循环并帮助响应找到他们的方式回到客户端。这有助于只有响应到达其目的地。
- UA自己在发送请求时在Via报头字段中生成并添加其自己的地址。
- 转发请求的代理将Via头字段包含其自己的地址添加到Via头字段列表的顶部。
- 生成对请求的响应的代理或UA将请求中的所有Via报头字段按顺序复制到响应中,然后将响应发送到在顶部Via报头字段中指定的地址。
- 接收响应的代理检查顶部Via头字段并匹配其自身的地址。如果不匹配,则响应已被丢弃。
- 然后删除顶部Via头字段,并将响应转发到在下一个Via头字段中指定的地址。
- Via头字段包含协议名,版本号和传输(SIP / 2.0 / UDP,SIP / 2.0 / TCP等),并包含端口号和参数,如received,rport,branch。
- 如果UA或代理从与在顶部Via头字段中指定的地址不同的地址接收到请求,则将所接收的标签添加到Via报头字段。
- 分支参数通过UA和代理被添加到Via报头字段,其被计算为Request-URI的哈希函数,以及To,From,Call-ID和CSeq数。