拡張可能なメッセージングおよびプレゼンスプロトコル(略称XMPP、元々はJabber [ 1 ]という名前)は、インスタント メッセージング(IM)、プレゼンス情報、連絡先リストの管理用に設計されたオープンな通信プロトコルです。 [ 2 ] XML(拡張可能なマークアップ言語)に基づいており、 2 つ以上のネットワーク エンティティ間で構造化データをほぼリアルタイムで交換できます。 [ 3 ]拡張性を考慮して設計されたこのプロトコルは、従来の IM を超えて、 VoIP、ビデオ、ファイル転送、ゲームなどの用途のシグナリングを含む、メッセージ指向ミドルウェアのより広い領域で多数のアプリケーションを提供します。
ほとんどの商用インスタントメッセージングプロトコルとは異なり、XMPPはアプリケーション層のオープンスタンダードで定義されています。XMPPネットワークのアーキテクチャは電子メールに似ており、誰でも独自のXMPPサーバーを運用でき、中央のマスターサーバーは存在しません。このフェデレーション型のオープンシステムアプローチにより、ユーザーは電子メールアドレスに似たJabber識別子(JID)ユーザーアカウントを使用して、どのサーバー上の他のユーザーとも相互運用できます。XMPPの実装はあらゆるソフトウェアライセンスで開発でき、多くのサーバー、クライアント、ライブラリの実装がフリーソフトウェアおよびオープンソースソフトウェアとして配布されています。また、多数のフリーウェアおよび商用ソフトウェアの実装も存在します。
元々はオープンソースコミュニティによって開発されたプロトコルは、2004年に承認されたインスタントメッセージング標準として正式に制定され、新しい拡張機能や機能が追加されて継続的に開発されています。デスクトップとモバイルの両方のプラットフォームとデバイスでさまざまなXMPPクライアントソフトウェアが利用可能で、XMPP標準財団によると、2003年までにこのプロトコルはネットワーク上で世界中で1000万人以上によって使用されていました。[ 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)を彷彿とさせます。分散型であるため、クライアント同士が直接通信することはありません。誰でもサーバーを運用できます。設計上、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 ( Transmission Control Protocol ) であり、長期間維持される TCP 接続上でオープンエンド XML ストリームを使用します。TCP トランスポートの代替として、XMPP コミュニティは、Web クライアントや制限されたファイアウォールの背後にいるユーザー向けにHTTPトランスポートも開発しました。元の仕様では、XMPP は HTTP をポーリング[ 9 ]とバインディングの2 つの方法で使用できました。現在非推奨となっているポーリング方式は、基本的に、サーバー側のデータベースに保存されているメッセージが、HTTP の 'GET' および 'POST' リクエストによって XMPP クライアントによって定期的にフェッチ (およびポスト) されることを意味します。双方向ストリーム同期 HTTP ( BOSH ) [ 10 ]を使用して実装されたバインディング方式では、サーバーはメッセージを送信するとすぐにクライアントにプッシュできます。このプッシュ通知モデルは、多くのポーリングで新しいデータが返されないポーリングよりも効率的です。XMPP は、WebSocketを使用してサーバーと通信することもサポートしています。[ 11 ]
クライアントはHTTPを使用するため、ほとんどのファイアウォールはクライアントがメッセージを妨害されることなく取得および送信することを許可します。したがって、XMPPで使用されるTCPポートがブロックされているシナリオでは、サーバーは通常のHTTPポートでリッスンすることができ、トラフィックは問題なく通過するはずです。さまざまなWebサイトでは、ブラウザ経由でXMPPにサインインできます。さらに、標準のhttp(ポート80)およびhttps(ポート443)ポートでリッスンする公開サーバーがあり、ほとんどのファイアウォールの背後からの接続を許可します。ただし、IANAに登録されているBOSHのポートは実際には80ではなく5280です。
XMPP Standards Foundation(旧称:Jabber Software Foundation)は、オープンなXMPP拡張機能、いわゆるXEPの開発に積極的に取り組んでいます。[ 12 ]ただし、拡張機能は個人、ソフトウェアプロジェクト、組織によって定義することもできます。相互運用性を維持するために、共通の拡張機能はXSFによって管理されています。IM以外のXMPPアプリケーションには、チャットルーム、ネットワーク管理、コンテンツシンジケーション、コラボレーションツール、ファイル共有、ゲーム、リモートシステム制御と監視、位置情報、ミドルウェアとクラウドコンピューティング、VoIP、IDサービスなどがあります。
ローカルネットワークドメイン全体にわたる検出をサポートする機能を活かし、XMPPはクラウドコンピューティングに最適です。クラウドコンピューティングでは、仮想マシン、ネットワーク、ファイアウォールなどが、代替のサービス検出やプレゼンスベースのソリューションにとって障害となる場合があります。クラウドコンピューティングおよびストレージシステムは、システム間で状態を中継するためのメッセージングだけでなく、ストレージや仮想マシンなどのより大きなオブジェクトの移行や配布など、複数のレベルにわたるさまざまな形式の通信に依存しています。認証や転送中のデータ保護に加え、XMPPはさまざまなレベルで適用でき、拡張可能なミドルウェアまたはメッセージ指向ミドルウェア(MOM)プロトコルとして理想的であることが証明される可能性があります。
XMLはテキストベースであるため、通常のXMPPは純粋なバイナリソリューションに比べてネットワークオーバーヘッドが大きくなります。この問題は、実験的なXEP-0322「効率的なXML交換(EXI)フォーマット」によって解決される予定でした。このフォーマットでは、特にスキーマ情報を考慮したモードで、XMLが効率的なバイナリ方式でシリアル化されます。しかし、このXEPは現在延期されています。
インバンドバイナリデータ転送には制限があります。バイナリデータは、インバンドで送信する前に、まずBase64エンコードする必要があります。そのため、大量のバイナリデータ(ファイル転送など)は、インバンドメッセージを使用して調整しながら、アウトオブバンドで送信するのが最適です。ほとんどの場合、これはメッセージへの添付ファイルと、広く実装されているXEP-0363 HTTPファイルアップロードメカニズムを使用して処理されます。音声およびビデオチャットは、Jingle XMPP拡張プロトコル(XEP-0166)を介して行うことができます。

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

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

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

