SIP 协议路由规则详解

news2024/9/23 10:00:25

文章目录

  • SIP 路由关键字段
  • SIP 路由图解

SIP 路由关键字段

SIP 协议实际上和 HTTP 类似,都是基于文本、可阅读的应用层协议,二者的不同之处在于 SIP 协议是有状态的。在 SIP 协议中,影响报文路由的相关字段如下表所示,总结起来如下:

  1. SIP 请求(INVITE、ACK 等带 Method 的包)
    请求路由同时受到 Request-URI 和 Route 头的影响,其中 Route 的优先级更高。Route 为之前请求的对应响应中的 Record-Route 复制而来,SIP 请求每抵达一个 SIP 服务器,该服务器就会将自己的地址从 Route 中移除;Request-URI 则会被之前的交互报文中对端的 Contact 替换
  2. SIP 响应(180、200 等带状态码的包)
    响应路由只受到 Via 头影响,SIP 响应包会沿着 Via 记录的地址依次返回服务器,每返回到一个 SIP 服务器,该服务器就会把自己的地址从响应报文的 Via 中移除
字段解释功能
Request-URISIP 请求报文的请求行格式为 METHOD Request-URI SIP-Version,例如请求行 INVITE sip:9@127.0.0.2:5080 SIP/2.0sip:9@127.0.0.2:5080 就是 Request-URIRequest-URI 标识了报文的目标地址,如果在当次请求之前 SIP 通信双方已经进行过交互,则之前响应中的 Contact 会被复制为 Request-URI。在路由规则上,如果报文中不存在 Route 字段,则请求会被直接发往 Request-URI 指向的地址
RouteSIP 请求报文的请求头,可存在多个Route 字段标识了SIP 请求必须要经过的 SIP 服务器地址,该字段受到在本次请求之前的响应中的 Record-Route 字段影响。SIP 请求每到达一个 Route 指向的 SIP 服务器,该 SIP 服务器就会从 Route 中移除自己的地址
ViaSIP 请求、响应报文的头,可存在多个Via 被 SIP 服务器插入请求报文中,标识了请求经过的 SIP 服务器,可以用来检查路由环。该字段头只会影响当前请求的响应的路由,SIP 响应沿着 Via 从上到下原路返回,每经过一个 SIP 服务器,该服务器就会将响应报文 Via 中属于自己的地址移除
Record-RouteSIP 请求、响应报文头,可存在多个Record-Route 一般是被 SIP 代理服务器插入到请求中的,这个字段表明当前代理服务器关心这个 SIP 会话后续的请求,强制后续 ACK 、BYE 之类的请求必须要经过自己这边。该字段会随着响应报文回到最初发起请求的 SIP 端,并被复制到后续请求的 Route 头域中
ContactSIP 请求、响应报文的头表明 SIP 终端的联系地址,请求响应的双方都会将自己的 Contact 放在报文中,该字段将会影响双方后续请求的 Request-URI

SIP 路由图解

以下是一个 SIP 会话建立的交互时序图,其中涉及到了一个 FreeSWITCH 服务器、一个 SIP 代理服务器以及一个 SIP 终端,笔者将其大致划分为 3 个部分:

  1. INVITE 转发
    1. INVITE 请求从 FreeSWITCH 服务器发出,此时请求报文中的 Request-URI 为 sip:9@127.0.0.2:5080,Via 只有一个 127.0.0.1 表明请求只经过了一个 FreeSWITCH 服务器
    2. SIP 代理服务收到 INVITE 请求,首先将自己的地址加入到 Via 中,随后又将其加入到 Record-Route 头表明自己关心这个会话的后续请求。最后,SIP 代理服务器将请求的 Request-URI 替换为目标 SIP 终端的真实地址,并按照路由规则将请求转发到当前 Request-URI 指向的 SIP 终端
  2. 200 响应
    1. SIP 终端收到 INVITE 请求后,首先开始振铃,并将 180 响应包通过 Via 记录的地址一层层返回。当用户接通后,SIP 终端才产生 200 响应报文,并将自身的 Contact 和收到的 INVITE 请求中携带的 Record-Route 一并封装到报文中,完成后沿着 Via 记录将响应送回到 SIP 代理服务器
    2. SIP 代理服务收到 200 响应后,首先将自身的地址从 Via 中移除,然后继续沿着 Via 将报文送回到 FreeSWITCH 服务器
  3. ACK 转发
    1. FreeSWITCH 收到 200 响应后,判断 SIP 会话可以建立,则生成 ACK 包与 SIP 终端确认。此时之前 INVITE 请求对应的 200 响应中的 Contact 被作为 ACK 请求的 Request-URI,其中的 Record-Route 则被复制为 ACK 请求的 Route 头。ACK 请求报文生成完毕,按照 Route 头优先级高于 Request-URI 的路由规则,请求包被发往 SIP 代理服务器
    2. SIP 代理服务器收到 ACK 请求包,首先将自己的地址从 Route 中移除,此时 Route 中已经没有数据,则根据路由规则将请求转发给 Request-URI 指向的 SIP 终端即可

