严格路由 vs 松散路由

发布时间:2026/7/23 18:50:54

严格路由 vs 松散路由
Kamailio 里的“严格路由”和“松散路由”本质上是 SIP Route/Record-Route 机制的两种模式分别来自较老的 RFC 2543 和较新的 RFC 3261。现在实际生产中几乎都使用松散路由。1. 核心区别对比项严格路由 Strict Routing松散路由 Loose Routing标准来源旧 RFC 2543RFC 3261Route URI 标识没有;lr参数有;lr参数Request-URI会被改成下一个代理的 URI保持为最终目标 URIRoute 头作用通过不断改写 R-URI 实现路由Route 头明确表示下一跳是否推荐不推荐主要为了兼容老设备推荐现代 SIP 标准方式Kamailio 常用处理函数一般不主动使用loose_route()复杂度高容易和 NAT、转发逻辑冲突简单清晰2. 松散路由 Loose Routing松散路由是现代 SIP 的标准做法。典型 Record-Route 头类似Record-Route: sip:proxy.example.com;lr关键点是 URI 里有;lrlr代表 loose routing。松散路由下的请求示例假设 Kamailio 在初始 INVITE 中插入了Record-Route: sip:kamailio.example.com;lr后续 BYE、ACK、re-INVITE 等 in-dialog 请求会带上Route: sip:kamailio.example.com;lr但 Request-URI 仍然是最终目标例如BYE sip:alice192.168.1.100 SIP/2.0 Route: sip:kamailio.example.com;lr也就是说Request-URI 最终目标 Route 经过哪些代理Kamailio 收到后通常这样处理if (has_totag()) { if (loose_route()) { route(RELAY); exit; } }loose_route()会检查 Route 头如果发现自己在 Route 头里就消费掉对应 Route然后继续转发。3. 严格路由 Strict Routing严格路由是旧 SIP 规范里的方式。Record-Route 头里没有;lrRecord-Route: sip:proxy.example.com这种情况下后续请求的 Request-URI 会被改成下一个代理地址而真正的目标 URI 会被放到 Route 头的末尾。严格路由下的请求示例可能变成BYE sip:kamailio.example.com SIP/2.0 Route: sip:alice192.168.1.100也就是说Request-URI 下一个代理 Route 最终目标或后续路由集合这种方式的问题是Request-URI 不再表示最终目标代理需要反复改写 Request-URI和 NAT、注册 Contact、负载均衡逻辑更容易冲突配置和排错更复杂现代 SIP 设备基本不推荐这样用。4. Kamailio 中怎么体现Kamailio 里通常通过rr模块处理 Record-Route 和 Route。常见配置loadmodule rr.so modparam(rr, enable_full_lr, 0) modparam(rr, append_fromtag, 1)初始 INVITE 时让 Kamailio 留在信令路径中if (is_method(INVITE|SUBSCRIBE)) { record_route(); }后续 in-dialog 请求if (has_totag()) { if (loose_route()) { route(RELAY); exit; } if (is_method(ACK)) { exit; } sl_send_reply(404, Not here); exit; }这里的重点是loose_route()虽然名字叫loose_route()但 Kamailio 的rr模块在一定程度上也能兼容一些严格路由场景。不过在现代配置中一般只需要按松散路由设计。5. Record-Route 里的;lr这是判断松散路由的核心。松散路由Record-Route: sip:1.2.3.4;lr或者Record-Route: sip:proxy.example.com;transportudp;lr严格路由Record-Route: sip:1.2.3.4没有;lr就可能被对端当成严格路由。6. Kamailio 的enable_full_lrKamailio 的rr模块有一个参数modparam(rr, enable_full_lr, 0)默认情况下Record-Route 可能类似Record-Route: sip:proxy.example.com;lr如果设置为modparam(rr, enable_full_lr, 1)可能生成Record-Route: sip:proxy.example.com;lron这是为了兼容某些有问题的 SIP 设备它们可能不正确识别没有值的;lr参数。一般情况下保持默认即可除非遇到特定终端或运营商兼容性问题。7. 实际使用建议在 Kamailio 生产环境中建议使用松散路由使用record_route()插入带;lr的 Record-Route使用loose_route()处理后续 in-dialog 请求不要主动生成没有;lr的 Record-Route严格路由只作为兼容旧设备考虑。典型配置结构request_route { if (is_method(INVITE|SUBSCRIBE)) { record_route(); } if (has_totag()) { if (loose_route()) { route(RELAY); exit; } if (is_method(ACK)) { exit; } sl_send_reply(404, Not here); exit; } route(RELAY); } route[RELAY] { if (!t_relay()) { sl_reply_error(); } exit; }8. 一句话总结严格路由是旧式 SIP 路由方式会通过改写 Request-URI 控制下一跳松散路由是现代标准方式通过Route头和;lr参数控制路由Request-URI 保持最终目标。Kamailio 生产环境中基本都应该使用record_route()loose_route()的松散路由模式。

相关新闻

Vibe Coding到Agentic Engineering:AI编程范式演进与实战指南

Vibe Coding到Agentic Engineering:AI编程范式演进与实战指南

2026/7/23 18:50:54

Vibe Coding到Agentic Engineering:AI编程范式演进与实战指南 2025年2月,OpenAI联合创始人Andrej Karpathy首次提出"Vibe Coding"(氛围编程)概念,同年入选柯林斯词典年度热词。然而仅仅一年后,20…

