| 通信プロトコル | |
| 目的 | インスタントメッセージ |
|---|---|
| 導入 | 1999 (1999年) |
| OSI層 | アプリケーション層 |
| ポート | TCP 5222、5269、8010 |
| RFC(s) | RFC 6120 (コア)、RFC 6121 (IM & プレゼンス)、RFC 7622 (アドレス形式)、RFC 3922 (CPIM)、RFC 3923 (暗号化) |
| Webサイト | xmpp |
拡張可能メッセージングおよびプレゼンスプロトコル(略称XMPP、元々はJabber [ 1 ]と呼ばれていました)は、インスタントメッセージング(IM)、プレゼンス情報、および連絡先リストのメンテナンス用に設計されたオープン通信プロトコルです。 [ 2 ] XML(拡張マークアップ言語)に基づいており、 2つ以上のネットワークエンティティ間で構造化データをほぼリアルタイムで交換できます。 [ 3 ]拡張できるように設計されたこのプロトコルは、 VoIP、ビデオ、ファイル転送、ゲームなどのシグナリングを含む、メッセージ指向ミドルウェアのより広い領域で、従来のIMを超える多数のアプリケーションを提供します。
ほとんどの商用インスタントメッセージングプロトコルとは異なり、XMPPはアプリケーション層においてオープンスタンダードとして定義されています。XMPPネットワークのアーキテクチャは電子メールに似ており、誰でも独自のXMPPサーバーを実行でき、中央のマスターサーバーは存在しません。この連合型オープンシステムアプローチにより、ユーザーは電子メールアドレスに似たJabber識別子(JID)ユーザーアカウントを使用して、任意のサーバー上の他のユーザーと相互運用できます。XMPPの実装は任意のソフトウェアライセンスを使用して開発でき、多くのサーバー、クライアント、およびライブラリの実装が無料のオープンソースソフトウェアとして配布されています。また、フリーウェアや商用ソフトウェアによる実装も数多く存在します。
オープンソースコミュニティによって開発されたこのプロトコルは、2004年にインスタントメッセージングの標準規格として正式に承認され、その後も継続的に開発され、新しい拡張機能や機能が追加されてきました。デスクトップとモバイルの両方のプラットフォームとデバイスで、様々なXMPPクライアントソフトウェアが利用可能です。XMPP Standards Foundationによると、2003年までにこのプロトコルは世界中で1,000万人以上がネットワーク上で使用していました。[ 4 ]
| インターネットプロトコルスイート |
|---|
| アプリケーション層 |
| トランスポート層 |
| インターネット層 |
| リンク層 |
このプロトコルには他の用途もありますが、主な用途は、以下に概説する標準のインスタント メッセージングおよびプレゼンス プロトコルを提供するフェデレーテッド インスタント メッセージングです。
クライアントのアリス("alice@example.com")は、他のユーザーであるベス("beth@example.com")宛てのメッセージを持っており、XMPPを使用してexample.comサーバーにそのメッセージを送信します。ベスがオンラインの場合、サーバーはメッセージを即座に配信します。そうでない場合は、メッセージは後で配信されるまで保留されます。ベスがオフラインの場合、そのステータスはアリスに表示されます。
メッセージが別のサーバー上のユーザー、Charles("charles@example.net")宛ての場合、 example.comサーバーはXMPPを使用して接続し、メッセージをexample.netサーバーに渡します。その後、メッセージは同様に配信または保留され、Aliceにステータスが通知されます。
最初のメッセージの配信後、エンド クライアントは「チャット」状態になり、その後、各当事者に相手のステータスの変更が通知されます。
XMPPクライアントは、ポート5222のTLS暗号化TCPストリームを介してサーバーと通信します。XMPPサーバーは、ポート5269のTLS暗号化TCPストリームを介して相互に通信します。[ 3 ] [ 5 ]

XMPPネットワークアーキテクチャは、クライアントサーバーモデルであるSMTP( Simple Mail Transfer Protocol)を彷彿とさせます。分散型であるため、クライアントは互いに直接通信しません。つまり、誰でもサーバーを運用できます。設計上、AIM、WLM、WhatsApp、Telegramなどのメッセージングサービスにあるような中央の権威サーバーは存在しません。多くのユーザーが加入しているパブリックXMPPサーバーが運用されているため、この点で混乱が生じることがよくあります。しかし、誰でも独自のドメインで独自のXMPPサーバーを運用できます。 jabber.org

