RFC3261 sip协议---UAC行为详解

用户代理:

一个用户代理是一个完整的终端系统,它包含了一个用户的客户端代理UAC(用来发送请求和处理应答),和一个用户服务器代理UAS(用来接收请求,回复应答)。

注:用户代理值得就是一个完整的sip呼叫系统,UAC指的就是客户端,UAS指的就是服务器。


UAC与UAS处理程序依据两个因素:第一个请求与应答是否为同一个对话,第二基于请求的方法。


UAC行为

UAC产生一个request必须包含如下头域:To、From、CSeq、Call-ID、Max-Forward和Via,这六个头域是必须包含的,缺少一个就是不合法的request。这六个头域之所以缺一不可是因为它们组合提供了路由服务(包括消息的地址、应答的回复路径、消息最大跳数)消息的顺序、消息的唯一事物标示。

To:

To头域的首要作用是指出request消息的“逻辑”接收人是谁。To头域要包含一个sip uri和一个要建立对话的终端的名称用来指明要接收request的接收人的“逻辑地址”。一个UAC需要使用一些列的办法合成一个To头域值。值得注意的是在request消息中,To头域值不能包含tag字段,因为tag字段是建立会话有才会有的。

To: Carol <sip:carol@chicago.com> 这就是一个request的To头域,它指明了要建立会话的对象


From:

From头域的与To头域一样,首要的任务是指明发送request终端的“逻辑地址”(有了这个From字段,就可以自动拒绝接听,如果自动屏蔽掉某人的来电)。From头域值得组成和To头域值类似,由发起人的显示名称和sip uri组成。值得注意的是在request消息中,From头域值必须包含一个tag标签。

From: "Bob" <sips:bob@biloxi.com> ;tag=a48s
From: sip:+12125551212@phone2net.com;tag=887s
From: Anonymous <sip:c8oqz84zk7z@privacy.org>;tag=hyh8
 

第三个From头域值中Anonymous表示未给出request消息的显示名称只是给出了sip uri,第二个From头域表示From头域值中可以不包含显示名称的。


Call-ID:

Call-ID头域是一组会话的唯一标示,一组会话的request与response的Call-ID必须是同一个。在UAC发起一个请求的时候,UAC必须产生一个全局的Call-ID,Call-ID头域值与UA是一一对应的,不能存在重复的Call-ID。UA每一次注册,注册消息的Call-ID值都应该相同的。重新尝试的request,不算是新的请求,所以Call-ID应该用之前已经有的。


Cseq:

Cseq头域是用来识别和排序事物用的,Cseq头域值由32位数值和方法组成,方法必须与request消息的方法相同。例如 Cseq:2244 invite 这就是一个Cseq头域


Max-Forwards:

Max-Forwards头域用来指明在网络传输中,sip消息到达目的地的最大跳数,每经过一个节点跳数减1。默认的跳数值为70.

Via:

Via头域是用来记录sip事物传输时经过了那些设备,以及用来做为response的返回路径用的。在传输设备找到下一跳或者是目的地准备转发sip消息的时候,在Via头域中添加上他自己的Via头域值。在UAC创建一个request时必须把自己的“逻辑地址”添加到Via头域值中,还要添加协议名称和协议版本号,它们必须为sip和2.0。除此之外必须还要有一个参数分支,这个分支用来判定是谁发送的这个request。

Contact:

Contact头域提供了一个后续直接连接而不需要sip路由的方法。

Supported and Require:

如果sip服务器响应sip协议的扩展这两个头域才会有作用。

附加信息:

上面的头域添加完成之后,就合成了一个基本的sip request信息。在此外我们还需要添加一些额外的信息。例如:指出消息体的类型,长度之类的。


上面是简单的介绍了UAC封装一个请求的过程,下面将要介绍UAC处理这个请求返回的应答。


传输层的错误:

有的时候传输层传给事务处理层的不一定是一个sip消息,而又可能是传输层的一个错误,当事务处理层收到一个timeout的错误时,必须把这个错误当做收到状态码408(请求timeout)来处理,如果事务处理层收到了一个严重的错误(udp或是tcp出错)那么把这个错误当做状态码503来处理。


未知应答:

UAC必须把自己不认识的 所有应答当做x00来处理。

Vias错误:

如果在应答中,不止有自己的via头域存在,那么UAC应该丢弃这个消息,因为应答回来的时候,每经过之前走的代理服务器,都会把这个服务器响应的via头域去掉。所以,如果存在了多余的via头域,那么就是说明这个消息被错误的路由了或是消息已经不完整了。


处理3xx应答:

当UAC收到了3xx的应答时,UAC需要使用contact头域中去重新制定一个或多个新的request消息。值得注意的是在重定向的这个request中,我们可以使用之前的request的Call-ID头域,也可以使用新的Call-ID头域。

3xx表示重定向应答;


处理4xx应答:

一些特定的4xx应答需要UAC进行特殊的处理,这个与请求的方法无关。

如果收到的是401(未鉴权)或者是407(代理鉴权要求),那么UAC需要进行鉴权工作

如果收到的是413(请求实体过大),表示UAS不能接收这么大的sip消息,UAC需要重新压缩一下。

如果收到的是415(表示不支持这种媒体类型),UAC重新发送的request应该使用服务器给出的支持的媒体类型

。。。。

4xx应答客户端请求错误,请求消息可能存在格式错误或者是在这个服务器上不能完成。

处理1xx应答:

1xx表示服务器已经接受了这个应答,这在处理转发中。。。。

处理2xx应答:

2xx表示目标已经成功接受,正在处理中。。。。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yang19870913

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值