深入解析TI N2HET核心指令:MOV64、PCNT、PWCNT与协同指令实战

深入解析TI N2HET核心指令:MOV64、PCNT、PWCNT与协同指令实战

2026/7/23 18:50:54

1. 项目概述与N2HET模块定位 在嵌入式实时控制系统的开发中,精准的时序控制能力往往是决定系统性能上限的关键。无论是电机驱动中精确的换相时序,还是电源管理里严苛的死区时间,亦或是通信协议中毫秒乃至微秒级的同步信号,其背后都…

【Rust自学】10.2. 泛型

【Rust自学】10.2. 泛型

2026/7/23 18:50:54

10.2 泛型 10.2.1. 什么是泛型 泛型的主要作用是提高代码的复用性。它们适合处理重复代码问题,也可以看成是把数据与算法分离。 泛型是具体类型或其他属性的抽象替代。 换句话说,你写的泛型代码并不是最终代码,而更像是一种带有一些占位符…

Python计算机毕设之基于 Python 的期货行情展示与模拟交易系统 零基础期货实训虚拟交易平台设计(完整前后端代码+说明文档+LW,调试定制等)

Python计算机毕设之基于 Python 的期货行情展示与模拟交易系统 零基础期货实训虚拟交易平台设计(完整前后端代码+说明文档+LW,调试定制等)

2026/7/23 19:40:56

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Python计算机毕设之基于 Python 的校园二手社交交易平台实现校园二手物品问答互动与交易系统设计 (完整前后端代码+说明文档+LW,调试定制等)

Python计算机毕设之基于 Python 的校园二手社交交易平台实现校园二手物品问答互动与交易系统设计 (完整前后端代码+说明文档+LW,调试定制等)

2026/7/23 19:40:56

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

具身智能进入“干活时代“:从展台演示到真实部署,数据才是核心瓶颈

具身智能进入“干活时代“:从展台演示到真实部署,数据才是核心瓶颈

2026/7/23 19:40:56

具身智能进入"干活时代":从展台演示到真实部署,数据才是核心瓶颈2026年7月中旬,国内规模最大的人工智能展会在上海举办。展览总面积首次突破10万平方米,超过1100家企业参展,3000余件展品中有300多件为全球首…

GEE中的几个小技巧

GEE中的几个小技巧

2026/7/23 19:40:56

1.如何上传你要的区域:准备你所在区域的shp(有四个文件)主页点击1.Assets 2.Shape files 3.Select 把四个文件都传上去 4.命名你的区域Assets下有文件就是传成功了 然后切到Scripts就可以调用了// 定义研究区域 var region ee.FeatureCollection(projects/ee-jiuwa…

嵌入式系统参数动态更新利器:TI MCU POM模块原理与实战

嵌入式系统参数动态更新利器:TI MCU POM模块原理与实战

2026/7/23 19:40:56

1. 项目概述:为什么我们需要POM?在嵌入式系统开发,尤其是汽车电子、工业控制这类对实时性和可靠性要求极高的领域,我们经常面临一个经典难题:如何在产品部署后,甚至在系统运行时,动态地调整程序…

J4105 工控小主机刷写 Proxmox VE 及部署 OpenWrt 与 Home Assistant OS完整指南

J4105 工控小主机刷写 Proxmox VE 及部署 OpenWrt 与 Home Assistant OS完整指南

2026/7/23 19:30:56

J4105 工控小主机刷写 Proxmox VE 及部署 OpenWrt 与 Home Assistant OS完整指南 本文档详细介绍 J4105 工控小主机的刷机流程,核心分为准备工作、安装 Proxmox VE(PVE)、创建 OpenWrt 与 Home Assistant OS 虚拟机三大步骤,每一步均包含具体工具、操作细节及注意事项,确…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/23 3:40:08

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/23 4:40:05

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/23 1:54:13

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

企业级AI搜索落地选型实战手册(含LLM+RAG+Hybrid架构对比矩阵与ROI测算模板)

2026/7/23 0:09:56

更多请点击: https://kaifayun.com 第一章:企业级AI搜索落地选型实战手册(含LLMRAGHybrid架构对比矩阵与ROI测算模板) 企业级AI搜索系统落地成败,核心在于技术选型与业务价值的精准对齐。盲目堆砌大模型能力或过度依赖…

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

TM4C129LNCZAD外设实战:LCD、比较器与PWM寄存器配置详解

2026/7/23 0:09:56

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于ARM Cortex-M内核的微控制器项目中,深入理解并熟练配置芯片的片上外设,是从“点亮LED”迈向“实现复杂系统功能”的关键一步。Tiva™ TM4C129LNCZAD作为TI公司Cortex-M4F家族中的高性能成员…

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

AtomCode `fmt_dur` 争议溯源:两个函数、三段演进、四个事实

2026/7/23 0:09:56

一、快速声明与争议背景本文是对 AtomCode 终端 spinner 时长显示 fmt_dur 相关说法的事实性核验。2026 年 7 月 CSDN 上出现两篇互相矛盾的博文,近期又有 AI 在对话中输出格式描述 XhYm / YmZs / Zs。本文基于 AtomCode 仓库 main4677ddfa 及全分支 Git 历史给出可…