VoIP通话之SIP协议
一、前言
作为一名VoIP产品职业开发者,SIP可以说是我工作中接触最多的一种协议,是时候好好总结一下了。
二、概要
SIP(Session Initiation Protocol)属于应用层的控制协议,主要用于在一个或多个参与者之间创建,修改和中止会话,与SDP、 RTP/RTCP等协议配合,共同完成IMS中的会话建立及媒体协商。
SIP 的一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。有了这种灵活性,也就意味着SIP可以用于众多应用和服务中,包括交互式游戏、音乐和视频点播以及语音、视频和 Web 会议。
SIP协议使用客户端/服务器架构,和HTTP协议有很多类似的地方,消息分两种:请求和响应。逻辑实体包括:
1、用户代理(UA)
- User Agent Client(UAC):用户代理客户端是创建新请求,然后使用客户端事务状态机发送请求的逻辑实体。
- User Agent Server(UAS):用户代理服务器是一个逻辑实体,它产生SIP请求的响应。响应接收、拒绝和重定向请求。
2、网络服务器
- 注册服务器:接受UA的注册请求
- 代理服务器:为UA转发请求或响应
- 重定向服务器:接受SIP请求消息,进行地址映射,将映射后的地址返回给UA
- 定位服务器:为重定向服务器或代理服务器提供被叫用户的可能位置信息
三、请求消息
常用的请求消息有:
- REGISTER:注册请求,上报用户信息,完成号码绑定。
- INVITE:主叫用户发起会话请求,邀请其他用户加入一个会话
- ACK:对请求消息的响应消息进行确认
- BYE:终止一个已经建立的会话
- CANCEL: 取消尚未建立的会话请求,一般是针对INVITE
- OPTIONS:用于查询服务器的相关信息和功能
- REFER:用于会议和呼叫转移
- MESSAGE:用来发送即时消息,一般用于扩展私有功能
- INFO:用于会话中信令消息的通讯,一般用来发送DTMF信号
四、响应消息
常见的响应消息有:
- 1xx:临时响应 –表示已经接收到请求消息,正在对其进行处理
- 2xx:成功 –表示请求已经被成功接受、处理
- 3xx:重定向 --表示需要采取进一步动作,以完成该请求
- 4xx:客户端错误 –表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理。
- 5xx:服务器端错误 --表示SIP服务器故障不能完成对正确消息的处理
- 6xx:全局错误 --表示请求不能在任何SIP服务器上实现
举例说明:
- 100试呼叫(Trying)
- 180振铃(Ringing)
- 181呼叫正在前转(Call is Being Forwarded)
- 200成功响应(OK)
- 302临时迁移(Moved Temporarily)
- 400错误请求(Bad Request)
- 401未授权(Unauthorized)
- 403禁止(Forbidden)
- 404用户不存在(Not Found)
- 408请求超时(Request Timeout)
- 480暂时无人接听(Temporarily Unavailable)
- 486线路忙(Busy Here)
- 504服务器超时(Server Time-out)
- 600全忙(Busy Everywhere)
五、注册过程
六、通话过程
七、VoIP系统搭建
1、服务器
常见的开源SIP服务器有:Asterisk、FreeSWITCH、Yate、Opensip等,
如果想要搭建Asterisk可以参考我这篇文章:VoIP服务器Asterisk安装及部署。
2、客户端
SIP客户端推荐Linphone,Android、IOS、Mac、Windows全平台支持,虽然界面做的丑了些,但是功能很全。
谷歌应用商店里还有一款APP,这里大力推荐一下:Calls,设计精致且功能强大。
八、wireshark分析
开发流媒体协议,wireshark是不可或缺的神器,使用wireshark分析网络抓包可以让我们更清晰的了解sip协议。
在过滤规则中加入sip,然后点击菜单中的通话 > VoIP通话 > 流序列,即可清楚的看到sip通话整个流程信令的传输。
VoIP通话之SIP协议相关推荐
- VoIP通话-基于SIP协议的Asterisk(一)-实现流程
文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...
- VoIP通话-基于SIP协议的Asterisk(零)-Demo
文章首发及后续更新:https://mwhls.top/4116.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...
- 语音业务VOIP开发之SIP协议篇(一) —— SIP基本场景分析
一.SIP业务基本知识 1.业务介绍 会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终结 ...
- 语音业务VOIP开发之SIP协议篇(三) —— SIP报文解析
下面深入了解SIP报文: SIP是基于一个类似HTTP协议的请求应答的通讯模式.每一个通讯都包含对某个功能的请求,并且起码需要一个应答.在这个应答中,Alice的软电话发送一个含有Bbo的SIP UR ...
- 用yate2实现软VoIP语音通话(SIP协议)
转载 用yate2实现软VoIP语音通话(SIP协议) 阳光男孩 发表于 2009-01-08 2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代.3G的重要特性之 ...
- 国标28181:什么是SIP协议
前言 对讲设备作为一种专业无线通信工具,能进行一对一,多对多的群组即时通信,在应急调度和突发事故处理中是其他通信工具所不能替代的,在城市治理.公安.运输等行业有广泛的应用. 对讲机按照通信方式分模拟对 ...
- SIP协议简介(三)之注册(REGISTER)过程
注册服务是另一个常用的SIP操作.登记服务是biloxi.com代理服务器知道Bob当前地址的一个方法.在初始化的时候,或者每隔一段时间,Bob的SIP 电话发送REGISTER消息给biloxi.c ...
- 图解基于SIP协议的VoIP通话过程
基于SIP协议的VoIP通话流程: 一次通话过程的抓包情况: 呼叫请求报文内容: 呼叫响应报文内容: 客户端样机上抓的RTP/RTCP语音流数据报文: RTP数据报文内容: RTCP报文内容(RTP数 ...
- android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP
android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP 该开发包为android平台下的JNI开发包,符合标准SIP协议,支持G729语音编码. 下载地址:源代码地址 ...
最新文章
- 《Linux 命令行大全》. pdf 正式发布啦!
- Retinaface c++
- Quartz-DateBuilder解读
- effective C++ 条款 5:了解c++默认编写并调用那些函数
- 针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
- PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
- python表单防重复提交_关于PHP使用token防止表单重复提交的方法
- ENVI53 辐射校正、大气校正、影像裁剪超详细教程
- 闹钟Android实验报告,单片机实验报告(闹钟).doc
- python各城市对应的省_python实现城市和省份字典(根据城市判断属于哪个省份)...
- 易语言html5内核,精易Web浏览器支持库易语言版
- python结果四舍五入保留两位小数_python中四舍五入的正确打开方式
- 百面机器学习03-经典算法
- 基于深度学习的玫瑰向日葵分类系统
- 『力扣刷题』5275_找出井字棋的获胜者 解题代码
- es根据字段长度过滤_es根据字段长度过滤_如何进行elasticsearch查询以过滤字段的最大值?...
- R语言学习笔记(二) 逻辑运算符
- 【论文解读 ESWC 2018 | R-GCN】Modeling Relational Data with Graph Convolutional Networks
- 2017年2月历史文章汇总
- 时间戳(Unix timestamp)转换工具 - 在线工具-和-在线解析JSON
热门文章
- Handsontable 12.3.0 JavaScript 数据网格组件 -Crack
- 自研还是采购BI系统?后悔知道得太晚!
- RJ45隔离变压器作用
- 郊区春游(NC16122)状压dp
- java jsqlparse_SQL解析器 JSqlParser
- d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内
- OpenCV进阶(8)性别和年龄识别
- SQL Server 事务日志已满的解决方案
- 戴尔dell PowerEdge R440安装redhat操作系统
- CentOS 7.5 编译安装redis集成至系统服务(包括集群环境)