Какой SIP-сервер выбрать: SER, OpenSER, Kamailio, OpenSIPS? Что в них общего и в чем разница?

    У многих администраторов voip-сетей, сталкивающихся с sip-серверами слова ser, openser, kamailio, opensips вызывают по меньшей мере головокружение. Почему их так много? Почему так похожи? Какие активно развиваются, а какие уже нет? Какой в конце-концов выбрать?



    Давайте обратимся к истории.

    1995 год. Берлин, Германия. Группа бывших студентов профессора Henning Schulzrinne, одного из авторов технологии SIP, занимается исследованиями в области VoIP в рамках Fraunhofer Fokus, независимоой исследовательской организации в области телекоммуникаций при университете Fraunhofer. Рабочая группы во главе с Dorgham Sisalem публикует научные статьи, описывающие экспериментальную реализацию SIP и рекомендации для первых промышленных разработчиков этой технологии.

    1996 год. Henning Schulzrinne и Mark Handley разрабатывают окончательную спецификацию SIP-протокола.

    Март 1999 года. Первый стандарт sip-протокол принят и опубликован в RFC2543.

    2001 год. Andrei Pelinescu написал первые строки SIP Express Router (SER). В то время им была реализована функция маршрутизации по принципу первого найденного маршрута в таблице, которая в скором времени была заменена на скриптовый язык SER. Также был добавлен интерфейс поддержки модулей для возможности быстрого добавления новых функций. Результаты были представлены на специально созданном для этих целей сайте iptel.org

    C 2001 по 2003 год к проекту подключаются новые люди, на тот момент студенты. Разработкой модулей для SER занимаются Alex Hoffmann, Bogdan-Andrei Iancu, Daniel-Constantin Mierla, Jan Janak. Raphael Coeffic, Uli Abend и Stephan Sayer разрабатывают SIP Express Media Server. Nils Ohlmeier разрабатывает утилиту диагностики SIP-протокола SipSak. Karel Kozlik занимается разработкой web-интерфейса.

    Сентябрь 2002 года. SER выходит в свободное плавание, его выпускают под лицензией GPL.

    14 июня 2005 года. От проекта отделяется два центральных разработчика — Bogdan-Andrei Iancu и Daniel-Constantin Mierla. Совместно с Elena-Ramona Modroiu они образуют новый проект, OpenSER.

    28 июля 2008 года проект переименовывается в Kamailio из-за конфликта с торговой маркой.

    24 августа 2008. В результате конфликта между разработчиками, от Kamailio отделяется Bogdan-Andrei Iancu, который образует новый проект — Opensips.

    04 ноября 2008. Происходит слияние проекта Kamailio с первоначальным SER.



    Итак, на сегодня, август 2012 года, мы имеем два активно развивающихся проекта: Kamailio (или SIP router) и OpenSIPS.

    Для начала давайте сравним некоторые статистические данные:
    Параметр Kamailio OpenSIPS
    Число коммитов за 2011 год 802 593
    Число коммитов за 2012 год (по август включительно) 1199 1015
    Последняя (devel) версия 3.4 1.9
    Число строк c-кода (без пустых и комментариев) 411940 228301
    Количество модулей 145 117


    Хочу обратить ваше внимание на то, что больше не значит лучше. А из данной таблицы мы можем сделать вывод о том, что оба проекта активно развиваются.

    Следующее, что можно сравнить — это модули. Какие-то из них одинаковые, какие-то разные. Модули с одинаковыми названиями зачастую происходят от одних и тех же модулей раннего kamailio, но за столько лет многие функции могут различаться параметрами или названиями. Нижеприведенные данные не могут претендовать на объективность, я лишь попытался поверхностно сравнить то, что есть в одном sip-сервере, и чего нет в другом.

    Kamailio общие OpenSIPS
    Аккаунтинг и аутентификация
    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
    Поддержка скриптов на других языках
    Kamailio общие OpenSIPS
    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
    Базы данных, включая nosql
    Kamailio общие OpenSIPS
    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
    Berkeley DB driver for DB API
    DB_FLATSTORE
    Fast writing-only text-backend for database module
    DB_MYSQL
    MYSQL-backend for database API module
    DB_ORACLE
    ORACLE-backend for database API module
    DB_POSTGRES
    POSTGRES-backend for database API module
    DB_TEXT
    Text-backend for database API module
    DB_UNIXODBC
    unixODBC driver module
    LDAP
    LDAP connector
    PERLVDB
    Perl Virtual Database engine
    CACHEDB_CASSANDRA
    Cassandra Implementation of CacheDB
    CACHEDB_LOCAL
    Local Implementation of CacheDB
    CACHEDB_MEMCACHED
    Memcached Implementation of CacheDB
    CACHEDB_REDIS
    Redis Implementation of CacheDB
    DB_HTTP
    HTTP-backend for DB API
    DB_VIRTUAL
    Middle-layer DB mixer
    * в opensips помимо DB API добавился CACHEDB API, что систематизирует работу с nosql-бэкэндами.

    Поддержка черных списков
    Kamailio общие
    BLST
    Blacklisting API for config
    USERBLACKLIST
    User black/white listing
    Механизмы management interface
    Kamailio общие OpenSIPS
    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
    Kamailio общие OpenSIPS
    PRESENCE_CONFERENCE
    Extension to Presence server for conference events handling
    PRESENCE_PROFILE
    Presence server module — user profile extensions — RFC6080
    PRESENCE_REGINFO
    Extension to Presence server for registration info replication (RFC3680)
    PUA_REGINFO
    Extension to PUA server for registration info replication (RFC3680)
    PRESENCE
    Presence server module — common API
    PRESENCE_DIALOGINFO
    Extension to Presence server for Dialog Info
    PRESENCE_MWI
    Extension to Presence server for Message Waiting Indication
    PRESENCE_XML
    Presence server module — presence & watcher info and XCAP
    PUA
    Common API for presence user agent client
    PUA_BLA
    BLA extension for PUA
    PUA_DIALOGINFO
    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
    Kamailio общие
    XCAP_SERVER
    XCAP server implementation
    XCAP_CLIENT
    XCAP client implementation
    Функции TLS
    Kamailio OpenSIPS
    TLS
    TLS operations module
    TLSOPS
    TLS operations module
    Скрытие топологии, поддержка B2B
    Kamailio OpenSIPS
    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 не поддерживает b2b, у opensips функция скрытия топологии встроена в модуль DIALOG

    Поддержка RPC
    Kamailio
    CTL
    Control connector for RPC interface (fifo, unixsock, tcp, udp)
    JSONRPC-C
    JSON-RPC client over netstrings protocol
    MI_RPC
    RPC support for Management Interface
    XHTTP
    Basic HTTP request handling server
    XHTTP_RPC
    RPC commands handling over HTTP
    XMLRPC
    XMLRPC connector for RPC interface
    Маршрутизация звонков, LCR, балансировка
    Kamailio общие OpenSIPS
    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
    Различные уникальные функции
    Kamailio OpenSIPS
    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 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
    Модули, дублирующие функционал конкурента или имеющие функции, включенные в ядро
    Kamailio OpenSIPS
    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
    Общие модули (в первую очередь по названию, могут сильно отличаться по функциям)
    ALIAS_DB
    Database SIP aliases module
    AVPOPS
    AVP operation module
    BENCHMARK
    Config file benchmarking
    CFGUTILS
    Different config utilities
    DIALOG
    Dialog support module
    DIVERSION
    Diversion header insertion module
    DOMAIN
    Multi-domain support module
    DOMAINPOLICY
    Policies to connect federations
    ENUM
    ENUM lookup module
    EXEC
    External exec module
    GROUP
    User-groups module with DB-backend
    H350
    H350 implementation
    IMC
    Instant Messaging Conferencing module
    JABBER
    JABBER IM and 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 detector 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)


    Многие функции дублируются разными модулями, но в каждом сервере есть и свои уникальные черты. Каждый из серверов в той или иной степени может вам больше подойти по каким-то параметрам.

    А что дальше?

    kamailio продолжает развитие текущего sip-сервера.

    В тоже время opensips работают над версией 2.0, которая будет принципиально отличаться по архитектуре. По мнению разработчиков, старый дизайн не может решить некоторые проблемы. Новый сервер планируется полностью асинхронным, что поможет устранить, к примеру, архитектурный недочёт с блокировками при обработке tcp-соединений.

    Планируемая архитектура представляет из себя несколько последовательных уровней.

    Самый низкий уровень — ядро. Оно отвечает за sip-функционал, который может быть выполнен автоматически, без конфигурации.


    Следующий уровень — маршрутизация. В ней будет реализован функционал, близкий к тому, который сейчас используется для маршрутизации в opensips.


    И последний уровень — уровень приложений. С его помощью можно будет выполнять операции на самом высоком уровне, используя языки такие, как python.


    Вот так будет выглядеть взаимодействие приложений с ядром.

    Первый альфа-релиз OpenSIPS 2.0 уже выпущен и я с нетерпением жду полноценного релиза, т.к. предложенная разработчиками архитектура должна помочь решить некоторые наболевшие проблемы, которые не в состоянии решить ни kamailio, ни opensips сегодня.

    В данный момент лично я выбираю opensips, т.к. на мой взгляд у разработчиков более системный подход к организации модулей и введению api в случаях, когда это необходимо. А также из-за наличия в opensips cachedb api, B2B и встроенного STUN-сервера.

    Но повторюсь, это лишь мое личное мнение, оно субъективно и, возможно, для ваших задач больше будет подходить другой сервер. В любом случае, надеюсь, что эта статья хоть немного прольет свет на отличия двух серверов тем, кто не может или не хочет с этим разбираться.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 18
    • 0
      Отличная статья! Сам не так давно искал в чем же их различия. Времени не было, а так, благодаря Вам, все быстро можно осмотреть и определиться в выборе.
      • +4
        Простите за, наверное, дурацкий вопрос. Сам я не в теме, но так получилось, что предстоит настраивать сервер для голосовой связи. Планировал использовать Asterisk. Чем он отличается от вышеприведенного ПО?
        • +3
          Говоря языком сравнения, asterisk — это офисная АТС, а вышеуказанные продукты — это ПАТС оператора связи, который Вам предоставляет услуги.
          • +3
            Если не вдаваться в подробности, то Asterisk — это софтсвитч 5-го класса, он предназначен для предоставления пользователям различных дополнительных услуг, т.е. предназначен для работы с конечными абонентами. opensips, kamailio являются прокси-серверами, имеющими множество других функций voip, их возможно использовать как софтсвитч 4-го класса, т.е. для транзита voip-трафика. Применительно к вашим задачам, их можно использовать для обеспечения безопасности (защиты) asterisk и балансировки, когда один уже один asterisk не справляется с нагрузкой и требуется несколько asterisk.
            • 0
              А DNS round-robin не поможет в балансировке? И какого рода защиту предоставляют kamailio и opensips?
          • 0
            Большое спасибо за развернутое сравнение.
            • 0
              Молодец, могу только добавить что это два отличных продукта, но он камалио как то тянет стариной ;) Опенсипс прогрессирует быстрей, это наш выбор.
              • 0
                >Планируемая архитектура представляет из себя несколько последовательных уровней.

                А как же сейчас реализовано? Что-то даже никакой другой (кроме слоев) архитектуры в голову не приходит.
                • 0
                  Сейчас там все навалено до кучи. Есть ядро, подгружаются модули и все работает так, как пришлось, потому что когда планировали изначальный SER, никто не думал, что вся система дорастет до такого функционала. Поэтому оно работает и делает это очень даже неплохо, но есть архитектурные просчеты, много костылей в коде. Разработчики пытаются причесать, но пришли к выводу, что проще все сделать «с нуля», заранее продумав архитектуру и разработав модули, согласно новой архитектуре. Это даст как возможность использовать ядро из своих приложений на других языках, так и большую прозрачность взаимодействия ядра и модулей внутри самого opensips. И это очень правильно.
                • 0
                  kamailio.org: Download Latest Stable v3.3.1 (Aug 02, 2012), откуда 1.9?

                  да и про поддерживаемые скриптовые языки тоже не совсем правильно, тот же перл есть и в kamailio
                  • 0
                    Спасибо, исправил. Опечатался. Я сравнивал devel-версии. kamailio devel — 3.4, opensips devel — 1.9.
                  • 0
                    Обратите внимание на reSIProcate, список возможностей внушительный.
                    • 0
                      reSIProcate — это библиотека, реализующая sip-стэк. Вы, видимо, имеете в виду repro sip proxy.
                      Неплохая вещь, но она организована иначе, чем opensips/kamailio.
                      Последние позволяют работать прямо на уровне sip-пакетов, изменяя/добавляя/удаляя любые заголовки.
                      Это часто нужно, к примеру, для работы с uac (клиентскими устройствами), в которых неправильно реализован sip-протокол, чтобы стоящие за opensips софтсвитчи корректно могли работать с данным устройством. Или, если требуется какое-то специфичное, нестандартное применение sip-прокси.
                      Не буду утверждать наверняка, т.к. не являюсь специалистом по repro, но если я правильно понимаю, его проще настроить, но он менее гибок.
                    • 0
                      Новая архитектура опенсипса очень напоминает FreeSWITCH

                      nikbyte, а не хотите ли выступить докладчиком на trrtrr.net/? Я разанонсирую где только можно, можно организовать штук пять собеседников и неограниченное количество благодарных слушателей.
                      • 0
                        Напоминает, но всё таки уходит в сторону уже, прокси это не медиа сервер.
                      • 0
                        Добрый день!
                        А не подскажете, есть в Kamailio аналог local cache с командами вроде cache_store, cache_fetch как в OpenSIPS?
                        • 0
                          Смотря где требуется хранить значения. Если речь о памяти самого сервера, то модуль HTable.
                          • 0
                            Смотря где требуется хранить значения. Если речь о памяти самого сервера, то модуль HTable.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.