SIP消息结构详解

news2024/9/20 14:23:23

SIP协议的消息由三部分构成,分别是起始行(请求行+状态行)、消息头和消息体(正文)

一.起始行

1. 请求消息起始行

 起始行:由方法名请求URI协议版本组成,自身内部用逗号分割,三者之间用空格分隔

例如:INVITE sip:5005@192.33.7.98;user=phone SIP/2.0

  • 方法名:SIP协议定义了一系列方法,如INVITE、ACK、CANCEL、BYE、OPTIONS、REGISTER等,每种方法对应不同的会话操作。
  • 请求URI:标识请求的目标地址,可以是SIP URI或tel URI。
  • 协议版本:指示使用的SIP协议版本,如SIP/2.0。

注意:在SIP消息中,使用的是URI (Uniform Resource Identifier:统一资源标识符),而不是URL (Uniform Resource Locator:统一资源定位符)。虽然URL是一种具体的URI类型,但URI的范围更广,它包括URL以及URN (Uniform Resource Name:统一资源名称)。 

2. 响应消息起始行

起始行:由协议版本状态码原因码描述状态码,增强可读性组成,三者之间用空格分隔。

例如:SIP/2.0 401 Unauthorized.

  • 协议版本:与请求消息中的协议版本相同,指示响应遵循的SIP协议版本。
  • 状态码:一个三位整数,用于表示请求的处理结果。状态码的第一位数字定义了响应的类别(如1xx表示临时响应,2xx表示成功响应等)。
  • 原因码:对状态码的简短文本描述,用于提供关于响应的额外信息。

 

二. 消息头

消息头紧随起始行之后,由多个SIP头域组成,每个头域由头域名、冒号和头域值组成。

SIP消息头主要可以分为通用头(General-Header)、请求头(Request-Header)、响应头(Response-Header)和实体头(Entity-Header)四种。消息头提供了关于请求/响应的额外信息,常见的SIP头域包括:

1. 通用头(General-Header)

        通用头用于提供与消息本身相关的全局信息,这些信息对请求和响应都适用。常见的通用头包括:

  • Via:定义SIP事务的下层(传输层)传输协议,并标识响应消息将要被发送的位置。它记录了请求消息经过的路径,帮助实现消息的路由和追踪。
  • Max-Forwards:指定请求消息在到达最终目的地之前可以经过的最大代理或服务器数量。这有助于防止消息在网络中无限循环。

2. 请求头(Request-Header)

        请求头用于标识和描述SIP请求消息,它们提供了关于请求发起者、接收者以及请求类型等关键信息。常见的请求头包括:

  • From:标识请求消息的发送方。它通常包含发起者的SIP URI和可选的标签(tag),用于在对话中唯一标识发送方。
  • To:标识请求消息的接收方。它同样包含接收者的SIP URI和可选的标签(tag),用于在对话中唯一标识接收方。
  • Call-ID:为整个对话过程提供一个全局唯一的标识符。它用于将相关的请求和响应消息分组到同一个对话中。
  • CSeq:表示请求消息在对话中的序列号。它由一个整数和一个请求方法名组成,用于区分对话中的不同请求。
  • Contact:在INVITE请求中,它指定了被叫方应该使用的联系地址来接收后续的SIP消息。

3. 响应头(Response-Header)

        响应头用于描述SIP响应消息,它们提供了关于响应状态、接收者信息等关键信息。常见的响应头包括:

  • ToFromCall-ID:这些头在响应消息中与请求消息中的相应头具有相同的含义,用于标识对话的双方和会话。
  • CSeq:与请求消息中的CSeq头相对应,表示响应是针对哪个请求消息的。

4. 实体头(Entity-Header)        

        实体头用于描述SIP消息体(如果存在)的属性和内容类型。当SIP消息包含消息体时,实体头就显得尤为重要。常见的实体头包括:

  • Content-Type:指定消息体的媒体类型,如“application/sdp”表示会话描述协议(SDP)的内容。
  • Content-Length:指定消息体的长度(以字节为单位)。

三. 消息体(可选)

主要用于描述会话的具体实现方式或携带额外的信息。

1. 基本概念

定义:SIP消息体是SIP消息中可选的一部分,紧随消息头之后,并通过一个空行与消息头分隔开。它可以是描述符,也可以是任何不透明物体,如XML、SDP(会话描述协议)等。

