
IRC(Internet Relay Chat )は、インスタントメッセージング用のテキストベースのチャットシステムです。IRCは、チャンネルと呼ばれるディスカッションフォーラムでのグループコミュニケーション用に設計されていますが[ 1 ]、プライベートメッセージによる1対1のコミュニケーション[ 2 ]、チャットやデータ転送[ 3 ]、ファイル共有[ 4 ]なども可能です。
IRCは、テキスト形式での通信を容易にするためのアプリケーション層プロトコルとして実装されています。チャット処理はクライアント・サーバー型のネットワークモデルで動作します。ユーザーは、クライアント(Webアプリ、スタンドアロンのデスクトッププログラム、またはより大きなプログラムの一部として組み込まれたもの)を使用して、IRCサーバー(より大きなIRCネットワークの一部である場合もある)に接続します。接続方法の例としては、 Mibbit、KiwiIRC、mIRCなどのプログラムが挙げられます。
IRC の利用は 2003 年以降着実に減少しており、2012 年までにユーザーの 60% を失った。[ 5 ] 2026 年 4 月には、上位 100 の IRC ネットワークが同時に 162,000 人以上のユーザーにサービスを提供していた。[ 6 ]
IRC は、フィンランドのオウル大学のコンピュータサイエンス学科で働いていたヤルコ・オイカリネンが、 OuluBox というBBSで使用されていた MUT (MultiUser Talk) というプログラムを置き換えるために、1988 年 8 月に作成しました。ヤルコは、自分が管理していた BBS ソフトウェアを拡張して、 Usenetスタイルのニュース、リアルタイムのディスカッション、および同様の BBS 機能を可能にすることを意図していました。最初に実装したのはチャット部分で、これは友人の Jyrki Kuoppala と Jukka Pihl が書いた部分を借りて作成しました。最初の IRC ネットワークは、tolsun.oulu.fi という単一のサーバーで稼働していました。[ 7 ]オイカリネンは、 BITNET上で動作していたBitnet Relayというチャット システムからインスピレーションを得ました。[ 8 ]
ユルキ・クオッパラはオイカリネンに、オウル大学にIRCコードを解放してオウル以外でも実行できるようにするよう働きかけ、最終的にコードが解放されると、ユルキ・クオッパラはすぐに別のサーバーをインストールした。これが最初の「IRCネットワーク」だった。オイカリネンは、ユーザー数が増えると、ヘルシンキ工科大学とタンペレ工科大学の友人たちにIRCサーバーの運用を始めさせ、他の大学もすぐにそれに続いた[ 8 ]。この時、オイカリネンは、BBSの残りの機能は自分のプログラムにはおそらく収まらないだろうと気づいた[ 7 ] 。
オイカリネンはデンバー大学とオレゴン州立大学の人々に連絡を取った。彼らは独自のIRCネットワークを運用しており、フィンランドのネットワークに接続したいと考えていた。彼らはオイカリネンの友人の一人であるビジェイ・スブラマニアムからプログラムを入手していた。スブラマニアムはフィンランド人以外で初めてIRCを使用した人物である。その後IRCは規模を拡大し、フィンランドの全国ネットワークであるFUNET全体で使用されるようになり、さらにインターネットのスカンジナビア支部であるNordunetにも接続された。1988年11月にはIRCはインターネット全体に広がり、1989年半ばには世界中に約40台のサーバーが存在していた。[ 7 ]
1990年8月、IRCの世界で最初の大きな意見の相違が起こった。「A-net」(Anarchy net)にはeris.berkeley.eduというサーバーが含まれていた。それは完全にオープンで、パスワードは不要で、接続数に制限もなかった。Greg "wumpus" Lindahlは次のように説明している。[ 9 ]「ワイルドカードサーバーラインがあったので、人々はサーバーを接続し、ニックネームが衝突していた」。「Eris Free Network」、EFnetは、erisマシンをIRCからQライン(Qは隔離の略)された最初のマシンにした。wumpusの言葉を再び引用すると、[ 9 ]「Erisはそのラインを削除することを拒否したので、私はEFnetを結成した。大した争いではなかった。すべてのハブを参加させ、他のほとんど全員がそれに続いた」。A-netはerisサーバーで結成され、EFnetはeris以外のサーバーで結成された。歴史が示すように、ほとんどのサーバーとユーザーはEFnetを選んだ。 A-netが解散すると、EFnetという名前は意味を失い、再び唯一のIRCネットワークとなった。[ 7 ]
その頃、IRCはメディアの報道管制下で1991年のソ連のクーデター未遂事件を報道するために使用された。[ 10 ]湾岸戦争の際にも同様の方法で使用されたことがある。[ 11 ]これらの出来事やその他の出来事のチャットログはibiblioアーカイブに保存されている。[ 12 ]
もう一つのフォークの試み、そして永続的な変化をもたらした最初の試みは、1992年10月にアメリカの「Wildthang」によって開始されました。(EFnet IRCdバージョン2.8.10からフォークされました)。これはボットを開発するためのテストネットワークとして意図されていましたが、すぐに「友人とその友人のための」ネットワークへと成長しました。ヨーロッパとカナダでは別の新しいネットワークが開発されており、12月にはフランスのサーバーがカナダのサーバーに接続され、月末までにはフランスとカナダのネットワークがアメリカのネットワークに接続され、後に「The Undernet」と呼ばれるネットワークが形成されました。[ 7 ]
「アンダーネット」の運営者たちは、IRCdをさらに発展させ、帯域幅の使用量を削減し、EFnetが抱えていたチャンネルの混乱(ネットの分割や乗っ取り)を解消しようと試みた。後者の目的のために、アンダーネットはタイムスタンプ、新しいルーティングを実装し、ユーザーがチャンネルを登録し、トラブルメーカーからチャンネルを保護しようとするプログラムであるCServiceを提供した。1993年2月15日に発表された最初のサーバーリストには、米国、カナダ、フランス、クロアチア、日本のサーバーが含まれていた。8月15日には、ユーザー数の新記録が57人に更新された。[ 7 ]
1993 年 5 月に RFC 1459 [ 13 ]が公開され、クライアント/サーバー操作、チャネル、1 対 1 および 1 対 多の会話のためのシンプルなプロトコルが詳細に記述されています。[ 7 ] CTCP、色、フォーマットなどの多くの拡張機能はプロトコル仕様に含まれておらず、文字エンコーディングも含まれていません[ 14 ]。そのため、サーバーとクライアントのさまざまな実装が分岐しました。ソフトウェアの実装はネットワークごとに大きく異なり、各ネットワークは独自のコードベースで独自のポリシーと標準を実装しました。
1994年の夏、Undernet自体がフォークされました。新しいネットワークはDALnet(創設者のdalvenjahにちなんで名付けられました)と呼ばれ、より良いユーザーサービスと、より多くのユーザーとチャンネルの保護のために設立されました。DALnetのより重要な変更の1つは、より長いニックネームの使用でした(元のIRCdの制限は9文字でした)。DALnet IRCdの変更は、Alexei "Lefler" Kosutによって行われました。したがって、DALnetはUndernet IRCdサーバーに基づいていましたが、DALnetの先駆者はEFnetを放棄した人々でした。James Ngによると、最初のDALnetの人々は「#StarTrekのオペレーターで、絶え間ない分裂/遅延/乗っ取りなどにうんざりしていた」とのことです。[ 7 ]
DALnet はすぐにグローバル WallOps (+w (/mode NickName +w) のユーザーが見ることのできる IRCop メッセージ)、より長いニックネーム、Q:Lined ニックネーム (使用できないニックネーム、例: ChanServ、IRCop、NickServ など)、グローバル K:Lines (サーバーまたはネットワーク全体から 1 人またはドメイン全体を禁止する)、IRCop 専用の通信: GlobOps、IRCop が「helpop」であることを示す +H モードなどを提供しました。DALnet の新しい機能の多くは、1995 年初頭に Brian "Morpher" Smith によって作成され、ユーザーがニックネームを所有したり、チャンネルを制御したり、メモを送信したり、その他多くのことができるようになりました。[ 7 ]
1996 年 7 月、メーリングリストでの数ヶ月にわたる激しい論争と議論の後、ircd の開発がどのように進化すべきかについての意見の相違により、またもや分裂が起こった。特に、「ヨーロッパ」(これらのサーバーのほとんどはヨーロッパにあった)側は後にIRCnetと名乗り、ニックネームとチャンネルの遅延を主張したが、EFnet 側はタイムスタンプを主張した。[ 7 ]また、ポリシーについても意見の相違があった。ヨーロッパ側は IRCops ができることとできないことを規定する一連のルールを確立し始めていたが、これは米国側が反対する見解であった。[ 15 ]
IRCnet サーバーのほとんど (すべてではない) はヨーロッパにあり、EFnet サーバーのほとんどが米国にあった。この出来事は、多くの IRC 協会で「大分裂」としても知られている。EFnet はその後 (1998 年 8 月現在) 成長し、当時のユーザー数を上回った。2000 年の (北半球の) 秋には、EFnet のユーザー数は約 50,000 人、IRCnet のユーザー数は 70,000 人であった。[ 7 ]
IRCはインターネット上での歴史の中で大きく変化してきた。新しいサーバーソフトウェアによって、数多くの新機能が追加されてきた。
2016年現在IRCv3と呼ばれるワーキンググループの下で新たな標準化の取り組みが進められており、即時通知、履歴サポートの向上、セキュリティの強化といったより高度なクライアント機能に重点が置かれている。[ 20 ] 2019年現在主要なIRCネットワークは、提案された標準を完全に採用していません。[ 21 ]
2021年6月現在 、現在稼働していることが知られているIRCネットワークは481種類あり、[ 22 ]そのうちオープンソースのLibera Chatは2021年5月に設立され、26台のサーバーで20,374チャンネルを運営しており、ユーザー数が最も多い。上位100のIRCネットワークは、約1,000台のサーバーで10万以上のチャンネルを共有している。[ 23 ]
1990年代から2000年代初頭にかけての黄金時代(2004年にはQuakeNetのユーザー数が24万人)の後、IRCは著しい衰退を経験し、2003年から2012年の間にユーザー数が約60%減少しました。ユーザーはFacebookやTwitterなどのソーシャルメディアプラットフォーム[ 5 ]、および1999年に開発されたXMPPなどのオープンプラットフォームに移行しました。Freenodeなどの一部のネットワークは全体的な傾向に従わず、同じ期間に規模が4倍以上に拡大しました。[ 5 ]しかし、2016年に約9万人のユーザーを抱えていたFreenodeは、その後約9,300人に減少しました。[ 24 ]
最大規模のIRCネットワークは、従来「ビッグ4」[ 25 ] [ 26 ] [ 27 ] [ 28 ]としてグループ化されてきました。これは、統計で上位を占めるネットワークに与えられる名称です。ビッグ4ネットワークは定期的に変化しますが、IRCのコミュニティ的な性質により、ユーザーが選択できるネットワークは他にも多数存在します。
歴史的に「ビッグ4」は、次の通りでした。[ 25 ] [ 26 ] [ 27 ]
IRCの同時接続ユーザー数は、2001年には600万人、2004年から2005年には1000万人に達したが、2021年には約35万人にまで減少した。
2025年12月現在、上位5つのIRCネットワークの1日あたりの総ユーザー数は約88,000人で、残りのIRCネットワークはそれぞれ1日あたり10,000人未満です。1日あたり少なくとも1,000人のユーザーがいるネットワークは約35あります。[ 29 ]
主要ネットワークのタイムライン:


