协议--SIP/SDP

参考资料

  • 会话初始协议SIP与SDP简介
  • 完整SIP/SDP媒体协商概论-SIP/WebRTC概要

1. 什么是SIP

1.1 关于SIP通话的一个形象比喻

生活中,我们想要找一个人互相聊天,首先你到找到这个人、你的声音得传递到对方,对方能听到你的声音,
同时还得要去理解您的话语(同一个方言、同一个语种),帮你定位到对象的是sip,你们两个协商使用英语
沟通、还是汉语,使用电话设备、还是电脑web的是sdp, 最终说话的传递及传输介质是rtc。

sip协议做的是,能够让你定位到你想聊天的对象, 帮你检测你聊天对象是否可达, 帮你管理你们通话的会话
状态,帮你结束你们的聊天进程等。

从上面的例子可以看出,SIP协议只是负责创建会话,但是会话中的实际业务数据的传输并不由SIP来完成,而是由RTP来完成的。整个会话的实现不仅是需要SIP协议,还需要其他的协议,比如SDP和RTC等

1.2 SIP协议的概念和特点

(1) SIP协议的概念
  SIP全称是session initiation Protocol (会话初始协议) ,他是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点

  • 应用层:在网络通信中最上层,实现业务的具体功能。
  • 信令:信息指令,表示协议的传输的内容是指令而非业务数据
  • 控制:执行什么样的操作。

(2) SIP协议的特点

  • 不定义要建立的会话类型,只定义如何管理会话。 SIP不是一个垂直集成的通讯系统,可能叫做是一个部件更合适。
  • SIP本身并不提供服务。但是,SIP提供了一个基础,可以用来实现不同的服务。

1.3 SIP协议的通信流程

SIP协议通信过程中并不包含业务数据

(1) SIP通信的3个基本组件

  • 用户代理(User Agent Client),即终端。比如SIP电话。
  • 代理服务器(User Agent Server),负责连接用户代理和查询终端定位。
  • 注册服务器。是一个保存了用户代理(终端)信息服务器。可以理解为一个通讯录。

应用示例,终端A拨打终端B电话(前提是A和B都已经注册到可响应的服务器上):

  • 终端A先联系代理服务器,把B给到proxy,告诉它我是联系B。
  • proxy它自己不知道,就去翻通讯录(即注册服务器),找到B对应的IP地址,并拨打B。
  • B接听电话后,proxy就把A和B联通。
    协议--SIP/SDP_第1张图片

(2) SIP在发起会话时信令交互的流程
协议--SIP/SDP_第2张图片
SIP协议是一个Client/Sever协议,因此SIP消息分两种:请求消息和响应消息。请求消息是SIP客户端为了激活特定操作而发给服务器端的消息。常用的SIP请求消息如下:

  • INVITE:表示主叫用户发起会话请求,邀请其他用户加入一个会话。也可以用在呼叫建立后用于更新会话(此时该INVITE又称为Re-invite)。
  • ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
  • PRACK:表示对1xx响应消息的确认请求消息。
  • BYE:表示终止一个已经建立的呼叫。
  • CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
  • REGISTER:表示客户端向SIP服务器端注册列在To字段中的地址信息。
  • OPTIONS:表示查询被叫的相关信息和功能。

上述的过程中并没有trying信令,其实在实际的抓包过程中可以发现callee收到INVITE信令后会向caller发送一个t、Trying信令,之后再发送Ringing和OK信令

SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。

1.4 在不同的网络中建立SIP会话

1.4.1 在同一域中建立 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/SDP_第3张图片

1.4.2 在不同的域中建立 SIP 会话

1.5 SIP URL账号

  通话双方都要有一个SIP帐号(也称为URI, 是网络上的电话号码),不同于全数字的传统电话号码, SIP帐号采用 URI 表示方法, 例如:sip:[email protected]:5060
其中:

  • sip: 表示采用sip协议
  • peter是用户名, 也称为帐号. 用字母和数字均可。
  • company.com 是帐号所属的服务器域名( 也可以用IP地址,例如: sip:[email protected])
  • 最后的5060是端口号。

SIP协议默认端口为5060, 默认采用UDP传输 。5060的意思是,客户端在名为company.com的服务器的5060端口号上等待对方连接如果端口号是 5060,也可以省略不写。则上述SIP帐号写为: sip:[email protected]。除了sip:这几个字母, SIP帐号就像一个邮件帐号。 没错,SIP协议设计者的意图就是让SIP帐号与邮件帐号一致,方便与邮箱服务整合。对用户来说方便,你要打电话给我,我的电话号就是邮箱。

2. 什么是SDP

SDP的作用就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。他定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol会话公告协议),SIP(Session Initiation Protocol,会话初始协议),RTSP,HTTP,和使用MIME的E-Mail。

3. SIP和SDP的关系

协议--SIP/SDP_第4张图片
SDP和RTP/RTCP是创建SIP媒体会话的最基本的要求。

3.1 基于freeswitch进行通话的抓包结果

在freeSwitch中使用originate命令对1000注册用户发起呼叫,sip:[email protected]相当于一个server,freeswitch中的相当于一个client(sip的)。其抓包结果如下:

这仅仅是a-leg,并没有实现真正的通话数据流的传输,也就没有RTP数据包,只用信令 (SIP和SDP) 相关的包。后续在两个电脑上实现双向通话进行抓包测试。

SIP/SDP与其他协议的拓扑关系

SIP是一种应用层的协议规范,和其他的前面所提到的协议同属应用层的协议。它的目的是用来实现网络媒体的创建服务,电话呼叫,电话会议,视频会议,媒体共享等应用。在这些应用服务中,终端需要支持不同的数据形式,语音编码,数据文件,视频编码等。在这些数据交换的过程中,用户之间的通信可能通过UDP传输/TCP传输方式来传输RTP,也需要RTCP来对媒体流传输控制进行处理。因此,SIP协议协议配合其他的协议完成整个通信服务的处理,其相关协议如下示例图所示:
协议--SIP/SDP_第5张图片
SIP的基本网络构成包含以下几个核心模块:各种UA(终端设备),注册服务器,转发服务器,定位服务器、代理服务器和应用服务器。如果实现完整的SIP媒体通信的话,SIP需要支持至少五种功能:

  • 定位服务:决定通信使用的最终终端系统。
  • 用户有效性:决定被呼叫方是否有意愿加入到通信环境中。
  • 用户媒体支持能力:决定双方通信所需要的媒体和媒体参数
  • 会话创建:创建会话,启动ring振铃等。
  • 会话管理:转接,修改会话参数,发起其他服务,结束会话等。

通过以上五种功能的支持,SIP网络中的核心构件才能成功工作。
协议--SIP/SDP_第6张图片
一个应用场景中,两个SIP终端通过两个代理的呼叫流程如下所示:
协议--SIP/SDP_第7张图片

你可能感兴趣的:(协议栈,语音识别)