ログイン
編集不可のページディスカッション情報添付ファイル
"ytoku/IRC"の差分

MMA
1と14のリビジョン間の差分 (その間の編集: 13回)
2011-04-26 01:58:32時点のリビジョン1
サイズ: 1796
編集者: ytoku
コメント:
2011-04-26 21:40:55時点のリビジョン14
サイズ: 7887
編集者: ytoku
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
#acl ytoku:read,write,delete,revert,admin {{{#!wiki caution
'''書きかけ'''

この記事を書いている人は途中で食事に行ってしまいました。きっと内容が正しいはずはありません。
}}}

<<TableOfContents>>
行 5: 行 12:
参考文献 RFC2810, RFC2811 参考文献 RFC2810, RFC2811, ngircd
行 10: 行 17:
あるサーバに属するクライアントから、別のサーバに属するクライアントへの通信ではサーバ同士でメッセージを交換することによっ複数のサーバを経由して届けます。 クライアントの属するサーバが異なる場合にはサーバ同士でメッセージを交換て複数のサーバを経由して目的のクライアントまで届けます。
行 13: 行 20:
サーバはクライアントにメッセージを選択的に届けるために、どのクライアントがどのサーバにいるかという情報を知らなければなりません。
そこで、どのクライアントがどのサーバにログインしているかという情報がサーバ間で共有されます。
行 14: 行 24:
  TODO
 ラベル::
行 18: 行 30:
サーバAにログインしているクライアントxと、サーバCにログインしているクライアントyの間でメッセージをやりとりするとします。 二つのクライアントが属するサーバが同一であれば、そのサーバが仲介してメッセージを届けます。メッセージは他のサーバには伝わりません。

二つのクライアントが属するサーバが異なる場合には、経路上にあるサーバをいくつか経由して目的のクライアントまでメッセージを届けます。やはり経路上にはないサーバにはメッセージは伝わりません。

例として、サーバAにログインしているクライアントxと、サーバCにログインしているクライアントyの間でメッセージをやりとりするとします。
行 20: 行 36:
行 24: 行 39:

=== 対チャンネル ===
チャンネルに送信されたメッセージは、そのチャンネルに参加しているクライアントにのみ送られます。
そのチャンネルに参加しているユーザがいないサーバに対しては、そのサーバが途中経路になっていない限り送信されません。

== ラベルとグローバル・ステータス・データベース ==
ネットワークに参加しているサーバやクライアントやチャンネルの情報は、サーバローカルなものを除いて基本的には全てのサーバで共有されている必要があります。
それらの情報は独立した名前空間で次の情報を識別子として管理されています。これらはラベルと呼ばれます。
 * サーバ名
 * ニックネーム
 * チャンネル名

また、どのチャンネルにどのクライアントが参加しているかの情報も全てのサーバに保持されます。
すなわち、メッセージを送信する時に、リレーして送信する必要のあるサーバがどれなのかそれぞれのサーバが自分で判断することができます。
/* TODO: チャンネルマスクは? */


== チャンネル ==
=== チャンネル名 ===
チャンネル名にはいくつかの制約があります。
 * '&'か'#'か'+'か'!'で始まる。(チャンネルプレフィックス)
 * 50文字以下
 * スペース' '、ベル文字(0x7)、コンマ','を含まない
なお、後述するようにコロン':'に特別な意味があり、チャンネルマスクのデリミタとして用いられます。

チャンネルプレフィックスは名前の一部であることに注意してください。
チャンネルプレフィックスが異なれば別のチャンネル名として扱われます。

=== チャンネルプレフィックスの意味 ===
チャンネルプレフィックスは次のような意味を持ちます。「チャンネルモード」については後述します。
||<rowclass="header">prefix||説明||
||'#' シャープ||普通のチャンネル||
||'&' アンパサンド||サーバローカル。他のサーバに情報が送られないので、サーバ内部で独立したチャンネルになる。||
||'+' プラス||チャンネルモードをサポートしないチャンネル||
||'!' エクスクラメーション||セーフチャンネル。チャンネル名が重複しないように注意深い手順によって作成される。||

