生活中,我们想要找一个人互相聊天,首先你到找到这个人、你的声音得传递到对方,对方能听到你的声音,
同时还得要去理解您的话语(同一个方言、同一个语种),帮你定位到对象的是sip,你们两个协商使用英语
沟通、还是汉语,使用电话设备、还是电脑web的是sdp, 最终说话的传递及传输介质是rtc。
sip协议做的是,能够让你定位到你想聊天的对象, 帮你检测你聊天对象是否可达, 帮你管理你们通话的会话
状态,帮你结束你们的聊天进程等。
从上面的例子可以看出,SIP协议只是负责创建会话,但是会话中的实际业务数据的传输并不由SIP来完成,而是由RTP来完成的。整个会话的实现不仅是需要SIP协议,还需要其他的协议,比如SDP和RTC等
(1) SIP协议的概念
SIP全称是session initiation Protocol (会话初始协议) ,他是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点
(2) SIP协议的特点
SIP协议通信过程中并不包含业务数据
(1) SIP通信的3个基本组件
应用示例,终端A拨打终端B电话(前提是A和B都已经注册到可响应的服务器上):
(2) SIP在发起会话时信令交互的流程
SIP协议是一个Client/Sever协议,因此SIP消息分两种:请求消息和响应消息。请求消息是SIP客户端为了激活特定操作而发给服务器端的消息。常用的SIP请求消息如下:
上述的过程中并没有trying信令,其实在实际的抓包过程中可以发现callee收到INVITE信令后会向caller发送一个t、Trying信令,之后再发送Ringing和OK信令
SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。
下图说明了在预定同一个 ISP, 从而使用同一域的两个用户之间建立 SIP 会话的过程。用户 A 使用 SIP 电话。用户 B 有一台 PC,运行支持语音和视频的软客户程序。加电后,两个用户都在 ISP 网络中的 SIP 代理服务器上注册了他们的空闲情况和 IP 地址。用户 A 发起此呼叫,告诉 SIP 代理服务器要联系用户 B。然后,SIP 代理服务器向 SIP 注册服务器发出请求,要求提供用户 B 的 IP 地址,并收到用户 B 的 IP 地址。SIP 代理服务器转发用户 A 与用户 B 进行通信的邀请信息(使用 SDP),包括用户 A 要使用的媒体。用户 B 通知 SIP 代理服务器可以接受用户 A 的邀请,且已做好接收消息的准备。SIP 代理服务器将此消息传达给用户 A,从而建立 SIP 会话。然后,用户创建一个点到点 RTP 连接,实现用户间的交互通信。
通话双方都要有一个SIP帐号(也称为URI, 是网络上的电话号码),不同于全数字的传统电话号码, SIP帐号采用 URI 表示方法, 例如:sip:[email protected]:5060
其中:
SIP协议默认端口为5060, 默认采用UDP传输 。5060的意思是,客户端在名为company.com的服务器的5060端口号上等待对方连接如果端口号是 5060,也可以省略不写。则上述SIP帐号写为: sip:[email protected]。除了sip:这几个字母, SIP帐号就像一个邮件帐号。 没错,SIP协议设计者的意图就是让SIP帐号与邮件帐号一致,方便与邮箱服务整合。对用户来说方便,你要打电话给我,我的电话号就是邮箱。
SDP的作用就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol会话公告协议),SIP(Session Initiation Protocol,会话初始协议),RTSP,HTTP,和使用MIME的E-Mail。
SDP和RTP/RTCP是创建SIP媒体会话的最基本的要求。
在freeSwitch中使用originate命令对1000注册用户发起呼叫,sip:[email protected]相当于一个server,freeswitch中的相当于一个client(sip的)。其抓包结果如下:
这仅仅是a-leg,并没有实现真正的通话数据流的传输,也就没有RTP数据包,只用信令 (SIP和SDP) 相关的包。后续在两个电脑上实现双向通话进行抓包测试。
SIP是一种应用层的协议规范,和其他的前面所提到的协议同属应用层的协议。它的目的是用来实现网络媒体的创建服务,电话呼叫,电话会议,视频会议,媒体共享等应用。在这些应用服务中,终端需要支持不同的数据形式,语音编码,数据文件,视频编码等。在这些数据交换的过程中,用户之间的通信可能通过UDP传输/TCP传输方式来传输RTP,也需要RTCP来对媒体流传输控制进行处理。因此,SIP协议协议配合其他的协议完成整个通信服务的处理,其相关协议如下示例图所示:
SIP的基本网络构成包含以下几个核心模块:各种UA(终端设备),注册服务器,转发服务器,定位服务器、代理服务器和应用服务器。如果实现完整的SIP媒体通信的话,SIP需要支持至少五种功能:
通过以上五种功能的支持,SIP网络中的核心构件才能成功工作。
一个应用场景中,两个SIP终端通过两个代理的呼叫流程如下所示: