Which SIP server to choose: SER, OpenSER, Kamailio, OpenSIPS? What do they have in common and what is the difference?

    For many voip network administrators who encounter sip servers, the words ser, openser, kamailio, opensips cause at least dizziness. Why are there so many of them? Why are they so alike? Which are actively developing, and which are no longer? Which one to choose in the end?



    Let's turn to the story.

    1995 year. Berlin, Germany. A group of former students from Professor Henning Schulzrinne, one of the authors of SIP technology, conducts VoIP research at Fraunhofer Fokus, an independent telecommunications research organization at Fraunhofer University. A working group led by Dorgham Sisalem publishes scientific articles describing the experimental implementation of SIP and recommendations for the first industrial developers of this technology.

    1996 year. Henning Schulzrinne and Mark Handley are developing the final SIP protocol specification.

    March 1999 The first standard sip protocol is adopted and published in RFC2543.

    year 2001. Andrei Pelinescu wrote the first lines of the SIP Express Router (SER). At that time, he implemented a routing function on the principle of the first route found in the table, which was soon replaced by the scripting language SER. A module support interface has also been added for the ability to quickly add new features. The results were presented on iptel.org, specially created for these purposes.

    From 2001 to 2003, new people were joining the project, at that time students. The development of modules for SER is carried out by Alex Hoffmann, Bogdan-Andrei Iancu, Daniel-Constantin Mierla, Jan Janak. Raphael Coeffic, Uli Abend and Stephan Sayer are developing the SIP Express Media Server. Nils Ohlmeier is developing the SipSak SIP Protocol Diagnostic Utility. Karel Kozlik is developing a web interface.

    September 2002 SER goes free float and is released under the GPL.

    June 14, 2005. Two central developers are separated from the project - Bogdan-Andrei Iancu and Daniel-Constantin Mierla. Together with Elena-Ramona Modroiu they form a new project, OpenSER.

    On July 28, 2008, the project was renamed Kamailio due to a trademark conflict.

    August 24, 2008. As a result of a conflict between developers, Bogdan-Andrei Iancu is separated from Kamailio, which forms a new project - Opensips.

    November 04, 2008. The Kamailio project merges with the original SER.



    So, for today, August 2012, we have two actively developing projects: Kamailio (or SIP router) and OpenSIPS.

    First, let's compare some statistics:
    ParameterKamailioOpensips
    Number of commits for 2011802593
    The number of commits for 2012 (through August inclusive)11991015
    Latest (devel) version3.41.9
    The number of lines of c-code (without blanks and comments)411940228301
    Number of modules145117


    I want to draw your attention to the fact that more does not mean better. And from this table we can conclude that both projects are actively developing.

    The next thing to compare are the modules. Some of them are the same, some are different. Modules with the same name often come from the same modules of the early kamailio, but over so many years many functions can differ in parameters or names. The data below cannot pretend to be objective, I just tried to superficially compare what is in one sip server and what is not in another.

    Kamailioare commonOpensips
    Accounting and Authentication
    Radius
    ACC_RADIUS
    Accounting module for RADIUS backend
    AUTH_RADIUS
    RADIUS-backend authentication module
    MISC_RADIUS
    Generic RADIUS functions, replaces avp_radius, uri_radius and group_radius
    - AAA_RADIUS
    RADIUS backend for the AAA API
    AUTH_AAA
    AAA-backend authentication module
    Diameter
    CDP
    C Diameter Peer - core communication engine
    CDP_AVP
    C Diameter Peer - application extensions
    AUTH_DIAMETER
    DIAMETER-backend authentication module
    -
    Support for scripts in other languages
    Kamailioare commonOpensips
    APP_LUA
    Execute embedded Lua scripts
    APP_MONO
    Execute embedded managed code - C #, VisualBasic.NET, Java, Java Script
    APP_PYTHON
    Execute embedded Python scripts
    PERL
    embed execution of Perl function
    CPL-C
    CPL interpreter module
    LUA
    Call LUA scripts from OpenSIPS cfg
    PYTHON
    Python scripting support
    Databases including nosql
    Kamailioare commonOpensips
    DB_CASSANDRA
    Cassandra database server connector
    DB_CLUSTER
    Generic database connectors clustering
    DB_SQLITE
    SQLITE-backend for database API module
    HTABLE
    Generich Hash Table container in shared memory
    MATRIX
    Matrix operations
    MEMCACHED
    Memcached connector module
    NDB_REDIS
    Connector to REDIS NoSQL Database engine
    DB_BERKELEY
    the Berkeley the DB driver for the DB the API
    DB_FLATSTORE
    the Fast writing-only text-the backend for database module
    DB_MYSQL
    the MYSQL-the backend for database the API module
    DB_ORACLE
    the ORACLE-the backend for database the API module
    DB_POSTGRES
    the POSTGRES-the backend for database the API module
    DB_TEXT
    the Text-the backend for database the API module
    DB_UNIXODBC
    unixODBC driver module
    LDAP
    LDAP connector
    PERLVDB
    Perl Virtual Database engine
    CACHEDB_CASSANDRA
    Cassandra is Implementation of CacheDB
    CACHEDB_LOCAL
    the Local Implementation of CacheDB
    CACHEDB_MEMCACHED
    Memcached Implementation of CacheDB
    CACHEDB_REDIS
    wide Redis Implementation of CacheDB
    DB_HTTP
    the HTTP-the backend for the API the DB
    DB_VIRTUAL
    Middle-of layer the DB mixer
    * In addition to DB API, opensips added the CACHEDB API, which systematizes the work with nosql backends.

    Blacklist Support
    Kamailioare common
    BLST
    Blacklisting API for config
    USERBLACKLIST
    User black / white listing
    Management interface mechanisms
    Kamailioare commonOpensips
    MI_RPC
    RPC support for Management Interface
    MI_DATAGRAM
    DATAGRAM (unix and network) support for Management Interface
    MI_FIFO
    FIFO support for Management Interface
    MI_XMLRPC XMLRPC
    support for Management Interface
    MI_HTTP - HTTP support for Management Interface
    PRESENCE mechanism
    Kamailioare commonOpensips
    PRESENCE_CONFERENCE
    the Extension to Presence server for conference events handling
    PRESENCE_PROFILE
    Presence server module - user profile the extensions - RFC6080
    PRESENCE_REGINFO
    the Extension to Presence server registration for the info replication (RFC3680)
    PUA_REGINFO
    the Extension to PUA registration server for the info replication (RFC3680)
    The PRESENCE
    Presence server module - common all the API
    PRESENCE_DIALOGINFO
    the Extension to Presence server for The Dialog the Info
    PRESENCE_MWI
    the Extension to Presence server for the Message for Waiting Indication
    PRESENCE_XML
    Presence server module - presence & watcher the info and the XCAP
    PUA
    the Common the API for presence user agent client
    PUA_BLA
    BLA extension for PUA
    PUA_DIALOGINFO
    The Dialog -Info extension for PUA
    PUA_MI
    MI extension for PUA
    PUA_USRLOC
    USRLOC extension for PUA
    PUA_XMPP
    XMPP extension for PUA (SIMPLE-XMPP presence gateway)
    PRESENCE_CALLINFO
    Extension to Presence server for Call-Info
    PRESENCE_XCAPDIFF
    Extension to Presence server for XCAP-DIFF event
    XCAP Support
    Kamailioare common
    XCAP_SERVER
    XCAP server implementation
    XCAP_CLIENT
    XCAP client implementation
    TLS Features
    KamailioOpensips
    TLS
    TLS operations module
    TLSOPS
    TLS operations module
    Topology hiding, B2B support
    KamailioOpensips
    TOPOH
    Topology hiding module
    B2B_ENTITIES
    Back-to-Back User Agent Entities
    B2B_LOGIC
    Back-to-Back User Agent Logic
    MANGLER
    SIP mangler module
    * kamailio does not support b2b, opensips has a topology hiding function built into the DIALOG module

    RPC Support
    Kamailio
    The CTL
    the Control connector for the RPC interface (fifo, unixsock, the tcp, udp)
    JSONRPC the C-
    JSONRPC client over netstrings protocol
    MI_RPC
    the RPC Management Interface support for
    XHTTP
    Basic the HTTP request handling server
    XHTTP_RPC
    the RPC over the HTTP commands The handling
    the XMLRPC
    the XMLRPC connector for the RPC interface
    Call Routing, LCR, Balancing
    Kamailioare commonOpensips
    LCR
    Least Cost Routing module
    PREFIX_ROUTE
    Execute config file route blocks based on prefix
    CARRIERROUTE
    routing extension suitable for carriers
    CALL_CONTROL
    PrePaid application module
    DIALPLAN
    Dialplan management
    DISPATCHER
    Dispatcher module
    DROUTING
    Dynamic Routing / LCR
    PDT
    Prefix-to-Domain translator module
    CLOSEDDIAL
    PBX-like dialling features
    LOAD_BALANCER
    Load Balancer (for calls) module
    Various unique features
    KamailioOpensips
    ASYNC
    Asynchronous SIP request handling functions
    DEBUGGER
    Interactive config debugger
    DMQ
    Distributed Message Queue System using SIP
    IPTRTPPROXY
    NAT traversal module using kernel for media relay
    MQUEUE
    Message queue system for config file
    MTREE
    Generic memory caching system using tree indexes
    PDB
    Number portability module
    P_USRLOC
    Partitioned and distributed user location services
    PIPELIMIT
    Traffic shaping policies
    PURPLE
    Multi-protocol gateway using Purple library
    RTIMER
    Execute config route route blocks on timer basis
    TMREC
    Match time recurrences defined based on RFC2445
    XMLOPS
    XML operations in config file using XPATH
    DNS_CACHE
    Module for caching DNS records that can be used with any Key-Value back-end
    EVENT_DATAGRAM
    Event datagram module
    EVENT_RABBITMQ
    Event RabbitMQ client module
    HTTPD
    Embedded HTTP server
    IDENTITY
    SIP Identity implementation
    OPTIONS
    OPTIONS server replier module
    SIGNALING
    SIP signaling module
    STUN
    Built-in STUN server
    UAC_AUTH
    UAC Authentication functionality
    UAC_REGISTRANT
    SIP Registrant implementation module
    Modules that duplicate competitor functionality or have functions included in the kernel
    KamailioOpensips
    COUNTERS
    Internal counter API for config
    IPOPS
    IP and DNS related operations for configuration file
    KEX
    Kamailio core extensions module
    PV
    Module holding Pseudo-Variables
    SANITY
    SIP message formatting sanity checks
    SDPOPS
    SDP operations
    SIPUTILS
    SIP utilities
    SQLOPS
    SQL operations
    TEXTOPSX
    Extra text operations
    TMX
    Transaction management extenstions module
    URI_DB
    URI operation with database support module
    UTILS
    A set of useful functions
    GFLAGS
    Global shared flags module
    SIPMSGOPS
    SIP operations module
    URI
    Generic URI operation module
    XLOG
    Advanced logger module
    General modules (primarily by name, can vary greatly in function)
    ALIAS_DB
    the Database the SIP aliases file module
    AVPOPS
    the AVP operation module
    the BENCHMARK
    the Config file benchmarking
    CFGUTILS
    Different the config utilities directory
    DIALOG
    The Dialog support module
    DIVERSION
    Diversion header insertion module
    the DOMAIN
    Multi-domain support module
    DOMAINPOLICY
    the Policies to the connect Federations
    the ENUM
    the ENUM the lookup module
    the EXEC
    the External the exec module
    the GROUP
    the User-groups module the DB-the backend with
    H350
    H350 implementation part
    the IMC
    the Instant Conferencing Free the Messaging module
    JABBER
    JABBER the IM and the PRESENCE interconnection module
    JSON
    JSON packing function
    MAXFWD
    Max-Forward processor module
    MEDIAPROXY
    NAT traversal module
    MSILO
    SIP message silo module
    NATHELPER
    NAT traversal helper module
    NAT_TRAVERSAL
    NAT traversal module
    OSP
    OSP peering module
    PATH
    Path support for SIP frontending
    PEERING
    Radius peering module
    PERMISSIONS
    Permissions control module
    PIKE
    Flood control module
    QOS
    QOS (RTP) module
    RATELIMIT
    SIP traffic shaping module
    REGEX
    RegExp via PCRE library
    REGISTRAR
    SIP Registrar implementation module
    RLS
    Resource List Server implementation
    RR
    Record-Route and Route module
    RTPPROXY
    NAT traversal using RTPProxy module
    SEAS
    Sip Express Application Server (interface module)
    SIPCAPTURE
    SipCapture module
    SIPTRACE
    SipTrace module
    SL
    Stateless replier module
    SMS
    SIP-to-SMS IM gateway module
    SNMPStats
    SNMP interface for statistics module
    SPEEDDIAL
    Per-user speed-dial controller module
    SST
    SIP Session Timer support
    STATISTICS
    Script statistics support
    TEXTOPS
    Text operations module
    TM
    Transaction (stateful) module
    UAC
    UAC functionalies (FROM mangling and UAC auth)
    UAC_REDIRECT
    UAC redirection functionality
    USRLOC
    User location implementation module
    XMPP
    SIP-to-XMPP Gateway (SIP to Jabber / Google Talk)


    Many functions are duplicated by different modules, but each server has its own unique features. Each of the servers to one degree or another may suit you more in some ways.

    What's next?

    kamailio continues the development of the current sip server.

    At the same time, opensips are working on version 2.0, which will be fundamentally different in architecture. According to the developers, the old design cannot solve some problems. The new server is planned to be completely asynchronous, which will help eliminate, for example, an architectural flaw with locks during processing of tcp connections.

    The planned architecture consists of several successive levels.

    The lowest level is the core. It is responsible for the sip-functionality, which can be performed automatically, without configuration.


    The next level is routing. It will implement functionality close to that which is now used for routing in opensips.


    And the last level is the application level. With it, you can perform operations at the highest level, using languages ​​such as python.


    This is how the interaction of applications with the kernel will look.

    The first alpha release of OpenSIPS 2.0 has already been released and I look forward to a full release, as The architecture proposed by the developers should help solve some urgent problems that neither kamailio nor opensips today can solve.

    At the moment, I personally choose opensips, because in my opinion, developers have a more systematic approach to organizing modules and introducing api in cases where this is necessary. And also due to the availability of opensips cachedb api, B2B and a built-in STUN server.

    But again, this is just my personal opinion, it is subjective and, perhaps, another server will be more suitable for your tasks. In any case, I hope that this article sheds some light on the differences between the two servers for those who cannot or do not want to deal with this.

    Also popular now: