【1】FreeSWITCH 是什么?

FreeSWITCH是一个开源的电话交换平台。

世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。

从技术上讲,FreeSWITCH是一个B2BUA。

FreeSWITCH是一个背靠背的用户代理,用来帮助通信的双方进行实时的语音视频通信。

【2】FreeSWITCH背靠背用户代理

(1)代理服务器(Proxy Server)

设想Bob和Alice是经人介绍认识的,而他们还不熟悉,Bob想请Alice吃饭就需要一个中间人(M)传话,而这个中间人就叫代理服务器。

(2)重定向服务器(Redirect Server)

它以类似于这样的方式工作──中间人M告诉Bob,我也不知道Alice在哪里,但我爱人知道,要不然我告诉你我爱人的电话,你直接问她吧,我爱人叫W。

这样,M就成了一个重定向服务器(把Bob对他的请求重定向到他的爱人,这样Bob接下来要直接联系他的爱人),而他的爱人W是真正的代理服务器。

这两种服务器都是UAS,它们主要是提供一对欲通话的UA之间的路由选择功能。

(3)注册服务器(Register Server)

试想这样一种情况:Alice还是个学生,没有自己的手机,但它又希望Bob能随时找到她。于是,

当她在学校时就告诉中间人M说她在学校,如果有事找她可以打宿舍的固定电话;

如果她要回家,也通知M说有事打家里电话;

或许某一天她要去姥姥家,也要把她姥姥家的电话告诉M。

总之,只要Alice换一个新的位置,它就要向M重新“注册”,以让M能随时找到她,这时候M就相当于一个注册服务器。

(4)背靠背用户代理(Back-to-Back UA,B2BUA)。

需要指出,其实RFC 3261并没有定义B2BUA的功能,它只是一对UAS和UAC的串联。

FreeSWITCH就是一个典型的B2BUA,为了理解B2BUA,我们来看上述故事的另一个版本。M和W是一对恩爱夫妻。M认识Bob而W认识Alice。

M和W有意撮合两个年轻人,但见面时由于两人太腼腆而互相没留电话号码。

事后Bob想知道Alice对他感觉如何,于是打电话问M,M不认识Alice,就转身问爱人W(注意这次M没有直接把W的电话给Bob)。

W紧接着打电话给Alice,Alice说印象还不错,W就把这句话告诉M,M又转过身告诉Bob。

这样,M和W一个面向Bob,一个对着Alice,他们两个合在一起,称为B2BUA。

其实这里UAC和UAS的概念也不是那么重要,重要的是要理解这个背靠背的用户代理。

因为事情还没有完,Bob一听说Alice对他印象还不错,开心得不得了,便想请抽空请Alice吃饭,他将这一想法告诉M,M告诉W,W又告诉Alice。

然后Alice问去哪里吃啊,W又只好问M,M再问Bob……在这对年轻人挂断电话之前,M和W只能“背对背”不停地工作。

从图B2BUA可以看出,四个人其实全是UA。

当然,虽然FreeSWITCH是B2BUA,但也可以经过特殊的配置,实现一些代理服务器和重定向服务器的功能,甚至也可以从中间劈开,两边分别作为一个普通的UA来工作。

这没有什么奇怪的,在SIP世界中,所有UA都是平等的。具体到实物,则M和W就组成了实现软交换功能的交换机,它们对外说的语言是SIP,而在内部它们使用自己家的语言沟通。

Bob和Alice就分别成了我们常见的软电话,或者硬件的SIP话机。

Good Good Study, Day Day Up.

顺序 选择 循环 总结

FreeSWITCH 基础的更多相关文章

  1. freeswitch dialplan 基础

    freeswitch dialplan 基础 一.基础概念 dialplan 拨号方案 context 拨号表(块) extension  拨号去向 action  (拨号后执行的)动作 condit ...

  2. SIP协议栈基础笔记

    //------------------SIP基础------------------------// SIP是基于UDP的协议 UA(user Agent)用户代理 UAC(client)发起SIP ...

  3. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。

    本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...

  4. Nodejs 实现ESL内联FreeSWITCH设定说明

    一.背景说明: SIP Server IP (Centos):192.168.11.61  ,服务器IP(Windows):192.168.11.19 二.目的: 能够从192.168.11.19上通 ...

  5. freeswitch新增模块API

    概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...

  6. freeswitch的event事件处理

    概述 之前的文章中,我们讲解了freeswitch的源码基本结构,如何新增一个插件式模块,以及如何在模块中新增一个命令式API接口和APP接口. freeswitch本身是事件驱动的,它可以并发响应多 ...

  7. freeswitch的docker构建过程

    概述 Docker是一个开源的应用容器引擎,可以让开发者打包应用以及依赖包到一个轻量级.可移植的容器中,并在任何安装有Docker的机器上运行. Docker 使你能够将应用程序与基础架构分开,从而可 ...

  8. freeswitch APR库

    概述 freeswitch依赖库源代码基本都可以在libs目录下找到. 在freeswitch的官方手册中,可以找到freeswitch的依赖库表格,其中freeswitch的core核心代码依赖库主 ...

  9. freeswitch的话单模块

    概述 最近因为业务需要,在看freeswitch中话单相关的一些模块. 在voip的使用过程中,话单是重要的基础模块,涉及到计费和问题查找. 呼叫话单最重要的一点是稳定,不能有错误或遗漏. 本章对fs ...

随机推荐

  1. Uprobes: userspace probes >= Linux 3.5

    https://lwn.net/Articles/499190/ https://github.com/andreoli/fulltrace Prominent features in Linux 3 ...

  2. VMware Server中虚拟机随宿主机自动启动

    在options页面, 开启 Start Up and Shut Down Virtual Machines 这个选项. 保存退出. 打开 VMWare Server Console, 打开需要自动启 ...

  3. JAVA常见算法题(二)

    package com.xiaowu.demo; /** * 判断101-2000之间有多少个素数,并输出所有素数. * 质数(prime number)又称素数,有无限个.质数定义为在大于1的自然数 ...

  4. Ubuntu下安装配置JDK

    第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...

  5. python virtualenv virtualenvwrapper

    python中的virtualenv模块能够将项目环境分隔开,而不是使用全局的环境,非常实用. 首先pip install virtualenv 如何创建一个环境virtualenv testvir ...

  6. 【iOS开发-55】图片轮播案例:scrollView的分页、滚动栏、利用代理控制定时器和Page Control以及多线程问题

    案例: (1)用storyboard布局,这里用了三样东西. --UIScrollView就是我们准备存放滚动图片的容器. --Page Control就是控制页数的那几个小点点.能够设置有多少个点. ...

  7. python解析json文件报错No JSON object could be decoded

    2017-04-25 可用Nodepad++将json文件打开并以UTF8无BOM格式保存.

  8. 用键盘控制DIV && Div闪烁

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 【菜鸟学注入】之MySQL报错注入详解

    本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入 用SQL注入 ...

  10. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...