=== チャンネルオペレータ ===
チャンネルオペレータは権限を割り当てられた参加者です。名前の前に@などを付けて表現されます。
チャンネルオペレータのみが行うことの出来るコマンドとして次のようなものがあります。
 * KICK: クライアントをチャンネルから追い出す
 * MODE: チャンネルのモードを変更する

さらに、以下のモードが有効の場合には次のコマンドも制限されます。

モードが+iの場合
 * INVITE: 招待専用チャンネルに他のユーザを招待する
モードが+mの場合
 * PRIVMSG: (クライアントや)チャンネルにメッセージを送る
モードが+tの場合
 * TOPIC: トピックを変更する


=== チャンネルモード ===
主に管理に関わるチャンネルの設定を指します。チャンネルモードはIRC上からMODEコマンドによって変更できるようになっています。
MODEコマンドは一般的にはクライアントからは
{{{
/mode (チャンネル名) +t
}}}
あるいは、チャンネル上で
{{{
/mode +t
}}}
のようにして操作します。+tで有効に-tで無効にします。

チャンネルモードの一部を挙げると次のようなものがあります。詳しくはRFC2811の4. Channel Modesなどをご参照ください。
||<rowclass="header">文字||説明||
||o||+o (ユーザ)のように用いて、ユーザをオペレータにする||
||i||招待によってのみ参加可能||
||n||参加者以外からのメッセージを受け付けない||
||p||参加者以外にチャンネルを隠す||
||s||参加者以外にチャンネルを隠し、情報を取得させない||
||t||トピックの変更をオペレータに限る||


=== トピック ===
トピックには、現在チャンネルで話し合われている内容などを表すための任意の文字列を設定できます。
トピックの変更はTOPICコマンドで行います。TOPICコマンドは一般的にはクライアントから
{{{
/topic (チャンネル名) 新トピック文字列
}}}
あるいは、チャンネル上で
{{{
/topic 新トピック文字列
}}}
のようにして行うことができます。

チャンネルモードが+tの場合は、トピックを変更できるのはチャンネルオペレータに限られます。

=== チャンネルマスク ===

=== チャンネル遅延 ===

書きかけ

この記事を書いている人は途中で食事に行ってしまいました。きっと内容が正しいはずはありません。

構造から見るIRC基礎知識

RFCの概念部分に書かれている内容をかいつまんで解説します。

参考文献 RFC2810, RFC2811, ngircd

ネットワーク構造

IRCはInternet Relay Chatの略であり、その名の通りリレー(バケツリレーですね)によってメッセージを届けるチャットシステムです。 複数のサーバ間でスパニングツリー状のネットワークを構成し、ネットワークにループは存在しません。 クライアントは一つのサーバに接続しておき、サーバを介してメッセージを他のクライアントに届けます。 クライアントの属するサーバが異なる場合には、サーバ同士でメッセージを交換して複数のサーバを経由して目的のクライアントまで届けます。 クライアント同士が直接通信することはありません。

サーバはクライアントにメッセージを選択的に届けるために、どのクライアントがどのサーバにいるかという情報を知らなければなりません。 そこで、どのクライアントがどのサーバにログインしているかという情報がサーバ間で共有されます。

スパニングツリー
  • TODO
ラベル
  • TODO

メッセージの流れ

1対1通信

二つのクライアントが属するサーバが同一であれば、そのサーバが仲介してメッセージを届けます。メッセージは他のサーバには伝わりません。

二つのクライアントが属するサーバが異なる場合には、経路上にあるサーバをいくつか経由して目的のクライアントまでメッセージを届けます。やはり経路上にはないサーバにはメッセージは伝わりません。

例として、サーバAにログインしているクライアントxと、サーバCにログインしているクライアントyの間でメッセージをやりとりするとします。 サーバAはサーバB、さらにサーバBはサーバCとサーバDに接続されているとしましょう。 クライアントxからクライアントyにメッセージを送る場合に、その経路上にはサーバA,B,Cがあります。 よってサーバAからはサーバBに送信され、サーバBからサーバCに送信されることによってクライアントyの元までメッセージが届きます。 経路上にないサーバDにはメッセージが送られません。

