《Kamailio实战》[56M]百度网盘|pdf下载|亲测有效
《Kamailio实战》[56M]百度网盘|pdf下载|亲测有效

Kamailio实战 pdf下载

出版社 机械工业出版社京东自营官方旗舰店
出版年 2022-12
页数 390页
装帧 精装
评分 8.9(豆瓣)
8.99¥ 10.99¥

内容简介

本篇主要提供Kamailio实战电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

产品特色

编辑推荐

适读人群 :(1)通信相关的开发工程师,如通信工程师、呼叫专家等(2)音视频开发工程师(3)其他从事与VOIP产品相关工作的人员

这是资深网络通信技术专家,FreeSWITCH-CN中文社区创始人,《FreeSWITCH权威指南》作者杜金房老师的又一力作,本书从实战角度对Kamailio的使用、维护、路由转发、WebRTC对接、性能和安全等进行深入解读,内含大量实例。

内容简介

这是一本全面介绍Kamailio的专业技术书,也会是市面上第1本Kamailio的图书。

第1章介绍Kamailio的基本背景和架构,同时对SIP协议进行了比较深入的介绍。

第2~3章介绍了Kamailio运行环境的搭建和配置。

第4~5章对Kamailio的组件组件和KEMI进行深入解析。

第6章介绍如何使用Kamailio做SIP路由转发。

第7章介绍Kamailio如何与数据库对接并进行相关操作。

第8章介绍了20种路由方法。

第9章和第10章分别从高性能和安全两个维度介绍对Kamailio的使用。


精彩书评

本书可以视为《FreeSWITCH权威指南》的姊妹篇,秉承杜金房老师的一贯风格:庖丁解牛,代码说话。本书既有系统大局观,又有详实的操作步骤,是学习Kamailio和SIP技术的宝典。

—— 宋利 上海交通大学教授


杜老师在项目开发和与客户的交流中发现单机版的FreeSWITCH已经无法满足需求,因此撰写了本书。本书融入了杜老师丰富的Kamailio软件开发经验,他在书中列举了大量Kamailio操作实例,还加入了FreeSWITCH、Lua等快速入门内容。本书是一本实用、详细的Kamailio教程,一定会像《FreeSWITCH权威指南》一样大受欢迎。

——张昊 中南大学计算机学院教授、博士生导师,腾讯云具价值专家(TVP)


2015年在声网主办的实时互联网大会(RTE大会)上我认识了杜金房先生。他始终致力于开源电信项目的研究,在这方面笔耕不辍、著作等身。他在FreeSWITCH方面的很多书籍、文章已成为这个领域的基础资料,帮助了不少电信和WebRTC领域的开发者。这本书对Kamailio相关知识的介绍深入浅出,相信对Kamailio有兴趣的同行们能从中受益。

—— 赵斌 声网创始人兼CEO


一本深入浅出介绍SIP基础知识、Kamailio实战的好书。一个诞生20年的成熟开源项目,现在终于有了介绍它的中文版图书,强烈推荐给每一位对SIP感兴趣的朋友,大家认真研读,必有收获。

——庄表伟 开源社理事


杜老师在互联网音视频和通信网语音技术体系方面有丰富的经验与独到的见解,作为腾讯云具价值专家(TVP),在业界有着广泛的影响。本书从原理和实战两方面入手,从SIP出发,深入浅出地对Kamailio的基本原理、组件及高效使用进行了全面阐述,生动且不失深度,适合通信网开发及维护人员、互联网音视频从业者以及相关专业高校学生阅读。

——王军 腾讯云通信副总经理


杜老师是国内SIP和音视频领域的专家,一直积极参与FreeSWITCH开源项目,并热衷于在社区布道,使用过FreeSWITCH的朋友可能都读过他的书。Kamailio作为SIP代理服务器,可以很好地帮助构建FreeSWITCH集群。杜老师的这本书非常棒,值得想要了解Kamailio、想要构建FreeSWITCH集群的朋友阅读。

——赵加雨 钉钉副总裁,音视频负责人


目录

目  录

推荐序一

推荐序二

前言

第1章 Kamailio与SIP1

1.1 什么是Kamailio1

1.2 背景3

1.3 SIP5

1.3.1 SIP基础6

1.3.2 SIP的基本概念和相关元素7

1.3.3 SIP的基本方法和头域9

1.3.4 SIP URI9

1.3.5 SDP和SOA10

1.3.6 SIP承载14

