1.1 什么是Kamailio
Kamailio主要处理SIP,因此了解SIP对更快地学习Kamailio有很大帮助,而学好Kamailio又有助于进一步了解SIP,两者相辅相成。即使没有这两者太多的基础,相信通过本章的讲解,你也能初窥门径。
Kamailio基于GPLv2+开源协议发布,它可以支持每秒建立和释放成千上万次的呼叫(Call Attempt Per Second,CAPS),可用于构建大型的VoIP实时通信服务——音视频通信、状态呈现(Presence)、WebRTC、实时消息等;也可以构建易扩容的SIP-to-PSTN网关、IP-PBX系统,以及连接Asterisk、FreeSWITCH、SEMS等。
Kamailio具有如下特性:
□ 支持异步的TCP、UDP、SCTP、TLS、WebSocket。
□ 支持WebRTC,支持IPv4和IPv6。
□ 支持IM消息及状态呈现。
□ 支持XCAP和MSRP Relay。
□ 支持异步操作。
□ 支持VoLTE相关的IMS扩展。
□ 支持ENUM、DID以及LCR路由。
□ 支持负载均衡、主备用路由(Fail-Over)。
□ 支持AAA(记账、鉴权和授权)。
□ 支持很多SQL和NoSQL数据库后端,如MySQL、PostgreSQL、Oracle、Radius、LDAP、Redis、Cassandra、MongoDB、Memcached等。
□ 支持消息队列,如RabbitMQ、Kafka、NATS等。
□ 支持JSON-RPC、XML-RPC控制协议以及SNMP监控。
Kamailio从2001年开始开发[3],至今也有20余年的历史了。Kamailio的读法是Kah-Mah-Illie-Oh,或简单一点,Ka-Ma-ili-o,或Kama-ilio,谷歌翻译成“卡迈里奥”,但笔者觉得翻译成“卡马伊里奥”或简称“卡马”[4]更为合适。
Kamailio与FreeSWITCH配合使用最常用的场景是Kamailio作为注册服务器和呼叫负载均衡服务器(一般主备配置),FreeSWITCH进行媒体相关的处理(如转码、放音、录音、呼叫排队等),如图1-1所示。
图1-1 Kamailio与FreeSWITCH配合使用
简单总结一下,Kamailio是一个:
□ SIP服务器(SIP Server)。
□ SIP代理服务器(SIP Proxy Server)。
□ SIP注册服务器(SIP Registrar Server)。
□ SIP地址查询服务器(SIP Location Server)。
□ SIP重定向服务器(SIP Redirection Server)。
□ SIP应用服务器(SIP Application Server)。
□ SIP负载均衡服务器(SIP Load balance Server)。
□ SIP WebSocket服务器(SIP WebSocket Server)。
□ SIP SBC服务器(SIP SBC Server)。
相对而言,Kamailio不是:
□ SIP软电话(SIP Phone)。
□ 媒体服务器(Media Server)。
□ 背靠背用户代理(Back-to-Back UA,B2BUA)。
它有以下特性:
□ 快。
□ 可靠。
□ 灵活。
但它不做以下事情:
□ 发起通话。
□ 应答通话。
□ 做音、视频等媒体处理。