《Kamailio实战》预售及前言

2022-08-21 00:00 [kamailio]

我的新书《Kamailio实战》预计于9月中旬上市。关注“小樱桃科技”微信公众号,从小樱桃商城下单,第一时间拿到书。


小樱桃科技微信公众号

预售期间购买福利:

  • 签名版
  • 第一时间拿到书
  • 留下微信号进读者群
  • 免费视频教程(三个月内提供)
  • Kamailio培训优惠(5折,2022冬季班,线上,时间待定)

2022年11月7日更新: :目前新书已上市新的购书链接为:https://mp.weixin.qq.com/s/UjD5hV3h9AZlCow9kjQUmQ

前言

早就想写这样一本书了。

自《 FreeSWITCH 权威指南》于 2014 年出版以来,我收获了好多读者,也收到了很多很好的反馈,很多读者说希望能看到一本关于 SIP 代理服务器的书。因为随着业务规模扩大,FreeSWITCH 势必要做集群,而做集群就需要一个 SIP 代理服务器。Kamailio 是一个很好的 SIP 代理服务器,在过去的几年里,我们也在很多项目中用到了它。与其说为了满足读者的期盼,不如说我自己想写一本关于 Kamailio 的书。因为我们团队的小伙伴要看,我们给客户做培训要用,而关于 Kamailio 的中文资料却少之又少。

我与Kamailio的渊源

我与 Kamailio 的故事还得从很久以前说起。

我大学毕业后的第一份工作是在烟台电信1做程控交换机的运维,在大学里学的“程控数字交换与现代通信网”课程算是派上了用场。那时候,运营商使用的交换机还是程控交换机,非常庞大且笨重。我维护的交换机主要是上海⻉尔 S1240 系列以及华为的 CC08 系列。感谢那些工作,让我做到了将理论与实践相结合,并对通信网和七号信令有了深入的理解。那些年,我也⻅证了电信改通信、通信改网通的行业变革。至于运营商混合所有制改革,那都是后来的事。

后来我又学习了 Asterisk 和 FreeSWITCH,并加入一家北京的在线教育公司,使用 FreeSWITCH 做实时在线口语教学。良好的通信知识基础和开放的团队氛围让我很快学会了 FreeSWITCH,并最终加入 FreeSWITCH 开源社区,成了 FreeSWITCH 开源项目的核心贡献者。我提交了很多补丁,涉及核心交换功能以及很多外围的模块,其中视频相关的代码和模块前期几乎都是我写的。后来,我整理了自己的学习笔记及博客文章,又编写了一些新内容,出版了《FreeSWITCH权威指南》一书。该书出版时我已经辞职,开始独立创业,主要提供 FreeSWITCH、OpenSIPS、Kamailio 相关的技术开发和咨询工作。现在我们工作主要是带领团队基于这些开源项目打造与 IP-PBX、软交换和呼叫中心相关的实时通信产品和服务。

随着我对 FreeSWITCH 的深入理解和使用、维护的系统规模的扩大,以及客户对安全性、稳定性的要求越来越高,单机版的 FreeSWITCH 已经无法满足我的需求,因此,我又学习了 Kamailio 以及 OpenSIPS,并成功将它们应用于多个大型项目中。当时的 Kamailio 和 OpenSIPS 版本都还比较低,Kamailio 中还有很多处于独立目录中的 OpenSER 模块。也许是无知者无畏,当时我们还直接拉了 Kamailio 的代码按客户的要求进行大改,后来虽然测试成功了,但是我们最终决定只用 FreeSWITCH,而我们编写的那些代码也没有上线。不过我们因此积累了很多宝贵的一手经验。

再后来,我们在另一个大型项目中使用了 OpenSIPS,用其与 FreeSWITCH 配合。当时我们使用了一种非常简单但有效的架构:SIP 话机使用基于 UDP 的 SIP 协议通过 OpenSIPS 注册到 FreeSWITCH,话机做主叫时会经过 OpenSIPS 做负载均衡,做被叫时 FreeSWITCH 直接呼叫话机而不经过 OpenSIPS。这种架构简单好用,一直没出过问题,直到数年后我们遇到仅支持 TCP 且不太规范的 SIP 终端。

