股票学习网

怎么买股票_怎么买股票入门_新手怎么买股票 - - 股票学习网!

瀑布线指标(pbx指标源码)

2023-04-19 15:07分类:新股投资 阅读:

 

第一买点的技术特征为:瀑布线最低位置白线开始掉头向上,MACD绿柱缩短,CJDX底背离。此时为反弹期,可能突破蓝线和0轴,也可能无法突破。

第二买点的技术特征为:瀑布线成为多头排列,MACD金叉突破0轴红柱不断延长,CJDX第一波上涨后回调到0轴再次爆发向上。

用法:

(1)当MACD出现金叉买入信号时,关注CJDX,CJDX出现金叉可买入;

(2)先于CJDX出现死叉卖出信号时卖出。

根据MACD趋势线在0轴上下方运行的具体情况又有以下四种情况,做短线时一定要将CJDX与MACD结合运用:

(1)MACD趋势线在0轴上方运行,并且走势是朝上方向,表明股票走势强势,可以根据CJDX买卖信号进行操作。此种情况操作最为有效。

(2)MACD趋势线在0轴上方运行,但走势是朝下方向的,表明股票走势开始由强势转为弱势,这时运用CJDX就要小心了。有的时候,CJDX走上去了,而股价K线连续几天还是走平的,上下波动幅度非常小。可以根据CJDX买卖信号进行操作,一定要谨慎,而且操作时间必须要非常短。

(3)MACD趋势线在0轴下方运行,但走势是朝上方向,表明股票走势由弱势走强,可以根据CJDX买卖信号进行操作,也会出现(2)中CJDX和股价K线运行方向不一样的情形。同样也要谨慎操作,有时候此种情况是等待时间最长但获利最多的时候。

(4)MACD趋势线在0轴下方运行,而且走势是朝下方向,表明股票渐走渐弱,此种情况同样可以根据CJDX买卖信号进行操作抓个反弹小波段,但最好是不要操作

黑马股票池每周发布,快用微信关注股票操盘手微信公众号"hujiangsimu01"(就是沪江私募01的拼音), 有惊喜,偶尔有点有用的消息。(cjh)

 

 

黄金交易的一个高胜率技巧,没基础也能学

这个方法,通过长时间复盘可以看到其较高的准确率和实用价值,不仅仅可以运用于黄金交易。用到的是瀑布线(PUBU)和修改过参数之后的KD指标(MT4里STOCH指标)。

一 使用前的调试准备

1.不改参数的PUBU,要会辨认什么叫一点式金死叉,我们要用到。

2.将KD参数修改为(13,3,3),原默认参数是(9,3,3)

3.使用原则,考虑到信号丰富,止损大小,以及空间性,稳定性等各角度,建议在黄金15-60分钟级别多运用,5分钟及60分钟级别以上辅助使用。

二 使用方法

KD先行金死叉,死叉尽量高,在80轴以上最好,金叉尽量低,在20轴以下最好

KD金死叉的时候,瀑布线还处于粘合状态,越粘合越好,后面尽量交于一点金死叉

KD可以是一次金死叉,也可以很短时间内的二次金死叉,二次金死叉比一次的效果更好。

在瀑布线后发生一点相交的金叉后做多,止损在最近的一个明显低点。

在瀑布线后发生一点相交的死叉后做空,止损在最近的一个明显高点。

看简单的一个黄金30分钟图

三 补充说明

KD的金死叉一定要注意位置,在50轴以上的金叉和50轴以下的死叉谨慎操作。

瀑布线的金死叉一定要注意方式,散乱式的交叉不要做,要一点金死叉,起码是P1-P4这几条线的交叉。

KD金死叉的时候,瀑布线越粘合越好,这样瀑布线一旦发生金死叉,必定是一点式的金死叉

如果KD金叉够低,死叉够高,瀑布线粘合程度非常好,这种时候甚至可以不等瀑布线金死叉,直接做多做空。

止损就是附近很明显的一个高点或者低点,一般而言在15-60分钟黄金的图里,这样的位置都不会太远,也就保证了短线止损不会太大,甚至是很小的。

看简单的一个黄金15分钟图

大家多在黄金的小级别图里做复盘加深理解,这个方式简单易懂,相信很多没什么基础的朋友应该也能用得上。

 

 

ISMS

ISMS是组织开展并改进安全工作的系统的一套思路、方法。(PDCA)

项目准备

项目范围确定

  • 组织部门
  • 无理地点
  • IT资源

初次做不建议做特别大,尽量周期比较快

项目的组织

  • 高管
  • 重点参与部门
  • 协作部门

项目沟通机制

  • 高层领导
  • 各个部门

ISMS实施注意事项

现状调研

首先

  • 业务特征、组织结构及职责
  • 组织文化与管控模式

其次

  • IT规划、IT制度文件、IT基础设施资料、IT应用系统资料、IT运维程序等
  • 信息安全与相关的政策、策略、程序、记录及相关报告

现状

  • 控制措施有没有
  • 是否充分
  • 是否有效