作用:SIP消息体通常用于描述会话的具体细节,如媒体类型、编解码方式、会话参数等。对于SIP代理而言,消息体的内容是完全透明的,代理不需要理解消息体的具体内容,只需将其转发给下一个节点。

2. SIP消息体的组成

SIP消息体通常包含以下几个部分:

  • Content-Type:指示消息体的类型,如text/plainapplication/sdp等。这有助于接收方了解如何解析消息体。
  • Content-Length:表示消息体的长度(以字节为单位)。这有助于接收方正确地读取整个消息体。
  • 实际内容:根据Content-Type指定的类型,消息体可能包含文本、二进制数据或其他格式的数据。

例如: 当Content-Type为application/sdp时,消息体将包含SDP(会话描述协议)格式的会话描述信息。 

3. 注意事项

  • 当SIP消息不包含消息体时,空行也是必须的,以区分消息头和消息体(尽管此时消息体为空)。
  • SIP消息体的内容和格式取决于Content-Type字段的值。因此,在解析SIP消息时,需要先读取Content-Type字段以确定如何解析消息体。
  • SIP代理不需要理解消息体的具体内容,只需将其完整地转发给下一个节点即可。然而,在某些情况下(如进行媒体协商时),SIP消息的接收方可能需要解析消息体以获取必要的会话信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​小语种AI翻译技术新成果,传音荣获WMT 2024国际机器翻译大赛三项冠军

近日,由国际计算语言学协会(The Association for Computational Linguistics,ACL)举办的WMT 2024国际机器翻译比赛结果揭晓。传音TEX AI中心翻译团队在小语种领域再获佳绩,斩获三项翻译赛道的机器自动评测冠军,一项亚军。 WMT(Conference on Machine Translation)大赛是机器翻译…

每日一练 - IEEE 802.1Q中STP协议

01 真题题目 关于设备 SWC 的上述配置说法正确的是 (多选) A.SWC 为根交换机 B.stp instance 1 priority 4096 是配置交换机在实例 1 中的优先级为 4096, 该优先级默认为0 C.gtp edged-port enable 该命令是启用交换机 5WC 的 Ethernet 1/0/2 为边缘端口 D.sto …

手把手教你,如何利用积木易搭3D扫描仪完成文物三维建模?

当前,文物三维建模主要技术手段主要有摄影测量技术、三维激光扫描技术、结构光扫描技术。其中,积木易搭的MagicScan作为一款先进的3D扫描仪,是正是运用了结构光扫描技术的精髓,它巧妙地融合了点云相机的高精度空间数据采集能力、纹…

解析DDD开发框架Axon

在微服务架构盛行的当下,领域驱动设计(DDD)也得到了崭新的发展。在DDD中包含了聚合、领域事件等核心概念,也需要引入CQRS、事件溯源等架构模式。对于开发人员而言,如何简单而高效的实现这些核心概念和架构模式是一大痛…

C++11之constexpr

注:大前提,本篇文章是在介绍C11中的constexpr,自C14以来constexpr有了非常大的改动,如在实验中遇见与本文不符的地方还先请查阅其他资料,确定为本文错误后可留言,我会虚心接受并改正。 constexpr定义编译…

惠海H5112A降压恒流芯片IC 60V72V80V100V转24V36V48V多路共阳输出景观LED点光源

H5112A是一款外围电路简单的多功能平均电流型LED恒流驱动器,适用于5-90V电压范围的非隔离式大功率恒流LED驱动领域。芯片采用了平均电流模式控制,输出电流精度在士3%;输出电流对输入输出电压以及电感不敏感;芯片内部集成了环路补偿,外围电路更…

学习测试9-接口测试 2-抓包工具Fiddler

Fiddler 抓包工具的使用 怎么找接口信息,可以通过浏览器的开发者工具 Fiddler 是一个 HTTP 协议调试代理工具 File 菜单: Capture Traffic(或 F12):是个开关,可以控制是否把 Fiddler 注册为系统代理。当把…

Mac系统能装虚拟机吗 Mac装双系统虚拟机详细教程 macos可以用虚拟机装windows吗

随着科技的进步和用户需求的多样化,越来越多的用户希望在一台设备上运行多个操作系统。特别是对于Mac用户来说,安装虚拟机或者双系统已成为常见需求。这不仅可以满足用户在不同操作系统工作的需求,也可以让开发人员在不同的操作系统上进行测试…

