SIP消息结构详解

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消息的接收方可能需要解析消息体以获取必要的会话信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小试牛刀-Telebot区块链游戏机器人

目录 1.编写目的 2.实现功能 2.1 Wallet功能 2.2 游戏功能 2.3 提出功能 2.4 辅助功能 3.功能实现详解 3.1 wallet功能 3.2 游戏功能 3.3 提出功能 3.4 辅助功能 4.测试视频 Welcome to Code Blocks blog 本篇文章主要介绍了 [Telebot区块链游戏机器人] ❤博主…

Vue3 前置知识

1. Vue3 简介 2020年9月18日,Vue.js发布版3.8版本,代号:one Piece(海贼王)经历了:4800次提交、40个RFC、600次PR、300贡献者官方发版地址:Release v3.0.0 One Piecevuejs/,core截止2023年10月,最新的公开版…

nginx基本概念和安装

一. 简介 1.1 是什么 nginx是一个高性能的HTTP和反向代理web服务器,是一款轻量级的Web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行,特点是占有内存少,并发能力强。ngnix专为性能优化而开发&#…

【TES807】 基于XCKU115 FPGA的双FMC接口万兆光纤传输信号处理平台

板卡概述 TES807是一款基于千兆或者万兆以太网传输的双FMC接口信号处理平台。该平台采用XILINX的Kintex UltraSacle系列FPGA:XCKU115-2FLVF1924I作为主处理器,FPGA外挂两组72位DDR4 SDRAM,用来实现超大容量数据缓存,DDR4的最高数据…

【软件测试】编写测试用例篇

前面部分主要是编写测试用例的方法和方向,后面一部分是编写出具体的测试用例 目录 什么是测试用例 1.设计测试用例的万能公式 1.1.从思维出发 1.2.万能公式 1.3.弱网测试 1.4.安装与卸载测试 2.设计测试用例的方法 2.1.基于需求的设计方法 2.2.等价类 2.3…

【Git分支管理】分支合并冲突及其解决

目录 0.合并冲突 1.创建和切换dev1 ​2.dev1 bbb on dev branch ​3.master ccc on dev branch 4.dev1和master合并冲突 5.合并冲突解决 ​6.git log查看合并流程图 先提交再合并 0.合并冲突 在使用git进行合并操作的时候,在合并两个分支的时候就有可能出…

【EXCELL技巧篇】使用Excel公式,获取当前 Excel的Sheet页的名字

【通知】: 正式跟大家说个难过的消息,本来在「中国朝代史」结束后,开启的下一个专栏「中国近代史」前面几期做的还好好的,可是今天起正式通知审核不过,因为一些原因。 其实我对于历史这一块我还是很感兴趣的&#xff0…

13、Shell自动化运维编程基础

弋.目录 RHCE板块一、为什么学习和使用Shell编程二、Shell是什么1、shell起源2、查看当前系统支持的shell3、查看当前系统默认shell4、Shell 概念 三、Shell 程序设计语言1、Shell 也是一种脚本语言2、用途 四、如何学好shell1、熟练掌握shell编程基础知识2、建议 五、Shell脚本…

海外媒体投稿:精准定位目标受众!掌握这5个软文代发推广要点

在当今互联网时代,软文代发成为了一种常见的推广手段。要想取得成功,就需要掌握精准定位目标受众这一关键要素。本文将介绍5个软文代发推广要点,帮助读者了解如何更好地利用软文代发来吸引目标受众。 软文代发要点 1. 熟悉目标受众 在进行软…

怎麼使用指紋流覽器Hubstudio促進跨境電商業務?

指紋流覽器是一種基於流覽器指紋技術開發的工具,能夠模擬不同的流覽器環境和指紋資訊,實現多個帳號的同時登錄和管理。此項技術提升了帳號的安全性,同時顯著降低了帳號被封禁的風險。指紋流覽器通常用於隱私保護、安全性增強、多帳號管理、數…

房地产市场2024年展望——深度解读行业趋势

作为一名有十多年经验的地产营销人,对于2024年房地产行业的发展趋势,我认为可以从以下几个方面来探讨,如果觉得对你有帮助,请不吝一个三连(赞同喜欢收藏) 一、市场调整与分化加剧 在经历了较长时间的市场…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然,基于排序的模糊匹配(类似于Excel的VLOOKUP函数的模糊匹配模式)也属于模糊匹配的范畴,但那种过于简单,不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

ATFX集团高层受到中国驻约旦大使馆经商处接见

全球领先的差价合约经纪商ATFX宣布,在全球扩张、深耕区域市场与本地化运营的战略指导下,公司深耕区域市场方面取得显著进展,在中东市场,其高层更是获得了中国驻约旦大使馆经商处的特别接见。近日,在中国驻约旦哈希姆王…

【计算机网络】学习指南及导论

个人主页:【😊个人主页】 系列专栏:【❤️计算机网络】 文章目录 前言我们为什么要学计算机网络?计算机网络概述计算机网络的分类按交换技术分类按使用者分类按传输介质分类按覆盖网络分类按覆盖网络分类 局域网的连接方式有线连接…

更新:彩虹云商城系统 自助下单免授权无后门源码(修复完整版)

源码简介: 最新更新彩虹云商城系统,自助下单免授权无后门源码(修复完整版) 自助下单彩虹云商城系统。这玩意儿不简单,它是高效稳定的电商平台!免授权源码版本,灵活方便。源码是用PHP语言写的。…

十五、C++11常用新特性—Lambda表达式

1.基本 这个好像是很好用的,其有以下有点: 声明式的编程风格:直接匿名定义目标函数或函数对象,不需要额外写一个命名函数或函数对象。简洁:避免了代码膨胀和功能分散,让开发更加高效。在需要的时间和地点…

Java实现经纬度坐标转换---CGCS2000坐标、gps84 、GCJ-02、 BD-09

Java实现经纬度坐标转换 目录 一、坐标系统简介1.经纬度坐标系2.坐标系统3.坐标转换简介 二、地图经纬度转换工具类(CGCS2000坐标 与 WGS84坐标 互转)1.对于 CGCS2000 需要引入 proj4j依赖:2.坐标转换工具类 三、地图经纬度转换工具类(gps84 …

【Linux】多线程_7

文章目录 九、多线程8. POSIX信号量根据信号量环形队列的生产者消费者模型代码结果演示 未完待续 九、多线程 8. POSIX信号量 POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。 创建…

38 IRF+链路聚合+ACL+NAT组网架构

38 IRF链路聚合ACLNAT组网架构 参考文献 34 IRF的实例-CSDN博客 35 解决单条链路故障问题-华三链路聚合-CSDN博客 36 最经典的ACL控制-CSDN博客 37 公私网转换技术-NAT基础-CSDN博客 32 华三vlan案例STP-CSDN博客 一 网络架构 二 采用的技术 1 vlan 2 ip 3 stp 4 链…

【问题记录】Docker配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 注意点 前言 由于想用nodejs实现实时获取Mongodb数据流,但是报错显示需要有副本集的mongodb才能实现实时获取信息流,…