一、前言

作为一名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协议相关推荐

  1. VoIP通话-基于SIP协议的Asterisk(一)-实现流程

    文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  2. VoIP通话-基于SIP协议的Asterisk(零)-Demo

    文章首发及后续更新:https://mwhls.top/4116.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  3. 语音业务VOIP开发之SIP协议篇(一) —— SIP基本场景分析

    一.SIP业务基本知识 1.业务介绍 会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终结 ...

  4. 语音业务VOIP开发之SIP协议篇(三) —— SIP报文解析

    下面深入了解SIP报文: SIP是基于一个类似HTTP协议的请求应答的通讯模式.每一个通讯都包含对某个功能的请求,并且起码需要一个应答.在这个应答中,Alice的软电话发送一个含有Bbo的SIP UR ...

  5. 用yate2实现软VoIP语音通话(SIP协议)

    转载 用yate2实现软VoIP语音通话(SIP协议) 阳光男孩 发表于 2009-01-08 2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代.3G的重要特性之 ...

  6. 国标28181:什么是SIP协议

    前言 对讲设备作为一种专业无线通信工具,能进行一对一,多对多的群组即时通信,在应急调度和突发事故处理中是其他通信工具所不能替代的,在城市治理.公安.运输等行业有广泛的应用. 对讲机按照通信方式分模拟对 ...

  7. SIP协议简介(三)之注册(REGISTER)过程

    注册服务是另一个常用的SIP操作.登记服务是biloxi.com代理服务器知道Bob当前地址的一个方法.在初始化的时候,或者每隔一段时间,Bob的SIP 电话发送REGISTER消息给biloxi.c ...

  8. 图解基于SIP协议的VoIP通话过程

    基于SIP协议的VoIP通话流程: 一次通话过程的抓包情况: 呼叫请求报文内容: 呼叫响应报文内容: 客户端样机上抓的RTP/RTCP语音流数据报文: RTP数据报文内容: RTCP报文内容(RTP数 ...

  9. android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP

    android 软电话 开发包-JNI 封装 SIP 协议,可进行二次开发应用于VOIP 该开发包为android平台下的JNI开发包,符合标准SIP协议,支持G729语音编码. 下载地址:源代码地址 ...

最新文章

  1. 《Linux 命令行大全》. pdf 正式发布啦!
  2. Retinaface c++
  3. Quartz-DateBuilder解读
  4. effective C++ 条款 5:了解c++默认编写并调用那些函数
  5. 针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
  6. PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
  7. python表单防重复提交_关于PHP使用token防止表单重复提交的方法
  8. ENVI53 辐射校正、大气校正、影像裁剪超详细教程
  9. 闹钟Android实验报告,单片机实验报告(闹钟).doc
  10. python各城市对应的省_python实现城市和省份字典(根据城市判断属于哪个省份)...
  11. 易语言html5内核,精易Web浏览器支持库易语言版
  12. python结果四舍五入保留两位小数_python中四舍五入的正确打开方式
  13. 百面机器学习03-经典算法
  14. 基于深度学习的玫瑰向日葵分类系统
  15. 『力扣刷题』5275_找出井字棋的获胜者 解题代码
  16. es根据字段长度过滤_es根据字段长度过滤_如何进行elasticsearch查询以过滤字段的最大值?...
  17. R语言学习笔记(二) 逻辑运算符
  18. 【论文解读 ESWC 2018 | R-GCN】Modeling Relational Data with Graph Convolutional Networks
  19. 2017年2月历史文章汇总
  20. 时间戳(Unix timestamp)转换工具 - 在线工具-和-在线解析JSON

热门文章

  1. Handsontable 12.3.0 JavaScript 数据网格组件 -Crack
  2. 自研还是采购BI系统?后悔知道得太晚!
  3. RJ45隔离变压器作用
  4. 郊区春游(NC16122)状压dp
  5. java jsqlparse_SQL解析器 JSqlParser
  6. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内
  7. OpenCV进阶(8)性别和年龄识别
  8. SQL Server 事务日志已满的解决方案
  9. 戴尔dell PowerEdge R440安装redhat操作系统
  10. CentOS 7.5 编译安装redis集成至系统服务(包括集群环境)