IRC はTCP [ 13 ]とオプションでTLS を使用するオープンプロトコルです。IRCサーバーは他の IRC サーバーに接続して IRC ネットワークを拡張できます。[ 32 ]ユーザーはクライアントをサーバーに接続することで IRC ネットワークにアクセスします。[ 33 ] mIRC、HexChat、irssiなどのクライアント実装や、オリジナルのIRCdなどのサーバー実装が多数あります。ほとんどの IRC サーバーでは、ユーザーがアカウントを登録する必要はありませんが、接続する前にニックネームが必要です。 [ 34 ]
IRCは元々プレーンテキストプロトコル[ 13 ] (後に拡張された)であり、 IANAの要求によりポート194/TCPが割り当てられました[ 35 ]。しかし、 IRCdソフトウェアをroot権限で実行する必要がないように、事実上の標準は常に6667/TCP [ 36 ]および近隣のポート番号(例えばTCPポート6660~6669、7000)[ 37 ]でIRCを実行することでした。
プロトコルでは文字が8ビットであると規定されていましたが、テキストが使用する文字エンコーディングは規定されていませんでした。[ 14 ]これは、異なるクライアントや異なるプラットフォームを使用しているユーザーが会話しようとしたときに問題を引き起こす可能性があります。
現在使用されているすべてのクライアント・サーバー型IRCプロトコルは、IRC2サーバーのirc2.4.0バージョンで実装され、RFC 1459に文書化されたプロトコルに由来しています。RFC 1459の公開以降、irc2.10実装の新機能により、いくつかの改訂版プロトコル文書(RFC 2810、RFC 2811、RFC 2812、RFC 2813)が公開されましたが、これらのプロトコル変更は他の実装では広く採用されていません。
IRCプロトコルに関する仕様は数多く公開されているものの、プロトコル自体が動的なため、公式な仕様は存在しない。実際、上記のRFCを厳密に参照しているクライアントはほとんどなく、サーバーもごく少数である。
マイクロソフトは1998年に独自のIRCXを介してIRCの拡張機能を作成した。[ 38 ]その後、IRCXをサポートするソフトウェアの配布を中止し、代わりに独自のMSNPを開発した。
IRCサーバーのネットワークの標準的な構造はツリーです。[ 39 ]メッセージはツリーの必要なブランチのみに沿ってルーティングされますが、ネットワークの状態はすべてのサーバーに送信されます[ 40 ]。また、サーバー間には一般的に高度な暗黙の信頼関係があります。しかし、このアーキテクチャにはいくつかの問題があります。不正な動作をするサーバーや悪意のあるサーバーはネットワークに大きな損害を与える可能性があります[ 41 ]。また、意図的か基盤となるネットワークの状態の結果かにかかわらず、構造の変更にはネット分割とネット結合が必要です。これにより、大量のネットワークトラフィックとユーザーへの誤った退出/参加メッセージが発生し[ 42 ]、分割サーバーのユーザーとの通信が一時的に失われます。大規模なネットワークにサーバーを追加すると、ネットワークのバックグラウンド帯域幅に大きな負荷がかかり、サーバーのメモリに大きな負荷がかかります。ただし、確立されると、複数の受信者への各メッセージはマルチキャストと同様の方法で配信され、各メッセージはネットワークリンクをちょうど1回通過します。[ 43 ]これは、Simple Mail Transfer Protocol (SMTP)やExtensible Messaging and Presence Protocol (XMPP)などの非マルチキャスト プロトコルと比較した場合の強みです。
IRCデーモンはローカルエリアネットワーク(LAN)上で使用できます。したがって、IRCはローカルエリアネットワーク内の人々間の通信(内部通信)を容易にするために使用できます。[ 44 ] [ 45 ]
IRCは行ベースの構造を採用しています。クライアントはサーバーに1行のメッセージを送信し[ 46 ] 、それらのメッセージに対する返信を受信し[ 47 ]、他のクライアントから送信されたメッセージのコピーを受信します。ほとんどのクライアントでは、ユーザーはコマンドの前に「/」を付けて入力できます。コマンドによっては、クライアントで完全に処理される場合もあれば、(一般的にクライアントが認識しないコマンドの場合)多少の変更を加えてサーバーに直接渡される場合もあります[ 48 ] 。
プロトコルの性質上、自動システムは送信されたコマンドと応答を常に完全に確実に正しく対応させることはできず、推測に頼らざるを得ない。[ 49 ]
確立された IRC セッションでユーザーグループと通信する基本的な手段は、チャネルを使用することです。[ 50 ]ネットワーク上のチャネルは、IRC コマンドLIST [ 51 ]を使用して表示できます。このコマンドは、その特定のネットワークで、モード +s または +p が設定されていない現在使用可能なすべてのチャネルを一覧表示します。
ユーザーはJOINコマンド[ 52 ]を使用してチャネルに参加できます。ほとんどのクライアントでは/join #channelnameとして利用可能です。参加したチャネルに送信されたメッセージは、他のすべてのユーザーに中継されます。[ 50 ]
IRCネットワーク全体で利用可能なチャンネルには「#」が接頭辞として付き、サーバーにローカルなチャンネルには「&」が付きます。[ 53 ]その他のあまり一般的ではないチャンネルタイプには、「+」チャンネル(演算子のない「モードレス」チャンネル)[ 54 ] 、および「!」チャンネル(通常はタイムスタンプのないネットワーク上のタイムスタンプ付きチャンネルの一種)[ 55 ]などがあります。
ユーザーとチャネルには、大文字と小文字を区別する個別の文字で表されるモードがあり[ 56 ] 、 MODEコマンドを使用して設定されます[ 57 ]。ユーザーモードとチャネルモードは別々で、同じ文字を使用して異なる意味を持つことができます(たとえば、ユーザーモード「i」は非表示モードですが、チャネルモード「i」は招待専用です[ 58 ])。モードは通常、ターゲット(ユーザーまたはチャネル)、設定(+)または設定解除(-)するモードのセット、およびモードに必要なパラメーターを受け取るmodeコマンドを使用して設定および解除されます。
チャネルモードの中にはパラメータを受け取るものもあれば、チャネル全体ではなくチャネル上のユーザーに適用したり、チャネルに関連付けられたリストからマスク(禁止マスクなど)を追加または削除したりするものもあります。[ 59 ]チャネル上のユーザーに適用されるモードには、名前応答[ 60 ](チャネルに初めて参加したとき[ 52 ]とnamesコマンドの使用時にクライアントに送信される)でモードを表すために使用される関連付けられたシンボルがあり、多くのクライアントでは、チャネル内のユーザーのクライアント表示リストでそれを表したり、ユーザーのモードの独自のインジケーターを表示したりするためにも使用されます。
受信したモード メッセージを正しく解析し、チャネルの状態を追跡するには、クライアントはどのモードがどのタイプであるか、またチャネル上のユーザーに適用されるモードについてどの記号がどの文字に対応するかを知る必要があります。初期の IRC 実装では、これをクライアントにハードコーディングする必要がありましたが、現在では、接続時に数値 005 を使用してこの情報をクライアントに送信する ISUPPORT と呼ばれるプロトコルの事実上の標準拡張機能があります。[ 61 ] [ 62 ]
IRCには、チャンネル上のユーザーに適用されるモードに関して小さな設計上の欠陥があります。初期チャンネル状態を確立するために使用される名前メッセージは、チャンネル上のユーザーごとに1つのモードしか送信できませんが[ 60 ]、1人のユーザーに複数のモードを設定できます。たとえば、ユーザーがチャンネルでオペレーター状態(+o)と音声状態(+v)の両方を保持している場合、新しいクライアントは優先度の低いモード(つまり音声)を見ることができません。この問題の回避策はクライアント側とサーバー側の両方で可能です。一般的な解決策は、IRCv3の「マルチプレフィックス」拡張機能を使用することです[ 63 ]。
多くのデーモンやネットワークは、上記のリストにあるモードを追加したり、モードの動作を変更したりしています。[ 65 ] [ 66 ] [ 67 ] [ 68 ]
チャンネルオペレーターとは、 IRCチャンネル上でチャンネルを管理するクライアントのことです。IRCチャンネルオペレーターは、名前の横に表示される記号やアイコンで簡単に識別できます(クライアントの実装によって異なりますが、一般的には「@」記号の接頭辞、緑色の丸、またはラテン文字の「+o」/「o」などです)。ほとんどのネットワークでは、オペレーターは以下のことができます。
一部のユーザーは、ローカル サーバーまたはネットワーク全体で高い権限を保持しています。これらは IRC オペレーターと呼ばれ、[ 69 ]時には IRCops または Opers と略されます (チャンネル オペレーターと混同しないでください)。IRCd の実装が異なるため、特定の IRCd における IRC オペレーターの権限も異なります。RFC 1459 [ 69 ]は、ネットワークをクリーンな状態に保つために IRC オペレーターは「必要悪」であると主張しており、そのため、サーバーの切断と再接続ができる必要があります。さらに、悪意のあるユーザーや有害な自動プログラムが IRC に侵入するのを防ぐために、IRC オペレーターは通常、クライアントを切断し、IP アドレスまたはサブネット全体を完全に禁止することが許可されています。サービスを提供するネットワーク (NickServ など) は通常、IRC オペレーターが基本的な「所有権」の問題を処理することも許可しています。さらに、特権的な権利には、チャンネル禁止の解除(オペレーターがいなければ参加できないチャンネルに参加できる)、オペレーターがいなければ参加できないチャンネルで自らオペレーターになれること、常に自動的にオペレーターになることなどが含まれる場合があります。
ホストマスクは、 IRCサーバーに接続されたIRCクライアントの一意の識別子です。[ 70 ] [ 71 ] IRCサーバー、サービス、およびボットを含むその他のクライアントは、これを使用して特定のIRCセッションを識別できます。
ホストマスクの形式は です。ホストマスクは に似ていますが、電子メールアドレスnick!user@hostと混同しないでください。コマンドを示す ! とニックネームによって区別されます。
ニックネーム部分はユーザーが選択したニックネームで、接続中に変更できます。ユーザー部分は、クライアントのidentによって報告されるユーザー名です。 [ 72 ]クライアントで ident が利用できない場合は、クライアントが接続したときに指定されたユーザー名の前にチルダを付けて使用します。[ 73 ]
ホスト部分は、クライアントが接続しているホスト名です。サーバーがクライアントのIPアドレスを有効なホスト名に解決できない場合は、ホスト名の代わりにIPアドレスが使用されます。
クライアントの IP アドレスやホスト名を公開することによるプライバシー上の問題から、一部のIRC デーモンは、InspIRCd や UnrealIRCd の「+x」モードなどのプライバシー機能も提供しています。これは、クライアントの IP アドレスをハッシュ化したり、クライアントのホスト名の一部をマスクしたりして、IRCops以外のユーザーには読み取れないようにします。ユーザーは、ホストマスクに表示される「仮想ホスト」(または「vhost」)を要求するオプションも選択でき、これにより匿名性をさらに高めることができます。Libera ChatやFreenodeなどの一部の IRC ネットワークでは、これらを「クローク」として使用し、ユーザーがグループやプロジェクトに所属していることを示します。[ 74 ]
暫定的に認められている統一リソース識別子(URI)スキームは、irc、ircs、 の3つですirc6。[ 75 ]サポートされている場合、を含むさまざまな形式のハイパーリンクが可能になります。
irc://<host>[:<port>]/[<channel>[?<channel_keyword>]] ircs://<host>[:<port>]/[<channel>[?<channel_keyword>]] irc6://<host>[:<port>]/[<channel>[?<channel_keyword>]]
(括弧([、])で囲まれた項目は省略可能)は、(必要に応じて)指定されたホスト(またはIRCクライアントが認識しているネットワーク)に接続し、指定されたチャンネルに参加するために使用されます。[ 76 ](これはクライアント自体、またはWebブラウザなどの別のアプリケーションから使用できます)。ircはデフォルトのURIで、irc6はIPv6を使用して行う接続を指定し、ircsはセキュアな接続を指定します。
仕様によれば、英数字で始まるチャンネル名には、通常のハッシュ記号(#)が先頭に追加されるため、省略可能です。一部の実装(例えばmIRC)では、これを無条件に行うため、URLに含まれると(通常は意図しない)余分な文字列(例えば##channel)が生成されます。
一部の実装では、カンマで区切って複数のチャネルを指定できます。[ 77 ]
IRC の元の設計における問題点としては、共有状態データの量[ 78 ] [ 79 ]がスケーラビリティの制限となること[ 80 ] 、固有のユーザー識別がないためにニックネームの衝突問題が発生すること[ 81 ] 、循環ルーティングによるネット分割からの保護がないこと[ 82 ] [ 83 ]、リアルタイムのユーザー存在情報のためにスケーラビリティを犠牲にすること[ 84 ] 、悪用されるプラットフォームを提供するプロトコルの弱点[ 85 ] 、透過的で最適化可能なメッセージパッシングがないこと[ 86 ] 、暗号化がないこと[ 87 ]などがありました。これらの問題の一部は、 Modern IRCで対処されています。
IRC接続は暗号化されていない場合が多く、また長時間に及ぶことが多いため、DoS/DDoS攻撃者やハッカーにとって魅力的な標的となります。そのため、IRCネットワークが乗っ取り戦争などの攻撃を受けないように、慎重なセキュリティ対策が必要です。IRCネットワークは、悪影響を及ぼすユーザーやサーバーをKラインまたはGラインで遮断することもあります。
一部の IRC サーバーは、セキュリティ目的でSSL/TLS接続をサポートしています。これは、パケット スニファプログラムを使用して IRC ユーザーのパスワードを取得するのを防ぐのに役立ちますが、IRC チャンネルの公開性のため、この範囲を超えて役立つことはほとんどありません。SSL 接続にはクライアントとサーバーの両方のサポートが必要です (ユーザーがコンピュータに SSL バイナリと IRC クライアント固有のパッチまたはモジュールをインストールする必要がある場合があります)。一部のネットワークでは、サーバー間の接続にも SSL を使用し、+SSSL が提供する利点をよりよく活用するために、チャンネルに SSL 接続ユーザーのみを許可し、平文でのオペレーター識別を禁止する特別なチャンネル フラグ (など) を提供しています。[ 88 ] [ 89 ]
IRCは、偽のICMP到達不能メッセージを使用してTCPベースのIRC接続を破壊(ヌーキング)してユーザーを困らせたり、乗っ取りを容易にしたりするなど、さまざまな種類のインターネット攻撃の初期の実験場として機能しました。
IRCの実装をめぐる最も議論の的となっている技術的問題の一つで、今日まで続いているのが、「ニックネーム/チャンネル遅延」プロトコルと「タイムスタンプ」プロトコルのどちらが優れているかという問題です。どちらの方法もサービス拒否攻撃の問題を解決するために存在しますが、アプローチは大きく異なります。当初のIRCプロトコルの問題点は、2つのサーバーが分割されて再結合すると、ネットワークの両側のチャンネルが単純にマージされてしまうことでした。ユーザーが「分割」したサーバーに参加し、ネットワークの反対側に存在するチャンネルが空いていて、オペレーターのステータスを取得できた場合、ネットワーク分割が終わった後に「結合」されたチャンネルのオペレーターになります。ユーザーがネットワークの反対側に存在するニックネームを使用した場合、サーバーは再結合時に両方のユーザーを強制的に切断します(「ニックネームの衝突」)。これはしばしば悪用され、チャンネル上のすべてのユーザーを「一括で強制切断」し、悪用に対処するオペレーターが存在しない「オペレーターなし」チャンネルを作り出していました。これはIRC内部で問題を引き起こすだけでなく、ネットワークの分裂を引き起こすためにIRCサーバーに対するサービス拒否攻撃を促し、それを悪用する行為につながった。
ニックネーム遅延(ND)とチャネル遅延(CD)戦略は、再接続や名前変更を遅延させることで不正利用を防止することを目的としています。ユーザーがログオフしてニックネームが使用可能になった後、またはすべてのユーザーが離脱したためにチャネルが消滅した場合(ネットスプリット時によく発生します)、一定期間(遅延)が経過するまで、サーバーはどのユーザーもそのニックネームを使用したり、そのチャネルに参加したりすることを許可しません。この戦略の背後にある考え方は、たとえネットスプリットが発生しても、不正利用者はニックネームを取得したり、チャネルのオペレーター権限を取得したりできないため、ニックネームの衝突やチャネルの「マージ」が発生しないことです。この戦略は、再接続後に一時的に別の名前を使用せざるを得ない正当なユーザーにとっては、ある程度不便です(アンダースコアを追加するのが一般的です)。
タイムスタンププロトコルは、ニックネーム/チャネル遅延に代わるもので、タイムスタンプ付き優先度を使用して衝突を解決します。ネットワーク上のすべてのニックネームとチャネルには、作成された日時を示すタイムスタンプが割り当てられます。ネットワークが分裂すると、両側の2人のユーザーが同じニックネームまたはチャネルを自由に使用できますが、両側が結合されると、1人だけが生き残ります。ニックネームの場合、タイムスタンプに基づいて新しいユーザーが削除されます。チャネルが衝突すると、メンバー(チャネル上のユーザー)は統合されますが、分裂で「負けた」側のチャネルオペレーターはチャネルオペレーターのステータスを失います。
TSは、設計と実装の両面においてND/CDよりもはるかに複雑なプロトコルであり、何度か改訂を重ねてきたにもかかわらず、一部の実装では依然として「同期ずれ」(同じネットワーク上の2つのサーバーがネットワークの現在の状態について意見が一致しない状態)や、「負けた」側で許可される内容に寛容すぎるという問題が残っています。たとえば、オリジナルのTSプロトコルでは、負けたチャンネルで禁止事項やその他のモードを設定したユーザーが、分割が再結合された際にそれらの設定がマージされることを防ぐ仕組みがありませんでした。たとえそれらのモードを設定したユーザーがチャンネルのオペレーターとしての地位を失っていたとしてもです。また、最近のTSベースのIRCサーバーの中には、タイムスタンプに加えて、何らかのNDやCDを組み込んで、不正利用をさらに抑制しようとしているものもあります。
現在、ほとんどのネットワークはタイムスタンプ方式を採用している。タイムスタンプ方式とND/CD方式の意見の相違により、いくつかのサーバーがEFnetから分離し、より新しいIRCnetが設立された。分離後、EFnetはTSプロトコルに移行したが、IRCnetはND/CD方式を採用した。
IRCnet ircd の最近のバージョン、および TS6 プロトコルを使用する ircd (Charybdis を含む) では、ND は SAVE と呼ばれるメカニズムに拡張/置き換えられています。このメカニズムは、IRC サーバーに接続する際に、すべてのクライアントにUID を割り当てます。この ID は数字で始まりますが、ニックネームには数字を使用することはできません (ただし、IRCnet や InspIRCd など一部の ircd では、クライアントが独自の UID をニックネームとして使用できます)。
同じニックネームを持つ2つのクライアントがネット分割の異なる側から接続した場合(「ニックネームの衝突」)、この衝突を最初に検知したサーバーは、両方のクライアントにニックネームをUIDに変更するよう強制し、両方のクライアントが切断されるのを防ぎます。IRCnetでは、両方のクライアントが元のニックネームに戻して再び衝突するのを防ぐため、ニックネームは一定期間ロックされます(ND)。

クライアントソフトウェアは、さまざまなオペレーティングシステムやソフトウェアパッケージ、Web ベースまたはゲーム内クライアント向けに存在します。Windows、Unix、Linux、macOS 、モバイルオペレーティングシステム (iOS や Android など) を含むさまざまなオペレーティングシステム向けに、さまざまなクライアントが利用可能です。Windowsでは、 mIRCが最も人気のあるクライアントの1つです。[ 90 ] Linux Mintのように、 HexChat がプリインストールされているLinuxディストリビューションには、IRC クライアントがプリインストールされています。
プラグインによって拡張可能なプログラムの中には、IRCクライアントのプラットフォームとして機能するものもあります。例えば、Emacs Lispで完全に記述されたERCというクライアントは、Emacsのバージョン22.3に含まれています。したがって、Emacsが動作するプラットフォームであれば、ERCも動作させることができます。
多くのウェブブラウザには、IRCクライアントが内蔵されています。例えば、以下のようなブラウザです。
MibbitやオープンソースのKiwiIRCといったウェブベースのクライアントは、ほとんどのブラウザで動作します。
War§ow [ 91 ] 、 Unreal Tournament ( Unreal Tournament 2004まで) [ 92 ] 、Uplink [ 93 ] 、 Spring Engineベースのゲーム、0 AD、ZDaemonなどのゲームには IRC が含まれています。[ 94 ]
Ustreamのチャット インターフェースは、カスタム認証を備えた IRC です[ 95 ]。Twitch (旧 Justin.tv)も同様です。 [ 96 ] [ 97 ]
IRCにおけるボットの典型的な用途は、チャットベースのゲームをホストしたり、外部イベントの通知を提供したりするなど、チャンネル内でIRCサービスや特定の機能を提供することです。しかし、一部のIRCボットは、サービス拒否、スパム送信、悪用などの悪意のある攻撃を実行するために使用されます。[ 98 ]
サーバー上でデーモンとして実行され、永続的なプロキシとして機能するプログラムは、BNCまたはバウンサーとして知られています。その目的は、IRCサーバーへの接続を維持し、サーバーとクライアント間のリレーとして機能したり、単にプロキシとして機能したりすることです。クライアントがネットワーク接続を失った場合でも、BNCは接続を維持し、すべてのトラフィックをアーカイブして後で配信できるため、ユーザーはサーバーへの接続を中断することなくIRCセッションを再開できます。[ 99 ]
さらに、用心棒のような効果を得る方法として、IRCクライアント(通常はテキストベース、例えばIrssi)を常時稼働のサーバー上で実行し、ユーザーがssh経由で接続する。これにより、SSH機能のみを備え、IRCクライアントがインストールされていないデバイスでもIRCに接続できるようになり、IRCセッションの共有も可能になる。[ 100 ]
ssh接続が閉じてもIRCクライアントが終了しないようにするには、クライアントをGNU Screenやtmuxなどのターミナルマルチプレクサ内で実行し、IRCネットワークに常時接続した状態を維持し、ユーザーが関心のあるチャンネルでの会話をログに記録したり、ネットワーク上でチャンネルの存在を維持したりすることができます。この設定をモデルにして、2004年にクライアントサーバー方式を採用したIRCクライアントであるSmuxiがリリースされました。[ 101 ] [ 102 ]
IRC 上でユーザーが探しているものを見つけるのに役立つ検索エンジンが多数あります。[ 103 ] [ 104 ]一般的に検索エンジンは、「バックエンド」(または「スパイダー/クローラー」)とフロントエンドの「検索エンジン」の 2 つの部分で構成されています。
バックエンド(スパイダー/ウェブクローラー)は検索エンジンの主力部分です。IRCサーバーを巡回し、サーバー間で送受信される情報をインデックス化する役割を担っています。インデックス化される情報は通常、チャンネルテキスト(公開チャンネルで公開表示されるテキスト)のみで構成されます。データの保存方法としては、MySQLやOracleなどのリレーショナルデータベースが一般的に用いられます。
フロントエンドの「検索エンジン」は、データベースへのユーザーインターフェースです。ユーザーは、インデックス化された情報のデータベースを検索して、探しているデータを取得できます。これらのフロントエンド検索エンジンは、さまざまなプログラミング言語でコーディングできます。
ほとんどの検索エンジンは、IRCをクロールしてデータをインデックス化する単一のアプリケーションである独自のクローラーを備えています。しかし、中には「ユーザーベース」のインデクサーを採用しているものもあります。後者は、ユーザーがIRCクライアントに専用のアドオンをインストールすることを前提としています。このアドオンが、ユーザーが参加しているチャンネルの情報をデータベースに送信する役割を担います。
多くのユーザーは、多くのIRCクライアントに組み込まれているログ機能を利用して、独自の臨時検索エンジンを実装しています。これらの検索エンジンは通常、ボットとして実装され、特定のチャンネルまたは関連するチャンネルのグループ専用となっています。
IRCには、7ビットASCII文字セット以外の文字を送信する方法に関する、世界的に認められた単一の標準規格がまだ存在しません。IRCサーバーは通常、メッセージをバイトシーケンスとしてクライアントから別のクライアントに転送し、文字の解釈や再エンコードは行いません。IRCプロトコルは(MIMEやHTTPなどとは異なり)、文字エンコーディングオプションを通知およびネゴシエートするメカニズムを備えていません。そのため、適切な文字コーデックを選択する責任はクライアントにあります。実際には、IRCチャンネルは、それぞれの言語コミュニティのオペレーティングシステム(特にUnix系)で使用されていたものとほぼ同じ文字エンコーディングを主に使用してきました。
現在、 Unicode / ISO 10646のUTF-8エンコーディングは、将来的にIRC通信全体の標準文字エンコーディングとして最も有力な候補となるだろう。ただし、そのためには、510バイトのメッセージサイズ制限が緩和される必要がある。UTF-8はASCIIと互換性があり、一般的に使用されている他のすべての文字コード標準を網羅している。
従来のP2Pファイル共有と同様に、ユーザーはカスタマイズされたIRCボットやIRCクライアント用のスクリプトを使用してファイルを共有できるファイルサーバーを作成できます。多くの場合、ユーザーはグループを組んでIRCボットのネットワークを介してウェアーズを配布します。 [ 105 ]
技術的には、IRC 自体にはファイル転送メカニズムはありません。ファイル共有は、IRCクライアントによって実装され、通常はクライアント間のプライベート メッセージの交換を通じてファイル転送がネゴシエートされるDirect Client-to-Client (DCC) プロトコルを使用します。IRC クライアントの大多数は DCC ファイル転送をサポートしているため、ファイル共有は IRC の不可欠な機能であると考えられています。[ 106 ]しかし、このプロトコルの一般的な使用により、DCC スパムが発生することもあります。DCC コマンドは、脆弱なクライアントを悪用して、サーバーから切断したりクライアントを終了したりするなどのアクションを実行するためにも使用されています。
私はこれらすべてを経験したわけではありません。この文章を書くために、さまざまな場所で情報を見つけ、さまざまな人から情報を受け取りました。この件で私を助けてくれた人は、グレッグ「wumpus」リンダール、ヴェサ「vesa」ルオコネン、ジェームズ・ング、トゥオマス・ヘイノ、リチャード(アンダーネットのeagle's)、アリ・レムケなどです。
IRCネットワークが提供していたOpen Proxy Monitorがサービス終了となりました。データベースが非常に大きかったため、チームがバックアップを取ることも、サービスを継続するための新しい場所を見つけることもほぼ不可能でした。加えて、チームメンバーのほとんどが、サービスを継続する時間を確保できなくなっていました。
ワーキンググループは、後方互換性のある拡張機能を使用してIRCプロトコルを強化、維持、標準化するために活動しているIRCクライアントおよびサーバーソフトウェア開発者の集まりです。
Ircleで数千ものチャンネルを一覧表示しようとすると、情報過多で必ず接続が切断されますが、イーサネットで直接接続している場合は、他のクライアントでは通常この作業をこなすことができます。
数百もの独立したIRCネットワークが存在するが、「ビッグ4」はEFNet、UnderNet、Dalnet、そしてIRCnetである。
EFnet、UnderNET、DALnet、IRCnetが四大ネットワークを構成している。
最大規模のネットワークは「ビッグ4」として分類されてきた。EFNet、IrcNet、QuakeNet、UnderNetである。
は最も人気のあるWindows IRCクライアントの1つです。