SIP协议中Tag和Branch的概念

SIP协议的分层结构

SIP是一个分层结构协议,它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。
一. SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。
二.第二层是传输层,定义了网络上客户机与服务器发送请求和接收响应的方式,所有的SIP元素包含传输层。
三.第三层是事务层。事务是SIP的基本元素。事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),一个事务由客户机事务发送给服务器事务的请求(使用传输层),以及服务器事务发送对应该请求的响应组成。 事务层之上的层为事务用户(TU)。当一个TU希望发送请求时,生成一个客户机事务实例并向它传递请求和IP地址、端口和用来发送请求的传输机制。

SIP重要参数

Sip 几个重要参数:
1) 如下三个值相同代表同一个dailog(会话)
Call-id From(tag) To (tag)
2)branch值相同,代表同一个 transaction(事务) Branch
3)cseq Cseq 其生存域是一个会话。
用于将一个会话中的请求消息序列化,以便用于重复消息、“迟到”消息的检测,响应消息与相应请求消息的匹配等。包含两部分:一个32位的序列号,一个请求方法。 通常在会话开始时确定一个初始值,其后再发送消息时将该值加1。
主叫方与被叫叫各自维护自己的CSeq序列,互不干扰,这有点像TCP/IP中IP包的序列号。 一个响应消息有与其对应的请求消息相同的CSeq值。

**【注意】**SIP中CANCEL消息与ACK消息总是比较特殊。CANCEL消息的CSeq中的序列号总是跟其要cancel的消息的相同,而对于ACK消息:如果它所要确认的是INVITE请求的non-2xx响应,则ACK消息的CSeq中的序列号与对应INVITE请求的相同;如果是2xx响应,则不同,此时ACK被当作一个新的事务。

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。

Transaction(事务)

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是否由本规范所产生的(就是说,全局唯一的)

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SIP(Session Initiation Protocol)是一种用于建立、修改和终止网络会话的协议。它被广泛应用于VoIP(Voice over Internet Protocol)系统,用于呼叫控制、呼叫转移、会议控制等功能。 SIP 协议栈结构一般包括以下几个层次: 1. 应用层:提供 SIP 协议的应用程序,包括用户代理(User Agent)和服务器代理(Server Agent)。 2. 传输层:提供 SIP 协议的传输服务,包括 TCP、UDP、TLS 等协议。 3. 传输控制层(Transport Control Layer):提供传输层协议的封装和解封装功能。 4. 网络层:提供路由选择和数据包转发功能,包括 IP、IPv6 等协议。 5. 数据链路层(Data Link Layer):提供 MAC 地址的查找和数据帧的封装和解封装功能。 SIP 信令格式一般包括以下几个部分: 1. 请求行(Request Line):包括请求方法、请求 URI 和 SIP 版本号。 2. 头部字段(Header Fields):包括通用头部字段、请求头部字段、响应头部字段和实体头部字段。 3. 空行(Blank Line):用于分隔头部字段和消息体。 4. 消息体(Message Body):包括 SDP(Session Description Protocol)信息、媒体描述和其他应用数据。 例如一个 INVITE 请求的 SIP 信令格式如下: ``` INVITE sip:user@example.com SIP/2.0 Via: SIP/2.0/UDP 192.0.2.101:5060;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice <sip:alice@example.com>;tag=1928301774 To: Bob <sip:bob@example.com> Call-ID: a84b4c76e66710 CSeq: 314159 INVITE Contact: <sip:alice@192.0.2.101> Content-Type: application/sdp Content-Length: 142 v=0 o=alice 2890844526 2890844526 IN IP4 192.0.2.101 s=- c=IN IP4 192.0.2.101 t=0 0 m=audio 49170 RTP/AVP 0 a=rtpmap:0 PCMU/8000 ``` 其 INVITE 是请求方法,sip:user@example.com 是请求 URI,SIP/2.0 是 SIP 协议版本号。请求头部字段包括 Via、Max-Forwards、From、To、Call-ID、CSeq 等。消息体包括 SDP 信息和媒体描述。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值