期望

调研方式

  • 文档审查
  • 问卷调查
  • 人员访谈
    • 覆盖面
    • 访谈提纲
  • 现场走查必要性
  • 技术评估

调研的范围不宜过大,时间跨度不宜过长

调研内容不仅14个域和114个控制项

把握访谈时间

访谈纪要

是否有补偿控制

调研报告的内容与形式:先写总结。领导一般就看看总结

风险管理

风险管理是信息安全的基础

基于资产的风险评估

资产评估与资产价值

  • 分类的意义
  • 关于人员、服务、无形资产
  • 资产相对价值的确定

资产的意义

资产价值不同不能划为同一资产组

评估的不同层次与方法

层次

  • 战略与治理
  • 组织与管理
  • 项目执行
  • 日常运行方面

方法

  • 基于详细资产
  • 基于合规标准
  • 基于应用系统
  • 基于IT流程
  • 基于数据分析

风险评估建议由客户主导,机构为辅

不要期望一次发现所有风险

前几次风险评估效果不佳是正常的

风险是动态的:需要风险监控

风险评估不是目的:需要进行风险处置

风险处置与安全规划

体系建立

SOA适用性声明

  • 根据业务需求选择试用项
  • 适用项最好映射到文件框架

文件框架

  • 按照27001各个域来组织
  • 按照企业的各个部门来组织

体系融合

  • ISO2W
  • CMMI
  • ISO9001
  • 等保
  • 其他规范

制度文件最好自己写,乙方协助

并非越复杂越好,言简意赅最好

不要追求太完美

策略

  • 方针、策略、政策
  • 四级文件体系
  • 正式发布
  • 传达相关人
  • 更新与评审

安全组织

  • 没有最好的,只有适合的安全组织
  • 安全处(部)≠安全组织
  • 通常的安全组织形态
  • 安全自责落实到部门和岗位(最好与考核指标相关联)
  • 关注职责分离与补偿控制
  • 与外部机构建立联系(政府机构、监管机构、安全厂商、服务商、协会、论坛)

密码管理

  • 分析针对哪些信息在什么环节采用密码保护
  • 选择密码算法要考虑合规性(对称、非对称、哈希)
  • 选择第三方或自建CA中心
  • 针对密钥管理

人力资源安全

任用前

  • 安全职责包含在岗位说明中
  • 背景调查的必要性及成本控制
  • 劳动合同中的条款与保密协议

任用中

  • 入职培训时强调安全政策
  • 制定一个提升人员安全意识和能力的计划
    • 针对安全从业人员提供专业培训
    • 针对安全联络员开展必要的技能培训
    • 针对全员开展安全意识宣教工作
  • 处理好全体员工开展安全意识宣教工作

开展网络安全意识和教育工作

网络安全法案

人是最薄弱的环节——社会工程学

安全培训≠意识宣教工作

安全意识宣教是安全投入性价比最高的

要系统、生动、持之以恒

任用变更与离职

  • 违规处理的必要性
  • 违规处理需要结合具体情况而定
  • 注意权限蔓延问题
  • 信息资产回收
  • 账号与权限及时清除
  • 强调保密责任,竞业限制协议

访问控制

原则

  • 访问控制的申请与授权
  • 知所必须
  • 最小特权
  • 职责分离
  • 针对管理员实施安全控制
  • 阶段性进行检查

内容

  • 身份识别
  • 身份验证(鉴别)
  • 授权管理
  • 审计

范围

  • 网络
  • 应用、中间件、数据库
  • 主机
  • 终端、移动智能设备
  • 物理

综合信息资产分类分级、在不同层面上建立访问控制策略

删除或禁用不必要的实用工具软件

对于源代码的控制

通过技术手段落实口令策略!!!!!!

身份管理解决方案的难点(4A)

通信安全

网络管理安全性

  • 网络协议
  • 网络流量
  • 网络设备
  • 人员管理

网络服务安全性

  • 接入服务
  • 网络运维服务
  • 安全服务

网络隔离

  • 内外网隔离
  • WLAN划分
  • 准入控制

信息传输安全

  • site to site VPN
  • SSL VPN
  • 信息交换

网络安全控制

  • 下一代防火墙、WAF
  • 网闸、信息交换系统
  • 防垃圾邮件、病毒网关、UTM
  • 网络沙箱、防APT攻击
  • 上网行为管理、非法外联检测
  • IDS/IPS、攻击诱捕(蜜罐)
  • 抗DDOS

无限安全

  • 安全配置
  • 热点检测
  • IDS/IPS

传统通信

  • PBX
  • 电话
  • 传真

操作安全

文件操作规程

  • 三四级文件

变更流程

  • 有变更走流程

容量管理

开发、测试和运行环境分离

防恶意代码

  • 终端、移动设备、服务器

安全配置

  • 建立安全配置基线

备份

  • 与灾难恢复一起考虑

日志

  • 日志保护

时钟同步

  • 设置时钟服务器

限制软件安装

  • 建立软件白名单