Kamailio 和 OpenSIPS 都是 OpenSER 的延续版,在最初的版本中两者其实差别不大。我在《FreeSWITCH实例解析》2中写过一些 OpenSIPS 相关的内容。至于为什么是 OpenSIPS 而不是 Kamailio,大概是因为 OpenSIPS 的名字中含有 SIP 吧,也可能是因为我们感觉国内的 OpenSIPS 用户要更多一些,但无论如何总得选一个吧。实际上,两者一直在更新版本,但主要功能没多大差别,在我的项目中两者也都用过,具体用哪个主要看甲方的偏好。

我跟 Kamailio 和 OpenSIPS 的主要作者在 ClueCon 上⻅过多次面,喝过啤酒,聊过天。他们人也都很好,同是程序员,我和他们有聊不完的话题。现在,OpenSIPS 团队在罗⻢尼亚,Kamailio 主要作者则在德国柏林。2017 年我们还邀请 OpenSIPS 开发团队到我们主办的“FreeSWITCH开发者沙⻰”上做过远程演讲。

最近在项目中使用 Kamailio 比较多,主要是因为我比较喜欢 Kamailio 中的 KEMI 接口,可以直接用 Lua 语言写路由逻辑。事实上,本书将主要介绍 KEMI 和 Lua 路由脚本。

Kamailio 主要是一个代理服务器(Proxy),它不会主动发起呼叫,而是对呼叫 SIP 消息 进行转发,因此不能“开箱即用”,你需要自己写一些转发逻辑。从另一个方面来讲,如果使用 Kamailio,你必将会用到像 FreeSWITCH 或 Asterisk 那样的软件。简单来讲,Kamailio 与 FreeSWITCH 最大的不同是——前者是一个代理服务器,而后者是一个 B2BUA。

或许你已经了解了 FreeSWITCH,事实上,本书中将会多次提到 FreeSWITCH。虽然具备 FreeSWITCH 基础知识并不是阅读本书的必要条件,但如果你了解 FreeSWITCH,那阅读本书会事半功倍。当然,本书也可以助你深入了解 SIP,进而更了解 FreeSWITCH。

在开始写作本书时,Kamailio 刚刚庆祝完 20 周岁的生日,所以我希望以本书作为献给 Kamailio 的生日礼物,同时希望能帮助初学者快速掌握 Kamailio,帮助资深运维和开发人员深入理解和灵活使用 Kamailio。

具体来说,我希望本书能对以下人员有帮助。

1) FreeSWITCH 从业者

这些人大部分应该已读过我的《FreeSWITCH权威指南》。相信本书能从另一个⻆度、 另一个维度帮助他们理解 SIP,理解通信逻辑。无论最终是否使用 Kamailio,本书都会给他们带来帮助。即使他们自己不使用 Kamailio,他们的对端也有可能在使用 Kamailio,知己知彼,百战百胜;如果自己要使用 Kamailio,阅读完本书自然能事半功倍。

2) VoIP 系统、软交换系统、电信设备开发人员

这些开发人员必定会与 SIP 打交道,有的甚至要自主研发 SIP 协议栈和设备,这时就 要与别人对接,Kamailio 可以是一个很好的测试和验证平台。另外,他山之石可以攻玉, 说不定看看 Kamailio 的源代码能得到很多启发。无论如何,参考 Kamailio 的 KEMI,将 Lua 等嵌入式脚本语言融入这些电信设备,必将大大增加系统的可扩展性和兼容性。

3) Asterisk 开发者

跟大多数 Asterisk 开发者一样,我也是读着《Asterisk,电话未来之路》《Trixbox3不相信眼泪》一路走过来的。与 FreeSWITCH 类似,Asterisk 也需要做集群,若做集群,则 Kamailio 是不二之选。

4) VoIP 系统实施、维护人员

对于实施、维护呼叫中心、IP-PBX 等系统的人员来说,本书也是不可多得的 SIP 教程。运维人员通常需要进行现场诊断、排错,还要分析 SIP 包等。扎实的 SIP 功底是高效做好这些事情的必要条件。Kamailio 以及本书提到的一些 SIP 工具可以帮助模拟信令流程,进而帮助这些人更快地定位问题并排错。甚至,可以临时将 Kamailio 串联到系统中,处理不兼容设备间的信令适配问题。

5) 电信企业的维护人员、销售人员、决策人员