1.3.7 事务、对话和会话14

1.3.8 Stateless与Stateful17

1.3.9 严格路由和松散路由18

1.3.10 Record-Route19

1.4 Kamailio基本架构19

第2章 理解Kamailio配置文件23

2.1 基本配置文件23

2.2 原生脚本27

2.3 Lua脚本32

2.4 Lua脚本的其他写法38

第3章 Kamailio基本概念和组件40

3.1 core详解40

3.1.1 全局参数部分40

3.1.2 模块设置部分41

3.1.3 路由块部分41

3.1.4 通用元素42

3.1.5 核心关键字46

3.1.6 核心值48

3.1.7 核心参数49

3.1.8 DNS相关参数60

3.1.9 TCP相关参数或选项61

3.1.10 TLS相关参数66

3.1.11 SCTP概述66

3.1.12 UDP相关参数66

3.1.13 核心函数67

3.1.14 自定义全局参数73

3.1.15 脚本语句73

3.1.16 脚本操作符75

3.2 其他概念和组件78

3.2.1 伪变量78

3.2.2 htable79

3.2.3 AVP80

3.2.4 模块81

第4章 KEMI详解83

4.1 KEMI Lua入口84

4.2 KEMI函数85

4.2.1 函数整型返回值规则85

4.2.2 函数返回0的情况86

4.2.3 模块函数86

4.3 在C函数中导出KEMI函数86

4.4 KEMI和伪变量89

4.4.1 伪变量静态名称限制89

4.4.2 针对特定伪变量的函数90

4.5 核心和pv模块中的函数91

4.5.1 核心中的常用函数91

4.5.2 pv模块相关函数94

4.5.3 KSR.hdr子模块96

4.5.4 特殊的KEMI函数99

4.6 原生脚本与KEMI对比100

4.6.1 函数名100

4.6.2 函数的参数100

4.6.3 停止当前脚本执行101

4.7 其他101

第5章 Kamailio运行环境与实例104

5.1 运行Kamailio104

5.1.1 环境准备104

5.1.2 在命令行上运行Kamailio105

5.1.3 将配置文件保存到宿主机113

5.1.4 使用Docker Compose管理

 容器113

5.2 将SIP呼叫转发到FreeSWITCH115

5.3 从简单的路由脚本开始116

5.4 Kamailio命令行工具117

5.4.1 kamctl117

5.4.2 kamdbctl120

5.4.3 kamcmd121

5.4.4 kamcli122

5.4.5 sipexer124

5.5 Web管理界面127

5.6 调试与排错130

5.6.1 使用sipdump模块跟踪SIP

 消息130

5.6.2 其他SIP相关工具简介131

第6章 使用Kamailio做SIP

 路由转发132

6.1 什么是路由132

6.2 基本路由转发134

6.2.1 简单、安全的路由转发134

6.2.2 无状态转发134

6.2.3 有状态转发135

6.2.4 并行转发135

6.2.5 串行转发138

6.3 使用dispatcher模块做路由转发

 和负载均衡140

6.3.1 基本用法140

6.3.2 dispatcher模块142

6.3.3 优先级路由及备用路由144

6.3.4 按权重路由145

6.3.5 特殊参数145

6.3.6 从数据库中加载146

6.4 呼叫从哪里来146

6.4.1 根据IP地址段判断147

6.4.2 使用dispatcher模块判断148

6.4.3 使用permissions模块判断149

6.4.4 使用geoip2模块判断150

6.5 API路由151

6.5.1 通过HTTP查询路由151

6.5.2 rtjson157

6.5.3 evapi161

6.6 在KEMI脚本中调用原生脚本

 中的路由块168

第7章 数据库操作169

7.1 初始化数据库169

7.1.1 PostgreSQL169

7.1.2 MySQL171

7.2 配置数据库连接172

7.3 在路由时进行SQL查询172

7.4 其他函数和伪变量174

7.5 常用数据库表结构175

第8章 15个典型的路由示例177

8.1 通过号码分析树进行路由177

8.2 号码翻译179

8.3 低成本路由181

8.4 前缀路由184

8.5 动态路由186

8.6 缩位拨号188

8.7 通过别名数据库路由189

8.8 运营商路由190

8.9 字冠域名翻译192

8.10 用户注册和查询193

8.11 向外注册195

8.12 更多AVP示例198

8.13 话单200

8.14 SBC202

8.14.1 代理注册202