安全检查审计

  • 基线配置
  • 权限
  • 违规操作
  • 后续处理

管理漏洞

  • 漏扫工具
  • 漏洞挖掘
  • 补丁流程

监控

  • 威胁情报
  • 态势感知
  • 事件处理

物理安全

物理安全范畴

  • 物理位置选择
  • 建造安全
  • 场所周边安全
  • 内部区域划分与控制
  • 线缆安全
  • 设备安全
    • 场内设备
    • 场外设备
    • 无人值守设备
  • 环境安全
    • 雷击
    • 火灾预防与扑灭
    • 温湿度
    • 通风
    • 电力供应
    • 防干扰

物理计划要素

  • 通过威慑预防犯罪和破坏
  • 通过使用延迟机制减少损失(多重控制措施)
  • 犯罪或破坏检测
  • 安全事故评估
  • 物理安全事件响应

常见的控制措施

  • 玻璃
  • 栅栏
  • 照明
  • 文件柜
  • 保安
  • 门禁系统
  • CCTV
  • 屏蔽线缆和机房
  • 入侵检测系统
  • 防雷击
  • HVAC(暖通空调)
  • 水灾、火灾探测器
  • 灭火系统
  • UPS和发电机(偶尔启动确定可用性)
  • 场所撤离计划(需进行演练)
  • 物理安全审计

信息系统获取,开发和运维

漏洞的成因

  • 只关注功能实现,忽略安全需求
  • 团队的安全开发经验欠缺
  • 缺乏安全开发流程,或项目管理流程未包含安全机制
  • 缺乏安全部署标准或部署
  • 缺乏安全开发规范或安全开发规范没有融入项目
  • 缺乏评审环节,没有人对交质量把关
  • 缺乏上线、发布流程,未执行安全部署,验收审核
  • 安全上缺少投入,寄希望于后期补救

安全开发过程SDL

  • 安全需求
  • 安全设计
  • 安全编码
  • 安全测试
  • 安全上限

识别安全需求

  • 业务特点
    • 交易安全
    • 防欺诈
  • 合规需求
  • 通用需求
  • 威胁设计
    • 威胁建模
    • 攻击面缩减
  • 安全开发
    • 编码规范
  • 安全测试
    • 代码审核
    • 模糊测试
  • 安全发布
    • 上线安全检查
    • 渗透测试、众测

建立基本安全设计原则

建立安全开发环境

过程

技术

管理及监视外包开发

严格管理变更

保护测试数据

资产管理和供应关系

信息资产识别

建立信息资产分类分级标准

  • 分类与分级的意义
  • 简单性原则
  • 是否与保密、商业秘密保护相结合

通过建立资产清单识别信息资产

  • 明确所有者

建立信息资产管理流程

信息资产标记

  • 物理资产贴标签
  • 非结构化数据、结构化数据标记的问题

信息资产权限梳理

  • 实施DLP的前提

介质管理

  • 技术控制方法
  • 管理的难点
  • 介质在传输中的安全控制
  • 介质的销毁

识别供应商

  • 供应商服务
    • ISP提供商
    • 网络提供商
    • 网络安全服务
    • IT维护
    • 支持服务
  • IT设备外包和运行外包
  • 管理与业务咨询顾问及审计师
  • 开发人员和测试人员
  • 清洁工、餐饮人员及其他外包服务支持人员
  • 临时人员、学生实习及其他人员

供应商管理

  • 针对供应商工作场景建立安全策略
  • 其他注意事项
    • 供应商分类与筛选
    • 招投标管理、供应商协议
    • 人员管理、变更管理、风险管理、应急管理
    • 管理供应商服务交付
    • 供应商评价

信息安全事件管理

事件响应是一种能力

  • 事件响应的重要性
    • 安全模型的演进
    • 自适应的安全机构
  • 事件响应能力的要素
    • 最关键:人
    • 技术、工具、流程、写作

事件管理

  • 信息安全事件分类分级
  • 应鼓励人员报告可疑事件
  • 建立安全事件处理流程
    • 预案-检测-评估-响应-恢复-总结
    • 注意事件升级与汇报渠道
    • 注意证据收集
    • 注意多方协作

业务连续性

在业务连续性中考虑安全问题

管理恢复过程

  • 确定灾难恢复时的安全服务需求和级别
  • 确定信息安全服务恢复方案并落实
  • 开发恢复计划并纳入到BCP/DRP中
  • 在演练过程中检验信息安全服务恢复

符合性

  • 法律法规、行业监管、组织要求、相关合同
  • 符合性清单建立与维护
  • 理解符合性要求落实到ISMS制度要求
  • 针对相关记录、表单、电子日志等提供必要的保护

保护知识产权

  • 识别组织相关版权、商标、专利
  • 文件、邮件等增加声明或水印等
  • 防止盗版软件、建立软件白名单
  • 建立组织商业秘密规范
  • 落实商业秘密保护
    • DRM、DLP、云桌面≠DLP
    • 数据安全、商业秘密保护项目成功的关键

保护隐私

  • 确定负责人、识别隐私范围
  • 建立组织内的隐私声明
  • 落实隐私保护控制
  • 内外部环境变化时开展隐私评估
  • 大数据平台带来的新问题

符合性检查

  • 多标准合规体系的必要性
  • 针对集团行组织、建立信息安全管理工作平台的必要性
  • 组织定期的安全检查
    • 技术性检查(渗透测试、众测)
  • 第三方审核

体系运行

试运行启动

  • 制定详细的试运行计划
  • 召开试运行启动会
    • 组织级领导、各部门领导、及信息安全联络员

落实相关工作

  • 基于前期现状调研发现的问题和风险评估的结果,落实处置计划
  • 相关任务落实到部门和责任人
  • 对于整改任务进行跟踪
    • 配置基线、资产标签、物理安全区域
  • 定期向管理小组汇报整改进展
  • 各部门按照文件体系要求执行
  • 反馈文件执行结果进行修订

体系测量

  • 指定适合的测量指标
    • 年度、季度、月、周
    • 整体、部门、个人
  • 指标的多或少
  • 不能照搬别人的指标体系
  • 指标不是一成不变的
  • 指标必须要有数据来源

全员安全意识宣教

  • 如何选择安全意识服务商
  • 确定本年度安全意识宣教的内容与形式
  • 针对管理层进行开展意识培训
  • 开展安全意识宣传周
  • 发放安全手册、安全台历
  • 动画、宣传片、微电影、课件、电子期刊、知识图片
  • 海报、易拉宝、展板、现场培训、测试系统

内审

内审的目的

  • 验证安全控制的有效性,发现问题
  • 确保ISMS体系正常运转

内审过程

  • 计划
  • 准备
  • 实施
  • 报告
  • 跟踪

确定内审范围与时间

根据被审对象制定内审检查表

组件内审团队、进行内审培训、交叉审核

管理评审

  • 纳入安全组织决策层职责中
  • 评审的评率
  • 评审的内容
  • 管理评审报告

评审的内容

  • 内部审核或外部审核的结果
  • 以往管理评审的跟踪措施
  • 有效性测量的结果
  • 合规与隐私符合情况
  • 安全任务完成的情况
  • 重大安全事件及处理情况
  • 风险评估结果及整改落实状况
  • 信息安全管理体系的变更
  • 业务变化引出新的安全需求
  • 安全架构变化
  • 安全预算及资源需求

认证

  • 认证机构的选择(国际,国内)
  • 认证的范围与证书
  • 认证的费用
  • 认证审核阶段
  • 审核前的准备

现场审核注意事项

  • 首末次会议
  • 时间安排
  • 审核陪同
  • 后勤保障
  • 面对不满足项
  • 与审核员的关系
  • 年度复审

建筑架构和软件架构有很多共同点,但是建筑师在学习期间会观察数以千计的建筑,并研究大师们对这些建筑的评论。相比之下,大多数软件开发设计人员只熟悉少数大型程序——通常是他们自己编写的程序——而很少研究历史上伟大的程序。结果,他们重复彼此的错误,而不是在彼此成功的基础上再接再厉。

本文为《The Architecture of Open Source Applications》的学习笔记,四十多个著名开源软件的作者深度剖析他们的作品,讲述系统如架构如何设计,为什么这么设计,以及从中获得的经验教训。

Asterisk 1是基于GPLv2协议发布的一款开源电话应用平台。简单地说,这是一个服务端程序,用于处理电话的拨出、接入以及自定义流程。Asterisk得名于Unix通配符:*,该项目的宗旨是能做所有与电话相关的事情。如今的Asterisk已经支持一系列用于接拨电话的技术。这些技术包括诸多VoIP(Voice over IP,语音IP)协议,与传统电话网络的模/数连接性,以及PSTN(Public Swithed Telephone Network,公共交换电话网络)。

 

1.1 关键架构概念

本节讨论一些跟Asterisk每一部分息息相关的概念。这些思想是Asterisk架构的基础。

1.1.1 通道

通道表示Asterisk系统与某电话端点的一条连接(如图1)。一路电话呼叫接入了Asterisk系统,就用通道表示这一连接。在Asterisk代码中,通道是数据结构ast_channel的实例。图中这个呼叫场景可以视为呼叫方与某一系统应用(比如语音信箱)的交互。

 

图1.1 一个通道表示一条呼叫线路

 

1.1.2 通道桥接

更熟悉的一个呼叫场景是两个电话之间的连接:一个人使用电话A呼叫另一个使用电话B的人。在此场景下,连接到Asterisk系统的有两个电话终端,因而分配了两个通道(如图1.2)。

 

图1.2 两个通道表示两条呼叫线路

 

如上图连接的通道称之为通道桥接。为了实现在通道间传输媒体的目的而把通道连接起来,称为通道桥接。然而,在电话呼叫过程中也可能有视频流或文本流。即使有多种类型的媒体流,也是由Asterisk系统中负责连接两端的通道独立处理。

