SIP协议说明以及报文字段解析

article/2025/9/23 6:09:09

SIP协议的概念:
SIP 协议,即 会话初始协议(Session Initiation Protocol),是一个应用层点对点协议,用于初始、管理和终止网络中的语音和视频会话,是 GB28181 的核心之一。

SIP是一个基于文本的应用层控制协议,独立于底层传输协议 TCP/UDP/SCTP,用于建立、修改和终止IP网上的双方或多方多媒体会话。 SIP 协议虽然属于应用层协议,然而 SIP 本身并不提供任何服务。但是 SIP 是通信的基础,在 SIP 这个通信的基础上可以用来构建不同的服务。

国标协议是基于sip协议开发的,国标的信令传递都依靠sip协议;在国标的实现中主要使用sip的register、 message、 invite、info、bye、subscribe、notify等消息,消息中重要的几个id:call-id、dialog-id、reg-id 。

sip消息:
• SIP消息分为请求和响应两类
• 消息中可以携带任意类型的消息体
• 用头域表示消息,实体或者消息体的相关属性

SIP消息格式:
• 这两种消息类型都由一个起始行,一个或者多个包头域,一个或多个可选的消息正文组成。
• 起始行、每一个包头行,空行、都必须由回车换行组成(CRLF)。即使消息 正文没有,也必须有一个空行跟随。
• 通用格式
SIP-Message = start-line
*message-header
CRLF
[message-body]

start-line是请求行(起始行)或者状态行:

请求行(起始行) : INVITE sip:bob@biloxi.com SIP/2.0
Request-Line : Method Request-URI SIP-Version CRLF
Method : 请求UAS处理的方法
Request-URI: 处理请求的用户或服务器的地址,并不是目的地址,是下一跳地址
SIP-Version : SIP协议版本号,供应用程序采用相应的兼容策略

状态行: SIP/2.0 200 OK
status-line:SIP-VERSION STATUS-CODE Reason-Phrase CRLF
SIP-VERSION : SIP协议版本号,供应用程序采用相应的兼容策略
STATUS-CODE :是一个3位的数字result code,用来标志处理请求的一个结果
Reason-Phrase :一个简短的Status-Code的说明

Sip消息举例:

  1. 请求报文REGISTER
    在这里插入图片描述

  2. 请求报文INVITE
    在这里插入图片描述

SIP消息的分类:
请求消息
REGISTER 注册请求,上报用户信息,完成号码绑定
INVITE 发起会话请求
CANCEL 取消一个尚未完成的请求,特别针对INVITE
ACK 为INVITE请求提供三次握手
BYE 结束会话请求
SUBSCRIBE 预定某个用户、资源或者呼叫的状态改变情况
NOTIFY 当被预定资源或者用户状态发生改变时向定制者发出通知
INFO 通话建立后,中间信息传输
OPTION 查询服务器或者是UA的能力
… 可扩展,体现SIP协议的灵活性

应答消息
1XX - 临时响应。表示请求正在处理中
2XX - 成功。表示请求处理成功
3XX - 重定向。提供重定向呼叫的号码
4XX - 客户端错误。错误来源于UAC
5XX - 服务端错误。错误来源于UAS
6XX - 全局错误。Server已知受到制约的条件

INVITE 请求的例子:
INVITE sip:bob@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob sip:bob@biloxi.com
From: Alice sip:alice@atlanta.com;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: sip:alice@pc33.atlanta.com
Content-Type: application/sdp
Content-Length: 142
(Alice’s SDP not shown)

SIP头域介绍:
头域分类

  1. 通用头域
    描述消息基本属性的头域
  2. 请求头域
    仅在请求中有效,在应答中应该被忽略
  3. 应答头域
    仅在应答中有效,在请求中应该被忽略
  4. 实体头域
    用于描述消息体内容的长度、格式和编码类型等属性

头域格式:
头域遵循在RFC2822的2.2节定义的通用头域格式。每一个头域都由一个域名加上冒号(”:”)和域值组成。
field-name:field-value

任何SIP消息都必须携带的头域:
– From
– To
– Callid
– Max-Forwards
– Via
– Cseq
任何SIP消息缺少必选头域都是一个不完整的消息
这六个头域决定了消息的传送、响应的路径、事务的匹配、多个事务关联关系

