サイズ: 1796
コメント:
|
サイズ: 4345
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 10: | 行 10: |
あるサーバに属するクライアントから、別のサーバに属するクライアントへの通信ではサーバ同士でメッセージを交換することによって、複数のサーバを経由して届けます。 | クライアントの属するサーバが異なる場合には、サーバ同士でメッセージを交換して複数のサーバを経由して目的のクライアントまで届けます。 |
行 13: | 行 13: |
サーバはクライアントにメッセージを選択的に届けるために、どのクライアントがどのサーバにいるかという情報を知らなければなりません。 そこで、クライアントの情報はラベルと呼ばれる機能で管理され、サーバ間で共有されます。 /* TODO: 要確認 */ |
|
行 14: | 行 18: |
TODO ラベル:: |
|
行 18: | 行 24: |
サーバAにログインしているクライアントxと、サーバCにログインしているクライアントyの間でメッセージをやりとりするとします。 | 二つのクライアントが属するサーバが同一であれば、そのサーバが仲介してメッセージを届けます。メッセージは他のサーバには伝わりません。 二つのクライアントが属するサーバが異なる場合には、経路上にあるサーバをいくつか経由して目的のクライアントまでメッセージを届けます。やはり経路上にはないサーバにはメッセージは伝わりません。 例として、サーバAにログインしているクライアントxと、サーバCにログインしているクライアントyの間でメッセージをやりとりするとします。 |
行 20: | 行 30: |
行 24: | 行 33: |
=== 対チャンネル === チャンネルに送信されたメッセージは、そのチャンネルに参加しているクライアントにのみ送られます。 そのチャンネルに参加しているユーザがいないサーバに対しては、そのサーバが途中経路になっていない限り送信されません。 == チャンネル == === チャンネル名 === チャンネル名にはいくつかの制約があります。 * '&'か'#'か'+'か'!'で始まる。(チャンネルプレフィックス) * 50文字以下 * スペース' '、ベル文字(0x7)、コンマ','を含まない なお、後述するようにコロン':'に特別な意味があり、チャンネルマスクのデリミタとして用いられます。 チャンネルプレフィックスは名前の一部であることに注意してください。 チャンネルプレフィックスが異なれば別のチャンネル名として扱われます。 === チャンネルプレフィックスの意味 === チャンネルプレフィックスは次のような意味を持ちます。「チャンネルモード」と「セーフチャンネル」については後述します。 ||<rowclass="header">prefix||説明|| ||'#' シャープ||普通のチャンネル|| ||'&' アンパサンド||サーバローカル。他のサーバに情報が送られないので、サーバ内部で独立したチャンネルになる。|| ||'+' プラス||チャンネルモードをサポートしないチャンネル|| ||'!' エクスクラメーション||セーフチャンネル|| === チャンネルモード === === セーフチャンネル === === チャンネルマスク === |
構造から見るIRC基礎知識
RFCの概念部分に書かれている内容をかいつまんで解説します。
参考文献 RFC2810, RFC2811
ネットワーク構造
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 |
説明 |
'#' シャープ |
普通のチャンネル |
'&' アンパサンド |
サーバローカル。他のサーバに情報が送られないので、サーバ内部で独立したチャンネルになる。 |
'+' プラス |
チャンネルモードをサポートしないチャンネル |
'!' エクスクラメーション |
セーフチャンネル |
チャンネルモード
セーフチャンネル