対チャンネル

チャンネルに送信されたメッセージは、そのチャンネルに参加しているクライアントにのみ送られます。 そのチャンネルに参加しているユーザがいないサーバに対しては、そのサーバが途中経路になっていない限り送信されません。

ラベルとグローバル・ステータス・データベース

ネットワークに参加しているサーバやクライアントやチャンネルの情報は、サーバローカルなものを除いて基本的には全てのサーバで共有されている必要があります。 それらの情報は独立した名前空間で次の情報を識別子として管理されています。これらはラベルと呼ばれます。

  • サーバ名
  • ニックネーム
  • チャンネル名

また、どのチャンネルにどのクライアントが参加しているかの情報も全てのサーバに保持されます。 すなわち、メッセージを送信する時に、リレーして送信する必要のあるサーバがどれなのかそれぞれのサーバが自分で判断することができます。

チャンネル

チャンネル名

チャンネル名にはいくつかの制約があります。

  • '&'か'#'か'+'か'!'で始まる。(チャンネルプレフィックス)

  • 50文字以下
  • スペース' '、ベル文字(0x7)、コンマ','を含まない

なお、後述するようにコロン':'に特別な意味があり、チャンネルマスクのデリミタとして用いられます。

チャンネルプレフィックスは名前の一部であることに注意してください。 チャンネルプレフィックスが異なれば別のチャンネル名として扱われます。

チャンネルプレフィックスの意味

チャンネルプレフィックスは次のような意味を持ちます。「チャンネルモード」については後述します。

prefix

説明

'#' シャープ

普通のチャンネル

'&' アンパサンド

サーバローカル。他のサーバに情報が送られないので、サーバ内部で独立したチャンネルになる。

'+' プラス

チャンネルモードをサポートしないチャンネル

'!' エクスクラメーション

セーフチャンネル。チャンネル名が重複しないように注意深い手順によって作成される。

チャンネルオペレータ

チャンネルオペレータは権限を割り当てられた参加者です。名前の前に@などを付けて表現されます。 チャンネルオペレータのみが行うことの出来るコマンドとして次のようなものがあります。

  • KICK: クライアントをチャンネルから追い出す
  • MODE: チャンネルのモードを変更する

さらに、以下のモードが有効の場合には次のコマンドも制限されます。

モードが+iの場合

  • INVITE: 招待専用チャンネルに他のユーザを招待する

モードが+mの場合

  • PRIVMSG: (クライアントや)チャンネルにメッセージを送る

モードが+tの場合

  • TOPIC: トピックを変更する

チャンネルモード

主に管理に関わるチャンネルの設定を指します。チャンネルモードはIRC上からMODEコマンドによって変更できるようになっています。 MODEコマンドは一般的にはクライアントからは

/mode (チャンネル名) +t

あるいは、チャンネル上で

/mode +t

のようにして操作します。+tで有効に-tで無効にします。

チャンネルモードの一部を挙げると次のようなものがあります。詳しくはRFC2811の4. Channel Modesなどをご参照ください。

文字

説明

o

+o (ユーザ)のように用いて、ユーザをオペレータにする

i

招待によってのみ参加可能

n

参加者以外からのメッセージを受け付けない

p

参加者以外にチャンネルを隠す

s

参加者以外にチャンネルを隠し、情報を取得させない

t

トピックの変更をオペレータに限る

トピック

トピックには、現在チャンネルで話し合われている内容などを表すための任意の文字列を設定できます。 トピックの変更はTOPICコマンドで行います。TOPICコマンドは一般的にはクライアントから

/topic (チャンネル名) 新トピック文字列

あるいは、チャンネル上で

/topic 新トピック文字列

のようにして行うことができます。

チャンネルモードが+tの場合は、トピックを変更できるのはチャンネルオペレータに限られます。

チャンネルマスク

チャンネル遅延

ytoku/IRC (最終更新日時 2011-05-02 14:58:36 更新者 ytoku)