什么是Kamailio?

Kamailio(起源于SER)是一个开源的SIP服务器,主要用作SIP代理服务器、注册服务器等,即只处理信息,不处理媒体。如果你听说过FreeSWITCH或Asterisk,他们是典型的SIP B2BUA,主要用于VoIP媒体相关的处理。

The initial name of the project was SIP Express Router (aka SER), started in 2001 by Fraunhofer Fokus Research Institute and released under GPLv2 in 2002. In 2005, OpenSER project spawned from SER and had to change the name to Kamailio in summer of 2008 due to trademark claims. During the autumn of 2008, Kamailio and SER teams decided to join back the projects and use further the Kamailio name.

在学习FreeSWITCH以及SIP协议的过程中,经常有人问我,说“SIP消息中那么多头域和参数不知道干什么用的,很多都从来也没有用过,是否真正有用?” 我的回答是肯定的,FreeSWITCH只是一个应用场景,SIP是面向运营商设计的协议,在实际的部署环境中比单纯的FreeSWITCH要复杂的多。当然并不是所有人都能接触到运营商的环境,不过,现在是开源主导的世界,通过学习Kamailio以及FreeSWITCH,就可以更好地理解SIP了。

Kamilio主要处理SIP协议,因此,对SIP协议有较好地了解有助于更快地学习Kamailio。反过来,学好Kamailio又有助于进一步了解SIP协议,两者相辅相成的。

Kamailio基于GPLv2+开源协议发布,它可以支持每秒钟成千上万的呼叫建立和释放(高CAPS,Call Attempt Per Second),可用于构建大型的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年开始开发,至今已经有20多年的历史了。

Kamailio的读法是Kah-Mah-Illie-Oh,或简单一点,Ka-Ma-ili-o,或Kama-ilio,谷歌翻译成“卡迈里奥”,但笔者觉得更应该翻译成“卡马伊里奥”,或简称“卡马”。下面是一些真实发音:

听一听,你会读了吗?

Kamailio最初由于商标等原因由OpenSER改名而来,他们也曾征集过名字,但好的名字的域名商标等都被别人注册了。Kamailio是一个夏威夷词,意为讲话、交流(talk, to converse)。这个名字在欧洲和北美以及全球范围内有其独特性,也契合软件本身的意义,不失为一个好名字。参见:https://www.kamailio.org/w/openser-renamed-to-kamailio/

在使用Kamailio的过程中,我们经常与FreeSWITCH做比较。Kamailio与FreeSWITCH配合使用最常用的场景是Kamailio作注册服务器和呼叫负载均衡服务器(一般主备配置),FreeSWITCH做媒体相关的处理如转码、放音、录音、呼叫排队等。

简单来说,Kamailio是一个——

  • SIP Server,SIP服务器
  • SIP Proxy Server,SIP代理服务器
  • SIP Registrar Server,SIP注册服务器
  • SIP Location Server,SIP地址查询服务器
  • SIP Redirection Server,SIP重定向服务器
  • SIP Application Server,SIP应用服务器
  • SIP Loadbalance Server,SIP负载均衡服务器
  • SIP WebSocket Server,SIP WebSocket服务器
  • SIP SBC Server,SIP SBC服务器

相对而言,Kamailio不是——

  • SIP Phone,SIP软电话
  • Media Server,媒体服务器
  • B2BUA,背靠背用户代理

它有以下特性——

  • 可靠
  • 灵活

但它不做以下事情——

  • 不发起通话
  • 不应答电话
  • 不做音、视频等媒体处理

看到这里,如果你想继续学习Kamailio,可以继续看Kamailio新手指南