有两种方法可以完成两个通道的桥接:通用桥接和本地桥接。通用桥接时,无论通道使用什么技术都能够工作,它上层通过Asterisk抽象通道接口传输所有的音频和信号。尽管这是一种最灵活的桥接方式,却是最低效的,因为完成桥接必须有多层抽象。图1.2描述的就是通用桥接。

本地桥接是面向特定技术的通道连接方式。如果连接到Asterisk的两个通道使用相同的媒体传输技术,则势必有一种比通过抽象层更为高效的连接方式,因为抽象层是为使用不同技术的通道之间连接而准备的。例如,如果使用相同专用硬件连接的电话网络,则可以在硬件上直接桥接,这样根本不必通过应用程序向上流动,只有呼叫信号流经Asterisk,通话的媒体流直接连接,高效的多。

在桥接两个通道的时候,系统通过比较两通道的连接技术来决定使用通用桥接还是本地桥接。如果两通道都标识出支持相同的连接方式,那么就用本地桥接;反之使用通用方式。图1.3描述的是本地桥接的一个实例,呼叫信号流经Asterisk传递,媒体流建立直接连接。

 

图1.3 本地桥接实例

 

1.1.3 帧

在呼叫过程中,Asterisk帧来通信使用帧,帧是数据结构ast_frame的实例。帧可以是媒体帧,也可以是信号帧。在一个基本的呼叫过程中,媒体帧的流包含音频,是通过系统传输的。信号帧则用于发送呼叫事件相关的消息,如按下数字键,挂起电话,挂断电话等。

可用的帧类型是静态定义的。帧由一个编码类型和一个子类型表示。完整列表可在源码文件include.asterisk/frame.h中找到。下面举几个例子:

  • VOICE:这类帧携带一部分音频流。
  • VIDEO:这类帧携带一部分视频流。
  • MODEM:这类帧数据部分使用的编码,如用于通过IP协议发送传真的T.38编码;其主要用途就是处理传真。对于这类帧的处理,保证原始数据完好无损是很重要的,这样另一端才能被成功解码。AUDIO帧不一样,因为转码到其他音频编解码器的时候,牺牲音频质量以节省带宽是可接受的做法。
  • CONTROL:这类帧表示呼叫信号,用于指示呼叫信号事件,包括电话接通,挂断、挂起等等。
  • DTMF_BEGIN:开始的数字键。当呼叫者按下电话上的DTMF键时,发送此帧(DTMF 代表双音多频,当按下电话上的某个键时在电话音频中发送的音调)
  • DTMF_END:结束的数字键。当呼叫者停止按电话上的DTMF键时,发送此帧。

1.2 Asterisk组件抽象

Asterisk是一款高度模块化的软件。其内核程序可由源码树上的main/目录的源码构建而成。但是内核程序本身作用不大,其主要作用是模块注册。系统还有一些代码负责连接所有抽象接口,使电话呼叫工作起来。这些接口的具体实现是由一些可载入模块在运行时完成注册的。

默认状态下,出于简便性的考虑,当主程序启动时,Asterisk会在文件系统上一个预先指定的目录下找到所有模块,并加载。还有一个可更改的配置文件,可具体指定加载哪些模块及其加载顺序。如果一个模块可从网络接受连接,但实际并不需要用它,那么最好还是不要加载它。

1.2.1 通道驱动

通道驱动接口是Asterisk提供的最复杂且最重要的接口。Asterisk通道API提供了电话协议抽象层,使得其它所有Asterisk特性能够独立于所使用的电话协议而工作。此组件负责在Asterisk通道抽象层与其实现的电话技术细节层面进行转换。

Asterisk通道驱动接口定义称为ast_channel_tech接口。它定义了通道驱动必须实现的一组方法。通道驱动须实现的第一个方法是ast_channel工厂方法,也是ast_channel_tech中的requester方法。当Asterisk为一个接入或拨出的电话呼叫建立通道后,该通道类型对应的ast_channel_tech实现方法负责对ast_channel进行实例化和初始化。

ast_channel实例创建完成后,有一个对其创建者ast_channel_tech的引用,因为还有其他一些针对具体技术的操作需要处理,这些操作必须由*ast_channel*执行,但是实际的处理就需要由ast_channel_tech的适当方法来完成。图1.2表示Asterisk中的两个通道,在图1.4中进行拓展,表示两个桥接通道,以及图中对应的通道技术实现。

 

图1.4 通道技术层和抽象通道层

 

