VONR排查指导分享
- 不能注册或呼叫到SIP服务器端
- 30秒挂断呼叫的黄金法则
- 咬线或摘机状态
- 单通或无语音
- 收到400 bad request
- 收到413,513 Request Entity Too Large或Message Too Large消息
- 收到408, 480或者487 消息
- 483 - Too Many Hops
- 488 – Not Acceptable Here
- 语音质量和思科语音文件示例分享
这里,读者一定要注意,我们这里仅讨论关于SIP环境中的常见问题,可能涉及网络环境或者硬件终端的问题,因为很多厂家和SIP服务器的配置不同,可能存在一定的差异,所以用户在我们的方法中特别需要根据厂家的不同,增加一些专门针对每个厂家或者SIP服务器的排查方式。我们仅讨论一般情况下的排查方式。
1、在一般的SIP 环境中,通常来说,SIP 终端需要注册到SIP服务器端来实现认证,服务器端获得SIP终端的位置,然后才能进行正常的呼叫流程。注册问题可能有以下几种呈现方式:
- 不能注册,完全没有和SIP服务器连接。如果终端发送注册消息给服务器端时,双方完全可能完全没有实现通讯。用户需要在服务器端通过日志排查方式,检查SIP终端是否有注册消息进入到服务器端,或者SIP终端通过网络工具对服务器端进行排查,例如使用Ping 命令。如果连Ping命令都检测不到服务器地址,基本上可以断定SIP终端根本没有和服务器端连接。关于服务器端排查方式很多,最典型的就是使用的Asterisk,FreeSWITCH,OpenSIPS或者Kamailio等开源的软交换平台。每个平台都有各自的排查命令,用户可以参考官方手册来判断。当然,用户也可以使用linux排查工具对5060端口抓包排查(例如,sngrep)。本人非常推荐这个工具,非常好用,可以实时检查SIP消息。
- SIP终端发出了注册消息,但是SIP服务器端没有返回的消息。如果SIP终端对SIP服务器端发送了注册消息,但是服务器端没有返回响应消息,则可能是服务器端的问题。用户需要排查服务器端为什么没有返回消息,或者在返回路径上的节点是否出现了问题。
- 客户端收到错误消息,收到太多401/407 Unauthorized。SIP终端在注册时,如果用户的安全设置出现了错误,可能导致服务器端发送多个 401 错误。服务器端第一次发送到是正常的401验证信息,如果连续多次发送401/407 错误的话,可能是SIP终端输入了错误的用户账号信息,SIP终端侧需要配合服务器端进行排查,也可能服务器端的SIP账号消息保存错误,或者没有重新加载服务器相应模块,用户最好通过服务器端的CLI命令来检查内存中的SIP终端的真实数据信息。

- 客户端收到403 Forbidden 消息。如果用户帐户信息没有问题的话,SIP终端可能没有输入正确的From domain或者R-URI。有时,服务器端禁止同时注册几个SIP终端账号,或者注册过于频繁,服务器端可能过滤了此地址。需要用户配合服务器端地址进行进一步检查。这里,笔者仅讨论注册阶段出现的403 问题,当然也可能是系统防火墙或者其他的配置禁止了注册消息。如果是呼叫时出现403的话,则可能是另外的原因,例如可能欠费,可能呼叫了服务器端禁止的号码码位等其他因素。

2、我们经常会遇到客户抱怨这样的问题,电话通话时,在大概30秒左右就断线。这样的问题最主要的原因是SIP终端没有收到ACK消息。SIP终端发送了 200 OK以后就开始了媒体的创建,RTP语音流开始启动,事实上,SIP终端可能还没有收到ACK消息,因此在30秒左右,没有收到消息的一方就发送了一个BYE消息。那么,为什么我们没有收到ACK消息呢?
具体的场景如下两种示例,返回时因为NAT问题导致ACK没有办法返回到相应的终端:

