SIP协议学习笔记(3)——事务

1.总体结构

看了这么长时间的RFC文旦,谈谈我对SIP协议通信粒度的理解吧,在SIP协议中通信的行为分成了不同的粒度,从小到大分别是点到点的sip消息的传输(这点是我自己总结的),sip事务,sip对话以及sip会话。点到点的sip消息的传输时sip协议传输的最基本的单位,发生在传输层(Transport Layer),就是将一个sip message通过udp、tcp或tls等底层协议发送到目的UA(或者Proxy)的传输层。事物的粒度在点对点sip消息传送之上,包含了一系列的sip消息传输,事务由一个request、0到多个临时response以及一到多个最终response组成,表示了一次完整的request-response过程。而对话粒度更大,一次对话从进入early状态到closed状态可能包含0到多个事务(对话收到1xx进入early后收到non-2xx的response时会直接进入closed,否则必须经过BYE事务才能进入closed状态)。对话应该发生在Transaction User层,由用户控制对话的开始和结束。sip会话表示了若干用户之间通信的过程,可能包含多个对话过程。

image

2.事务的状态机

  • INVITE客户端事务(INVITE Client Transaction)

image

  • 非INVITE客户端事务(Non-INVITE Client Transaction)

image

  • INVITE服务端事务(INVITE serverTransaction)

image

  • 非INVITE服务端事务(Non-INVITE server Transaction)

 

image

3.sip消息与状态机的匹配

由于在transport层收到的sip消息要交给相应的状态机来处理,因此在transaction层需用sip消息匹配状态机的实例,而这个匹配分为两类:

  • 1. UAC事务与response匹配;
  • 2. UAS事务与request匹配;

1. UAC事务与response匹配

当UAC发出一个请求时会创建一个相应的事务,假设请求ReqA创建了事务实例TA,之后如果收到了响应RespX,可以通过看RespX是否满足以下条件来看该响应是否与TA匹配:

  • RespX的via头域最上面的一条的branch参数,与ReqA的via头域最上一条的branch参数相等;
  • RespX的CSeq头域中的方法(method)与ReqA的CSeq头域中的方法相同,这是由于cancel请求会创建一个新事务但是却与要取消的请求有同样的branch参数;

同时满足以上两个条件时,RespX与事务实例TA匹配。

2. UAS事务与request匹配

当UAS收到一个请求时会创建一个相应的事务,假设请求ReqA创建了事务实例TA,之后如果收到了请求ReqX,可以通过看ReqX是否满足以下条件来看该响应是否与TA匹配:

  • ReqX的via头域最上面的一条的branch参数与ReqA的via头域最上一条的相等;
  • ReqX的via头域最上面的一条的sent-by的值与ReqA的via头域最上一条的相等;
  • ReqX的CSeq头域中的方法(method)与ReqA的CSeq头域中的方法相同;

同时满足以上三个条件时,ReqX与事务实例TA匹配。

转载于:https://www.cnblogs.com/wangxuchu/archive/2012/10/04/2708769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值