ast_channel_tech中最重要的方法有:

  • requester:回调函数,用于请求某个通道驱动实例化一个ast_channel对象,并针对其类型进行初始化。
  • call:回调函数,用于从端点(由ast_channel表示)发起一个拨出呼叫。
  • answer:Asterisk决定对接入的呼叫进行应答时调用。
  • hangup:系统决定应该挂断呼叫时调用。调用后,通道驱动以基于某种协议的方式通知端点:呼叫结束。
  • indicate:呼叫接通后,有可能产生许多其它的事件,需要给端点发信号。例如,如果电话被挂起,此回调函数将被调用,以通知此事件。通知呼叫挂起事件的方法可以是基于协议的,也可能只是由通道驱动简单发起播放挂起音乐的操作。
  • send_digit_begin:调用此函数的作用是指示数字按键(DTMF)的开始发送至设备。
  • send_digit_end:调用此函数的作用是指示数字按键(DTMF)的结束发送至设备。
  • read:此函数由Asterisk内核调用,用于从端点读回*ast_frame*。*ast_frame*是1.1.3节中提到Asterisk的一个用于封装媒体(如音频或视频)以及触发事件的帧。
  • write:此函数用于向设备发送*ast_frame*。通道驱动取得数据,按照其实现的电话协议做适当的打包,并传送至端点。
  • bridge:针对通道类型的本地桥接回调函数。如前所述,通道驱动使用本地桥接,可以为两个同类型通道实现更高效的桥接方法,而没必要让这两个通道的信号和媒体流都通过额外的抽象层。从性能原因考虑,这是极为重要的。

呼叫结束后,Asterisk内核中负责抽象通道处理的代码调用*ast_channel_tech*的hangup回调函数,销毁*ast_channel*对象。

1.2.2 拨号计划

Asterisk管理员使用Asterisk拨号计划(存于
/etc/asterisk/extensions.conf文件)来设置呼叫路由表。拨号计划是由一系列被称为扩展规则的呼叫规则组成。当有一个电话呼叫接入,系统用被叫号码在拨号计划中查找扩展规则,用以处理本次呼叫。扩展规则包括一组拨号计划应用,由通道执行。拨号计划中可用于执行的应用由一个应用注册表维护,在运行期间,模块被加载填充至注册表。

Asterisk内置近200个应用。应用定义非常松散,并可任意使用系统内部API与通道交互。有些应用执行单个任务,如回放(用于向呼叫方回放一个音频文件);还有一些应用则复杂得多,要执行大量操作,如语音信箱。

你可以集成诸多使用Asterisk拨号计划的应用,用于自定义呼叫处理。如果你需要对内置拨号计划语言的能力做些自定义扩展,系统也有脚本接口,允许使用任意编程语言做自定义呼叫处理。即使通过另一编程语言使用这些脚本接口,也需要调用拨号计划应用来实现与通道交互。

举例说明之前,我们先看一个Asterisk拨号计划的语法,此拨号计划用于处理对号码1234的呼叫。共有3个拨号程序被调用:首先,应答呼叫;其次,回放音频文件;最后,挂断呼叫。

; Define the rules for what happens when someone dials 1234. ; exten => 1234,1,Answer() same => n,Playback(demo-congrats) same => n,Hangup()

关键字exten用于定义扩展。在exten一行的右侧,1234的意思是我们为呼叫1234定义了一组处理规则;紧接着,1的意思是此号码被拨叫后的第一个处理步骤;最后,Answer指示系统应答此呼叫。下面两行都以关键字same起始,是为最后一个扩展(此例指1234)指定的规则。n是下一步(next)的简写;该行的最后一项指定了采取的动作。

下面是一个Asterisk拨号计划的应用示例。此例做的事情是应答接入的一个呼叫,向呼叫方播放蜂鸣音,然后从呼叫方读入最多4个数字,存入变量DIGITS,接着读入的数字重复播放给呼叫方,最后结束呼叫。

exten => 5678,1,Answer() same => n,Read(DIGITS,beep,4) same => n,SayDigits(${DIGITS}) same => n,Hangup()

如前所述,应用定义得非常松散--注册原型非常简单:

int (*execute)(struct ast_channel *chan, const char *args);

应用的实现可以使用/asterisk/目录下几乎所有的API。

1.2.3 拨号计划函数

大多数拨号计划应用接受字符串参数。其中有些值是硬编码,但在某些地方的行为需要有更多的动态处理,这时应使用变量。下面这个例子是一个拨号计划的代码片段,其作用是设置一个变量,并使用Verbose应用在Asterisk命令行界面上打印这个变量值。

exten => 1234,1,Set(MY_VARIABLE=foo) same => n,Verbose(MY_VARIABLE is ${MY_VARIABLE})

调用拨号计划函数的语法与应用相同。Asterisk模块可注册拨号计划函数,取得一些信息并返回给拨号计划;反之,函数也可以从拨号计划中取数据并有所动作。一个通用规则是:拨号计划可设置或获取通道的元数据,但不发任何信号,也不做任何媒体处理,这些工作留给拨号计划应用来做。

下面这个例子展示了拨号计划函数的用法。此函数首先向Asterisk命令行界面打印当前通道的CallerID,然后调用Set应用更改CallerID。此例中,VerboseSet是应用,CALLERID是函数。

exten => 1234,1,Verbose(The current CallerID is ${CALLERID(num)}) same => n,Set(CALLERID(num)=<256>555-1212)

CallerID信息存于数据结构*ast_channel*的实例中,不仅仅是一个变量,更多是一个用于信息存储的数据结构。拨号计划函数中的代码能够从这些数据结构中存取数据。

