選択する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年のコミット数802593
2012年のコミット数(8月まで)11991015
最新(開発)バージョン3.41.9
Cコードの行数(ブランクおよびコメントなし)411940228301
モジュール数145117


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

次に比較できるのはモジュールです。 それらのいくつかは同じですが、いくつかは異なります。 同じ名前のモジュールは、多くの場合、初期の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つのサーバーの違いを明らかにすることを望んでいます。

Source: https://habr.com/ru/post/J150280/


All Articles