广大电信企业的人员在以往的工作中积累了大量的工作经验,但往往局限于华为、中兴等设备厂家提供的解决方案和技术架构。技术瞬息万变,在市场竞争日益激烈,国内电信政策调整并逐渐宽松之际(如虚拟运营商牌照的发放),只有了解另一种解题思路,掌握新技术,才能更好地把握市场方向,为客户提供更好的服务。

6) 电信企业的开发人员

现在,国内的电信企业内部都有自己的研究院,以支撑电信系统以及周边系统的选型与建设。在软件国产化、“信创”、自主可控的产业背景下,如果用到 SIP 处理,Kamailio 当然是一个很好的选择。

7) 呼叫中心从业人员

可以预⻅,在不远的将来,将有很多呼叫中心是基于 FreeSWITCH 和 Kamailio 开发的。而本书中丰富的基础知识和详尽的功能介绍将对使用、管理呼叫中心系统起到很好的指导作用。

8) 在校教师和学生

大部分学校的教材只讲了 VoIP 原理及 SIP,很枯燥。老师教育学生“要理论与实践相结合”,而本书正是理论与实践的最佳结合点。学生在本书学到的知识和技能可以直接用在日后的工作中。

9) 互联网 RTC 从业人员

随着 WebRTC 的⻜速发展,基于互联网的实时通信也发展迅猛,各种互联网教育、直播连⻨、在线音视频会议等都会使用新兴的 RTC 技术。但 WebRTC 是一个媒体层的标准, 没有规定信令,而 Kamailio 实现了 SIP over WebSocket 信令,支持浏览器中的 WebRTC 呼叫。另外,不管使用何种信令,基于互联网的 RTC 系统也难免与传统的通信系统对接,深入了解 SIP 才能更好地做好互联网与传统电信系统的无缝互联与融合。

10) 开发经理、技术决策人员

了解本书所讲的知识有助于技术选型和决策。本书虽然主要讲 Kamailio,但对相关的技术和产品(如 FreeSWITCH、OpenSIPS 等)也都有对比和分析。全面了解各种技术有助于做出更好的决策。

11) OpenSIPS 用户

Kamailio 与 OpenSIPS 同根同源,很多概念和理论都是相通的。虽然本书的示例主要使用 KEMI,在 OpenSIPS 中还没有对应的方法,但是,在呼叫流程的处理、SIP 消息头 域管理、号码变换、路由选择、负载均衡和高可用等方面都是相通的。事实上,KEMI 在 Kamailio 中也是很新的概念,本书的示例也有很多是从原生脚本的示例中翻译过来的。如果读懂本书,就能将这些示例翻译回原生脚本,使其适用于 Kamailio 和 OpenSIPS。

本书的内容及特色

本书从 Kamailio 的历史、基本概念和逻辑讲起,即使没有相关经验的读者也能轻松入⻔。如果读者还有一些通信相关的行业背景知识以及相关的计算机网络基础知识,读起来会更轻松。为了照顾对通信和 SIP 不太熟悉的读者,本书附带了大量的脚注信息和相关链接,供读者查阅。本书的附录部分也有对 FreeSWITCH、Docker 和 Lua 语言等相关基础知识的介绍,即使不熟悉这些内容的读者也能快速入⻔并无障碍地阅读本书。此外,如果你读过《FreeSWITCH权威指南》,你就有了阅读本书的非常好的基础。

鉴于本书的章节安排,本书适合按从头到尾的顺序阅读。当然,所谓顺序阅读并不是需要逐字逐句阅读。尤其是第 3 章中列出的参数众多,初次阅读时观其大略即可。读完一遍后,再反复阅读某些章节,相信每次你都会有新的收获。

本书的主要特色是 KEMI,以及通过 Lua 写路由脚本。Lua 是一⻔轻量级的编程语言,非常适合写路由脚本。Lua 除了用在 Kamailio 中外,还被广泛用在 FreeSWITCH、Nginx (OpenResty)、PostgreSQL、VLC、Wireshark 等知名软件中。