还有一个拨号计划函数的用法示例--在呼叫日志中添加自定义信息,即CDR(呼叫详细记录)。CDR函数允许获取呼叫详细记录信息以及添加自定义信息。

exten => 555,1,Verbose(Time this call started: ${CDR(start)}) same => n,Set(CDR(mycustomfield)=snickerdoodle)

1.2.4 编解码转换器

在VOIP领域有许多编解码器用于媒体编码及跨网络发送。多种技术选择为媒体质量、CPU消耗、带宽需求等方面提供了折中方案。Asterisk支持多种不同的编解码器,必要时能够在它们之间进行转码。

Asterisk设置完呼叫后,将会尝试使用公共媒体编解码器来沟通两个端点,这样就不需要转码。然而实际上这种情况不太可能发生。即使使用公共编解码器,也可能需要转码。比如,如果通过配置使Asterisk对流经系统的音频做信号处理(如增大或减小音量),就需要将音频转换为未压缩形式之后,才能执行信号处理。也可以通过配置使Asterisk做呼叫录音。如果配置的录音格式与呼叫的音频格式不同,也需要转码。

编解码的协商


用于协商媒体流将使用哪个编解码器的方法和连接到asterisk的通信技术密切相关。在某些情况下,例如在传统电话网络 (PSTN) 上的呼叫,可能不需要进行任何协商。然而,在其他情况下,尤其是使用 IP 协议时,会使用一种协商机制来根据能力和偏好需求就编解码器达成一致。

例如,对于SIP(最常用的VOIP协议),从高层视角来看,当呼叫送达Asterisk系统时,编解码器的协调执行如下:

  • 端点向Asterisk发送呼叫请求中包含其优先使用的编解码器列表。
  • Asterisk查询管理员提供的配置文件,配置文件中包含一个支持编解码器的列表,按优先级排序。随后Asterisk从配置文件的列表中选择优先级最高(基于配置文件中的优先级设置)、同时也包含在请求方所支持的列表中的编解码器,供应答使用。

对于更复杂的编解码,尤其是视频方面,Asterisk对此领域处理得还不够好。在过去十年里,编解码器协商需求变得更加复杂。我们还有更多的工作要做,才能更好的处理最新的视频编解码,才能使系统对视频的支持比现在更好。


 

1.3 线程

Asterisk是多线程应用程序,使用POSIX线程API来管理线程,并使用了相关服务,如加锁。所有与线程相关的调用的 Asterisk 代码都会被包装一层,这样调试会更方便。Asterisk的大多数线程可归类为网络监视线程或通道线程(有时亦称为PBX线程)。

1.3.1 网络监视线程

Asterisk的每个主要通道驱动程序中都存在网络监视线程,负责监视任何网络(IP网络,或PSTN,等等)连接,以及接入的呼叫或其它类型的请求。这类线程还要处理连接的建立和初始工作,如认证及拨号验证。呼叫建立完成后,监视线程将创建Asterisk通道(ast_channel)的一个实例,并启动一个通道线程在其生命周期的剩余时间内处理该呼叫。

1.3.2 通道线程

前面讨论过,通道是Asterisk的基本概念。通道有入站通道和出站通道之分。当有呼叫接入Asterisk系统时,就创建一个入站通道,执行拨号计划。Asterisk为每个入站通道创建一个线程来执行拨号计划。这类线程即被称为通道线程。

拨号计划应用一定是在通道线程的环境中执行。拨号计划函数亦如此。尽管也可能从诸如Asterisk CLI的异步接口读写拨号计划函数,但通常情况下,通道线程仍是ast_channel结构的拥有者,控制着其对象的生命周期。

1.4 呼叫场景

前两节介绍了Asterisk组件的重要接口以及线程执行模型。本节将分解一些常见的呼叫场景演示 Asterisk 组件如何协同工作来处理电话呼叫。

1.4.1 检查语音信箱

有这样一个呼叫场景的示例:呼叫接入电话系统,检查语音信箱。此场景涉及的第一个主要组件是通道驱动。通道驱动负责处理接入系统的电话呼叫请求,此动作发生在通道驱动的监视线程中。实现对系统的呼叫依赖于所使用的电话技术,因而可能会要求某种协商机制来设置呼叫。建立呼叫的另一个步骤是确定呼叫的预期目的地。这通常由呼叫者拨打的号码指定。但是,在某些特殊情况下,没有可用的特定号码,因为用于传递呼叫的技术不支持拨打指定的号码。

如果拨号计划(呼叫路由配置)为拨叫的号码定义了扩展,而通道驱动也查到了Asterisk配置有这样的扩展,系统将分配一个Asterisk通道对象(*ast_channel*),并创建一个通道线程。通道线程主要负责处理呼叫的余下动作。

 

图1.5 创建呼叫的时序图

 

通道线程的主循环用于处理拨号计划的执行,按照拨号扩展定义的规则执行。下面是一个扩展示例,用拨号计划的语法编写,存于extension.conf文件。有人拨叫**123*时,此扩展应答呼叫,并执行应用VoicemailMain。用户调用此应用就能检查邮箱里的信息。

