FreeSwitch(七):SIP协议
一、协议基础
1.1 基础
会话初始协议(SIP)是一个控制发起、修改和终结交互式多媒体会话的信令协议。最早发布于1993年。SIP是一个基于文本的协议,和HTTP和SMTP类似。
1.2 通信方式
(1)点对点通信:SIP是对等的,都有可能做UAC或者UAS.
(2)代理服务器:由于A和B之间需要中间人M传话,中间人叫做代理服务器.
(3)注册服务器:如果A换个位置,必须向M重新注册,则M是注册服务器.
(4)B2BUA:背靠背协议.M与bob交流,W与Alice交流,W和M之间交流.
(5) 边界会话控制器:位于一堆SIP服务器边界,用于隐藏内部服务器拓扑结构.抵御外来攻击.
1.3 基本方法与头域
常用的基本方法和头域如下:
二、SIP注册
注册流程:Alice向Freeswtch发起注册请求,Freeswtch返回401并向Alice发起挑战,Alice将自己的用户名密码连同挑战经过计算发送给服务器,服务器校验正确后则认证通过.
三、SIP呼叫流程
3.1 UA之间直接呼叫
Bob向Alice发送invite消息请求建立SIP会话,Alice的UA回100try并且开始振铃,bob收到消息后播放回铃音.Alice接了电话,发送200OK给bob,宝宝收到后回复ACK.就可以开始通话了,语音数据是通过RTP包进行传递.
通话后,爱丽丝挂断电话发送bye,宝宝收到后发送200OK.
3.2 通过B2BUA进行呼叫
(1)宝宝向freeswtich发送invite消息.Frees witch回复100try.
(2)确认宝宝身份,服务器回送带有digest的407消息给宝宝.宝宝会送ACK表示收到.
(3)宝宝重新发送invite请求,并且附带了认证的用户名密码.服务器回复100try.并验证,发现验证通过了.此时建立了一个chanel,成为a腿.
(4)服务器查找爱丽丝,向爱丽丝发送invite.爱丽丝发送100try.爱丽丝开始振铃并发送180Ringing.
(5)服务器给宝宝发送183,并产生回零音.
(6)爱丽丝接听电话并发送200OK .服务器回复ACK,并向宝宝发200OK.切断回铃音,接语音.
(7)RTP包通话.
(8)爱丽丝挂断发送bye,服务器会送200OK,撤销B腿.
(9)服务器给宝宝发送bye,宝宝发送200OK
四、深入理解SIP
4.1 SIP URI
sip地址可以使用IP地址,也可以使用域名.宝宝呼叫爱丽丝时候,由于宝宝是主叫方,不需要向服务器注册.而爱丽丝则不同,作为被叫方,为了能够让服务器找到他,必须进行注册.
4.2 SDP
sip负责建立释放会话,一般来说,会话会包含相关媒体,如音频视频.媒体是由SDP描述的,SDP一般不单独使用,需要放到SIP正文.如下图,是一个完整的的SIP发送请求的消息.
4.3 SOA
媒体协商过程成为SOA(提议和应答),首先由一方提供支持的codec,另一方选择.
4.4 3PCC
指的是由第三方控制者在另外两者之间建立会话,由控制者负责双方的媒体协商.在PSTN网中,第三方控制呼叫通常用于会议或者接线业务.同样,SIP也可以借助3PCC完成PSTN网中的一些业务.如点击拨号,通话过程放音.
4.5 IP承载
HTTP是TCP承载的,SIP是TCP和UDP,UDP承载的SIP如果丢包,就是用TCP.有些浏览器用websocket承载SIP,实现浏览器打电话,视频功能.