這是一本全面介紹Kamailio的專業(yè)技術(shù)書,也會(huì)是市面上第1本Kamailio的圖書。
第1章介紹Kamailio的基本背景和架構(gòu),同時(shí)對(duì)SIP協(xié)議進(jìn)行了比較深入的介紹。
第2~3章介紹了Kamailio運(yùn)行環(huán)境的搭建和配置。
第4~5章對(duì)Kamailio的組件組件和KEMI進(jìn)行深入解析。
第6章介紹如何使用Kamailio做SIP路由轉(zhuǎn)發(fā)。
第7章介紹Kamailio如何與數(shù)據(jù)庫對(duì)接并進(jìn)行相關(guān)操作。
第8章介紹了20種路由方法。
第9章和第10章分別從高性能和安全兩個(gè)維度介紹對(duì)Kamailio的使用。
目 錄
推薦序一
推薦序二
前言
第1章 Kamailio與SIP1
1.1 什么是Kamailio1
1.2 背景3
1.3 SIP5
1.3.1 SIP基礎(chǔ)6
1.3.2 SIP的基本概念和相關(guān)元素7
1.3.3 SIP的基本方法和頭域9
1.3.4 SIP URI9
1.3.5 SDP和SOA10
1.3.6 SIP承載14
1.3.7 事務(wù)、對(duì)話和會(huì)話14
1.3.8 Stateless與Stateful17
1.3.9 嚴(yán)格路由和松散路由18
1.3.10 Record-Route19
1.4 Kamailio基本架構(gòu)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 全局參數(shù)部分40
3.1.2 模塊設(shè)置部分41
3.1.3 路由塊部分41
3.1.4 通用元素42
3.1.5 核心關(guān)鍵字46
3.1.6 核心值48
3.1.7 核心參數(shù)49
3.1.8 DNS相關(guān)參數(shù)60
3.1.9 TCP相關(guān)參數(shù)或選項(xiàng)61
3.1.10 TLS相關(guān)參數(shù)66
3.1.11 SCTP概述66
3.1.12 UDP相關(guān)參數(shù)66
3.1.13 核心函數(shù)67
3.1.14 自定義全局參數(shù)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函數(shù)85
4.2.1 函數(shù)整型返回值規(guī)則85
4.2.2 函數(shù)返回0的情況86
4.2.3 模塊函數(shù)86
4.3 在C函數(shù)中導(dǎo)出KEMI函數(shù)86
4.4 KEMI和偽變量89
4.4.1 偽變量靜態(tài)名稱限制89
4.4.2 針對(duì)特定偽變量的函數(shù)90
4.5 核心和pv模塊中的函數(shù)91
4.5.1 核心中的常用函數(shù)91
4.5.2 pv模塊相關(guān)函數(shù)94
4.5.3 KSR.hdr子模塊96
4.5.4 特殊的KEMI函數(shù)99
4.6 原生腳本與KEMI對(duì)比100
4.6.1 函數(shù)名100
4.6.2 函數(shù)的參數(shù)100
4.6.3 停止當(dāng)前腳本執(zhí)行101
4.7 其他101
第5章 Kamailio運(yùn)行環(huán)境與實(shí)例104
5.1 運(yùn)行Kamailio104
5.1.1 環(huán)境準(zhǔn)備104
5.1.2 在命令行上運(yùn)行Kamailio105
5.1.3 將配置文件保存到宿主機(jī)113
5.1.4 使用Docker Compose管理
容器113
5.2 將SIP呼叫轉(zhuǎn)發(fā)到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 調(diào)試與排錯(cuò)130
5.6.1 使用sipdump模塊跟蹤SIP
消息130
5.6.2 其他SIP相關(guān)工具簡介131
第6章 使用Kamailio做SIP
路由轉(zhuǎn)發(fā)132
6.1 什么是路由132
6.2 基本路由轉(zhuǎn)發(fā)134
6.2.1 簡單、安全的路由轉(zhuǎn)發(fā)134
6.2.2 無狀態(tài)轉(zhuǎn)發(fā)134
6.2.3 有狀態(tài)轉(zhuǎn)發(fā)135
6.2.4 并行轉(zhuǎn)發(fā)135
6.2.5 串行轉(zhuǎn)發(fā)138
6.3 使用dispatcher模塊做路由轉(zhuǎn)發(fā)
和負(fù)載均衡140
6.3.1 基本用法140
6.3.2 dispatcher模塊142
6.3.3 優(yōu)先級(jí)路由及備用路由144
6.3.4 按權(quán)重路由145
6.3.5 特殊參數(shù)145
6.3.6 從數(shù)據(jù)庫中加載146
6.4 呼叫從哪里來146
6.4.1 根據(jù)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腳本中調(diào)用原生腳本
中的路由塊168
第7章 數(shù)據(jù)庫操作169
7.1 初始化數(shù)據(jù)庫169
7.1.1 PostgreSQL169
7.1.2 MySQL171
7.2 配置數(shù)據(jù)庫連接172
7.3 在路由時(shí)進(jìn)行SQL查詢172
7.4 其他函數(shù)和偽變量174
7.5 常用數(shù)據(jù)庫表結(jié)構(gòu)175
第8章 15個(gè)典型的路由示例177
8.1 通過號(hào)碼分析樹進(jìn)行路由177
8.2 號(hào)碼翻譯179
8.3 低成本路由181
8.4 前綴路由184
8.5 動(dòng)態(tài)路由186
8.6 縮位撥號(hào)188
8.7 通過別名數(shù)據(jù)庫路由189
8.8 運(yùn)營商路由190
8.9 字冠域名翻譯192
8.10 用戶注冊(cè)和查詢193
8.11 向外注冊(cè)195
8.12 更多AVP示例198
8.13 話單200
8.14 SBC202
8.14.1 代理注冊(cè)202
8.14.2 NAT穿透206
8.14.3 代理媒體209
8.14.4 使用FreeSWITCH做B2BUA
模式217
8.14.5 拓?fù)潆[藏218
8.15 WebRTC219
第9章 性能223
9.1 性能測試223
9.1.1 早期的性能測試223
9.1.2 KEMI性能測試234
9.1.3 使用VoIPPerf進(jìn)行性能
測試235
9.2 拆解Kamailio高性能信令服務(wù)
設(shè)計(jì)238
9.2.1 懶解析238
9.2.2 內(nèi)存管理240
9.2.3 并發(fā)和同步241
9.2.4 定時(shí)器和異步操作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 限制太多的錯(cuò)誤鑒權(quán)248
10.2.5 限制并發(fā)呼叫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 其他安全建議和相關(guān)鏈接257
附錄A 安裝Kamailio258
附錄B FreeSWITCH快速入門262
附錄C Lua快速入門267
附錄D Docker簡介及常用命令275
附錄E 模塊索引表280
后記282