exten => *123,1,Answer() same => n,VoicemailMain()

当通道线程执行应用Answer时,Asterisk就会应答接入的呼叫。应答呼叫除了一些通用的接听处理之外,还需调用关联ast_channel_tech结构中的回调来处理电话接听,这可能会涉及通过 IP 网络发送特殊数据包、将模拟线路连通等操作。

下一步就是由通道线程执行应用VoicemailMain(如图1.6)。此应用是由*app_voicemail*模块提供的。需要注意:虽然Voicemail代码处理大量呼叫交互,但它对用于将呼叫传送到 Asterisk 系统的技术一无所知,它只负责语音信箱相关的处理。Asterisk通道的抽象对语音邮件的实现隐藏了这些细节。

为呼叫方提供对语音信箱的访问涉及很多系统功能。然而,所有这些功能主要都实现为读写音频文件响应呼叫方的输入(主要是以数字按键的形式输入)。DTMF数字可以通过多种不同的方式发送给Asterisk系统。同样,这些实现细节都由通道驱动处理。当读入一个按键输入时,Asterisk将其转换为一个通用按键事件,传递给语音信箱代码。

我们讨论过,Asterisk重要接口之一是编解码转换器接口。编解码的实现对于这类呼叫场景而言非常重要。语音信箱代码向呼叫方回放一个音频文件时,Asterisk系统与呼叫方通信使用的音频格式不一定和该音频格式相同。如果需要音频转码,系统会生成一个转码路径,从源格式经一个或多个编解码转换器到目标格式。

 

图1.6 VoicemailMain的调用

 

在某一时刻,呼叫者完成与语音信箱的交互,挂断了呼叫。这时通道驱动检测到此动作的发生,并将其转换为Asterisk通道的一个通用信号事件。语音信箱代码接收到这一信号事件后退出,因为呼叫方挂断后就没有什么可执行的了。然后通道线程中的控制流程将返回到主循环,继续执行拨号计划。

1.4.2 呼叫桥接

Asterisk中还有一个很常用的呼叫场景叫做两通道间的呼叫桥接。此场景即一方电话通过系统呼叫另一方电话。呼叫的初始设置过程与前例相同。呼叫设置完毕,通道线程开始执行呼叫计划,之后的处理流程是不同的。

下面这个拨号计划是呼叫桥接的一个简单示例。如果系统使用了此扩展,当一方电话拨叫1234时,拨号计划执行应用Dial,这正是发起出站呼叫的主应用。

exten => 1234,1,Dial(SIP/bob)

Dial应用的参数SIP/bob的含义是,系统应发起一个出站呼叫,发送到设备SIP/bob。此参数的SIP部分指定了传送呼叫应使用SIP协议,bob部分由实现SIP协议的通道驱动*chan_sip*负责解释。假设此通道驱动有一个叫做bob的账户已经配置正确,那么它就知道如何将呼叫送达Bob的电话。

首先,应用Dial要求Asterisk内核根据SIP/bob标识符分配一个新的Asterisk通道。然后,内核请求SIP通道驱动执行针对所用技术的初始化操作。通道驱动也会发起出站呼叫过程。随着请求操作的继续执行,将会有事件传回给Asterisk内核,并由Dial应用接收。这些事件包括呼叫响应、目标忙、网络拥塞、呼叫被拒,或者其它很多可能的响应。理想情况下,呼叫会被应答。当两个通道都有应答时,通道桥接就开始了(如图1.7)。

 

图1.7 普通呼叫桥接的组件图

 

通道桥接过程中,音频和信号事件由一个通道不断传送至另一通道,直到发生某些导致桥接终止的事件,如一方呼叫挂断。图1.8所示的顺序图阐释了通过呼叫桥接传输音频帧的执行过程。

 

图1.8 桥接中处理音频帧的顺序图

 

呼叫完成时,挂断流程与前例很相似。主要不同之处在于此处涉及两个通道。通道线程结束之前,两个通道都要执行对应技术的挂断处理操作。

1.5 结论

迄今为止,Asterisk的架构已有十年以上的历史。然而,尽管这个行业在不断发展,Asterisk的一些东西,如通道的基本概念、使用拨号计划进行灵活的呼叫处理,仍然支持着复杂电话系统的开发。有一个领域Asterisk的架构还没有处理的太好,即如何使系统在多服务器间可伸缩。Asterisk开发社区正在开发一个叫做Asterisk SCF(可伸缩通信框架)的伙伴项目,目的就是解决可伸缩性的课题。未来几年,我们期待看到Asterisk以及Asterisk SCF继续称雄电话市场,包括更大型的系统项目。

脚注

  1. http://www.asterisk.org/
  2. DTMF表示多频双音,即按下一个电话键发送的呼叫音。

https://www.haizuanshi.com

上一篇:交易现货知识(期货开户要什么条件)

下一篇:沪深港通标的股(深港通股票名单一览)

相关推荐

返回顶部