时间加减
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)cq Cq 其⽣存域是⼀个会话。
⽤于将⼀个会话中的请求消息序列化,以便⽤于重复消息、“迟到”消息的检测,响应消息与相应请求消息的匹配等。包含两部分:⼀个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(ur 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是否由本规范所产⽣的(就是说,全局唯⼀的)