SIP路由机制解析

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型 本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。 阅读详情


在前面已经陆续介绍了SIP重要头域、注册流程、会话流程等SIP相关知识,现在再来介绍一下SIP中的路由机制。

总的来说,SIP中存在两种路由场景:
1,请求消息的路由
2,响应消息的路由

其中,响应消息的路由非常简单,就是完全依靠Via来完成的,具体请见我关于RFC3261中会话流程的分析。
下面我们只谈SIP请求消息的路由。

首先我们要搞清楚什么是严格路由和松散路由。

严格路由(Strict Routing):
可以理解为比较“死板”的理由机制,这种路由机制在SIP协议的前身RFC 2534中定义,其机制非常简单。
要求接收到的消息的request-URI必须是自己的URI,然后它会把第一个Route头域“弹”出来,并把其中的URI作为新的request-RUI,然后把该消息路由给该URI。

松散路由(Louse Routing,lr):
该路由机制较为灵活,也是SIP路由机制的灵魂所在,在SIP根本大典RFC 3261中定义。
下面介绍一下一个松散路由的Proxy的路由决策过程:

1,Proxy首先会检查消息的request-URI是不是自己属于自己所负责的域。如果是,它就会通过定位服务将该地址“翻译”成具体的联系地址并以此替换掉原来的request-URI;否则,它不会动request-URI。

2,Proxy检查第一个Route头域中的URI是不是自己的,如果是,则移除之。

3,前面两项都是准备工作,下面该进行真正的路由了。如果还有Route头域,则Proxy会把消息路由给该头域中的URI,否则就路由给request-URI。至于如何从下一跳URI确定出IP地址,端口以及传输协议那是另外一回事了。

对于前面的3条规则,我们可以简单总结为一句话:Route的优先级高于request-URI的。

好,了解了两种路由机制,我们再来了解一下Route和Record-Route。
如果说Via是为了给一个请求消息的响应消息留后路,那么Record-Route就是为了给该请求消息之后的请求消息留后路。
【说明】一个SIP消息每经过一个Proxy(包括主叫),都会被加上一个Via头域,当消息到达被叫后,Via头域就记录了请求消息经过的完整路径。被叫将这些Via头域原样copy到响应消息中(包括各Via的参数,以及各Via的顺序),然后下发给第一个Via中的URI,每个Proxy转发响应消息前都会把第一个Via(也就是它自己添加的Via)删除,然后将消息转发给新的第一个Via中的URI,直到消息到达主叫。

而在一个请求消息的传输过程中,Proxy也可能(纯粹自愿,如果它希望还能接收到本次会话的后续请求消息的话)会添加一个Record-Route头域,这样当消息到达被叫后里面就有会有0个或若干个Record-Route头域。被叫会将这些Record-Route头域并入路由集,并并入自己的路由集,随后被叫在发送请求消息时就会使用该路由集构造一系列Route头域,以便对消息进行路由。
然后,被叫会像上面对待Via头域一样,将Record-Route头域全部原样copy到响应消息中返回给主叫。
主叫收到响应消息后也会将这些Record-Route头域并入路由集,只是它会将其反序。该会话中的后续请求消息的Route头域就会通过路由集构造。
【注意】Record-Route头域不用来路由,而只是起到传递信息的作用。
Record-Route头域不是路由集的唯一来源,路由集还可以通过手工配置等方式得到。


只是描述还是比较抽象,下面就以RFC 3261中的两个实例来解释一下。

路由示例1:

场景:
两个UE间有两个Proxy,U1 -> P1 -> P2 -> U2,并且两个Proxy都乐意添加Record-Route头域。

消息流:
【说明】由于我们在此只关心SIP路由机制,因此下面消息中跟路由机制无关的头域都省略了。

U1发出一个INVITE请求给P1(P1是U1的外拨代理服务器):
   INVITE sip:callee@domain.com SIP/2.0
   Contact: sip:caller@u1.example.com

P1
不负责域domain.com,消息中也没有Route头域,因此通过DNS查询得到负责该域的Proxy的地址并且把消息转发过去。这里P1在转发前就添加了一个Record-Route头域,里面有一个lr参数,说明P1是一个松散路由器,遵循RFC3261中的路由机制。
   INVITE sip:callee@domain.com SIP/2.0
   Contact: sip:caller@u1.example.com
   Record-Route: <sip:p1.example.com;lr>
P2
负责域domain.com,因此它通过定位服务得到[email]callee@domain.com[/email] 对应的设备地址是[email]callee@u2.domain.com[/email] ,因此用新的URI重写request-URI。消息中没有Route头域,因此它就把该消息转发给request-URI中的URI,转发前它也增加了一个Record-Route头域,并且也有lr参数。
   INVITE sip:callee@u2.domain.com SIP/2.0
   Contact: sip:caller@u1.example.com
   Record-Route: <sip:p2.domain.com;lr>
   Record-Route: <sip:p1.example.com;lr>
位于u2.domain.com的被叫收到了该INVITE消息,并且返回一个200 OK响应。其中就包括了INVITE中的Record-Route头域。
   SIP/2.0 200 OK
   Contact: sip:callee@u2.domain.com
   Record-Route: <sip:p2.domain.com;lr>
   Record-Route: <sip:p1.example.com;lr>
被叫此时也就有了自己的路由集:
   (<sip:p2.domain.com;lr>,<sip:p1.example.com;lr>)

并且它本次会话的远端目的地址设置为INVITE中Contact中的URI:[email]caller@u1.example.com[/email],此后被叫在该会话中的请求消息就发到这个URI。同样,被叫在200 OK响应中也携带了自己的联系地址,主叫收到该响应消息后也会把本次会话的远端目的地址设置为:[email]callee@u2.domain.com[/email],此后主机在该会话中的请求消息就发到这个URI。
同样,主叫也有了自己的路由集,只是跟被叫的是反序的:
   (<sip:p1.example.com;lr>,<sip:p2.domain.com;lr>)


通话完毕后,我们架设主叫先挂机,则主叫发出BYE请求:
   BYE sip:callee@u2.domain.com SIP/2.0
   Route: <sip:p1.example.com;lr>,<sip:p2.domain.com;lr>
可以看到,BYE的Route头域正是主机的路由集构造来的。
由于p1在第一个Route中,因此BYE首先发给P1。

P1收到该消息后,发现request-URI中的URI不属于自己负责的域,而消息有Route头域,并且第一个Route头域中的URI正是自己,因此删除之,并且把消息转发给新的第一个Route头域中的URI,也就是P2:
   BYE sip:callee@u2.domain.com SIP/2.0
   Route: <sip:p2.domain.com;lr>
P2
收到该消息后,发现request-URI中的URI不属于自己负责的域(P2负责的是domain.com,而不是u2.domain.com),第一个Route头域中的URI正是自己,因此删除之,此时已经没有Route头域了,因此就转发给了request-URI中的URI。

被叫就会收到BYE消息:
   BYE sip:callee@u2.domain.com SIP/2.0

路由示例2:
如果说上面的示例主要关注的是路由流程,那么本示例关注的则是严格路由与松散路由的区别。

场景:
U1->P1->P2->P3->P4->U2
其中,P3是严格路由的,其余Proxy都是松散路由的,并且4个Proxy都很乐意增加Record-Route头域。

消息流:
我们直接给出了到达被叫的INVITE消息:
   INVITE sip:callee@u2.domain.com SIP/2.0
   Contact: sip:caller@u1.example.com
   Record-Route: <sip:p4.domain.com;lr>
   Record-Route: <sip:p3.middle.com>
   Record-Route: <sip:p2.example.com;lr>
   Record-Route: <sip:p1.example.com;lr>

这中间的其他消息我们就不过问了,直接看一下被叫最后发出的BYE消息大概是什么样子:
   BYE sip:caller@u1.example.com SIP/2.0
   Route: <sip:p4.domain.com;lr>
   Route: <sip:p3.middle.com>
   Route: <sip:p2.example.com;lr>
   Route: <sip:p1.example.com;lr>

因为P4在第一个Route里,因此被叫将BYE消息发给了P4。