在这里插入图片描述

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

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

相关文章

给微软.Net runtime运行时提交的几个Issues

前言 因为目前从事的CLRJIT,所以会遇到一些非常底层的问题,比如涉及到微软的公共运行时和即时编译器或者AOT编译器的编译异常等情况,这里分享下自己提的几个Issues。原文:微软.Net runtime运行时提交的几个Issues Issues 一.issues one 第一个System.Numerics.Vecto…

深度强化学习。介绍。深度 Q 网络 (DQN) 算法

马库斯布赫霍尔茨 一. 引言 深度强化学习的起源是纯粹的强化学习,其中问题通常被框定为马尔可夫决策过程(MDP)。MDP 由一组状态 S 和操作 A 组成。状态之间的转换使用转移概率 P、奖励 R 和贴现因子 gamma 执行。概率转换P(系统动…

SaaS多租户系统架构设计

前言:多租户是SaaS(Software-as-a-Service)下的一个概念,意思为软件即服务,即通过网络提供软件服务。SaaS平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作的实际需求,通过互联网…

万字长文解析AQS抽象同步器核心原理(深入阅读AQS源码)

AQS抽象同步器核心原理 在争用激烈的场景下使用基于CAS自旋实现的轻量级锁有两个大的问题: CAS恶性空自旋会浪费大量的CPU资源。在SMP架构的CPU上会导致“总线风暴”。 解决CAS恶性空自旋的有效方式之一是以空间换时间,较为常见的方案有两种&#xff…

ubuntu使用二进制安装mysql常见问题

一、安装mysql完毕后初始化失败 【/usr/local/mysql/bin】./mysqld --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data/ --initialize 输入命令:apt-get install libaio1 libaio-dev 二、初始化成功后重启服务失败 rootyanhong:/usr/local/…

4 hadoop集群配置案例

3&#xff09;配置集群 &#xff08;1&#xff09;核心配置文件&#xff0c;core-site.xml cd $HADOOP_HOME/etc/hadoopvim core-site.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text…

java八股文面试[多线程]——并发三大特性 原子 可见 顺序

AutomicInteger : volatile CAS 总线LOCK MESI 两个协议 TODO volatile的可见性和禁止重排序是怎么实现的&#xff1a; DCL场景&#xff1a; new操作会在字节码层面生成两个步骤&#xff1a; 分配内存、调用构造器 然后把引用赋值给singleton 不加volatile则会发生指令重…

Windows下MATLAB调用Python函数操作说明

MATLAB与Python版本的兼容 具体可参看MATLAB与Python版本的兼容 操作说明 操作说明请参看下面两个链接&#xff1a; 操作指南 简单说明&#xff1a; 我安装的是MATLAB2022a和Python3.8.6&#xff08;安装时请勾选所有可以勾选的&#xff0c;包括路径&#xff09;。对应版本安…

基于闪电连接过程算法优化的BP神经网络(预测应用) - 附代码

基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于闪电连接过程算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.闪电连接过程优化BP神经网络2.1 BP神经网络参数设置2.2 闪电连接过程算法应用 4.测试结…

基于阿基米德优化算法优化的BP神经网络(预测应用) - 附代码

基于阿基米德优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于阿基米德优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.阿基米德优化优化BP神经网络2.1 BP神经网络参数设置2.2 阿基米德优化算法应用 4.测试结…

华为OD机试 - 最少数量线段覆盖 - 二叉树(Java 2023 B卷 100分 考试抽中题)

目录 一、题目描述二、输入描述三、输出描述四、解题思路四、Java算法源码五、效果展示1、输入2、输出3、说明4、复杂一点5、理性分析一下 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 给定坐标轴上的一组线段&#xff0c;线段的起点和终点均为整数…

第三讲,三维空间刚体运动

一个刚体在三维空间中的运动是如何描述的。我们当然知道这由一次旋转加一次平移组成。平移确实没有太大问题&#xff0c;但旋转的处理是件麻烦事。我们将介绍旋转矩阵、四 元数、欧拉角的意义&#xff0c;以及它们是如何运算和转换的。 1.向量&#xff0c;坐标系和旋转矩阵 点…

【LeetCode-中等题】19. 删除链表的倒数第 N 个结点

文章目录 题目方法一&#xff1a;节点加入集合找索引方法二&#xff1a;直接计算长度,然后找出要删除的节点的前一个节点方法三&#xff1a;栈方法四&#xff1a;前后双指针 题目 这题的关键在与两个点 一定要设置一个哑结点&#xff0c;防止删除第一个元素时&#xff0c;导致空…

C语言基础之——指针(下)

前言&#xff1a;本篇文章将继续讲解有关指针的剩余基础知识。 学无止境&#xff0c;一起加油叭&#xff01;&#xff01; 目录 一.指针运算 1.指针 - 整数 2.指针的关系运算 3.指针 - 指针 二.指针与数组 三.二级指针 四.指针数组 总结 一.指针运算 指针运算包括以下三…

Tableau可视化入门实践-2

目录 折线图1.导入excel文件数据2.建立折线图并添加标签 双轴折线图 折线图 1.导入excel文件数据 2.建立折线图并添加标签 双轴折线图 行标签拖进两个度量建立上下两个折线图 在第二个折线图纵轴&#xff0c;右键选择“双轴”

DiskCatalogMaker for Mac简单智能快速的磁盘管理工具

DiskCatalogMaker是一款Mac上的磁盘目录管理工具。它可以帮助用户快速创建和管理磁盘目录&#xff0c;方便查找和访问存储在磁盘上的文件和文件夹。它具有快速扫描和索引功能&#xff0c;生成详细的目录列表&#xff0c;支持关键字搜索和自定义标签。 此外&#xff0c;DiskCat…

k8s 查看加入主节点命令 k8s重新查看加入节点命令 k8s输入删除,重新查看加入命令 kuberadm查看加入节点命令

1. 使用kuberadm 安装成功后&#xff0c;clear清除了屏幕数据&#xff0c;加入命令无法查看&#xff0c;使用如下&#xff0c;重新查看node如何加入主节点命令&#xff1a; kubeadm token create --print-join-command --ttl 0 2.画圈的全部是&#xff0c;都复制&#xff0c;在…

反转链表00

题目链接 反转链表 题目描述 注意点 链表中节点的数目范围是 [0, 5000] 解答思路 迭代或递归解决本题 代码 方法一&#xff1a; // 迭代 class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode pre…

【原创】jmeter并发测试计划

bankQPS 创建线程组 设置并发参数 HTTP请求GET 添加HTTP请求 GET请求 查看结果树 HTTP请求 POST 添加HTTP请求 参数必须设置头信息格式&#xff1a; 添加HTTP头信息 查看结果树 可以选择&#xff0c;仅查看错误日志 汇总报告

【LLM】解析pdf文档生成摘要

文章目录 一、整体思路二、代码三、小结Reference 一、整体思路 非常简单的一个v1版本 利用langchain和pdfminer切分pdf文档为k块&#xff0c;设置overlap等参数先利用prompt1对每个chunk文本块进行摘要生成&#xff0c;然后利用prompt2对多个摘要进行连贯组合/增删模型可以使…