一:请求路由

松散路由(Loose Router)和严格路由(Strict Router),这是SIP协议(RFC3261)中的一个非常重要的概念。

在SIP消息的Route头域或Record-route头域中,携带的域值是SIP URI或SIPS URI,如果这个URI带有”lr”属性值,那么,就表示URI的地址所标识的SIP PROXY是松散路由的,否则,是严格路由的。如Record-Route: 、Route: 。

松散路由是RFC3261所定义的消息路由规则,而严格路由则是RFC2543中所定义的路由规则。松散路由提供了对严格路由的兼容机制。路由规则中,涉及了对Request URI域值的处理。严格路由时,要求Request URI为路由地址。

严格路由是一种比较“死板”的理由机制,这种路由机制在SIP协议的前身RFC 2534中定义,其机制非常简单。它要求收到的消息的request-URI必须是自己的URI,然后它会把第一个Route头域“弹”出来,并把其中的URI作为新的request-RUI,然后把该消息路由给该URI。而松散路由则提供了一种更为灵活的机制。

处理步骤:

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

PROXY首先检查路由表中的第一个地址是否为自己,如果是则从表中删除。

严格路由在发往下一跳前,将Request URI的域值更新为路由表中的表头地址(下一跳)。

松散路由将路由如果发现Request URI是自己插入到路由表中的地址。从路由表中取出最后一个地址更新Request URI,并删除最后一个地址。

松散路由检查下一跳是否为严格路由。如果不是,不处理;否则,将Request URI插入到路由表表尾,并用下一跳地址(严格路由的地址)更新Request URI。

如果路由表为空,则路由给Request URI。

路由机制用于请求消息的路由,其中Route头域携带路由表信息,而Record-Route头域则是SIP PROXY想让自己保留在后续dialog中而插入的记录。也就是说,通常初始化时,发起终端是没有路由表的(当然也可以强制配置,这样局限性太强),完成第一次消息交互后,双方根据Record-Route信息,各自更新路由表。

二:应答消息路由

SIP应答消息的路由机制,相对请求来说,比较简单,基本思想就是,请求从哪里来,应答回哪里去。那是如何实现的呢?很简单,Via头域就是完成这个差事的。Via头域表说明了SIP请求实际的路由过程,用于应答消息的回程路由。

下面是一个via的示例(注意,换行仅是为了增强可读性,没其它意思)

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8

;received=192.0.2.1

其中pc33.atlanta.com部分称为sent-by属性,表明了消息在本站点的具体发送地址。每个SIP PROXY在前转SIP请求消息时,都必须在Via表前端插入自己的via(称为top VIA)并说明sent-by。而“received=192.0.2.1”这一参数则说明了消息到达本站点时的源地址。

当UAS发送应答时,往top VIA所指示的地址发送(received优先于sent-by)。当SIP PROXY路由应答消息时,首先检查top VIA是不是自己,不是则不处理,是则删除top VIA,并继续前转。所以,当源发起端收到应答时,应答消息中应该只有一个VIA头域,并且是指向自己的,否则就应该丢弃。

分享到:

2010-12-08 00:13

浏览 797

评论

java消息路由_SIP消息路由机制相关推荐

  1. EJB与JAVA BEAN_J2EE的异步消息机制

    EJB与JAVA BEAN_J2EE的异步消息机制 EJB与JAVA BEAN的区别 Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个 ...

  2. Java笔记-RabbitMQ的消息确认机制(事务)

    目录 基本概念 代码与实例 基本概念 消息应答与消息持久化,如下代码: boolean autoAck = false; channel.basicConsume(QUEUE_NAME, autoAc ...

  3. 借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能

    微信小程序借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能 这篇文章已经进行了更新,请点此进行查看 仿微信好友聊天 主要功能有 后续可能补充功能 详细介绍 注意 保存 ...

  4. java什么是消息刷盘_Rocket重试机制,消息模式,刷盘方式

    一.Consumer 批量消费(推模式) 可以通过 consumer.setConsumeMessageBatchMaxSize(10);//每次拉取10条 这里需要分为2种情况 Consumer端先 ...

  5. RocketMQ(七)RocketMQ消息生产及消息储存机制

    目录 1.消息生产 1.1 消息的生产过程 1.2 Queue选择算法 2.消息储存 2.1 存储介质 2.2 消息的存储和发送 2.3 消息存储结构 2.4 刷盘机制 1.消息生产 1.1 消息的生 ...

  6. java 消息队列_java消息队列

    Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. ...

  7. Rabbitmq消息发送事务与确认机制

    2019独角兽企业重金招聘Python工程师标准>>> 默认情况下发送消息的操作是不会返回任何信息给生产者的,也就是默认情况下生产者是不知道消息有没有正确地到达服务器.如果在消息到达 ...

  8. java确认rabbitmq_RabbitMQ的消息确认模式

    基础篇https://edu.51cto.com/course/19845.html https://edu.51cto.com/course/19845.html https://edu.51cto ...

  9. SpringBoot整合RabbitMQ(六大消息模式、消息手动应答机制)

    目录 1.环境搭建 2.队列模式 3.发布订阅模式 4.路由模式 5.主题模式 6.消息手动应答机制 7.回调函数-确认机制(发布确认模式) 1.环境搭建 引入pom: <!-- rabbitM ...

最新文章

  1. HashMap面试深入详解jdk1.8
  2. 为什么整数集合使用Z来表示?
  3. ethernet调试工具_开发者分享 | 如何调试10G/25G以太网IP自协商/Link Training
  4. VS11在Win8上的Metro应用
  5. C# ProgressBar用法:模拟进度条
  6. java测试不成功_java – 测试@NotNull时集成测试失败
  7. RS100项目进展更新
  8. 计算机管理 内存在哪里看,教您win7怎么查看内存
  9. Java架构师面试题系列之Mybatis面试专题(36题,含详细答案解析)
  10. mac php5.6 gd 扩展,mac 编译安装php5.6.40
  11. Android Camera数据流分析全程记录(overlay方式一)
  12. [附源码]Java计算机毕业设计SSM宠物管理系统
  13. UBNT设置AP模式注意事项
  14. 出租车计费器的Verilog语言简单完成
  15. 在R语言中如何打开一般方法打不开的中文xls文件?
  16. 【路径优化】基于帝企鹅算法求解TSP问题(Matlab代码实现)
  17. wps怎么添加附录_如何将附录生成目录 - 卡饭网
  18. 生物信息学(3)——双序列比对之BLAST算法简介
  19. 转:成为Java高级程序员需要掌握哪些?
  20. 线上线下协同发展,020 商业解析

热门文章

  1. 动漫网站基于jquery的横向手风琴特效
  2. 此页面处于怪异模式,排版布局可能会受到影响。若需要标准模式,请使用“!DOCTYPE html”。
  3. 目标检测数据集:摄像头镜头缺陷检测数据集
  4. 小程序实现分享朋友圈分享好友功能
  5. 一文带你从Vue2.x大迈步走进Vue.js 3.0新时代
  6. Aras入门教程5_项目管理
  7. 前端跨域jsonp的细节,挡住面试官的连环提问
  8. 整理Python lxml读写xml文件详细教程
  9. arcgis for JavaScript 使用view.goTo 实现轨迹巡查
  10. 女生表白日,你今天表白了吗