P4收到该消息后,发现自己不负责域u1.example.com,但是第一个Route头域中的URI正是自己,因此删除之。P4还发现新的第一个Route头域中的URI是一个严格路由器,因此它把request-URI中的URI添加到最后一个Route的位置,并且将第一个Route“弹出”并且覆盖原来的request-URI。然后将消息转发给当前的request-URI,也就是P3。
   BYE sip:p3.middle.com SIP/2.0
   Route: <sip:p2.example.com;lr>
   Route: <sip:p1.example.com;lr>
   Route: <sip:caller@u1.example.com>

P3
收到该消息后,直接把消息作出如下变换并且发给P2:
   BYE sip:p2.example.com;lr SIP/2.0
   Route: <sip:p1.example.com;lr>
   Route: <sip:caller@u1.example.com>
P2
收到该消息后,发现消息中的request-URI是自己的,因此在进一步处理先首先对消息做如下变换:
   BYE sip:caller@u1.example.com SIP/2.0
   Route: <sip:p1.example.com;lr>
然后,P2发现自己不负责域u1.example.com,第一个Route中的URI也不是自己的,因此将消息转发给该URI,也就是P1。

P1收到该消息后,发现自己不负责域u1.example.com,但是第一个Route头域中的URI正是自己,因此删除之。消息变成下面的样子:
   BYE sip:caller@u1.example.com SIP/2.0
既然Route头域已经是空,因此P1把消息发给u1.example.com

<PLC><西门子><工控>西门子博图V18中使用SCL语言编写一个CRC16-modbus校验程序 西门子官方对于SCL语言的介绍如下:SCL 编程语言SCL 编程语言SCL(Structured Control Language,结构化控制语言)是一种基于 PASCAL 的高级编程语言。这种语言基于标准DIN EN 61131-3(国际标准为 IEC 1131-3)。根据该标准,可对用于可编程逻辑控制器的编程语言进行标准化。SCL 编程语言实现了该标准中定义的 ST 语言 (结构化文本) 的PLCopen 初级水平。语言元素。 阅读详情

相关推荐

ε-差分隐私之拉普拉斯噪声机制(定义 + 证明 + 代码)

ε-差分隐私之拉普拉斯噪声机制 差分隐私的描述 1-范式的定义:使用matlab调用函数norm(x, 1) 更多范式见 范式 差分隐私的定义应该满足 拉普拉斯噪声的证明全过程如下: DP方向差分隐私证明是基本入门!!! -拉普拉斯噪声分布代码 Laplace分布的概率密度函数的形式是: 使用python - matplotlib来绘制概率分布图: import matplotlib.pyplot as plt import numpy as np def laplace_fun

毕业才是起点 1万+

【SIP协议路由机制】

SIP的路由机制是SIP协议的灵魂,通过此路由机制,才使得一个呼叫请求在VOIP网络的众多Proxy节点中,找到正确的目的端。在了解SIP路由机制前,我们先弄清以下几个感念。 1 与路由的相关概念 请求路由(Route)与响应路由(via) 按场景来分可以把SIP路由分为请求路由与响应路由两种路由。 请求路由(Route):发起端到目的端的路径。比如发起端发起INVITE呼叫请求消息所走过的路径或者BYE结束一个呼叫的请求消息所走过的路径就为请求路由。 请求路由的生成是通过头域Record-Routes

qq_25137439的博客 2226

PythonOCC基础使用:建模——倒角倒圆(二维+三维)

占坑

weixin_42755384的博客 4639

SIP 协议路由规则详解

SIP 请求必须要经过的 SIP 服务器地址。SIP 协议实际上和 HTTP 类似,都是基于文本、可阅读的应用层协议。,二者的不同之处在于。

谈谈1974 2297

告别复杂配置!5分钟在Vue/React项目中集成讯飞语音听写WebSocket API

本文详细介绍了如何在Vue/React项目中快速集成讯飞语音听写WebSocket API,实现高效语音识别功能。通过对比不同通信方案,突出WebSocket在实时语音交互中的优势,并提供框架适配、音频处理及性能优化等关键技术点,帮助开发者5分钟内完成专业级语音听写功能集成。

weixin_28730353的博客 274

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1758

SIP路由机制解析(zz)

在前面已经陆续介绍了SIP重要头域、注册流程、会话流程等SIP相关知识,现在再来介绍一下SIP中的路由机制。总的来说,SIP中存在两种路由场景:1,请求消息的路由2,响应消息的路由其中,响应消息的路由非常简单,就是完全依靠Via来完成的,具体请见我关于RFC3261中会话流程的分析。下面我们只谈SIP请求消息的路由。首先我们要搞清楚什么是严格路由和松散路由。            ...

zheng_weizhong的博客 764

C#上位机面试必问30题:机器视觉+工业通信+性能优化(含答案解析)

工业通信:围绕“稳定性”展开,重点答异常处理、断线重连、资源释放;机器视觉:围绕“精度+速度”展开,重点答预处理、ROI、参数优化;性能优化:围绕“UI不卡、内存不泄、效率不低”展开,重点答异步、限流、资源复用;面试加分项:结合实际项目案例(如“我在XX项目中用信号量解决了多设备并发卡顿问题”)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1509

SIP消息路由

本文通过一个完整的SIP呼叫实例解释SIP头部的一些常见字段,在对这些字段的解释的同时也阐述了SIP消息的路由过程。下图是呼叫的消息流示意图和所有的消息头部(因为SDP和消息路由无关,故在此省略):                      atlanta.com  . . . biloxi.com                  .      proxy              prox

学习是为了探索这个世界的本质 1518

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2840

AgentScope Java 2.0 项目实战: 从零构建自己的个人AI助手“小龙虾“

本文系统介绍如何基于Spring Boot WebFlux、React 18和TypeScript,从零搭建一个本地化的个人AI助手管理平台——AgentScope Paw。项目支持多Agent创建与管理、SSE流式对话、工作区文件CRUD、技能市场、子智能体孵化、AI辅助起草Agent配置等核心功能,并深度集成钉钉、企业微信、飞书、GitHub等IM通道。

program哲学 1427

sip中Via、Record-Route和Route set的区别和联系&SIP路由机制解析(zz)

Record-Route的是各个想在后续请求对话中还继续接收请求和应答的Proxy,将自己的地址信息添加在Record-Route中来帮助协议生成最终的Route set(也就是为什么说对话中的请求和应答包含的是Route-set,对话外的请求包含的Record-Route的原因,Route set用在对话外的情况就是在注册时客户端最初不清楚该往哪里去注册,需要手动配置,总之一句话,Route set的作用就是强制让请求通过其包含的路由列表传输请求和应答)。楼主所说的是RFC3261中的内容。

xiaojun11的专栏 1045

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SIP route与 record_route /SIP路由机制解析

转自:http://hi.baidu.com/ferrior/blog/item/74714709613285cf3bc7633b.htmlSIP路由机制解析(zz)2007-03-06 15:46  在前面已经陆续介绍了SIP重要头域、注册流程、会话流程等SIP相关知识,现在再来介绍一下SIP中的路由机制。总的来说,SIP中存在两种路由场景:1,请求消息的路由

stefmoon的专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Kamailio SIP服务器路由机制解析与实战

SIP协议作为VoIP通信的核心协议,其路由机制直接影响呼叫建立效率与系统可靠性。开源SIP服务器Kamailio采用有限状态机模型实现高性能路由决策,通过接收路由、请求路由和响应路由三个核心组件的协同工作,可处理数千并发会话。路由脚本编译为字节码执行的特性,使得路由决策达到纳秒级响应,但也带来了热重载配置同步等工程挑战。在实际部署中,合理设计故障转移策略、动态路由更新机制,并监控路由状态,可有效预防路由环路、状态不一致等典型问题。结合AI辅助调试工具,能快速定位如'切换路由状态失败'等复杂问题,提升运维效

weixin_28717431的博客 335

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: /dev/null有什么用
下一篇: TBCP 消息简要概述
wunderup
博客等级 码龄20年 13粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值