| 通信プロトコル | |
| 略語 | IRC |
|---|---|
| 目的 | インスタントメッセージ |
| 開発者 | ヤルッコ・オイカリネン |
| 導入 | 1988年8月 (1988-08) |
| 影響を受けた | IRCv3(標準化プロセスワーキンググループ) |
| OSI層 | アプリケーション層 |
| ポート | 6667, 6697 |
| RFC(s) | 1459 |
| インターネットプロトコルスイート |
|---|
| アプリケーション層 |
| トランスポート層 |
| インターネット層 |
| リンク層 |

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


IRCはTCP [ 13 ]とオプションでTLSを使用するオープンプロトコルです。IRCサーバーは他のIRCサーバーに接続してIRCネットワークを拡張できます。[ 29 ]ユーザーはクライアントをサーバーに接続することでIRCネットワークにアクセスします。[ 30 ] mIRC、HexChat、irssiなどの多くのクライアント実装と、オリジナルのIRCdなどのサーバー実装があります。ほとんどのIRCサーバーでは、ユーザーがアカウントを登録する必要はありませんが、接続する前にニックネームが必要です。 [ 31 ]
IRCはもともとプレーンテキストプロトコル[ 13 ] (後に拡張されましたが)であり、 IANAの要請によりポート194/TCPが割り当てられました[ 32 ]。しかし、事実上の標準としては常にIRCを6667/TCP [ 33 ]と近くのポート番号(例えばTCPポート6660〜6669、7000)[ 34 ]で実行し、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の拡張機能を作成しました。[ 35 ]その後、同社はIRCXをサポートするソフトウェアの配布をやめ、代わりに独自のMSNPを開発しました。
IRCサーバーのネットワークの標準的な構造はツリーです。[ 36 ]メッセージはツリーの必要なブランチに沿ってのみルーティングされますが、ネットワークの状態はすべてのサーバーに送信され[ 37 ]、サーバー間には一般に高い暗黙の信頼があります。ただし、このアーキテクチャには多くの問題があります。不正な動作をするサーバーや悪意のあるサーバーは、ネットワークに重大な損害を与える可能性があり[ 38 ]、構造が変更される場合は、意図的であるか、基盤となるネットワークの状態の結果であるかに関係なく、ネット分割とネット参加が必要になります。これにより、大量のネットワークトラフィックが発生し、ユーザーに誤った終了/参加メッセージが送信され[ 39 ]、分割サーバーのユーザーへの通信が一時的に途絶えます。大規模ネットワークにサーバーを追加すると、ネットワークのバックグラウンド帯域幅の負荷が大きくなり、サーバーのメモリ負荷も大きくなります。ただし、いったん確立されると、複数の受信者への各メッセージはマルチキャストに似た方法で配信されます。つまり、各メッセージはネットワークリンクを1回だけ通過します。[ 40 ]これは、シンプルメール転送プロトコル(SMTP)や拡張メッセージングおよびプレゼンスプロトコル(XMPP)などの非マルチキャストプロトコルと比較した場合の強みです。
IRCデーモンはローカルエリアネットワーク(LAN)上で使用できます。したがって、IRCはローカルエリアネットワーク(LAN)内の人々間のコミュニケーション(内部通信)を容易にするために使用できます。[ 41 ] [ 42 ]
IRCは行ベースの構造を持っています。クライアントはサーバーに1行のメッセージを送信し、[ 43 ] 、それらのメッセージへの返信を受信し[ 44 ]、他のクライアントから送信されたメッセージのコピーを受信します。ほとんどのクライアントでは、ユーザーはコマンドの前に「/」を付けることでコマンドを入力できます。コマンドによっては、クライアント側で完全に処理される場合もあれば、(クライアントが認識できないコマンドの場合は)何らかの変更を加えてサーバーに直接渡される場合もあります。[ 45 ]
プロトコルの性質上、自動化システムは送信されたコマンドとその応答を常に完全に確実に組み合わせることができるとは限らず、推測に頼ることになります。[ 46 ]
確立されたIRCセッションでユーザーグループと通信する基本的な手段は、チャンネルを使用することです。[ 47 ]ネットワーク上のチャンネルは、IRCコマンドLISTを使用して表示できます。[ 48 ]このコマンドは、その特定のネットワーク上で+sまたは+pモードが設定されていない、現在利用可能なすべてのチャンネルを一覧表示します。
ユーザーはJOINコマンド[ 49 ]を使ってチャンネルに参加できます。ほとんどのクライアントでは/join #チャンネル名として利用できます。参加したチャンネルに送信されたメッセージは、他のすべてのユーザーに中継されます。[ 47 ]
IRCネットワーク全体で利用可能なチャンネルには「#」が先頭に付き、サーバーローカルのチャンネルには「&」が付きます。[ 50 ]他にあまり一般的ではないチャンネルの種類としては、「+」チャンネル(演算子のない「モードレス」チャンネル)[ 51 ]や、「!」チャンネル(通常はタイムスタンプのないネットワーク上のタイムスタンプ付きチャンネルの一種)などがあります。[ 52 ]
ユーザーとチャンネルには、大文字と小文字が区別される個別の文字で表されるモードがあり[ 53 ] 、 MODEコマンドを使用して設定されます。[ 54 ]ユーザーモードとチャンネルモードは別々であり、同じ文字を使用して異なる意味を持つことができます(たとえば、ユーザーモード「i」は非表示モードですが、チャンネルモード「i」は招待専用です。[ 55 ])。モードは通常、ターゲット(ユーザーまたはチャンネル)、設定(+)または設定解除(-)するモードのセット、およびモードに必要なパラメータを受け取るモードコマンドを使用して設定および設定解除されます。
一部のチャンネルモードはパラメータを取り、他のチャンネルモードはチャンネル全体に適用するのではなく、チャンネル上のユーザーに適用したり、チャンネルに関連付けられたリストからマスク(例:禁止マスク)を追加または削除します。[ 56 ]チャンネル上のユーザーに適用されるモードには、名前応答[ 57 ](チャンネルに初めて参加したときにクライアントに送信される[ 49 ]およびnamesコマンドの使用)でモードを表すために使用される関連シンボルがあり、多くのクライアントでは、チャンネル内のユーザーのクライアントの表示リストでモードを表すために、またはユーザーのモードの独自のインジケーターを表示するためにも使用されます。
受信したモードメッセージを正しく解析し、チャンネルの状態を追跡するために、クライアントはどのモードがどのタイプであるか、そしてチャンネル上のユーザーに適用されるモードにおいてどのシンボルがどの文字に対応するかを認識する必要があります。IRCの初期の実装では、これはクライアントにハードコードする必要がありましたが、現在ではISUPPORTと呼ばれるプロトコルの事実上の標準拡張機能があり、接続時に数値005を使用してこの情報をクライアントに送信します。[ 58 ] [ 59 ]
IRCには、チャンネル上のユーザーに適用されるモードに関して、小さな設計上の欠陥があります。チャンネルの初期状態を確立するために使用されるnamesメッセージは、チャンネル上のユーザーごとに1つのモードしか送信できません[ 57 ]。しかし、1人のユーザーには複数のモードを設定できます。例えば、あるユーザーがチャンネル上でオペレータステータス(+o)とボイスステータス(+v)の両方を保持している場合、新しいクライアントは優先度の低いモード(つまりボイス)を認識することができません。この問題の回避策はクライアント側とサーバー側の両方で可能です。一般的な解決策は、IRCv3の「マルチプレフィックス」拡張を使用することです[ 60 ] 。
| 手紙 | シンボル | 説明 |
|---|---|---|
| 私 | 目に見えない - 共通のチャネルや正確な名前を知らない限り見ることができない | |
| s | サーバー通知を受信する | |
| わ | 激しい打撃を受ける[ 61 ] | |
| o | ユーザーは IRC オペレータ (ircop) です |
| 手紙 | シンボル | パラメータ | 説明 |
|---|---|---|---|
| o | @ | 影響を受けるユーザーの名前 | チャンネルオペレーター - チャンネルモードを変更したり、ユーザーをチャンネルから追い出したりすることができます |
| s | 秘密チャンネル - すでにチャンネルに参加しているユーザー以外には、チャンネルリストやユーザーのwhoisには表示されません。 | ||
| p | プライベート チャネル - RFC 1459 に従ってチャネル リストに「prv」としてリストされます | ||
| n | ユーザーは外部からチャンネルにメッセージを送信できません | ||
| メートル | チャンネルは管理されています(チャンネルオペレーターまたはチャンネルのボイスステータスを保持している人だけがメッセージを送信できます) | ||
| 私 | 招待を受けたユーザーのみがチャンネルに参加できます。 | ||
| t | チャンネルのトピックを変更できるのはチャンネル運営者のみです。 | ||
| l | 制限数 | チャンネルに参加できるユーザー数を制限します(満員になると、新しいユーザーは参加できなくなります) | |
| b | 禁止マスク(ニックネーム!user@host、ワイルドカード可) | チャネルから ホストマスクを禁止する | |
| v | + | 影響を受けるユーザーの名前 | チャネルのユーザ音声ステータスを表示します(上記の +m を参照) |
| け | 新しいチャンネルキー | チャンネルキーを設定し、キーを知っているユーザーのみが入室できるようにします。 |
多くのデーモンやネットワークでは、追加のモードを追加したり、上記のリストにあるモードの動作を変更したりしています。[ 62 ] [ 63 ] [ 64 ] [ 65 ]
チャンネルオペレーターは、 IRCチャンネルを管理するクライアントです。IRCチャンネルオペレーターは、名前の横に表示されているシンボルまたはアイコンで簡単に見分けられます(クライアントの実装によって異なりますが、一般的には「@」記号、緑色の円、またはラテン文字の「+o」/「o」です)。ほとんどのネットワークにおいて、オペレーターは以下の操作を行うことができます。
ローカルサーバーまたはネットワーク全体において高い権限を持つユーザーも存在します。これらはIRCオペレーター[ 66 ]と呼ばれ、 IRCopsまたはOpersと略されることもあります(チャンネルオペレーターと混同しないでください)。IRCdの実装は様々であるため、IRCdにおけるIRCオペレーターの権限も異なります。RFC 1459 [ 66 ]では、IRCオペレーターはネットワークをクリーンな状態に保つための「必要悪」であり、サーバーの切断と再接続を行う必要があるとされています。さらに、悪意のあるユーザーや有害な自動プログラムがIRCに侵入するのを防ぐため、IRCオペレーターは通常、クライアントを切断したり、IPアドレスやサブネット全体を完全に禁止したりすることが許可されています。サービスを提供するネットワーク(NickServなど)では、通常、IRCオペレーターが基本的な「所有権」に関する事項も処理できるようにしています。さらなる特権には、チャンネル禁止の無効化(操作されていない場合は参加できないチャンネルに参加できる)、操作されていないと参加できないチャンネルで自分自身を操作できること、チャンネルで常に自動操作できることなどが含まれます。
ホストマスクは、IRCサーバーに接続しているIRCクライアントの一意の識別子です。[ 67 ] [ 68 ] IRCサーバー、サービス、およびボットを含む他のクライアントは、これを使用して特定のIRCセッションを識別できます。
ホストマスクの形式は です。ホストマスクは電子メールアドレスnick!user@hostに似ていますが、混同しないでください。
ニックネーム部分はユーザーが選択したニックネームで、接続中に変更することができます。ユーザー部分は、クライアントのidentによって報告されるユーザー名です。 [ 69 ] identがクライアント上で利用できない場合は、クライアントが接続したときに指定されたユーザー名にチルダを付加して使用されます。[ 70 ]
ホスト部分は、クライアントが接続しているホスト名です。クライアントのIPアドレスがサーバーによって 有効なホスト名に解決できない場合、ホスト名の代わりにそのIPアドレスが使用されます。
クライアントのIPアドレスやホスト名を公開することによるプライバシーへの影響を考慮し、一部のIRCデーモンは、 InspIRCdやUnrealIRCdの「+x」モードなどのプライバシー機能も提供しています。これは、クライアントのIPアドレスをハッシュ化したり、クライアントのホスト名の一部をマスクしたりすることで、 IRCops以外のユーザーが読み取れないようにします。ユーザーは、匿名性をさらに高めるために、ホストマスクに表示される「仮想ホスト」(または「vhost」)を要求することもできます。Libera ChatやFreenodeなどの一部のIRCネットワークでは、ユーザーがグループやプロジェクトに所属していることを示す「クローク」としてこれを利用しています。[ 71 ]
インターネットリレーチャットには、暫定的に認められた3つのURI(Uniform Resource Identifier )スキームがあります: irc、、ircsおよびirc6。[ 72 ]サポートされている場合、さまざまな形式の ハイパーリンクが許可されます。
irc://<ホスト>[:<ポート>]/[<チャンネル>[?<チャンネルキーワード>]] ircs://<ホスト>[:<ポート>]/[<チャンネル>[?<チャンネルキーワード>]] irc6://<ホスト>[:<ポート>]/[<チャンネル>[?<チャンネルキーワード>]]
(角括弧([,])で囲まれた項目はオプションです)は、必要に応じて指定されたホスト(またはIRCクライアントが認識しているネットワーク)に接続し、指定されたチャンネルに参加するために使用されます。[ 73 ](これはクライアント自体、またはWebブラウザなどの別のアプリケーションから使用できます)。ircはデフォルトのURI、irc6はIPv6を使用して行う接続を指定し、ircsは安全な接続を指定します。
仕様では、英数字で始まるチャンネル名には通常のハッシュ記号(#)が先頭に付加されます。これにより、ハッシュ記号を省略することが可能になります。一部の実装(例えばmIRC)では、このハッシュ記号がURLに含まれている場合、無条件に付加されるため、通常は意図しない追加のハッシュ記号(例えば##channel)が生成されます。
いくつかの実装では、カンマで区切って複数のチャネルを指定できる。[ 74 ]
IRCの当初の設計上の問題点としては、共有状態データの量[ 75 ] [ 76 ]がスケーラビリティの制限となること、[ 77 ]固有のユーザーIDがないためニックネーム衝突問題が発生すること、[ 78 ]循環ルーティングによるネットスプリットからの保護がないこと、 [ 79 ] [ 80 ]リアルタイムのユーザープレゼンス情報と引き換えにスケーラビリティを犠牲にすること、[ 81 ]プロトコルの脆弱性により不正利用のプラットフォームとなること、[ 82 ]透過的で最適化可能なメッセージパッシングがないこと、[ 83 ]暗号化がないこと、 [ 84 ]といった点が挙げられます。これらの問題のいくつかは、 Modern IRCで解決されています。
IRC接続は暗号化されておらず、通常は長時間にわたるため、DoS/DDoS攻撃者やハッカーにとって魅力的な標的となります。そのため、IRCネットワークが乗っ取り戦争などの攻撃を受けないように、綿密なセキュリティポリシーを策定する必要があります。また、IRCネットワークには、悪影響を及ぼすKラインまたはGラインのユーザーやサーバーが存在する可能性もあります。
一部のIRCサーバーは、セキュリティ上の理由からSSL/TLS接続をサポートしています。これは、 IRCユーザーのパスワードを盗むためのパケットスニファープログラムの使用を阻止するのに役立ちますが、IRCチャンネルは公開されているため、この範囲を超えてはあまり役に立ちません。SSL接続にはクライアントとサーバーの両方のサポートが必要です(ユーザーはSSLバイナリとIRCクライアント固有のパッチまたはモジュールを自分のコンピュータにインストールする+S必要がある場合があります)。一部のネットワークでは、サーバー間接続にもSSLを使用しており、SSL接続ユーザーのみをチャンネルに接続できるようにし、クリアテキストでのオペレーター識別を禁止することで、SSLの利点をより有効に活用しています。[ 85 ] [ 86 ]
IRC は、偽のICMP到達不能メッセージを使用してTCPベースの IRC 接続を切断し(ヌーキング)、ユーザーを困らせたり乗っ取りを容易にしたりするなど、さまざまな種類のインターネット攻撃の初期の実験室としての役割を果たしました。
IRC実装をめぐる最も論争の的となっている技術的問題の一つは、「ニックネーム/チャンネル遅延」プロトコルと「タイムスタンプ」プロトコルの優劣です。どちらの方法もサービス拒否攻撃の問題を解決するために存在しますが、アプローチは大きく異なります。当初実装されたIRCプロトコルの問題は、2つのサーバーが分裂して再結合すると、ネットワークの両側のチャンネルが単純に統合されてしまうことでした。ユーザーが「分裂」サーバーに参加し、ネットワークの反対側のチャンネルが空いている場合、オペレーターのステータスを獲得すると、ネットスプリットの終了時に「統合」チャンネルのチャンネルオペレーターになります。ユーザーがネットワークの反対側に存在するニックネームを使用すると、サーバーは再参加時に両方のユーザーを強制終了します(「ニックネーム衝突」)。これはしばしば悪用され、チャンネル上の全ユーザーを「一括削除」し、オペレーターが不在の「オペレーターレス」チャンネルを作り出し、悪用に対処するためにオペレーターが不在となることがありました。これは IRC 内で問題を引き起こすだけでなく、ネットスプリットを引き起こしてそれを悪用する ために IRC サーバーに対してサービス拒否攻撃を実行する人々を奨励しました。
ニックネーム遅延(ND)とチャンネル遅延(CD)戦略は、再接続と名前変更を遅らせることで不正使用を防ぐことを目的としています。ユーザーがサインオフしてニックネームが使用可能になった後、またはすべてのユーザーが離脱してチャンネルが消滅した場合(ネットスプリット(netsplit)でよく発生します)、サーバーは一定時間(遅延)が経過するまで、どのユーザーもそのニックネームを使用したり、そのチャンネルに参加したりすることを許可しません。これは、ネットスプリットが発生しても、不正使用者にとっては意味がありません。不正使用者はニックネームを取得したり、チャンネルでオペレーターのステータスを取得したりできないため、ニックネームの衝突やチャンネルの「統合」は発生しないからです。これはある程度、正当なユーザーにとって不便であり、再接続後に一時的に別の名前を使用せざるを得なくなる可能性があります(アンダースコアを追加するのが一般的です)。
タイムスタンププロトコルは、ニックネーム/チャンネル遅延の代替手段であり、タイムスタンプ付きの優先度を用いて衝突を解決します。ネットワーク上のすべてのニックネームとチャンネルには、作成日時を示すタイムスタンプが割り当てられます。ネットスプリットが発生すると、それぞれの側で2人のユーザーが同じニックネームまたはチャンネルを自由に使用できますが、両サイドが統合されると、生き残れるのはどちらか一方だけです。ニックネームの場合、TSに基づいて新しいユーザーが強制終了されます。チャンネルが衝突すると、メンバー(チャンネル上のユーザー)は統合されますが、スプリットの「負けた」側のチャンネルオペレーターはチャンネルオペレーターのステータスを失います。
TSは、設計と実装の両面でND/CDよりもはるかに複雑なプロトコルであり、幾度かの改訂を経てきたにもかかわらず、一部の実装では依然として「desync」(同一ネットワーク上の2つのサーバーがネットワークの現在の状態について意見が一致しない状態)の問題や、「負けている」側の許容範囲が広すぎるという問題が残っています。例えば、オリジナルのTSプロトコルでは、負けているチャンネルでユーザーがBANやその他のモードを設定し、分割されたチャンネルが再結合した際にそれらのモードが統合されてしまうという問題に対する保護策はありませんでした。これらのモードを設定したユーザーはチャンネルオペレーターの資格を失いましたが。最近の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)。

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