ネットワーク上のすべてのユーザーには、Jabber IDと呼ばれる固有のXMPPアドレスがあります。[ 6 ] JIDは、ユーザー名とユーザーが登録されているサーバーのドメイン名(またはIPアドレス[ 7 ] )がアットマーク( )で区切られた電子メールアドレスのような構造になっています。たとえば、「」はユーザー名とユーザーが登録されているサーバーです。 @alice@example.comaliceexample.com
ユーザーは複数の場所からログインする可能性があるため、リソースを指定できます。リソースは、ユーザーに属する特定のクライアント(自宅、職場、モバイルなど)を識別します。リソースは、スラッシュに続けてリソース名をJIDに含めることができます。例えば、ユーザーのモバイルアカウントの完全なJIDは となりますusername@example.com/mobile。
各リソースには、優先度と呼ばれる数値が指定されている場合があります。単に に送信されたメッセージはusername@example.com、優先度が最も高いクライアントに送信されますが、 に送信されたメッセージはモバイルクライアントにのみusername@example.com/mobile送信されます。最も高い優先度とは、数値が最も大きいクライアントです。
ユーザー名部分を含まないJIDも有効であり、システムメッセージやサーバー上の特殊機能の制御に使用できます。これらのJIDでも、リソースはオプションです。
明示的なIPアドレスの代わりに論理エンドポイント識別子(JID)に基づいてメッセージをルーティングする手段は、XMPPを異なる基盤ネットワーク上のオーバーレイネットワーク実装として使用する機会を提供します。 [ 8 ]
XMPPの本来の「ネイティブ」なトランスポートプロトコルは、長時間持続するTCP接続を介してオープンエンドのXMLストリームを使用する伝送制御プロトコル(TCP)です。TCPトランスポートの代替として、XMPPコミュニティは、Webクライアントや制限付きファイアウォールの背後にいるユーザー向けにHTTPトランスポートも開発しました。元の仕様では、XMPPはポーリング[ 9 ]とバインディングの2つの方法でHTTPを使用できました。現在では非推奨となっているポーリング方式は、基本的に、サーバー側データベースに保存されているメッセージが、XMPPクライアントによってHTTPの「GET」および「POST」リクエストを介して定期的に取得(および投稿)されることを意味します。同期HTTP経由の双方向ストリーム(BOSH)[ 10 ]を使用して実装されたバインディング方式は、サーバーが送信されたメッセージをすぐにクライアントにプッシュすることを可能にします。このプッシュ通知モデルは、多くのポーリングが新しいデータを返さないポーリングよりも効率的です。
クライアントはHTTPを使用するため、ほとんどのファイアウォールはクライアントが問題なくメッセージの取得と投稿を行うことを許可しています。そのため、XMPPが使用するTCPポートがブロックされている場合でも、サーバーは通常のHTTPポートでリッスンできるため、トラフィックは問題なく通過します。多くのウェブサイトでは、ブラウザ経由でXMPPにサインインできます。さらに、標準のhttp(ポート80)およびhttps(ポート443)ポートでリッスンする公開サーバーも存在し、ほとんどのファイアウォールの背後からの接続を許可しています。ただし、BOSHのIANA登録ポートは実際には80ではなく5280です。
XMPP Standards Foundation(XSF、旧称Jabber Software Foundation)は、オープンなXMPP拡張機能、いわゆるXEPの開発に積極的に取り組んでいます。[ 11 ]ただし、拡張機能は個人、ソフトウェアプロジェクト、または組織によって定義されることもあります。相互運用性を維持するため、共通の拡張機能はXSFによって管理されています。IM以外のXMPPアプリケーションには、チャットルーム、ネットワーク管理、コンテンツシンジケーション、コラボレーションツール、ファイル共有、ゲーム、リモートシステムの制御と監視、地理位置情報、ミドルウェアとクラウドコンピューティング、VoIP、アイデンティティサービスなどがあります。
XMPPは、ローカルネットワークドメイン間の検出をサポートする機能に基づいており、仮想マシン、ネットワーク、ファイアウォールが代替サービス検出やプレゼンスベースのソリューションの障害となるようなクラウドコンピューティングに最適です。クラウドコンピューティングとストレージシステムは、システム間のメッセージングによる状態中継だけでなく、ストレージや仮想マシンなどの大規模オブジェクトの移行や配布など、複数のレベルにわたる様々な通信形態に依存しています。認証や転送中のデータ保護に加え、XMPPは様々なレベルで適用でき、拡張可能なミドルウェアやメッセージ指向ミドルウェア(MOM)プロトコルとして最適な選択肢となる可能性があります。
XMLはテキストベースであるため、通常のXMPPは純粋なバイナリソリューションと比較してネットワークオーバーヘッドが大きくなります。この問題は、実験的なXEP-0322 Efficient XML Interchange (EXI) Formatによって解決されていました。このフォーマットでは、特にスキーマインフォームドモードで、XMLが効率的なバイナリ形式でシリアル化されます。このXEPは現在延期されています。
インバンドバイナリデータ転送には制限があります。バイナリデータは、インバンドで転送する前に、まずBase64エンコードする必要があります。したがって、大量のバイナリデータ(例:ファイル転送)は、インバンドメッセージを使用して調整を行い、アウトオブバンドで転送するのが最適です。ほとんどの場合、これはメッセージへの添付ファイルと、広く実装されているXEP-0363 HTTPファイルアップロードメカニズムを使用することで対処されます。音声およびビデオチャットは、Jingle XMPP拡張プロトコル(XEP-0166)を介して行うことができます。

XMPPは、 Jingleと呼ばれる拡張機能を使用することで、多様なネットワーク間でマシン間またはピアツーピア通信をサポートするオープンな手段を提供します。この機能は主にIPテレフォニー(VoIP)に使用されます。
XMPPは、Multi-User Chat (MUC) (XEP-0045)仕様に基づき、複数ユーザーによる会議をサポートします。一般ユーザーの観点から見ると、インターネットリレーチャット(IRC)に相当します。
XMPP サーバーは分離可能 (たとえば、会社のイントラネット上) であり、安全な認証 ( SASL ) とポイントツーポイント暗号化 ( TLS ) がコア XMPP 仕様に組み込まれています。
Off-the-Record Messaging (OTR) は、XMPP の拡張機能であり、メッセージとデータの暗号化を可能にします。その後、より優れた拡張機能であるマルチエンドツーマルチエンド暗号化 ( OMEMO、XEP-0384) に置き換えられました。これは、ユーザー間のエンドツーエンド暗号化です。これは、ソースクライアントからのすべてのデータを暗号化し、ターゲットクライアントで再度復号化することで、より高いレベルのセキュリティを実現します。サーバー管理者は転送データを復号化できません。
メッセージは、たとえばGajimソフトウェアを使用してOpenPGPで暗号化することもできます。
現在、いくつかのサービス検出プロトコル( zeroconfやサービスロケーションプロトコルなど)が存在しますが、XMPPは、XEP-0030 DISCOで規定されているように、ローカルまたはネットワーク上に存在するサービスの検出と、これらのサービスの可用性(プレゼンス情報経由)のための強固な基盤を提供します。[ 12 ]

初期のJabberオープンソースコミュニティの当初の設計目標の一つは、ユーザーが単一のクライアントアプリケーションを通じて複数のインスタントメッセージングシステム(特にXMPP以外のシステム)に接続できるようにすることでした。これは、ICQ、AIM、Yahoo! Messengerなどの他のインスタントメッセージングプロトコルだけでなく、SMS、IRC、電子メールなどのプロトコルへのトランスポートまたはゲートウェイと呼ばれるエンティティを通じて実現されました。マルチプロトコルクライアントとは異なり、XMPPはXMPPサーバーと並行して実行される特別なゲートウェイサービスを介して通信することで、サーバーレベルでこのアクセスを提供します。ユーザーは、ネットワークへのログオンに必要な情報を提供することで、これらのゲートウェイのいずれかに「登録」することができ、その後、そのネットワークのユーザーとXMPPユーザーであるかのように通信できます。つまり、これらのゲートウェイはクライアントプロキシとして機能します(ゲートウェイは、XMPP以外のサービスにおいてユーザーに代わって認証を行います)。その結果、XMPPを完全にサポートするクライアントは、クライアントに追加のコードを追加することなく、またクライアントがインターネットに直接アクセスする必要もなく、ゲートウェイを介してあらゆるネットワークにアクセスできます。ただし、クライアント プロキシ モデルは、使用されているプロトコルの利用規約に違反する可能性があります (ただし、このような利用規約はいくつかの国では法的に強制できません)。また、ユーザーは IM ユーザー名とパスワードを、トランスポートを運用するサードパーティ サイトに送信することが必要になります (プライバシーとセキュリティに関する懸念が生じる可能性があります)。
ゲートウェイのもう1つの種類はサーバー間ゲートウェイです。これは、XMPP非対応サーバー環境から、XMPPのドメイン間フェデレーション機能を使用してネイティブXMPPサーバーに接続することを可能にします。このようなサーバー間ゲートウェイは、以下を含むいくつかのエンタープライズIMソフトウェア製品で提供されています。
XMPPは多くのクライアント、サーバー、コードライブラリによって実装されています。[ 16 ]これらの実装はさまざまなソフトウェアライセンスの下で提供されています。
数多くの XMPP サーバー ソフトウェアが存在し、よく知られているものとしてはejabberdやProsody などがあります。

多数のXMPPクライアントソフトウェアが、グラフィカルクライアントとコマンドラインベースクライアントの両方を含む、さまざまな最新およびレガシープラットフォーム上に存在します。XMPPのウェブサイトによると、最も人気のあるソフトウェアには、Conversations、Cheogram、Monocles、Quicksy(Android)、Dino(BSD、Windows、Unix、Linux)、Converse.js(Webブラウザ、Linux、Windows、macOS)、[ 17 ] Gajim(Windows、Linux)、[ 17 ] Monal(macOS、iOS )、Swift.IM(macOS、Windows、Linux)などがあります。最近、MonalはiOS向けのQuicksyリリースとしてフォークされました。
他のクライアントには、Bombus、ChatSecure、Coccinella、Miranda NG、[ 17 ] Pidgin、Psi、[ 17 ] Tkabber、Trillian、およびXabberが含まれます。
世界中に数千ものXMPPサーバーが存在し、その多くはパブリックサーバーである一方、個人や組織が営利目的でなく独自サーバーを運用している場合もあります。多くのウェブサイトでは、ユーザーが登録できるパブリックXMPPサーバーのリストが掲載されています(例えば、XMPP.netのウェブサイトなど)。
LiveJournalの「LJ Talk」[ 18 ] 、 Nimbuzz、HipChatなど、いくつかの大規模なパブリックIMサービスは、ネイティブにXMPPを使用しているか、使用していました。DreamHostなどの様々なホスティングサービスでは、ホスティング顧客が従来のウェブサービスやメールサービスと並行してXMPPサービスを選択できるようになっています。また、 Cisco Webex Connect、Chrome.pl、Flosoft.biz、i-pobox.net、hosted.im など、クラウド型のXMPPホスティングサービスも存在するため、ドメイン所有者は独自のXMPPサーバーを直接運用する必要はありません。
これらのサービスの大部分はフェデレーション化されており、あるサービスのユーザーは別のサービスのユーザーと通信できます。
XMPP は、需要応答アプリケーションなどのスマート グリッド システム、メッセージ指向ミドルウェア、および多くのスマートフォンクライアント でテキスト メッセージングを提供するためのSMSの代替として、IM 以外のサービスの展開にも使用されます。
最大手のメッセージングプロバイダーの中には、バックエンドシステムでさまざまな形式の XMPP ベースのプロトコルを使用しているか、使用しているものがありますが、このことをエンドユーザーに必ずしも公開していません。[ 19 ] [ 20 ]一例として、 Googleは 2005 年 8 月にGoogle Talkを導入しました。これは、インスタントメッセージングに XMPP を使用し、音声およびファイル転送シグナリングプロトコルであるJingleのベースとして使用する VoIP と IM の組み合わせシステムです。最初のリリースではサーバー間通信は含まれていませんでしたが、Google は 2006 年 1 月 17 日にその機能を有効にしました。[ 21 ] Google は後に Google Talk にビデオ機能を追加しましたが、これもシグナリングに Jingle プロトコルを使用しています。2013 年 5 月、Google は、サーバー間フェデレーション用の Google Talk から XMPP 互換性が削除されるものの、クライアントとサーバー間のサポートは保持されると発表した。 [ 22 ]
2008年1月、AOLはAOLインスタントメッセンジャー(AIM)サービスにおいて試験的にXMPPサポートを導入し[ 23 ] 、 AIMユーザーはXMPPを使用して通信できるようになりました。しかし、2008年3月にこのサービスは終了しました。2011年5月現在、AOLは限定的なXMPPサポートを提供しています[ 24 ] 。
2010年2月、ソーシャルネットワーキングサイトFacebookは、 XMPPを介してサードパーティアプリケーションにチャット機能を開放しました。 [ 25 ]一部の機能はXMPPでは利用できず、2014年4月にサポートが中止されました。[ 26 ]同様に、2011年12月、MicrosoftはMicrosoft MessengerサービスにXMPPインターフェースをリリースしました。[ 27 ]事実上の後継であるSkypeも、限定的なXMPPサポートを提供していました。[ 28 ] Apache Waveも別の例です。[ 29 ]
XMPPはOrigin [ 30 ]やPlayStation、現在は廃止されたXfireやRaptr [ 31 ]などのゲーム関連プラットフォームにおけるプライベートチャットの事実上の標準です。2つの注目すべき例外はSteam [ 32 ]とXbox LIVEで、どちらも独自のメッセージングプロトコルを使用しています。

ジェレミー・ミラーは1998年にJabber技術の開発を開始し、jabberd1999年1月4日にサーバーの最初のバージョンをリリースしました。 [ 33 ]初期のJabberコミュニティはオープンソースソフトウェア、主にjabberdサーバーに重点を置いていましたが、その主な成果はXMPPプロトコルの開発であることが証明されました。
インターネット技術特別調査委員会(IETF)は、2002年にXMPPワーキンググループを結成し、IETFインスタントメッセージングおよびプレゼンス技術としてコアプロトコルを正式化しました。1999年と2000年に開発された初期のJabberプロトコルは、2004年10月にRFC 3920およびRFC 3921で公開されたXMPPの基礎となりました(IETFのXMPPワーキンググループによる正式化における主な変更点は、チャネル暗号化のためのTLSと認証のためのSASLの追加でした)。XMPPワーキンググループは、RFC 3922およびRFC 3923の仕様も作成しました。2011年に、RFC 3920とRFC 3921はそれぞれRFC 6120とRFC 6121に置き換えられ、RFC 6122でXMPPのアドレス形式が規定されました。 2015 年に、RFC 6122 は RFC 7622 に置き換えられました。IETF で標準化されたこれらのコア プロトコルに加えて、XMPP Standards Foundation (旧 Jabber Software Foundation) はオープン XMPP 拡張機能の開発に積極的に取り組んでいます。
XMPPをベースとした最初のIMサービスはJabber.org [ 17 ]であり、 1999年から継続的に運営され、無料アカウントを提供してきました。[ 34 ] 1999年から2006年2月まで、このサービスはサーバーソフトウェアとしてjabberdを使用していましたが、その後ejabberd(どちらもフリーソフトウェアのアプリケーションサーバー)に移行しました。2010年1月には、Isode Ltd.が開発した独自のM-Linkサーバーソフトウェアに移行しました。[ 35 ]
2008年9月、シスコシステムズは商用製品Jabber XCPの開発元であるJabber, Inc.を買収した。[ 36 ]
XMPP Standards Foundation (XSF) は、XMPP 拡張プロトコル(XEP、旧称 Jabber Enhancement Proposals、JEP)を中心とした標準化プロセスを通じて、XMPP の拡張機能を開発・公開しています。特に広く利用されている拡張機能は次のとおりです。
XMPPの機能は、ドメイン間の連携、パブリッシュ/サブスクライブ、認証、そしてモバイルエンドポイントを含むセキュリティなど、モノのインターネット(IoT)の実装に利用されています。実験的な実装には、効率的なXML交換(EXI)フォーマット、 [ 44 ]センサーデータ、[ 45 ]プロビジョニング、[ 46 ]制御、[ 47 ]コンセントレータ、[ 48 ]検出など、いくつかのXMPP拡張機能が含まれています。[ 49 ]
これらの取り組みは、XMPP wikiのモノのインターネット専用のページ[ 50 ]とXMPP IoTメーリングリスト[ 51 ]に文書化されています。
IETF XMPP ワーキング グループは、一連のRequest for Comments (RFC) ドキュメントを作成しました。
これらの仕様の中で最も重要かつ最も広く実装されているのは次のものです。
XMPPは、インスタントメッセージングとプレゼンス通知の標準プロトコルとして、セッション開始プロトコル(SIP)に基づくSIMPLEの競合相手と見なされることが多い。 [ 52 ] [ 53 ]
マルチユーザーチャット用のXMPP拡張機能[ 38 ]はIRCの競合製品とみなすことができますが、IRCははるかにシンプルで、機能もはるかに少なく、はるかに広く使用されています。
パブリッシュ・サブスクライブ用のXMPP拡張機能[ 39 ]は、Advanced Message Queuing Protocol(AMQP) と同じ機能を多く提供します。