协议一般有两种格式,文本和二进制,设计消息时以TLV格式为基础,T消息头、L消息体长度、V消息体,协议按作用又有信令控制和数据传输之分,某些协议可以将控制和数据合为一体,例如RTMP协议,而SIP则是一种文本格式的信令控制协议。
一、基础
参考RFC3261,SIP协议的功能主要有用户定位、建立会话、会话管理。
用户定位:要定位用户需要知道用户所在的域(ip:port)。有两种方法让上个节点定位到用户,一是注册,通过注册用户告知上个节点(注册服务器或代理服务器)用户的ip:port,某些服务器出于安全需要先配置用户号码,这相当于白名单;一种是中继,通过配置直接在上个节点配置用户的ip:port,常用于服务器节点间。
建立会话:SIP英文翻译就是会话初始协议,invite 100 180 200 ack,这一套信令交互用来建立会话,在UA中,会话存储了当前通话信息,以dialog ID作为标记,这个 ID 由 CallID,和一个本地 tag 和远程 tag 组成,也叫callleg。
会话管理:主要是刷新会话、终结会话等,通过通话中事务实现,在UA中,事务是逻辑单元,加上事务定时器配合完成某一逻辑功能。确定事务是via头域的branch参数配合Cseq头域的方法参数,CANCEL 方法的事务和源请求的事务不同,但是却有相同的 branch 参数。
常见消息交互
鉴权注册:register 401/407 register 200,expire为注册刷新时间,超时服务器会去除注销信息,断开会话,为0表