SIP请求消息中常见头域介绍:
Via:
 Via头域是用来描述请求当前经历的路径,并且标志了应答所应当经过的路径;
 当UAC创建一个请求,它必须在头域中添加一个Via域;转发请求报文的Proxy在Via头域顶端添加自己的地址,并携带branch ID参数(提供了事务的标志,是Request-URI、To-Tag、From-Tag、Call-ID和CSeq的哈希值)
 包含协议名、版本号、以及传输层协议(SIP/2.0/UDP, SIP/2.0/TCP, etc.)
 Via头域必须包含一个分支(branch)参数,用于区分请求创建的事务。根据RFC3261产生的branch ID必须用”z9hG4bK”开头

TO
 To头域定义了逻辑上请求的接收者
 允许有一个显示用的姓名,由< >封装

FROM
 From头域表示了请求的来源地
 允许有一个显示用的姓名,由< >封装
 UAC发起的请求必须包含Tag字段,用于标识一个特定的呼叫

CALL-ID
 Call-ID是一个在一系列消息中,区分一组消息的唯一标志。在对话中的任一UA的所 有请求和所有应答的Call-ID必须一致
 在UA的每次注册中,都应该是一样的
 所有的SIP UA都必须保证自己产生的Call-ID不会和其他UA产生的Call-ID重复。注意,如果是请求的重传,则不被当作一个新的请求,所以不需要新的Call-ID。

CSeq
 由一个方法(method)和一系列的顺序号码组成。方法(method)必须和请求的方法一致
 CSeq 头域是用来区分事务的顺序,随着事务递增
 UAS据此来判断该请求是一个新请求,还是一个重传的请求

Contact
 在INVITE请求和200 OK响应里面必须存在
 当UA处于防火墙后,该字段内容为防火墙URI,From字段为UA的URI地址
 允许有一个显示用的姓名,由< >封装

Expires
 Expires头域给定了消息(或者内容)过期的相关时间
 出现在INVITE消息中,表示UAC的请求有效时间
 出现在REGISTER消息中,表示Contact中URI地址的注册有效时间

Supported 和 Require
如果UAC支持服务端响应请求的SIP扩展,UAC应该在请求的时候包含一个Supported头域说明options tags描述那些SIP扩展
如果UAC要求UAS能够支持扩展,以便UAS能够处理UAC的特定请求,那么它必须在请求头中增加一个Require头域来说明处理本特定请求需要什么样的一个扩展option tags
Option tags是一个唯一标志,用来指明SIP中的新options(扩展)的。

Max-Forwards
限制请求到他的目的地中间的跳转。经过一次跳转就自动减一。如果Max-Forwards在到达目的之前就减到0,他会报告一个483(太多的路由)错误回应。
一个UAC必须为每一个请求填写一个Max-Forwards头域,这个字段的缺省值应该是70。

Route
Route头域用于强制一个请求经过一个proxy路由列表。
例如UA发出一个BYE请求,强制其经过PS
在这里插入图片描述

Record-Route
Record-Route头域是proxy在请求中增加的,用来强制会话中的后续请求经过本proxy的 。
在这里插入图片描述
后续消息路由选择策略:
Form、Contact、Via、Record-Route/Route,这几个字段均可作为路由选择依据,总的来说:协议栈中响应消息根据via携带url回复响应,后续请求消息根据上述字段中有Record-Route/Route就选Record-Route/Route,没有就根据contact字段、如果contact都没有就按照From字段携带url。

Sip消息包体:
• 请求信息都可以包含一个消息正文体
• 消息中的internet媒体类别必须在Content-Type头域中指明。
• 如果消息正文(body)通过某种形式的编码(encoding),比如压缩等等,都必须在Content-Encoding 头域中指明,否则Content-Encoding域必须忽略
• Content-Length头域中存放了包体的字节长度

例如:SDP
在这里插入图片描述

例如:DDCP
在这里插入图片描述

SIP应答消息:

应答消息分类
– 临时应答
提示进度,如果UAS不能马上接受或者拒绝邀请,那么它可以提示进度给UAC。这是通过一个101到199的临时应答实现的。
– 终结应答
很多情况下,在与方法无关的应答规范中,在非INVITE请求的情况下,我们都要求UAS不应该发送临时应答给请求者。在这种情况下,UAS应该尽快发送一个终结应答给非INVITE请求 。
请求的转发3xx
请求的接受2xx
请求的拒绝4xx/5xx/6xx

