SIP协议简单介绍_sip 三次握手-程序员宅基地

技术标签: freeswitch  网络/协议  SIP协议  SIP工作流程  

SIP会话初始协议(Session Initiation Protocol) 是一个控制发起、修改和终结交互式多媒体会话的信令协议。


SIP的六种基本方法:
在这里插入图片描述
另外,还有一些扩展方法SUBSCRIBE、NOTIFY、MESSAGE、REFER、INFO等。

SIP必须包含的头域:
在这里插入图片描述

SIP响应消息状态码:

 1xx 组的响应为临时状态,表明呼叫进展的情况;
 2xx 表明请求已被成功收到、理解和接受;
 3xx 为重定向,表明SIP请求需要转向到另一个UAS处理;
 4xx 表明请求失败,这种失败一般是由客户端或网络引起的,如密码错误、空号等,客户端应该重新修改请求,重新发送;
 5xx 为服务器内部错误,表明服务器出错,不能响应合法的请求;
 6xx 为全局性错误,如 600 Busy Everywhere。

SIP注册流程:

在这里插入图片描述
描述:

(1) Alice向FreeSWITCH发起注册请求。
(2) FreeSWITCH返回401消息,向Alice发起Challenge(挑战)。
(3) Alice将用户密码与收到Challenge信息进行计算后,把计算结果附加到注册请求上重新注册。
(4) FreeSWITCH收到新的注册请求后,对信息解密认证,如果认证通过返回200 OK,告诉Alice注册成功,并将Alice的联系地址记录下来。如果认证失败返回403 Forbidden或其他消息。

UA间直接呼叫流程:
在这里插入图片描述
描述:

(1) Bob向Alice发送INVITE消息请求建立SIP会话。
(2) Alice收到INVITE消息后,回复100 Trying消息,告知Bob已经收到消息,正在处理。
(3) Alice的电话振铃,并回复给Bob 180 Ringing消息,Bob收到此消息播放回铃音,以提示Bob对方正在振铃。
(4) Alice接听电话,向Bob发送200 OK消息。
(5) Bob收到200 OK消息后,发送ACK确认消息。
(6) 使用RTP协议传输语音数据进行通话。
(7) Alice挂断电话,发送BYE消息给Bob。
(8) Bob收到BYE消息后,发送200 OK,至此通话结束。

通过B2BUA(freeSWITCH)呼叫流程:
在这里插入图片描述
在这里插入图片描述

描述:

(1) Bob向FreeSWITCH发送INVITE消息,请求建立一个呼叫。
(2) FreeSWITCH收到INVITE消息,回复100 Trying告诉Bob已经收到消息,正在处理。
(3) FreeSWITCH发现不知道Bob是谁,所以向Bob发送407 Authentication Required 消息请求认证。
(4) Bob收到407消息后,回复ack确认已经收到。
(5) Bob重新发送带有认证信息的INVITE消息,请求建立呼叫。
(6) FreeSWITCH收到带认证信息的INVITE消息,回复100 Trying告诉Bob已经收到消息,正在处理。(Bob和FreeSWITCH的通道已经建立,称为一个Channel,a-lag建立成功)
(7) FreeSWITCH知道Bob要呼叫Alice,此时去查找路由(拨号计划diaplan)和本地数据库,得到Alice的联系地址(Contact)。
(8) FreeSWITCH新启动一个UA去连接Alice,发送INVITE消息,同时携带着a-lag的的某些信息(如:来电显示等)
(9) Alice端收到INVITE,向FreeSWITCH回复100 Trying消息,告知FreeSWITCH已经正常接收INVITE消息。
(10) Alice的话机振铃并向FreeSWITCH发送180 Ringing消息,通知FreeSWITCH Alice的话机已经振铃。
(11) FreeSWITCH收到Alice的180消息后,可以选择直接给Bob回180消息,也可以选择给Bob回183消息。(180消息由Bob自身产生回铃音,183消息由FreeSWITCH通过RTP发送回铃音给Bob,所以183消息这种技术支持的就是彩铃。) 默认是给Bob发送183消息。
(12) Bob收到183消息后开始播放回铃音,此时Alice振铃,Bob播放回铃音。
(13) 当Alice接起电话后,会发送200 OK给FreeSWITCH。
(14) FreeSWITCH收到Alice发送的200 OK之后,回送ACK,同时FreeSWITCH立即向Bob发送200 OK消息。
(15) Bob收到200 OK之后,会话已经建立,同时会回送ACK给FreeSWITCH。
(16) Bob和Alice通过RTP协议进行通话。
(17) Alice挂机,向FreeSWITCH发送BYE消息。
(18) FreeSWITCH收到BYE消息之后,回送200 OK,释放b-lag。
(19) 同时FreeSWITCH给Bob发送BYE消息,消息中包含挂机原因等内容。
(20) Bob收到消息之后,回送200 OK,FreeSWITCH收到200 OK后,释放a-lag。至此通话结束。

INVITE - 200 - ACK 三次握手
INVITE - 1xx - 200 一个事务
BYE - 200 一个事务

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jiajiren11/article/details/90758334