ジェレミー・ミラーは1998年にJabber技術の開発に着手し、jabberd1999年1月4日にサーバーの最初のバージョンをリリースした。 [ 35 ]初期のJabberコミュニティはオープンソースソフトウェア、主にjabberdサーバーに焦点を当てていたが、その主な成果はXMPPプロトコルの開発であった。
インターネット技術タスクフォース(IETF)は、コアプロトコルをIETFインスタントメッセージングおよびプレゼンス技術として正式化するために、2002年にXMPPワーキンググループを設立しました。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 [ 18 ]であり、 1999 年以来継続的に運営され、無料アカウントを提供してきました[ 36 ]。1999年から 2006 年 2 月までは、サーバー ソフトウェアとして jabberd を使用していましたが、その後ejabberdに移行しました(どちらも無料のソフトウェアアプリケーション サーバーです)。2010 年 1 月には、 Isode Ltd. が開発した独自のM-Link サーバー ソフトウェアに移行しました[ 37 ]。
2008年9月、シスコシステムズは商用製品Jabber XCPの開発元であるJabber, Inc.を買収した。[ 38 ]
XMPP標準財団(XSF)は、XMPP拡張プロトコル(XEP、以前はJabber拡張提案またはJEPとして知られていた)を中心とした標準化プロセスを通じて、XMPPの拡張機能を開発および公開しています。以下の拡張機能は特に広く使用されています。
XMPP のドメイン間連携、公開/購読、認証、モバイル エンドポイントに対するセキュリティなどの機能は、モノのインターネットの実装に使用されています。実験的な実装には、いくつかの XMPP 拡張機能が含まれています。効率的な XML 交換 (EXI) フォーマット[ 46 ]、センサー データ[ 47 ]、プロビジョニング[ 48 ]、制御[ 49 ]、コンセントレータ[ 50 ] 、検出[ 51 ]。
これらの取り組みは、モノのインターネット専用の XMPP wiki ページ[ 52 ]および XMPP IoT メーリングリスト[ 53 ]に記録されています。
IETF XMPPワーキンググループは、一連のRequest for Comments(RFC)文書を作成しました。
これらの仕様の中で最も重要で、最も広く採用されているのは以下のとおりです。
XMPPは、インスタントメッセージングとプレゼンス通知の標準プロトコルであるセッション開始プロトコル(SIP)に基づくSIMPLEの競合相手とみなされることが多い。 [ 54 ] [ 55 ]
マルチユーザーチャット用のXMPP拡張機能[ 40 ]はIRCの競合相手と見なすことができるが、IRCの方がはるかにシンプルで、機能もはるかに少なく、はるかに広く使われている。
パブリッシュ/サブスクライブ用のXMPP拡張機能[ 41 ]は、Advanced Message Queuing Protocol(AMQP)と同じ機能の多くを提供します。