【题目/训练】二叉树的创建遍历(递归非递归)

一、根据二叉树创建字符串 思路:在正常前序递归遍历的基础上,单独加上一个考虑到右子树为空的情况,如下:其结果为 1(2(4(5)(6)))&…

财伯乐伯乐遇马税务师事务所品牌发布会圆满落幕!

7月14日 ,由财伯乐主办,伯乐遇马集团、HRS卓玥学社联合主办的财伯乐&伯乐遇马税务师事务所品牌发布会在上海闵行区隆重召开。这场盛会不仅标志着财伯乐品牌的正式亮相,更预示着企业服务领域的一次创新和突破。来自行业的领袖、合作伙伴共…

React+TS前台项目实战(二十九)-- 首页构建之性能优化实现首页Echarts模块数据渲染

文章目录 前言Echart模块源码功能分析数据渲染一、HashRateEchart统计图1. 功能分析2. 代码详细注释 二、BlockTimeChart统计图1. 功能分析2. 代码详细注释 三、使用方式四. 数据渲染后效果如下 总结 前言 还记得之前我们创建的 高性能可配置Echarts组件 吗?今天我…

【刷题汇总 -- 乒乓球筐、组队竞赛、删除相邻数字的最大分数】

C日常刷题积累 今日刷题汇总 - day0141、乒乓球筐1.1、题目1.2、思路1.3、程序实现 2、组队竞赛2.1、题目2.2、思路2.3、程序实现 3、删除相邻数字的最大分数3.1、题目3.2、思路3.3、程序实现 -- dphash 4、题目链接 今日刷题汇总 - day014 1、乒乓球筐 1.1、题目 1.2、思路 …

RflySim工具链常见问题解答

7月10日,卓翼飞思实验室暑期公益培训首场直播圆满落幕,共吸引2400余名学员参与。本期直播培训以“RflySim-智能无人集群系统快速开发与验证工具链”为主题,对RflySim工具链的功能和资源框架进行了全面详细的介绍。本文将针对使用RflySim工具链…

数据结构-java中链表的存储原理及使用方式

目录 链表(线性表的链式存储) 代码实例:(链表构建,头插尾插) LinkedList LinkedList的使用: 1、构造方法 2、操作方法 LinkedList 和 ArrayList 的区别 链表(线性表的链式存储…

论文AI疑似度太高?AIGC降痕工具助你快速降低

面对论文降痕的挑战,许多人都感受过其中的困难和挑战。论文里面如果出现“引用”过多的内容,AIGC率高的情况,这个时候怎么办呢,相信大多数的人就是替换同义词或词组、删除冗余的词汇和句子,从而来增加论文的原创性。然…

数仓实践:数据回滚的实现思路

目录 一、什么是数据回滚? 二、数据回滚的作用 1. 增量更新过程中的错误处理 2.维护数据的一致性 3.支持数据同步的可靠性 三、数据回滚的实现思路 1.标识字段的应用 2.数据同步失败的处理 3.数据同步成功后的处理 四、实战案例 在数据同步时,当历史数据…

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析?

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析? Prompt模板: Initial Request: 初始请求: I have uploaded data of the number of Software Engineering Jobs in the US since May 2020. I need different visual creative…

Package hyperref Warning: Ignoring empty anchor on input line 202.

问题 使用https://github.com/yaoyz96/els-cas-templates下载的复杂模板使用overleaf编译会出现警告 解决方案 将cas-dc.cls文件中的代码调换位置,例如将下述代码位置放到文件的最后即可解决问题 \RequirePackage[colorlinks]{hyperref} \colorlet{scolor}{blac…

干货分享 | TSMaster RPC 基础入门:编程指导和使用说明

介绍RPC模块前,我们先浅聊一下RPC的相关说明,以及在什么样的情况下需要了解本文 。 1. RPC 说明 远程过程调用(RPC, Remote Procedure Call)是一种网络通信协议,使得程序可以调用另一台计算机上的程序或服务&#xff…

# Redis 入门到精通(五)-- redis 持久化(2)

Redis 入门到精通(五)-- redis 持久化(2) 一、redis 持久化–save 配置与工作原理 1、RDB 启动方式:反复执行保存指令,忘记了怎么办?不知道数据产生了多少变化,何时保存&#xff1…