8.14.2 NAT穿透206

8.14.3 代理媒体209

8.14.4 使用FreeSWITCH做B2BUA

 模式217

8.14.5 拓扑隐藏218

8.15 WebRTC219

第9章 性能223

9.1 性能测试223

9.1.1 早期的性能测试223

9.1.2 KEMI性能测试234

9.1.3 使用VoIPPerf进行性能

 测试235

9.2 拆解Kamailio高性能信令服务

 设计238

9.2.1 懒解析238

9.2.2 内存管理240

9.2.3 并发和同步241

9.2.4 定时器和异步操作242

9.2.5 缓存242

9.2.6 异步处理243

9.2.7 其他243

第10章 安全244

10.1 基本安全手段和策略244

10.2 限呼245

10.2.1 限制User-Agent头域245

10.2.2 限呼某些目的地246

10.2.3 限制高频呼叫247

10.2.4 限制太多的错误鉴权248

10.2.5 限制并发呼叫249

10.3 TLS250

10.3.1 理解TLS证书及密钥251

10.3.2 自签名证书252

10.3.3 在Kamailio中配置TLS252

10.3.4 TLS连接测试253

10.3.5 自制CA根证书254

10.3.6 其他255

10.4 iptables256

10.5 其他安全建议和相关链接257

附录A 安装Kamailio258

附录B FreeSWITCH快速入门262

附录C Lua快速入门267

附录D Docker简介及常用命令275

附录E 模块索引表280

后记282


前言/序言

前  言
早就想写这样一本书了。
自《FreeSWITCH权威指南》于2014年出版以来,我收获了好多读者,也收到了很多很好的反馈,很多读者说希望能看到一本关于SIP代理服务器的书。因为随着业务规模扩大,FreeSWITCH势必要做集群,而做集群就需要一个SIP代理服务器。Kamailio是一个很好的SIP代理服务器,在过去的几年里,我们也在很多项目中用到了它。与其说为了满足读者的期盼,不如说我自己想写一本关于Kamailio的书。因为我们团队的小伙伴要看,我们给客户做培训要用,而关于Kamailio的中文资料却少之又少。
我与Kamailio的渊源
我与Kamailio的故事还得从很久以前说起。
我大学毕业后的第一份工作是在烟台电信做程控交换机的运维,在大学里学的“程控数字交换与现代通信网”课程算是派上了用场。那时候,运营商使用的交换机还是程控交换机,非常庞大且笨重。我维护的交换机主要是上海贝尔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实例解析》中写过一些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,电话未来之路》《Trixbox不相信眼泪》一路走过来的。与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,以方便读者运行对照。
为节省篇幅,本书的示例代码中加了大量的注释,这样处理可以使注释更便于阅读且更有针对性。所以代码内的注释也是本书很重要的部分。
资源和勘误
kamailio.org是Kamailio社区官方网站,上面有各种资源。
kamailio.org.cn是Kamailio中文网站,由我和SIP/VoIP专家James Zhu共同维护。
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这本电子书。Daniel-Constantin Mierla是Kamailio开发者之一,为本书的写作提供了很多指导和建议。Kamailio软件发展到今天,是德国的FhG FOKUS研究所、参与开源社区的众多个人开发者和公司共同努力的成果,在此一并致谢。
感谢机械工业出版社。机械工业出版社对中文原创计算机图书的支持让我倍感温馨。感谢杨福川编辑,他的图书出版理念给了我许多启发和写作的动力。感谢孙海亮编辑,他的耐心和细致保证了本书的质量和写作进度。
感谢我的妻子吕佳娉,她是本书的第二作者,也是本书的第一读者。她编辑整理了前三章和附录中的部分内容,也常常帮我修订文字错误。她基本上包揽了所有的家务和孩子的功课辅导,让我有更多的时间写作。
感谢我的儿子杜昱凝。他从很小就帮我测FreeSWITCH电话,现在已经是初中生的他也经常帮我调试Kamailio路由脚本并测试电话。也感谢他对我的理解,我总是忙于上班和写作,少了很多陪他玩耍的时间。
感谢我的同事韩小仿、景朝阳、杜林君、杨小金等,他们帮我提供了很多案例,做了很多测试和验证。感谢我的同事林彦君设计了本书封面。感谢烟台小樱桃网络科技有限公司,为本书的出版提供了人力和资金支持。没有他们,便没有此书。

杜金房
2022年5月于烟台