SIP协议是一个多媒体通信协议,由IETF制定,中文名为会话初始协议。对于SIP协议,你所知道的概念是什么呢?接下来看看小编写的这篇文里面的理解吧。
SIP是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。可以配置和管理任何类型的 peer-to-peer 通信会话, 但并不关心媒体类型 (语音、短信、游戏、视频等)。
SIP与负责语音质量的资源预留协议(RSVP) 互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议。
1.SIP协议的分层结构
SIP是一个分层结构协议,它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。
SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。
第二层是传输层,定义了网络上客户机与服务器发送请求和接收响应的方式,所有的SIP元素包含传输层。
第三层是事务层。事务是SIP的基本元素。事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),一个事务由客户机事务发送给服务器事务的请求(使用传输层),以及服务器事务发送对应该请求的响应组成。
事务层之上的层为事务用户(TU)。当一个TU希望发送请求时,生成一个客户机事务实例并向它传递请求和IP地址、端口和用来发送请求的传输机制。
2.SIP几个重要参数
1)如下三个值相同代表同一个dailog(会话)
Call-id
Form tag
To tag
2)branch值相同,代表同一个transaction(事务)
3)cseq
其生存域是一个会话。用于将一个会话中的请求消息序列化,以便用于重复消息、“迟到”消息的检测,响应消息与相应请求消息的匹配等。包含两部分:一个32位的序列号,一个请求方法。
通常在会话开始时确定一个初始值,其后再发送消息时将该值加1。主叫方与被叫叫各自维护自己的CSeq序列,互不干扰,这有点像TCP/IP中IP包的序列号。
一个响应消息有与其对应的请求消息相同的CSeq值。
【注意】SIP中CANCEL消息与ACK消息总是比较特殊。CANCEL消息的CSeq中的序列号总是跟其要cancel的消息的相同,而对于ACK消息:如果它所要确认的是INVITE请求的non-2xx响应,则ACK消息的CSeq中的序列号与对应INVITE请求的相同;如果是2xx响应,则不同,此时ACK被当作一个新的事务。
3. Dialog
Dialog:对话,一个对话是持续一段时间的两个UA之间的端到端的SIP关系。一个对话由SIP消息建立,就像用2xx响应INVITE请求。我们用Call identifier,local tag(本地tag),remote tag(对方tag)来标志一个对话,一个对话在RFC 2543中被正式叫做CALL LEG.
Dialog(会话) 会话是两个UAs(user agent) 之间持续一段时间的端到端(peer-to-peer)的SIP 关系. 一个会话由一个Call-ID, 一个local tag 和 一个remote tag来标识.会话过去也叫做 "call leg".
Call-id,local tag,remote tag 三者值相同,代表同一个dailog
4.Transaction(事务)
事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息. 如果请求是一个"Invite"消息,并且最终的响应是一个non-2xx消息,那么该事务包含一个"Ack"响应消息.如果服务器的响应是一个2xx消息,那么,随后的ACK是一个单独的事务.
branch参数含义 branch值相同代表同一个Transaction事务系列
Branch是一个事务ID(Transaction ID),用于区分同一个Client所发起的不同Transaction。
对于遵循RFC3261规范的实现,这个branch参数的值必须用magic cookie”z9hG4bK”打头. 其它部分是对“To, From, Call-ID头域和Request-URI”按一定的算法加密后得到。
根据本标准产生的branch ID必须用”z9h64bK”开头。这7个字母是一个乱数cookie(定义成为7位的是为了保证旧版本的RFC2543实现不会产生这样的值),这样服务器收到请求之后,可以很方便的知道这个branch ID是否由本规范所产生的(就是说,全局唯一的)。
5.SIP的呼叫方式
SIP支持三种呼叫方式:
(1)由客户端像服务器端直接呼叫
(2)由UAC在重定向服务器的辅助下进行重定向呼叫
(3)由代理服务器代表UAC向被叫发起呼叫
SIP把一个呼叫分为三个阶段:呼叫建立,呼叫保护,呼叫释放。
图1 SIP的呼叫
首先要建立呼叫信道,即一个TCP/UDP连接。因此,由服务器的IP地址和端口号建立客户端与服务器端之间的呼叫信令道。然后,客户端向服务器端发送消息INVITE消息,如果服务器段同意呼叫,发送(2),(3)消息。其中,1xx状态码表示请求已收到,正在处理中,200表示请求已经完成。这时,如果客户端突然不想参加此次会话,可以向服务器发送BYE。
上图中3xx相应只会在用重定向服务器出现的时候,表示对请求的重定向处理,4xx响应表示客户端的请求有语法错误不能被服务器执行。5xx响应表示服务器出错,不能执行合法请求。6xx响应表示所有服务器出错,不能执行合法请求。当客户接受3xx,4xx,5xx响应后,可根据响应中的消息修改消息,并重发请求。当客户端接受6xx响应后,结束此次呼叫。
6.SIP协议的体系结构
SIP协议中的组成元素包含两个要素:SIP 用户代理(User Agent,UA)和 SIP 用户服务器(User Server,US)。用户代理是呼叫的终端要素,而用户服务器是处理与多个呼叫相关联信令的网络设备。在理想情况下,两个终端间的通信并不需要用户服务器的参与即可完成。但是现实总是比理想残酷,因为各个网络运营商、服务提供者希望对其网络的业务有所了解,固需要中间用户服务器的参与。
图2所示是典型的网络结构,称之为“SIP 梯形”。SIP 终端构成通信的端点,它们负责发送和接受 SIP 请求和响应,同时它们也是多媒体流的终点。UA 可能是终端上的一个应用或者是专门的硬件设备。
用户代理本身又可分为:客户机端(User Agent Client,用户代理客户机)和服务器端(User Agent Server,用户代理服务器)。用户代理客户机是发起请求的主叫应用;客户代理服务器是通话的被呼叫端,主要负责接受、重定向或者拒绝请求,给到来的请求发送响应。用户代理在发起呼叫的时候它是用户代理客户端,而当被呼叫的时候它是用户代理服务器端。
用户服务器是SIP消息在到达其最终目的地前所经过的逻辑节点,这些服务器用于对请求进行路由和重定向,既进行名字解析和用户定位。主要包括以下几种服务器:
有状态代理服务器(Proxy Server):负责接收和转发SIP请求。可解析并重构SIP消息的部分信息。但是这些重构不会影响请求或会话的状态;
无状态代理服务器(Stateless Server):其负责将上游的请求向下游转发和将下游的响应向上游转发,其不纪录请求或会话的状态;
重定向服务器(Redirect Server):其负责将请求的地址映射为新地址;它对请求进行重定向但是不参与事务的处理。
图2 SIP典型的网络结构
对于上述的这些内容,大家有什么困惑或者不懂的吗?如果有可以给小编留言提出你的疑问哦,小编必定会认真地与大家交流互动的,请继续支持小编支持我们课课家,谢谢!
上一篇:RemoteFX的全面认识有哪些
下一篇:新媒体营销有哪些优势?
¥665.00
¥20.00
¥119.00
¥499.00
¥59.00