Kamailio registrar 模块 aor 大小写的问题

提问:

我近期投入了一些时间排查一个与 JsSIP 相关的问题,场景中使用的用户名是自动生成的字符串,包含大小写字母和数字。

在被叫方向 JsSIP 发送 BYE 请求时,JsSIP 返回了 404 响应,且调试控制台中显示错误信息:Request-URI does not point to us(请求 URI 并非指向本端)。

经排查发现,JsSIP 会将 REGISTER 请求收到的 200 OK 响应中的 Contact 字段转换为全小写形式,并使用该值发起新的呼出 INVITE 请求。

但在处理 BYE 请求时,JsSIP 未能将请求中的 URI 与该小写 Contact 值进行正确匹配,从而返回 404 错误。

我注意到 Kamailio 注册器模块(registrar)中存在一个相关配置项:

3.11. case_sensitive(整数类型)

若设置为 1,则 AOR(地址记录)的对比与存储会区分大小写;若设置为 0,则不区分大小写。

此参数为推荐配置项,可通过 Kamailio 配置框架修改。

默认值:0

由于 RFC 规范明确要求用户名的处理需区分大小写,或许将该配置的默认值修改为 1 会是更合理的选择。

RFC 相关原文如下:

SIP 和 SIPS URI 中用户信息(userinfo)的对比是区分大小写的,这包括带有密码的用户信息,或采用电话号码格式的用户信息。

...

以下两组 URI 并不等价:

SIP:ALICE@AtLanTa.CoM;Transport=udp (用户名不同)

sip:alice@AtLanTa.CoM;Transport=UDP

复现步骤

使用包含大小写字母的用户名进行注册操作,该用户名会被 Kamailio 转换为全小写形式存储。

可能的解决方案

修改 case_sensitive 配置项的默认值。


minconda 回答:

我记得当初将该配置默认设为 "不区分大小写" 的决策,是与 RFC 规范相悖的,核心考量是提升用户使用体验------ 尤其是当用户名以真实姓名作为身份标识的场景。

通常用户代理(UA,如桌面或智能手机端的 SIP 应用)会自动将姓名修正为驼峰格式(例如把 alice 转为 Alice)。此外,我们认为让 alice 和 Alice 作为两个独立用户的场景,在实际应用中并不常见。

另外,对于电话号码形式的用户名,匹配逻辑本身也是不区分大小写的。

当然,在用户名是随机生成的字母数字组合的场景下,当前默认配置确实可能引发冲突。

但该默认值已经沿用多年,且过去并未收到大量相关问题反馈。若贸然修改默认值,可能会导致现有 Kamailio 部署环境出现意外的呼叫失败问题,因此我倾向于维持现有默认配置不变。


结论就是,默认值就很好,大小写不敏感,内部自动处理成小写

相关推荐
RayRings16 天前
OFDM, OFDMA, SC-FDMA的区别
通信
liulilittle17 天前
回归物理本质:对拥塞控制实验室依赖与公平性误置的反思
网络·tcp/ip·计算机网络·算法·tcp·通信·拥塞控制
liulilittle18 天前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
liulilittle18 天前
KCC: An Exploration Along the Lines of BBR
网络·tcp/ip·计算机网络·bbr·通信·拥塞控制·kcc
liulilittle18 天前
甲骨文云中国大陆定向 QoS 原理及绕过解决方案
服务器·开发语言·网络·计算机网络·oracle·通信·qos
七夜zippoe20 天前
DolphinDB OPC-UA协议接入:工业标准通信
网络·通信·dolphindb·工业标准·opc-ua
liulilittle20 天前
拥塞控制:排水终止的两种决策:OR 与 AND
网络·tcp/ip·计算机网络·算法·信息与通信·tcp·通信
liulilittle22 天前
删除 Inflight Bounds:为什么 KCC 放弃了 BDP 钳位
linux·网络·tcp/ip·计算机网络·信息与通信·tcp·通信
大大杰哥23 天前
SSeEmitter的基本使用和介绍
java·sse·通信
liulilittle24 天前
TCP KCC v1.0(卡尔曼拥塞控制)
linux·服务器·网络·tcp/ip·计算机网络·tcp·通信