事物(三)之服务端事务匹配请求
当服务端从网络上收到一个请求以后,他必须和现有的事务进行判定。这个是根据下边的规则来判定的。
首先要检查请求中的Via头域的最上branch参数。如果他以z9hG4bk开头,那么这个请求一定是由客户端事务根据本规范产生的。因此,branch参数在该客户端发出的所有的事务中都是唯一的。根据下列规则我们可以判定请求是否和事务匹配:
1、 请求中的最上的Via头域的branch参数和创建本事务的请求的最上的Via头域的branch参数一样。
2、 请求的最上的Via头域的sent-by参数和创建本事务的请求的最上的Via头域的send-by参数一样。
3、 请求的方法和创建本事务的方法一样。这有一个例外,就是ACK,ACK对应的创建本事务的请求方法是INVITE
REGISTERsip:ims1.fj.chinamobile.com SIP/2.0
Via: SIP/2.0/UDP192.168.11.60:5060;branch=z9hG4bK2bd3cbe6
From:<sip:+865939008847@ims1.fj.chinamobile.com>;tag=444e8c67
To:<sip:+865939008847@ims1.fj.chinamobile.com>
Contact:<sip:+865939008847@192.168.11.60:5060>
Call-ID: Anta1380089120000200090839d978@192.168.11.60
CSeq: 5REGISTER
Expires: 120
Max-Forwards: 70
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP192.168.11.60:5060;branch=z9hG4bK2bd3cbe6
To:<sip:+865939008847@ims1.fj.chinamobile.com>;tag=ztesipP5HnDLxutGp-*1-2-16648*figi.1
From: <sip:+865939008847@ims1.fj.chinamobile.com>;tag=444e8c67
Call-ID:Anta1380089120000200090839d978@192.168.11.60
CSeq: 5REGISTER
Content-Length: 0
WWW-Authenticate: ******
REGISTERsip:ims1.fj.chinamobile.com SIP/2.0
Via: SIP/2.0/UDP192.168.11.60:5060;branch=z9hG4bK2caa2bf4
From:<sip:+865939008847@ims1.fj.chinamobile.com>;tag=444e8c67
To:<sip:+865939008847@ims1.fj.chinamobile.com>
Contact:<sip:+865939008847@192.168.11.60:5060>
Call-ID:Anta1380089120000200090839d978@192.168.11.60
CSeq: 6REGISTER
Authorization:****
Expires: 120
Max-Forwards: 70
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP192.168.11.60:5060;branch=z9hG4bK2caa2bf4
To:<sip:+865939008847@ims1.fj.chinamobile.com>;tag=ztesipqhGkDIjIEfPGdYnW*1-2-16640*figj.1
From:<sip:+865939008847@ims1.fj.chinamobile.com>;tag=444e8c67
Call-ID: Anta1380089120000200090839d978@192.168.11.60
CSeq: 6REGISTER
Contact:<sip:+865939008847@192.168.11.60:5060>;expires=120
P-Associated-URI:<sip:+865939008847@ims1.fj.chinamobile.com>
P-Associated-URI:<tel:+865939008847>
Date: Wed, 25 Sep 2013 06:09:55 GMT
Authentication-Info:nextnonce="70660aea19201d00c41d3fde7dc83f1a",qop=auth,rspauth="4a5bee09cd90dc7d6366d02f22c31d14",cnonce="6fd8cbb8",nc=00000001
Content-Length: 0
注意: send-by 参数被用于匹配过程,这是因为有可能存在无意 / 恶意的相同的不同客户端传来的 branch 参数。
补充:Via头域的branch参数不存在,或者没有包含那个z9hG4bk,那么就用下列步骤进行判定。这是为了和RFC2543进行兼容的。
INVITE请求,并且这个INVITE请求的Request-URI,To tag,Fromtag,Call-ID,Cseq,和最上的Via头域,创建事务的INVITE请求的这些字段匹配,那么这个INVITE请求就是匹配这个事务的INVITE请求。在这个情况下,INVITE就是创建这个事务的INVITE请求的一个重发。ACK请求在匹配创建事务的INVITE请求的Request-URI, From tag, Call-ID ,Cseq序列号,最上的Via头域,并且To tag和服务端事务发出的应答的To tag相同,这个ACK就是这个事务的ACK。当这些头域比较完成,那么这个匹配也就完成了。在ACK比较中包含To tag的比较是为了在proxy上能够区别给2xx的ACK和给其他应答的ACK,这个proxy可能会转发全部的应答。一个匹配INVITE请求事务的ACK请求,如果这个INVITE请求已经被前一个ACK请求所匹配,那么这个ACK请求就是上一个ACK请求的重发。
INVITE sip:4002@192.168.50.69SIP/2.0
Via: SIP/2.0/UDP192.168.50.230:5060;branch=557fe9b7
From: "2002"<sip:2002@192.168.50.230>;tag=73d949ce
Contact:<sip:2002@192.168.50.230:5060>
To: <sip:4002@192.168.50.69>
Call-ID: Anta13832914324c24f8295aed0e44@192.168.50.230
CSeq: 12269INVITE
Max-Forwards: 70
SIP/2.0 100 Trying
Via: SIP/2.0/UDP192.168.50.230:5060;branch=557fe9b7
From: "2002"<sip:2002@192.168.50.230>;tag=73d949ce
To: <sip:4002@192.168.50.69>
Call-ID: Anta13832914324c24f8295aed0e44@192.168.50.230
CSeq: 12269 INVITE
SIP/2.0 180 Ringing
Via:SIP/2.0/UDP 192.168.50.230:5060;branch=557fe9b7
From: "2002"<sip:2002@192.168.50.230>;tag=73d949ce
To: <sip:4002@192.168.50.69>;tag=1755460001
Call-ID: Anta13832914324c24f8295aed0e44@192.168.50.230
CSeq: 12269INVITE
Contact: <sip:4002@192.168.50.69:35805;user=phone>
SIP/2.0 200 OK
Via: SIP/2.0/UDP192.168.50.230:5060;branch=557fe9b7
From: "2002"<sip:2002@192.168.50.230>;tag=73d949ce
To: <sip:4002@192.168.50.69>;tag=1755460001
Call-ID: Anta13832914324c24f8295aed0e44@192.168.50.230
CSeq: 12269INVITE
Contact:<sip:4002@192.168.50.69:35805;user=phone>
ACKsip:4002@192.168.50.69:35805;user=phone SIP/2.0
Via: SIP/2.0/UDP192.168.50.230:5060;branch=557fe9b7
From: "2002"<sip:2002@192.168.50.230>;tag=73d949ce
To: <sip:4002@192.168.50.69>;tag=1755460001
Call-ID: Anta13832914324c24f8295aed0e44@192.168.50.230
CSeq: 12269ACK
注意:应答是一个2xx应答,那么ACK并不认为是事务的一部分,ACK和INVITE属于不同的两个事务;终结应答不是一个2xx应答的时候,事务还包括一个ACK。
补充:user=phone 表示SIP的用户信息部分必须是TEL URL(TEL URL文档 RFC3966)。Contact: <sip:4002@192.168.50.69:35805;user=phone>
建议:学习下OSIP,OSIP是一个开源的SIP协议栈库,该协议栈的层次性比较强。支持基于UDP、TCP和STCP协议的SIP消息的协议栈。
事物(三)之服务端事务匹配请求相关推荐
- Metasploit 渗透测试手册第三版 第三章 服务端漏洞利用(翻译)
第三章 服务端漏洞利用 在本章中,我们将学习以下内容 1.攻击Linux服务器 2.SQL注入攻击 3.shell类型 4.攻击Windows服务器 5.利用公用服务 6.MS17-010 永恒之蓝 ...
- 剑网三缘起正在连接服务器,剑网3缘起:因无法服务端无法匹配二测延迟
原本决定今天启动二测的<剑网3缘起>怀旧服版本,因为官方升级了客户端导致了服务器端无法匹配,没有达到预期的优化效果,所以延迟了本次测试.下面来看看官方对这次延迟做出的公告. 官方公告: 大 ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- H5请求服务端发送POST请求之预请求-OPTIONS
1.问题场景 1.1 H5端请求服务端接口时,需要在header中携带服务端用jwt规范生成的token 1.2 在接收到H5的请求时Filter需要从请求头中拿出token做校验,检查当前的toke ...
- 服务端发post请求产生的编码问题
最近在做一个功能,大概功能是这样的,供应商提供http接口给我们,然后我们抓取供应商的数据保存到数据库,问题在于他们编码格式是gb2312的,而我们是utf-8. 大家可能会有个误区,post请求是无 ...
- NodeJS http服务端获取POST请求数据
http服务 我们知道,使用nodejs标准库的http模块创建一个http服务很简单,如下: const http = require('http');const hostname = '127.0 ...
- Python原生服务端签名生成请求订单信息「orderString」
接口文档:https://docs.open.alipay.com/204/105465/ 一.签名方法示例:「代码中的私钥是随机生成无法使用,做示例用」 def sign(params):sort_ ...
- 物联网视频监控服务(三)-监控服务端 篇
概述 此篇文章主要描述 监控服务端(video_server) 开发部分; 功能点 接收视频上传功能; 利用opencv动态检测 视频帧是否变化,标记变更部分及显示当前时间; 根据被监测环境是否变化( ...
- ASP.NET之通过JS向服务端(后台)发出请求(__doPostBack is undefined)
ASP.NET回发数据是通过函数__doPostBack来实现的.该函数在加入了服务端控件,并将AutoPostBack设置为true之后,将自己主动生成,详细能够參看以下的图. 同一时候还会生成隐藏 ...
- seata 如何开启tcc事物_微服务分布式事务4种解决方案实战
分布式事务 分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于分布式系统的不同节点之上,通常一个分布式 事物中会涉及到对多个数据源或业务系统的操作. 典型的分布式事务场景:跨银行转操作就 ...
最新文章
- 图论500题 ---- 枚举(最短路上的边)+最短路 删掉任意一条边的最长最短路 HDU1595
- 《Python编程从入门到实践》学习笔记3:列表
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )
- 电脑技术吧_极简技术|快速整理电脑桌面繁乱的图标
- ConcurrentModificationException并发修改异常
- GTS--阿里巴巴分布式事务全新解决方案
- 自定义地图怎么做成html,自定义html为谷歌地图制作标记
- jdbc mysql 存储过程查询数据_JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。...
- JAVA 基础之容器集合(Collection和Map)
- EFCore-一对一配置外键小记
- 专家称纳米机器人未来将“入侵”人脑,让人类将获得“超能力”
- 实用SQL代码解析工具——sqlparse
- python爬取拼多多数据 verifyauthtoken_拼多多TOKEN授权
- Machine learning approximation algorithmsfor high-dimensional fully nonlinear PDE
- pos机v1,简单pos机
- 干货!深度描述聚类——加州大学戴维斯分校计算机系博士生张洪境
- 关闭惠普计算机通电启动注册表,惠普电脑总是自动重启如何解决
- excel保存快捷键_Excel新手必备的5大技巧,看看你会几个?(附26个超实用快捷键)
- 在iOS应用中使用字体图标及制作字体库
- Facebook仍将在2020年启动天秤座