智能推荐

《第一行代码》(第二版)广播的问题及其解决_代码里的广播错误-程序员宅基地

文章浏览阅读2.6k次,点赞5次,收藏13次。1)5.2.1弹出两次已连接或者未连接这是因为你同时打开了流量和WiFi,他就会发出两次广播。2)5.3.1中发送自定义广播问题标准广播未能弹出消息:Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");sendBroadcast(intent);上述已经失效了。修改:Intent intent=new Intent("com.example.broadcasttest...._代码里的广播错误

K8s 学习者绝对不能错过的最全知识图谱(内含 58个知识点链接)-程序员宅基地

文章浏览阅读249次。作者 |平名 阿里服务端开发技术专家导读:Kubernetes 作为云原生时代的“操作系统”,熟悉和使用它是每名用户的必备技能。本篇文章概述了容器服务 Kubernet..._k8知识库

TencentOS3.1安装PHP+Nginx+redis测试系统_tencentos-3.1-程序员宅基地

文章浏览阅读923次。分别是etc/pear.conf,etc/php-fpm.conf, etc/php-fpm.d/www.conf,lib/php.ini。php8安装基本一致,因为一个服务期内有2个版本,所以注意修改不同的安装目录和端口号。可以直接使用sbin下的nginx命令启动服务。完成编译安装需要gcc支持,如果没有,使用如下命令安装。安装过程基本一致,下面是安装7.1.33的步骤。执行如下命令,检查已经安装的包和可安装的包。执行如下命令,检查已经安装的包和可安装的包。执行如下命令,检查已经安装的包和可安装的包。_tencentos-3.1

urllib.request.urlopen()基本使用_urllib.request.urlopen(url)-程序员宅基地

文章浏览阅读3.1w次,点赞21次,收藏75次。import urllib.requesturl = 'https://www.python.org'# 方式一response = urllib.request.urlopen(url)print(type(response)) # <class 'http.client.HTTPResponse'># 方式二request = urllib.request.Req..._urllib.request.urlopen(url)

如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?-程序员宅基地

文章浏览阅读1.5k次,点赞12次,收藏15次。如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?

RS485总线常识_rs485 差分走綫間距-程序员宅基地

文章浏览阅读1.2k次。RS485总线常识 2010-10-12 15:56:36| 分类: 知识储备 | 标签:rs485 总线 传输 差分 |字号大中小 订阅RS485总线RS485采用平衡发送和差分接收方式实现通信:发送端将串行口的TTL电平信号转换成差分信号A,B两路输出,经过线缆传输之后在接收端将差分信号还原成TTL电平信号。由于传输线通常使用双绞线,又是差分传输,所_rs485 差分走綫間距

随便推点

移植、制作uboot、Linux(一)_uboot制作-程序员宅基地

文章浏览阅读621次。u-boot、linux烧录_uboot制作

windows下安装git和gitbash安装教程_64-bit git for windows setup.-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏44次。windos上git安装,git bash安装_64-bit git for windows setup.

环形链表(算法java)_java 实现环形链表-程序员宅基地

文章浏览阅读196次。环形链表(算法java)的两种解决方法_java 实现环形链表

docker部署Airflow(修改URL-path、更换postgres -->myslq数据库、LDAP登录)_airflow docker-程序员宅基地

文章浏览阅读5.7k次。Airflow什么是 Airflow?Airflow 的架构Airflow 解决哪些问题一、docker-compose 安装airflow(postgres)1、创建启动文件airflow-docker-compose.yml.1.1、添加挂载卷,需要修改airflow-docker-compose.yml的位置2、创建本地配置文件airflow.cfg2.1、如果想修改WEB URL地址,需要修改airflow.cfg中以下两个地方3、之后up -d直接启动即可web访问地址:二、存储数据库更换post_airflow docker

计算机毕业设计springboot高校教务管理系统532k79【附源码+数据库+部署+LW】-程序员宅基地

文章浏览阅读28次。选题背景:随着社会的发展和教育的普及,高校教务管理系统在现代高等教育中扮演着至关重要的角色。传统的手工管理方式已经无法满足高校日益增长的规模和复杂的管理需求。因此,开发一套高效、智能的教务管理系统成为了当今高校管理的迫切需求。选题意义:高校教务管理系统的开发具有重要的意义和价值。首先,它可以提高高校教务管理的效率和准确性。通过自动化处理学生选课、排课、考试安排等繁琐的事务,大大减轻了教务人员的工作负担,提高了工作效率。同时,系统可以实时更新学生信息和课程信息,减少了数据错误和冗余,保证了管理的准确性

javaint接收float_Java Integer转换double,float,int,long,string-程序员宅基地

文章浏览阅读132次。首页>基础教程>常用类>常用 Integer类Java Integer转换double,float,int,long,stringjava中Integer类可以很方便的转换成double,float,int,long,string等类型,都有固定的方法进行转换。方法double doubleValue() //以 double 类型返回该 Integer 的值。flo..._java integet接收float类型的参数

推荐文章

热门文章

相关标签