在很多应用场景中,用户可能遇到更为复杂的NAT环境,如果其中一个代理出现了NAT处理无效的结果,就可能导致整个SIP信令路径出现ACK丢失的问题。
一般情况下,缺少ACK消息的原因主要来自于以下几个方面:
- Contact header 错误
- 客户端没有支持router header
- 网关在NAT后
- Contact header 的地址在NAT后
以上几种情况都需要用户排查网络环境和NAT设置。因为NAT问题,ACK返回的路径地址发生了改变,所以SIP终端没有收到ACK消息。
一些厂家的设备或者媒体服务器也有类似的设置,例如Lync 服务器,它支持了RTCP 呼叫活动检测功能,如果超过30秒的检测周期没有收到RTCP数据包,则会挂机。在开源Asterisk平台上,RTP的默认设置时间为30秒,一些SIP运营商可能会忽略UPDTAE消息,在SIP的设置中可以对其进行设置调整disallowed_methods=UPDATE 或SIP的会话定时器设置。
3、SIP终端不能挂机或者处于摘机状态是第三个经常遇到的问题。在SIP终端中的表现形式为终端没有发送BYE消息或者发送了错误的BYE消息内容。

没有发送BYE的状态:
其原因主要表现在:
- 没有发送BYE消息
- 发送到BYE消息携带了错误的to-tag
- 发送了格式不规范的BYE消息,例如格式错误,sequences错误或者时间戳错误。
- 发送的BYE消息中携带的是错误的路由信息
对于出现的这些问题,用户需要根据SIP消息来进行排查,对比哪些路径节点出现了问题。当然,这些问题带来的结果大家可能都非常清楚。首先,计费的准确性出现了问题,用户的计费不能完整准确地监控。另外,如果媒体服务器对呼叫有限制的话,因为其中一个SIP终端没有真正挂机,其他用户可能不能呼出的问题。如果是一台模拟网关的话,可能出现FXO或者FXS不能正常工作的问题。
出现以上这些问题,读者还是要从终端的配置来解决问题,是否出现了终端的配置问题,终端的质量问题。如果是FXO或者FXS的话,是否出现了制式不匹配的问题导致咬线或者摘机的问题。
从服务器端处理的话,可以通过两种办法来通过服务器端对其进行强制挂机处理。这四种服务器端的检测方式是:
- 开启RTP超时检测来检测终端的RTP流是否仍然活动
- 开启SIP的KeepAlive 检测SIP 会话状态
- 使用Proxy中的dialog中的OPTION来检测SIP终端响应状态,SIP终端发送 200 OK到proxy来检测终端的状态。
- 使用SIP session timer 定时器来进行周期检测,SIP终端一直在周期内刷新自己的状态。如果SIP终端来定时器的时间范围内,则表示终端参与活动状态;否则,则对其发送BYE消息,强行挂机。
相关文章:
VONR排查指导分享
不能注册或呼叫到SIP服务器端30秒挂断呼叫的黄金法则咬线或摘机状态单通或无语音收到400 bad request收到413,513 Request Entity Too Large或Message Too Large消息收到408, 480或者487 消息483 - Too Many Hops488 – Not Acceptable Here语音质量和思…...
Daftart.ai:人工智能专辑封面生成器
前言 Daft Art AI是一款使用人工智能技术来帮助您制作专辑封面的软件,它可以让您在几分钟内,用简单的编辑器和精选的美学风格,为您的专辑或歌曲创建出惊艳的高质量的艺术品。Daft Art AI有以下几个特点:简单易用:您只…...
ZigBee案例笔记 - 定时器
文章目录 1.片内外设I/O2.定时器简介3.定时器1寄存器4.定时器1操作自由运行模式模模式正计数/倒计数模式 5.16位计数器定时器1控制LED 示例 6.定时器3概述自由运行模式倒计数模式模模式正/倒计数模式 7.定时器3寄存器定时器3控制LED闪烁 1.片内外设I/O 定时器这样的片内外设也…...
GE H201TI 全系统自检和自诊断
Hydran 201Ti是一个小型在线预警发射器。它永久安装在变压器上,将为工作人员提供各种故障气体复合值的单一ppm读数,以提醒他们潜在的问题。 可以下载该值,并且可以将警报设置在预定水平,以提醒人员并能够监控发展中的故障状况。 …...
这个屏幕录制太好用了!
哈喽,大家好!今天给各位小伙伴测试了一屏幕录制的小工具——ApowerREC。它是一款专业同步录制屏幕画面及声音的录屏软件。界面简洁,操作简单,支持实时编辑屏幕录像、创建计划任务、录制摄像头高清视频等功能。废话不多说ÿ…...
初识redis【redis的安装使用与卸载】
一.redis的概念 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。在redis官网中对redis的描述是这样的&#…...
接口测试总结及其用例设计方法整理,希望可以帮到你
目录 接口测试的总结文档 第一部分: 第二部分: 接口测试用例设计 接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做…...
基于FPGA的多功能数字钟的设计
摘要 数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常 生活中不可少的必需品。本文介绍了应用FPGA芯片设计多功能数字钟的•种方 案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。 关键词数字钟、分频器、译码器、计数器、校时电路、…...
第四十二天学习记录:C语言进阶:笔试题整理Ⅲ
问:解释一下int(*a[20])(int)是什么? ChatAI答: int (*a[20])(int) 是一个数组,该数组中每个元素都是一个指向函数的指针,该函数具有一个int类型的参数,并返回一个int类型的值。 具体来说,a是一…...
GLSL 代码规范
文件 文件顶点,片段,几何和计算着色器文件应该分别有 _vert, _frag, geom 和 _comp 后缀(例如: eevee_film_fragg.glsl)。Shader文件名必须是唯一的,并且必须以它们所属的模块作为前缀(例如: workbench_material_lib.glsl eevee_film_lib.glsl)。一个 shader 文件必须包含且…...
红黑树封装map和set
文章目录 红黑树封装map和set1. 改良红黑树1.1 改良后的节点1.2 改良后的类分别添加仿函数代码 3. 封装map和set3.1 set3.2 map 3. 迭代器3.1 begin 和 end3.2 operator()和operator--()3.3 const迭代器set的迭代器map的迭代器 4. map的operator[]的重载5. 完整代码实现5.1 RBT…...
python序列
在Python中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。 字符串也是一种常见的序列,它也可以直接通过索引访问字符串内…...
LeetCode35. 搜索插入位置(二分法入门)
写在前面: 题目链接:LeetCode35. 搜索插入位置 编程语言:C 题目难度:简单 一、题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会…...
macOS Ventura 13.4 RC3(22F66)发布
系统介绍 5 月 17 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 3 更新(内部版本号:22F66),本次更新距离上次发布隔了 5 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&…...
CSI和DSI介绍
1、CSI和DSI的接触协议介绍 MIPI、CSI、CCI 协议基础介绍_csi协议_赵哈哈x的博客-CSDN博客 流媒体技术基础-摄像头接口与标准_【零声教育】音视频开发进阶的博客-CSDN博客 《摄像头 —— MIPI CSI-2简介》 USB摄像头使用 — Lichee zero 文档 2、AIO-3288J ,and…...
vue3+antDesignVue前端纯导出
效果 <a-buttonsize"default"style"margin-left: 10px"click"exportData">导出</a-button>1.下载所需依赖 npm install xlsx --save npm install file-saver --save<script setup> import { reactive, ref } from "vue…...
卷积神经网络的剪枝及其在嵌入式视觉系统中的应用
卷积神经网络的剪枝及其在嵌入式视觉系统中的应用 摘要 在过去的十年里,计算机视觉的最新技术一直是由深度神经网络,特别是卷积神经网络所控制的。无论是分类、语义分割还是目标检测,神经网络现在都是一个无可争议的首选。因此,…...
Spring IOC - Bean的初始化
在bean的初始化阶段,bean已经被实例化及属性填充了,此时的bean已相对成熟,接下来的初始化阶段还会做一些额外的工作对bean做进一步处理,主要包括以下四个方面: 调用aware接口方法 初始化前:调用初始化前的…...
Golang 安装
学习目标 本文旨在帮助初学者了解 Golang 在不同环境下的安装方法,并提供相关资源和参考链接。 学习内容 安装 Golang on Windows 下载 Golang for Windows 安装包,地址:https://golang.org/dl/双击运行安装包,按照提示完成安装。配置环境变量: 在系统变量中添加 GOROO…...
( 位运算 ) 338. 比特位计数 ——【Leetcode每日一题】
❓338. 比特位计数 难度:简单 给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 示例 1: 输入:n 2 输出:[0,1,…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