排版及约定

  • 有些代码行或日志输出较⻓,为适应版面,进行了人工换行和排版。
  • 提示符:对于命令行的输入输出来说,在 Linux 及 Mac 等 UNIX 类平台上,前面的 $# 号为操作系统命令提示符;在不至于引起混淆的情况下,可能会省略系统提示符。
  • 注释:在 Kamailio 原生脚本中,统一使用 #// 表示注释(有的情况下 # 也代表命令行提示符,请注意区分),而在 Lua 脚本和 SQL 语句中,使用 -- 表示注释。
  • 本书给出的示例代码,如果在随书附赠的源代码中也有,一般会给出源代码文件名,如 mtree.lua,以方便读者运行对照。
  • 为节省篇幅,在本书的示例代码中做了大量的注释,这样处理可以使注释更便于阅读且更有针对性。所以代码内的注释也是本书很重要的部分。

资源和勘误

  • https://kamailio.org 是 Kamailio 社区官方网站,上面有各种资源。
  • http://kamailio.org.cn 是Kamailio中文站,由我和SIP/VoIP专家James Zhu共同维护。
  • http://book.dujinfang.com 是本书的在线站点,提供本书的源代码下载及勘误服务等。
  • dujinfang@gmail.com 是我的电子邮箱,如果你对本书有任何意⻅、建议或批评,请发到该邮箱。
  • https://weibo.com/dujinfang 是我的个人微博,我很乐意与各位读者进行交流。
  • RTS.cn 是一个探讨开源和商业最佳结合的技术社区,有 Kamailio、FreeSWITCH 相关的技术交流以及年度技术论坛——RTSCon。
  • FreeSWITCH-CN 是 FreeSWITCH 中文社区的微信公众号,未来也会多发一些Kamailio的内容,欢迎大家搜索“FreeSWITCH-CN”关注。由于我水平有限,书中错误和疏漏在所难免,欢迎广大读者朋友批评指正。

致谢

本书在写作时参考的大量资料都来自 Kamailio 开源社区及其官方网站上公开的信息,包括但不限于网⻚、演讲 PDF、YouTube 视频等,以及 SIP Routing with Kamailio 这本电子书4

Daniel-Constantin Mierla 是 Kamailio 开发者之一,为本书的写作提供了很多指导和建议。Kamailio 软件发展到今天,是德国的 FhG FOKUS 研究所、参与开源社区的众多个人开发者和公司共同努力的成果,在此一并致谢。

感谢机械工业出版社华章分社。机械工业出版社对中文原创计算机图书的支持让我倍感温馨。感谢杨福川编辑,他的图书出版理念给了我许多启发和写作的动力。感谢孙海亮编辑,他的耐心和细致保证了本书的质量和写作进度。

感谢我的妻子吕佳娉,她是本书的第二作者,也是本书的第一读者。她编辑整理了前三章和附录中的部分内容,也常常帮我修订文字错误。她基本上包揽了所有的家务和孩子的功课辅导,让我有更多的时间写作。

感谢我的儿子杜昱凝。他从很小就帮我测 FreeSWITCH 电话,现在已经是初中生的他也经常帮我调试 Kamailio 路由脚本并测试电话。也感谢他对我的理解,我总是忙于上班和写作,少了很多陪他玩耍的时间。

感谢我的同事韩小仿、景朝阳、杜林君、杨小金等,他们帮我提供了很多案例,做了很多测试和验证。感谢我的同事林彦君设计了本书封面。感谢烟台小樱桃网络科技有限公司,为本书的出版提供了人力和资金支持。没有他们,便没有此书。

你可以继续阅读本书的内容及特色以及推荐语及推荐序

杜金房
2022年5月于烟台

  1. 电信这个名字大家应该都很熟悉。中国电信业在短短的几年内经过了数次重组改制,我离开时叫烟台网通,现在叫烟台联通,而烟台电信是我刚参加工作时的名字,与现在的烟台电信不是同一家公司。 

  2. 我写的一本电子书,介绍了很多 FreeSWITCH 实例,但未正式出版。 

  3. 基于 Asterisk 的一款 PBX 软件,提供了图形配置界面、安装维护系统等。 

  4. 又称为 Kamailio Admin Book,作者为 Daniel-Constantin Mierla 及 Elena-Ramona Modroiu,参⻅ https://www.asipto.com/sw/kamailio-admin-book/。 




微信公众账号
FreeSWITCH-CN


小樱桃科技


RTS VIP


RTS实时解决方案