SIP 协议路由规则详解

文章目录

  • 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://xiahunao.cn/news/1619080.html

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

相关文章

字体试衣间--轻松管理你的字体

2007年10月07日 14:44:00 PS达人们一般都收集有很多素材,字体便是其中之一,而且还颇为重要。硬盘上存有几百种字体是常事,即使上千,也不奇怪。但这么多字体,管理起来就很成问题了。 因此,今天给大家推荐这个…

NGINX相关配置

NGINX相关配置 NGINX配置信息 nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分: 主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { wo…

鸿蒙无锡有什么特产,无锡特产都有哪些,你知道吗

到外地旅游,我们总是不厌其烦的将当地的特产往家带。那么去到无锡,你应该带什么特产呢?“太湖明珠”无锡是江南鱼米之乡,物产富饶,无锡特产多种多样,是外地人了解无锡文化的重要载体。让我们来盘点一些无锡…

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城

驶入脱贫“高速路”-国稻种芯-通榆县:稻谷农特产品推送进城 (采写记者:刘明洋、段续、刘慧、郭翔、于佳欣)新华网 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 国稻种芯中国水稻网 中国三农智库网-功能性农业农业大健康大…

前端需要理解的工程化知识

1 Git 1.1 Git 常见工作流程 Git 有4个区域:工作区(workspace)、index(暂存区)、repository(本地仓库)和remote(远程仓库),而工作区就是指对文件发生更改的地方&#xff…

LeetCode——回溯篇(一)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 目录 77. 组合 216. 组合总和 III 17. 电话号码的字母组合 39. 组合总和 40. 组合总和 II 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的…

SQL Server 配置管理器无法打开

背景 在把机器重启后SQL SERVER 配置管理器就无法正常打开了 现象 Connection to target machine could not be made in a timely fashion 解决 打开服务器的服务列表,找到 Windows Management Instrumentation 服务,重启下他问题解决 总结 配置管理器我…

解决SQLSever配置管理器不见了

错误: 在与SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server 已配置为允许远程连接。provider:Named Pipes Provider,error:40-无法打开到SQL Server 的连接&#x…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

SQL Server 配置管理器不见了

SQL Server 配置管理器不见了 错误重现: 之前安装好的SQL Server 2012打开都没有问题,好多天没有打开了,今天打开我的SQL Server 2012 连接时出现错误: 在与SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或…

如何打开sql server配置管理器

1. 在开始菜单中找 2.如果开始菜单中找不到 按 win键R键 打开后在里面输入 SQLServerManager10.msc 这里的 SQLServerManager10.msc 对应的是SQL Sever 2008 SQL Sever 2019版本的对应的是 SQLServerManager15.msc 具体你sql server的版本对应的哪个,可以去C:\…

SQL 配置管理器找不到了

想用数据库建立远程连接,于是想把数据库改成IP地址连接,突然发现配置管理器不见了!!!!???百度了一下,有人说可以用win R打开后,输入 SQLServerMa…

SQLServer找不到配置管理器,如何打开配置管理器

总有些sqlserver安装完毕之后找不到配置管理器,想看个端口号或者看个服务的用户名,都很气。下面来介绍一下通过windows命令来打开SQLSERVER配置管理器。 首先:windows键R键 各个sqlserver版本在textbox中输入对应的命令如下: SQ…

空号检测API 接入的Java 和 Python 代码总结

空号检测api 是一种基于手机号码查询的技术工具,可以帮助企业准确识别无效手机号,包括空号、停机、库无等状态。通过使用空号检测API,企业能够过滤掉无效的手机号,确保将有限的资源和精力用于有效的目标客户群体,从而提…

【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作

git使用大全 基本介绍git 快速上手一 环境安装(默认已安装)二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…

圣诞桌面装饰软件Xmas snow for Mac

Xmas snow for Mac是专为Mac用户所设计的圣诞桌面装饰软件,Xmas snow Mac版在您的桌面用下雪的方式来告诉你圣诞新年倒计时。您可以使用Xmas snow Mac破解版在您的桌面上添加圣诞树、圣诞花环、雪花、倒计时,您还可以每小时聆听圣诞节的曲调哦&#xff0…

c语言 桌面下雪程序,用C++写的在桌面上飘雪的特效程序

#include〈windows.h〉 #include〈time.h〉 #include〈stdlib.h〉 #include〈iostream.h〉 const int SnowNumber=500; //雪点数量 struct SnowNode {POINT postion; //雪点位置 int iColor; //先前的颜色 int iSpeed; //下落速度 int iMove; //下落距离 int iStick; //粘贴度 …

Linux/Unix桌面趣事:让桌面下雪

在这个节日里感到孤独么?试一下 Xsnow 吧!它是一个可以在 Unix/Linux 桌面下下雪的应用。圣诞老人和他的驯鹿会在屏幕中奔跑,伴随着雪片让你感受到节日的感觉。 我第一次安装它还是在 13、4 年前。它最初是在 1984 年 Macintosh 系统中创造的。你可以用…

一个让桌面下雪的小程序(并非屏幕保护)

以前见到过一个有趣的小程序,叫snow,可以在桌面上下雪,学还可以在窗体边缘、图像边缘堆积,关键是并非屏幕保护,可以边下雪便运行其它程序。 我就用VB模仿了一个。先贴上效果图: 源代码 Private Declare Function GetDC…

桌面下雪软件测试工程师,Snow Flakes屏幕下雪动态屏保 模拟真实降雪情景的屏保程序...

《Snow Flakes屏幕下雪动态屏保》是一个完美模拟真实降雪情景的屏幕保护程序,可以让你的电脑在没有动作时下起片片雪花,也会随着时间而在工作列上堆积起冰来,相当真实。 Snow Flakes屏幕下雪屏保支持在设置视窗中可以依个人喜欢自行设置风势的…