選択するSIPサーバー:SER、OpenSER、Kamailio、OpenSIPS? 彼らの共通点は何ですか?違いは何ですか?

SIPサーバーに遭遇する多くのVoIPネットワーク管理者にとって、ser、openser、kamailio、opensipsという言葉は、少なくともめまいを引き起こします。 なぜそんなにたくさんあるの? なぜそんなに似ているのですか? 活発に開発されているものと、もはやないものはどれですか? 最後にどれを選ぶべきですか?







話をしましょう。



1995年。 ドイツのベルリン。 SIP技術の著者の1人であるヘニング・シュルツリンネ教授の元学生グループは、フラウンホーファー大学の独立した電気通信研究機関であるフラウンホーファーフォクスでVoIP研究に携わっています。 Dorgham Sisalemが率いるワーキンググループは、SIPの実験的実装とこの技術の最初の産業開発者への推奨事項を説明する科学記事を公開しています。



1996年。 Henning SchulzrinneとMark Handleyは、最終的なSIPプロトコル仕様を開発しています。



1999年3月 最初の標準SIPプロトコルが採用され、RFC2543で公開されています。



2001年。 Andrei Pelinescuは、SIP Express Router(SER)の最初の行を書きました。 その時点で、彼はテーブルにある最初のルートの原則に基づいてルーティング機能を実装しましたが、すぐにスクリプト言語SERに置き換えられました。 新しい機能をすばやく追加するためのモジュールサポートインターフェイスも追加されました。 結果は、これらの目的のために特別に作成されたiptel.orgに掲載されました。



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は、SipSak SIPプロトコル診断ユーティリティを開発しています。 Karel KozlikはWebインターフェイスを開発しています。



2002年9月 SERはフリーフロートになり、GPLでリリースされます。



2005年6月14日。 Bogdan-Andrei IancuとDaniel-Constantin Mierlaの2人の中央開発者がプロ​​ジェクトから分離されています。 Elena-Ramona Modroiuと一緒に、新しいプロジェクトOpenSERを形成します。



2008年7月28日に、プロジェクトは商標の競合によりKamailioに名前が変更されました。



2008年8月24日。開発者間の競合の結果、Bogdan-Andrei IancuはKamailioから分離され、新しいプロジェクト-OpenSipsが形成されました。



2008年11月4日。Kamailioプロジェクトは元のSERと統合されます。







したがって、2012年8月の今日には、Kamailio(またはSIPルーター)とOpenSIPSの2つの積極的に開発中のプロジェクトがあります。



最初に、いくつかの統計を比較しましょう:
パラメータ カマイリオ OpenSips
2011年のコミット数 802 593
2012年のコミット数(8月まで) 1199 1015
最新(開発)バージョン 3.4 1.9
Cコードの行数(ブランクおよびコメントなし) 411940 228301
モジュール数 145 117




私はあなたの注意をより多くを意味しないという事実に注意を喚起したいと思います。 この表から、両方のプロジェクトが活発に開発されていると結論付けることができます。



次に比較できるのはモジュールです。 それらのいくつかは同じですが、いくつかは異なります。 同じ名前のモジュールは、多くの場合、初期のkamailioの同じモジュールに由来しますが、長年にわたって、多くの関数はパラメーターまたは名前が異なる場合があります。 以下のデータは客観的なふりをすることはできません。あるsipサーバーにあるものと別のsipサーバーにないものを表面的に比較しようとしました。



カマイリオ ありふれた OpenSips
会計と認証
半径
ACC_RADIUS

RADIUSバックエンドのアカウンティングモジュール

AUTH_RADIUS

RADIUSバックエンド認証モジュール

MISC_RADIUS

汎用RADIUS機能。avp_radius、uri_radius、group_radiusを置き換えます

- AAA_RADIUS

AAA APIのRADIUSバックエンド

AUTH_AAA

AAAバックエンド認証モジュール

直径
CDP

C Diameter Peer-コア通信エンジン

CDP_AVP

C Diameter Peer-アプリケーション拡張

AUTH_DIAMETER

DIAMETER-バックエンド認証モジュール

-
他の言語のスクリプトのサポート
カマイリオ ありふれた OpenSips
APP_LUA

埋め込まれたLuaスクリプトを実行する

APP_MONO

埋め込みマネージコードの実行-C#、VisualBasic.NET、Java、Java Script

APP_PYTHON

埋め込みPythonスクリプトを実行する

Perl

Perl関数の実行を埋め込む

CPL-C

CPLインタープリターモジュール

ルア

OpenSIPS cfgからLUAスクリプトを呼び出す

Python

Pythonスクリプトのサポート

nosqlを含むデータベース
カマイリオ ありふれた OpenSips
DB_CASSANDRA

Cassandraデータベースサーバーコネクタ

DB_CLUSTER

汎用データベースコネクタのクラスタリング

DB_SQLITE

データベースAPIモジュールのSQLITEバックエンド

HTABLE

共有メモリ内のGenerichハッシュテーブルコンテナ

マトリックス

行列演算

Memcached

Memcachedコネクタモジュール

NDB_REDIS

REDIS NoSQLデータベースエンジンへのコネクタ

DB_BERKELEY

DB API用のBerkeley DBドライバー

DB_FLATSTORE

データベースモジュール用の高速書き込み専用テキストバックエンド

DB_MYSQL

データベースAPIモジュール用のMYSQLバックエンド

DB_ORACLE

データベースAPIモジュール用のORACLEバックエンド

DB_POSTGRES

データベースAPIモジュールのPOSTGRESバックエンド

DB_TEXT

データベースAPIモジュールのテキストバックエンド

DB_UNIXODBC

unixODBCドライバーモジュール

LDAP

LDAPコネクタ

Perlvdb

Perl仮想データベースエンジン

CACHEDB_CASSANDRA

CacheDBのCassandra実装

CACHEDB_LOCAL

CacheDBのローカル実装

CACHEDB_MEMCACHED

CacheDBのMemcached実装

CACHEDB_REDIS

CacheDBのRedis実装

DB_HTTP

DB APIのHTTPバックエンド

DB_VIRTUAL

中間層DBミキサー

* DB API opensipsに加えて、nosqlバックエンドで作業を体系化するCACHEDB APIが追加されました。



ブラックリストのサポート
カマイリオ ありふれた
BLST

構成用のブラックリストAPI

USERBLACKLIST

ユーザーブラック/ホワイトリスト

管理インターフェースのメカニズム
カマイリオ ありふれた OpenSips
MI_RPC

管理インターフェイスのRPCサポート

MI_DATAGRAM

管理インターフェイスのDATAGRAM(Unixおよびネットワーク)サポート

MI_FIFO

管理インターフェイスのFIFOサポート

MI_XMLRPC

管理インターフェイスのXMLRPCサポート

MI_HTTP-管理インターフェイスのHTTPサポート

存在メカニズム
カマイリオ ありふれた OpenSips
PRESENCE_CONFERENCE

会議イベント処理用のプレゼンスサーバーの拡張

PRESENCE_PROFILE

プレゼンスサーバーモジュール-ユーザープロファイル拡張-RFC6080

PRESENCE_REGINFO

登録情報のレプリケーションのためのプレゼンスサーバーの拡張(RFC3680)

PUA_REGINFO

登録情報の複製のためのPUAサーバーの拡張(RFC3680)

プレゼンス

プレゼンスサーバーモジュール-共通API

PRESENCE_DIALOGINFO

ダイアログ情報用のプレゼンスサーバーの拡張

PRESENCE_MWI

メッセージ待機表示のためのプレゼンスサーバーの拡張

PRESENCE_XML

プレゼンスサーバーモジュール-プレゼンスとウォッチャー情報およびXCAP

プア

プレゼンスユーザーエージェントクライアントの共通API

PUA_BLA

PUAのBLA拡張

PUA_DIALOGINFO

PUAのDialog-Info拡張

PUA_MI

PUAのMI拡張

PUA_USRLOC

PUAのUSRLOC拡張

PUA_XMPP

PUAのXMPP拡張(SIMPLE-XMPPプレゼンスゲートウェイ)

PRESENCE_CALLINFO

Call-Infoのプレゼンスサーバーの拡張

PRESENCE_XCAPDIFF

XCAP-DIFFイベントのプレゼンスサーバーの拡張

XCAPサポート
カマイリオ ありふれた
XCAP_SERVER

XCAPサーバーの実装

XCAP_CLIENT

XCAPクライアントの実装

TLS機能
カマイリオ OpenSips
TLS

TLS操作モジュール

TLSOPS

TLS操作モジュール

トポロジの非表示、B2Bサポート
カマイリオ OpenSips
トポー

トポロジ隠蔽モジュール

B2B_ENTITIES

バックツーバックユーザーエージェントエンティティ

B2B_LOGIC

バックツーバックユーザーエージェントロジック

マングラー

SIPマングラーモジュール

* kamailioはb2bをサポートしていません。opensipsには、DIALOGモジュールにトポロジ非表示機能が組み込まれています



RPCサポート
カマイリオ
CTL

RPCインターフェイス(fifo、unixsock、tcp、udp)の制御コネクタ

JSONRPC-C

netstringsプロトコルを介したJSON-RPCクライアント

MI_RPC

管理インターフェイスのRPCサポート

XHTTP

基本的なHTTP要求処理サーバー

XHTTP_RPC

HTTPを介したRPCコマンド処理

XMLRPC

RPCインターフェイス用のXMLRPCコネクタ

コールルーティング、LCR、バランシング
カマイリオ ありふれた OpenSips
Lcr

最小コストルーティングモジュール

PREFIX_ROUTE

プレフィックスに基づいて構成ファイルのルートルートブロックを実行する

キャリアルート

キャリアに適したルーティング拡張

CALL_CONTROL

プリペイドアプリケーションモジュール

ダイヤルプラン

ダイヤルプラン管理

ディスパッチャー

ディスパッチャーモジュール

ドラウティング

動的ルーティング/ LCR

PDT

プレフィックスからドメインへの変換モジュール

休業日

PBXのようなダイヤル機能

LOAD_BALANCER

ロードバランサー(通話用)モジュール

さまざまなユニークな機能
カマイリオ OpenSips
非同期

非同期SIP要求処理関数

デバッガー

インタラクティブな構成デバッガー

DMQ

SIPを使用した分散メッセージキューシステム

IPTRTPPROXY

メディアリレーにカーネルを使用するNATトラバーサルモジュール

MQUEUE

構成ファイルのメッセージキューシステム

MTREE

ツリーインデックスを使用した汎用メモリキャッシュシステム

PDB

番号ポータビリティモジュール

P_USRLOC

パーティション化および分散されたユーザーロケーションサービス

パイプリミット

トラフィックシェーピングポリシー

パープル

Purpleライブラリを使用したマルチプロトコルゲートウェイ

RTIMER

タイマーベースで構成ルートブロックを実行する

TMREC

RFC2445に基づいて定義されたマッチタイムの繰り返し

Xmlops

XPATHを使用した構成ファイルのXML操作

DNS_CACHE

Key-Valueバックエンドで使用できるDNSレコードをキャッシュするためのモジュール

EVENT_DATAGRAM

イベントデータグラムモジュール

EVENT_RABBITMQ

イベントRabbitMQクライアントモジュール

HTTPD

組み込みHTTPサーバー

アイデンティティ

SIP IDの実装

オプション

OPTIONSサーバー返信モジュール

シグナリング

SIPシグナリングモジュール

スタン

ビルトインSTUNサーバー

UAC_AUTH

UAC認証機能

UAC_REGISTRANT

SIP登録者実装モジュール

競合他社の機能を複製するモジュール、またはカーネルに機能が含まれるモジュール
カマイリオ OpenSips
カウンター

構成用の内部カウンターAPI

IPOPS

構成ファイルのIPおよびDNS関連の操作

ケックス

Kamailioコア拡張モジュール

PV

疑似変数を保持するモジュール

正気

SIPメッセージフォーマットの健全性チェック

SDPOPS

SDP操作

シプティルス

SIPユーティリティ

SQLOPS

SQL操作

TEXTOPSX

追加のテキスト操作

Tmx

トランザクション管理拡張モジュール

URI_DB

データベースサポートモジュールを使用したURI操作

Utils

便利な機能のセット

Gflags

グローバル共有フラグモジュール

SIPMSGOPS

SIP操作モジュール

URI

汎用URI操作モジュール

Xlog

高度なロガーモジュール

汎用モジュール(主に名前で、機能が大きく異なる場合があります)
ALIAS_DB

データベースSIPエイリアスモジュール