SIP应答消息中常见头域说明:
• 应答中的From头域必须和请求中的From头域相等。
• 应答中的Call-ID头域必须和请求中的Call-ID头域相等。
• 应答中的Cseq头域必须和请求中的Cseq头域相等。
• 应答中的Via头域必须和请求中的Via头域相等,而且顺序也必须相等。
• 如果请求中包含了To tag,那么应答中的To头域必须和请求中的To头域相等。
• 如果请求中的To头域并不包含Tag,那么应答中的To头域的URI必须和请求中的TO头域的URI相等;此外,UAS还必须增加一个Tag到To头域上(100(trying)应答是一个例外,在100中可能已经存在了一个tag)。这就提供了一个UAS正在应答的标志,也许就是对话ID的一部分。对同一个请求来说,它的应答必须有相同的tag标志,包括终结应答和临时应答(同样100(trying)除外)。

SIP响应消息举例:
应答报文200OK
在这里插入图片描述


http://chatgpt.dhexx.cn/article/8uXfBkWc.shtml

相关文章

SIP 协议格式简介

消息体结构&#xff0c;由三部分组成&#xff1a; Request-Line / Status-Line (请求行 / 状态行)Header (消息头)Body (正文) 示例&#xff1a; Request-Line / Status-Line 介绍 Request-Line 格式&#xff1a; MethodRequest-URISIP-VersionCRLFINVITEsip:10011.1.1.1:5060…

会话初始协议---SIP协议【详解】

目录 ​ 一、SIP协议简介 二、SIP消息的两种会话模式 1、Session Model 2、Pager Model 三、SIP消息体格式 1、请求行(request-line) 2、状态行(status-line) 3、消息头 四、SIP消息举例 1、MESSAGE消息&#xff08;Pager Model&#xff09; 2、REGISTER消息 &…

SIP协议-02 原理讲解

文章目录 1 SIP实现机制2 SIP网络元素2.1 用户代理2.2 代理服务器2.3 重定向服务器2.4 位置服务器2.5 注册服务器 3 SIP中的几个重要概念3.1 Messages(消息)3.2 Dialog(对话)3.3 Transaction(事务)3.4 Session(会话) 4 工作流程4.1 登记注册4.2 建立呼叫4.3 重定向呼叫 5 SIP超…

SIP协议(二)

语音编码&#xff0c;语音帧&#xff0c;会议室 &#xff08;1&#xff09;语音编码&#xff0c;语音帧 &#xff08;2&#xff09;补充会议室的抓包 语音编码 现主要有的语音编码有: G.711, G.723, G.726 , G.729, ILBC&#xff0c;QCELP, EVRC, AMR, SMV 各种编解码都有其…

SIP协议解析与实现

SIP协议解析与实现 本文将按照RFC3261逐步的介绍SIP协议,介绍了c和c语言的实现&#xff0c;分析了osip库的使用和实现。 第一章 概述 一 概述 SIP协议是一个基于应用层的会话控制协议。它可以创建、修改、终止多媒体会话(会议)&#xff0c;也可以邀请参与者加入到一个现有的…

SIP协议-01 简介与入门

文章目录 1 介绍1.1 VoIP技术1.2 SIP&#xff08;Session Initiation Protocol&#xff09;1.3 SIP承载1.4 SIP的几个主要标准协议 2 SIP协议栈2.1 PJSIP协议栈2.2 ReSIProcate协议栈2.3 OPAL协议栈2.4 VOCAL协议栈2.5 sipX协议栈2.6 oSIP协议栈 SIP&#xff08;Session Initia…

通信系列2: 深入浅出SIP协议

传统电话是电磁波的通信&#xff0c;当电话技术发展到IP技术时代&#xff0c;SIP协议成为了电话通信标准协议&#xff0c;不仅可以通电话、还可以收发信息、视频、开会、放PPT。事实上&#xff0c;今天的通信业已全面采用SIP协议作为通信标准&#xff0c;无论是固定电话、还是移…

SIP协议简介(一)之SIP基本的概述

本篇文章主要是对RFC3261翻译进行的&#xff0c;也包含着自己的一些理解。希望能给需要的人带来一些帮助 补充说明&#xff1a;RFC即Request For Comments&#xff08;RFC&#xff09;&#xff0c;是一系列以编号排定的文件。文件收集了有关互联网相关信息&#xff0c;以及UNI…

SIP协议(一)

熟悉SIP的一些基本常识概念相关协议&#xff0c; 网络元素&#xff0c;分层结构&#xff0c; 不同请求消息类型&#xff0c;响应消息类型 SDP的一些概念基础 SIP SIP&#xff08;Session Initiation Protocol&#xff09;会话初始化协议&#xff0c;是有IETE&#xff08;I…

SIP协议简介(比较全面)

介绍 通信提供商及其合作伙伴和用户越来越渴求新一代基于 IP 的服务。现在有了 SIP协议&#xff08;会话启动协议&#xff09;&#xff0c;一解燃眉之急。SIP协议 是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议&#xff0…

【入门篇】SIP 协议详解

本博客转载自&#xff1a;https://xiaxl.blog.csdn.net/article/details/104661248 SIP 协议详解 2013年参与过一个“视频通讯的App”项目&#xff0c;使用Sip协议通信。当时通信协议这块不是自己负责&#xff0c;加上时间紧、任务重等方面的原因&#xff0c;一直未对Sip协议进…

[Appium] Appium自动化测试原理及配置项

Appium自动化测试原理及配置项 一、App自动化测试原理 通过设计自动化脚本&#xff0c;通过发送指令到Appium Server&#xff0c;然后Appium Server转发指定到Android SDK框架来操作被测手机&#xff0c;这个类似于selenium通过浏览器驱动来操作浏览器 Android SDK不同系统不…

Appium 使用

前提是手机易经通过adb连接到电脑 1、打开Appium 点击startServer 2、打开Appium Inspector 填写下面的数据 desired_caps常用参数:platformName 平台的名称&#xff1a;iOS, Android, or FirefoxOSplatformVersion 设备系统版本号deviceName 设备…

Appium+Python第一篇:appium的基本使用及启动APP

一、appium的基本使用 appium环境安装 1、安装Android SDK &#xff08;1&#xff09;配置环境变量 用户变量的path添加以下三个路径&#xff1a; %ANDROID_HOME%\build-tools\31.0.0 %ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools - 系统变量添加&#xff1a; 变量…

Appium - 入门指南(偏重于实际操作)

前言 此文章 偏向于实操 appium支持在不同平台上&#xff08;windows&#xff0c;linux、mac&#xff09; - 使用测试脚本&#xff08;支持不同语言C #&#xff0c;json&#xff0c;Ruby等等&#xff09; - 模拟测试各个平台的app&#xff08;web、windows、mobile等&#xff…

appium原理常用指北

环境搭建外文链接 1、appium电脑手机连接 环境需要&#xff1a;jdk、sdk、appium服务、手机(打开开发者模式) 检验&#xff1a;手机数据线连接电脑&#xff0c;电脑终端输入查看命令&#xff0c;出现设备表示连接成功。 adb devices启动appium服务&#xff0c;默认端口4723就…

手机APP自动化 Appium教程

Appium原理与安装 Appium 是一个移动 App &#xff08;手机应用&#xff09;自动化工具。 手机APP 自动化有什么用&#xff1f; 自动化完成一些重复性的任务比如微信客服机器人爬虫自动化测试 Appium 自动化方案的特点&#xff1a; 开源免费支持多个平台支持多种类型的自动…

Appium 简介

1.1 Appium 概述 Appium 是一个开源、跨平台&#xff08;测试程序跨平台、支持多平台上的app测试&#xff09;、多语言支持的&#xff08;开发语言&#xff09;移动应用自动化工具。 1.1.1 测试对象 Appium 的测试对象包括&#xff1a;原生 app&#xff0c;混合 app&#xf…

Appium 简明教程

转载&#xff1a;Appium 简明教程&#xff1a;http://www.testclass.net/appium https://www.cnblogs.com/fnng/p/4540731.html Appium 官网&#xff1a;http://appium.io/ Github 地址&#xff1a;https://github.com/appium/appium 主要包括以下几部分&#xff1a; appium新…

Appium框架原理和工作流程

一、Appium的框架原理 Appium是在手机操作系统自带的测试框架基础上实现的&#xff0c;Android和iOS的系统上使用的工具是&#xff1a; Android4.2以后是基于UIAutomator框架实现查找注入事件&#xff0c;iOS是UIAutomation Appium的架构原理如图&#xff0c;由客户端和服务…