話をしましょう。
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ミキサー |
ブラックリストのサポート | ||
---|---|---|
カマイリオ | ありふれた | |
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マングラーモジュール |
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つのサーバーの違いを明らかにすることを望んでいます。