【死磕opensips】sip协议解析

您所在的位置:网站首页 sip解析库 【死磕opensips】sip协议解析

【死磕opensips】sip协议解析

2024-01-12 21:50| 来源: 网络整理| 查看: 265

【死磕opensips】sip协议解析 闲话webrtc专栏opensips专栏 开始sip历史什么是sipsip 会话协议流程sip消息格式请求行状态行消息头 结束

闲话

最近一直在跟一个关于音视频通话的项目,之前从webrtc结合coturn打洞转发思路,到现在关于opensips的思路,都是在慢慢摸索前进,当前期的研究不是没有结果的,问题是想要根据那些做成产品有点天方夜谭了;毕竟要走的路还有很远,坑还有很多,咱也不是怕折了腿的人,但是老总催的紧,咱不得不选择一个比较成熟的技术打底,毕竟无到有很难,还是要交一些学费的。 下面是我之前的笔记,有兴趣可以了解一下。

webrtc专栏

【webrtc专栏】 【java的P2P打洞通讯学习之路(一)- 整理思路】 【java的P2P打洞通讯学习之路(二)- 初识webRTC】 【java的P2P打洞通讯学习之路(三)- coturn服务器的搭建】

【海思3518ev200学习记录(1)- 根据用户手册烧录系统镜像】 【海思3518ev200学习记录(2) - 交叉编译官方webRTC】 【海思3518ev200学习记录(3) - 编译 amazon-kinesis webrtc嵌入式实现】 【海思3518ev200学习记录(4) - 基于海思源码分段录制音频文件】 【海思 3518 ev 200编译 报错 collect2: 错误: ld 返回 1】

opensips专栏

【opensips专栏】

开始

回归正题简单介绍一下sip。

sip历史

sipv1回话协议最早是在1996年由Mark Handley 和 Eve Schooler起草的,在1999年成为标准协议。后续经过多为前辈的贡献有了现在成熟sip技术。

什么是sip

SIP(Session Initiation Protocol,会话初始协议)可以支持并应用于语音、视频、数据等多媒体业务。sip提供了用户地址信息(用户终端地址),确定被叫方参与通讯的意愿,确定使用的介质和介质参数,振铃以及会话终止。sip 支持Presence(呈现)、Instant Message(即时消息)等特斯业务可以说,有IP网络的地方就有SIP协议的存在。

sip 会话协议流程

在这里插入图片描述 主叫方A呼叫被叫方B:

步骤1:主叫方A发送INVITE请求到代理服务器; 步骤2:代理服务器发送100 Trying 响应主叫方A; 步骤3~6:代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求; 步骤7~9:被叫方B生成的180 振铃响应,返回给主叫方A; 步骤10~12:被叫方B生成的200 OK响应,返回给主叫方A; 步骤13~17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立; 步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE请求来终止会话; 步骤21~23:主叫方A发送200 OK响应来确认BYE,会话终止。 在这里插入图片描述

sip消息格式

sip的消息格式与http类似,由三部分组成: line 请求行(request-line) or 状态行(status-line) Several Headers 消息头(header) Message Body 消息正文(body)

请求行 method: 确定请求的类型SIP URI: 确定请求的目的地SIP protocol version:SIP协议版本 例如:< METHOD> < Request-URI> SIP/2.0 SIP版本2.0中的六种基本方法INVITE,REGISTER,BYE,ACK,CANCEL,OPTIONS。 method的所有类型: Method类型说明INVITE启动/修改会话ACK确认收到对邀请的最终回复CANCEL取消挂起的邀请UPDATE更新挂起会话的参数BYE结束会话OPTIONS请求支持的功能REGISTER将IP地址附加到SIP URIREFER请求UA访问URI或URLSUBSCRIBE建立订阅以接收有关事件的通知NOTIFY传达特定事件发生的信息PRACK确认收到可靠传输的临时响应MESSAGE使用SIP传输即时消息INFO将呼叫信令信息发送到另一个与其建立了媒体会话的用户代理 状态行 SIP protocol version:SIP协议版本

例如: SIP/2.0 < Status-Code> < Reason-Phrase>

status-code:数字响应代码 相应代码中第一个数字分为六种情况 状态码说明1xx临时响应,表示消息正在处理2xx成功响应,表示消息被成功接收3xx重定向响应,表示临时转移或永久转移4xx客户端错误,表示客户端请求中有服务器无法理解的信息5xx服务器错误,表示服务器无法完成请求,或服务器不可用6xx全局故障,表示所有服务器都无法完成请求信息

所有状态码示例:

状态码说明100尝试呼叫180振铃181正在转接呼叫182排队183会话进度200成功响应202认可300多项选择301永久移除302临时转移303见其他305使用代理380代替服务400错误请求401未授权402需要付款403禁止404未找到服务器405方法不允许406请求不被接受407代理身份验证408请求超时409请求冲突410请求不见了411请求所需长度413请求实体过大414请求URL过长415不支持的媒体类型420错误扩展480暂时不可用481呼叫分支/事务不存在482检测到环路483跳太多了484地址不完整485请求不明确486这里很忙487请求已取消488这里不能接受500内部服务器错误501未实施502坏网关503服务不可用504网关超时505不支持SIP版本600全局故障603拒绝604在任何地方都不存在606不可接受 reason phrase:理由短语 消息头

示例:

INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 10.43.122.3;branch=1 From: sip:[email protected];tag=4ad340f To: sip:[email protected] Contact: Call-ID: [email protected] Cseq: 12442 INVITE v=0 o=user 14341433 14341433 IP4 10.43.122.3 s=. t=0 0 c=IN IP4 10.43.122.3 m=audio 13222 RTP/AVP 0 a=rtpmap:0 PCMU/8000

Header 字段含义说明:

Header说明Call-ID用于唯一标识两个用户代理之间的调用Contact用于传递请求的原始资源或请求发起人的URLCSeq命令序列识别顺序错误的请求和重传From标识请求的发起人To表示请求的收件人Subject表示媒体会话主题的可选标题Content-Length消息正文中的八位字节数Content-Type表示Internet媒体类型。如果不存在,则假定应用程序/SDPUser Agent提供有关用户代理的附加信息,例如制造商Server提供有关用户代理服务器的附加信息Via记录请求所采用的路由,并用于路由响应Record-Route用于强制UAs之间的所有请求通过代理路由Route强制路由通过从记录路由头中提取的路径Max-forwards限制一个请求在到达目的地的途中可以进行的跳数(70)Authorization将用户代理的凭据传送到服务器Encryption用于指定SIP消息中已加密的部分Hide请求下一跳代理对Via头进行加密Priority允许用户代理设置请求的优先级:例如紧急、紧急Supported列出一个或多个在用户代理或服务器中实现的选项Unsupported表示服务器不支持的功能 结束

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3