SIP协议中的用户号码和认证名
SIP协议中的⽤户号码和认证名
认证名⽤来认证(由特定的认证算法,如MD5),注册名⽤来注册(会体现在报⽂中)举个例⼦: "xzhbupt"<sip:xzh@realm>,
xzh2002就是Display name,这个可以由⽤户⾃由更改,好⽐QQ呢称
xzh就是username 注册时⽤的名字
认证的⽤户名在这⾥体现不出来,他只出现在含有认证信息的请求报⽂中,⼀般是与username保持⼀致,也可以不⼀致.⽐如注册时返回401,那么你在进⾏重新注册时会在www_authxxxxx⾥⾯写上认证⽤户名
关于Request-URI和To字段中的URI
Request URI和To可以不⼀样,AS以及Proxy可以加以限制。
应答消息的原则上是不改变from,to,recordRoute,Route等头域,还要加上toTag,contact,以及其它的扩展头域。然后按照via 来返回。
Transaction与dialog有什么区别
Transaction:维护hop to hop状态,包括⼀个请求和其触发的所有响应,包括若⼲暂时响应和⼀个最终响应。⽣命周期从请求
⽬前只有invite和subscribe请求会触发dialog。其⽣命周期贯穿⼀产⽣到收到最终响应。Dialog:维护peer to peer状态,⽬前只有
个端到端会话的始终。
PUBLIC和NOTIFY有什么不⼀样
Notify是服务器发送给客户端的,可能客户端在启动时并没有状态;
Publish是客户端发送给服务器端的,是将⼀些状态报告给服务器端。
sip dialog和session之间的区别和联系
session有两种含义,⼀种是传统意义上的RTP会话,⼀种是信令意义上的会话。SIP中的会话指后⼀种,在层次上它在dialog 之上,也就是dialog可以看成session的组成单元。⼆者的分别主要基于⽬前出现的subscription应⽤,对于session和subscription可以共享⼀个dialog,dialog由基本的会话标识组成,如Call-ID,From-Tag,To-Tag,以及⼀些⽬的target等共性单元组成。⽽session除了具备这些单元
外,包含INVITE建⽴起的会话其他内容,例如INVITE引起的状态机处理内容、PRACK 处理记录等内容。
有⼀个最为重要的区别是:Session是完成了SDP的Offer-Answer过程,也就是此时双⽅可以进⾏双向的RTP传输了。⽽Dialog只是双⽅建⽴了联系,这个联系是通过Dialog Context来记录的。在Dialog状态下双⽅不⼀定可以作双向的RTP传输。所以必定是Dialog在前,⽽Session在后,但两者可以同时⼀起建⽴。
再补充⼀句:Session是基于SDP Message的交互。没有SDP的交互,就没有Session。⽽Dialog是基于请求消息中的Header Field进⾏交互。因此两者在层次上也是不⼀样的。
RFC3261 第12 dialog,有对dialog的定义,⼀个dialog描述的是两个代理之间的⼀种端对端的关系,持续⼀定时间。所以,只要端到端的代理的请求与应答之间存在相互联系的关系,就能构成⼀个dialog;⽽Session,SIP(即Session Initiation Protocol)既然整个sip协议就是会话初始化协议,我认为,sip建⽴连接的整个过程是⼀个Session,就包括代理之间对传输参数的协商,可以⽤SDP,也可以是其它的。
Record_route与via的区别
Record-Route是proxy在请求中增加的,⽤来强制会话中的后续请求经过本proxy。via描述请求当前经历的路径,并且给出了应答所应当经过的路径,简单点说就是,请求发送到哪⾥,应答返回到哪⾥
举个例⼦说吧。假设有两个UA:A和B,两个Proxy:P1和P2,SIP URI/地址分别记为Addr[A]、Addr[B]、Addr[P1]和Addr[P2]。当A向B发送⼀个INVITE请求时需要依次经过P1和P2。下⾯通过⼏个步骤来说明via:
1、A向P1发送INVITE请求,此时via:Addr[A];P1收到请求后返回100trying,此时via:Addr[P1]
2、P1向P2转发INVITE请求,此时via:Addr[A],Addr[P1];P2收到请求后向P1返回100Trying,此时via:Addr[P2]
3、P2向B转发INVITE请求,此时via:Addr[A],Addr[P1],Addr[P2];B收到请求后先向P2返回200OK,此时via:Addr[B]
4、P2将200OK应答转发给P1,此时via:Addr[B],Addr[P2]
5、当A收到200Ok应答时via:Addr[B],Addr[P2],Addr[P1]
从这⾥可以看到Via的功能是记录路径。
6、当B收到A返回的ACK,建⽴了语⾳会话之后。假设某⼀时刻,B希望通过发送⼀个BYE请求来结束这次通话,在⼀般情况下B会将BYE请求发送到先前INVITE请求中的Contact域中的⽬的地址,但是此时B发现先前的INVITE请求中有⼀个record-route域,且值为Addr[P1](假设该域的值是P1添加的),则B必须将该BYE请求直接发送到Addr[P1](请注意:不是把该地址赋给TO域,该请求的TO域还是A的URI)。
7、倘若该次会话结束以后,则该Record-Route域失效。
(上⾯说法我认为是错误的)
我觉得在步骤2中p1发100 trying时并不会在该信息中添加via:Addr[P1],仍然是via:Addr[A],当p1向p2发出Invite请求时才增加via:Addr[p1],p2收到请求后向P1返回100Trying,它也不会添加via:Addr[P2],它向B发出Invite请求时才增加via:Addr[p2],
步骤5中,当Invite消息到达B时,B收到的Invite消息中应该有三个via字段:via:Addr[A],via:Addr[P1],via:Addr[P2],B返回200Ok消息并不会添加via:Addr[B]字段,仍然是那三个via字段,当200Ok经过p2时,p2把via:Addr[P2]去掉,经过p1时,p1把via:Addr[P1]字段去掉,最后200OK到达A,消息中的via就只剩下via:Addr[A]了
Via,是从dialog建⽴过程⾥,每个SIP请求事件从发起者到达⽬的者时:记录了所有经过的SIP服务器标记和发起者本⾝的"ip地址(域名):端⼝号;branch ID";信息发起者的via在最底层,以后每经过⼀个SIP服务器,SIP 服务器将⾃⼰的地址堆叠到via信息最上⾯,最靠近⽬的者的via在最上⾯,⽐较象数据结构⾥所说"先进后出"的堆栈;⽐如,INVITE. 然后对于该请求事件的回复(provisional/final response),就沿着via所指的地址进⾏"递归",⽐如:180 ringing, 200 ok.
Record-route:是SIP协议消息包所经过的路由节点,⼀个路由节点可能有多个SIP服务器,在RFC2543⾥只定义了严格路
由,RFC3261为了回避某个节点出现故障,SIP协议消息不能通过该接点进⾏传递的问题,提出了松散路由的概念。
什么是SIP Outbound Server
Outbound Proxy:可以算是⼀个⼆传⼿,也就是传递SIP 的URI,通常以outbound命名: 要同过这个地址才可以联系到Registrar Server(通常称为SIP Proxy).⾄于realm的话,在⼀个庞⼤的⽹络罗,⼀般会⽤域名还带替IP地址,⼀是⽅便记忆,⼆是服务器可以做到多级热冗余,这样某个IP所对应的服务器故障了,待命的服务器就可以接替⼯作;因为outbound ,SIP服务器的信息要写⼊到终端⾥的,如果这时在某个IP地址的服务器出故障了,那么终端也就不能提供服务了(为了避免这个问题,有的终端⼚家就加
了个Second Server的变量,这是终端的折中的做法;当然,这样做,终端就可以有双倍的服务器地址或是域名).
在来说outbound Proxy 和SIP server(也叫SIP Proxy, SIP registar);处于⽹络安全IP地址缺乏的原故,有些NGN的解决⽅案⾥有个Outbound Server,⼀般SIP的核⼼平台(registrar server, redirect server,Policy server, Provisioning Sever, Heartbeat Sever, Database, billing server, Trunk Gateway)都是⾄于⼀个有安全保护的⽹络环境⾥.终端必须通过Outbound Server才能联系到⾥⾯.另外,终端处于NAT/Firewall后⾯时,Outbound会记忆终端的公⽹IP地址及对应的UDP端⼝号,还有其虚拟地址及端⼝;同时按⼀定的时间间隔(30秒以内,因为NAT/FW只会将⼀个没有数据通过的TCP或UDP端⼝保留最长30秒)发送⼀个⼼跳消息给终端,防⽌终端出来的UDP端⼝被NAT/firewall关闭.(当然很多终端也能定时的上发⼼跳消息给服务器端,及时告诉上边⾃⼰出去的公⽹IP地址及对应的UDP端⼝号,还有虚拟地址及端⼝).
所以起⽤了outbound server 的消息是这样传送的:
SIP报⽂: SIP URI "SIP_userID@SIP_Proxy/Registrar:port" 直接发向 outbound 这个地址,⽽不是直接发向SIP proxy/registrar 这个地址.如果没有Outbound, 那么SIP报⽂SIP URI "SIP_userID@SIP_Proxy/Registrar:port" ⼀般直接发往SIP
Proxy/Registrar地址的qq用户名

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。