AVPOPS

AVP操作モジュール

ベンチマーク

構成ファイルのベンチマーク

CFGUTILS

さまざまな設定ユーティリティ

対話

ダイアログサポートモジュール

分散

迂回ヘッダー挿入モジュール

ドメイン

マルチドメインサポートモジュール

ドメインポリシー

連携を接続するためのポリシー

ENUM

ENUMルックアップモジュール

EXEC

外部実行モジュール

グループ

DBバックエンドを備えたユーザーグループモジュール

H350

H350の実装

IMC

インスタントメッセージング会議モジュール

ジャバー

JABBER IMおよびPRESENCE相互接続モジュール

ジョンソン

JSONパッキング関数

MAXFWD

最大転送プロセッサモジュール

メディアプロキシ

NATトラバーサルモジュール

ムシロ

SIPメッセージサイロモジュール

ナッテルパー

NATトラバーサルヘルパーモジュール

NAT_TRAVERSAL

NATトラバーサルモジュール

OSP

OSPピアリングモジュール

パス

SIPフロントエンドのパスサポート

ピアリング

半径ピアリングモジュール

許可

権限制御モジュール

写真

洪水検知モジュール

QOS

QOS(RTP)モジュール

レート制限

SIPトラフィックシェーピングモジュール

正規表現

PCREライブラリ経由のRegExp

登録

SIPレジストラ実装モジュール

RLS

リソースリストサーバーの実装

Rr

Record-RouteおよびRouteモジュール

RTPPROXY

RTPProxyモジュールを使用したNATトラバーサル



Sip Express Application Server(インターフェースモジュール)

SIPCAPTURE

Sipaptureモジュール

SIPTRACE

Siptraceモジュール

SL

ステートレス返信モジュール

SMS

SIP-to-SMS IMゲートウェイモジュール

SNMPStats

統計モジュールのSNMPインターフェイス

特別企画

ユーザーごとの短縮ダイヤルコントローラーモジュール

Sst

SIPセッションタイマーのサポート

静力学

スクリプト統計のサポート

TEXTOPS

テキスト操作モジュール

TM

トランザクション(ステートフル)モジュール

Uac

UAC機能(FROMマングリングおよびUAC認証)

UAC_REDIRECT

UACリダイレクト機能

USRLOC

ユーザー位置実装モジュール

Xmpp

SIPからXMPPへのゲートウェイ(SIPからJabber / Googleトーク)





多くの機能は異なるモジュールによって複製されますが、各サーバーには独自の機能があります。 ある程度までの各サーバーは、いくつかの点でより適しているかもしれません。



次は?



kamailioは現在のsipサーバーの開発を続けています。



同時に、opensipsはバージョン2.0で動作しており、アーキテクチャが根本的に異なります。 開発者によると、古い設計ではいくつかの問題を解決することはできません。 新しいサーバーは完全に非同期になるように計画されています。これにより、たとえば、tcp接続の処理中にロックが発生するアーキテクチャ上の欠陥がなくなります。



計画されたアーキテクチャは、いくつかの連続したレベルで構成されています。



最下位レベルがコアです。 sip機能は、設定なしで自動的に実行できます。





次のレベルはルーティングです。 現在、opensipでのルーティングに使用されている機能に近い機能を実装します。





最後のレベルはアプリケーションレベルです。 これにより、pythonなどの言語を使用して、最高レベルで操作を実行できます。





これは、アプリケーションとカーネルの相互作用がどのように見えるかです。



OpenSIPS 2.0の最初のアルファリリースは既にリリースされており、次のようにフルリリースを楽しみにしています。 開発者によって提案されたアーキテクチャは、今日のkamailioもopensipsも解決できない緊急の問題の解決に役立つはずです。



現時点では、opensipを個人的に選択しています。 私の意見では、開発者はモジュールを整理し、これが必要な場合にAPIを導入するためのより体系的なアプローチを持っています。 また、opensips cachedb api、B2B、およびビルトインSTUNサーバーが利用できるためです。



しかし、これも私の個人的な意見であり、主観的なものであり、おそらく、別のサーバーがあなたのタスクにより適しているでしょう。 いずれにせよ、この記事で、これに対処できない、または対処したくない人のために、2つのサーバーの違いを明らかにすることを望んでいます。



All Articles