CommunityChatContattiDoc.UtentiChiSiamoIntroduzioneIRCIntroStoriaGlossarioFAQComandiIRCServicesmIRCeScriptWebChatCercaFAQServereServicesComandiIRCCmdUnreal3.2NickServChanServMemoServOperServGuideVarieAcronimiIRCInstallazioneJVMEmoticonsDCCeFastwebGuidaOPGuidaIRCopRFCeProtocolliRFC1459RFC2810RFC2811RFC2812RFC2813DCCDCC2CTCPPoliciesNetiquetteHelpersOpersSicurezzaFirewallSockseProxyFirewalleProxyTutorialClientsIRCWindowsLinuxMACWebChatmIRC&ScriptmIRCScriptItalianiScriptEsteriAdd-OnSegnalaScriptLoginStaff
RFC e Protocolli - RFC 2810
Network Working Group C. Kalt
Request for Comments: 2810 April 2000
Updates: 1459  
Category: Informational  

Internet Relay Chat: Architettura

Stato di questa memoria

Questo documento fornisce informazioni per la comunità Internet. Esso non specifica uno standard Internet di nessun genere. La distribuzione di questo documento non é soggetta a limitazioni.

Copyright

Copyright (C) The Internet Society (2000). Tutti i diritti riservati.

Sunto

Il protocollo IRC (Internet Relay Chat) viene utilizzato per costituire un sistema di conferenza basata su testo. E’ stato sviluppato nel 1989 quando fu in origine implementato per fara chattare gli utenti di una BBS.

Dalla prima documentazione ufficiale, che risale al Maggio 1993 con l’RFC 1459 [IRC], il protocollo si é evoluto. Questo documento é un aggiornamento che descrive l’architettura dell’attuale protocollo IRC ed il ruolo dei suoi diversi componenti. Altri documenti descrivono in dettaglio il protocollo utilizzato tra i vari componenti qui definiti.

Dalla prima documentazione ufficiale, che risale al Maggio 1993 con l’RFC 1459 [IRC], il protocollo si é evoluto. Questo documento é un aggiornamento che descrive l’architettura dell’attuale protocollo IRC ed il ruolo dei suoi diversi componenti. Altri documenti descrivono in dettaglio il protocollo utilizzato tra i vari componenti qui definiti.

Tavola dei contenuti

Index


1. INTRODUZIONE

Il protocollo IRC (Internet Relay Chat) é stato disegnato, in diversi anni, per costituire un sistema di conferenza basata su testo. Questo documento descrive l’ architettura corrente.

Il protocollo IRC é basato sul modello client-server, e ben si adatta a girare su molte macchine in diverse modalità. Una tipica configurazione prevede un singolo processo (il server) che costituisce un punto di connessione centrale per i clients (a altri servers), che effettua la distribuzione/multiplexing dei messaggi richiesti, e altre funzioni.

Tale modello, che richiede che ciascun server abbia una copia della globale informazione di stato, é anche uno dei maggiori problemi del protocollo, in quanto handicap serio che limita la massima dimensione che una rete può raggiungere. Se le reti esistenti sono state in grado di crescere con passi da gigante il merito va all’industria dell’hardware, che ci ha fornito sistemi sempre piu’ potenti.

Index


2. COMPONENTI

I paragrafi che seguono definiscono i componenti di base del protocollo IRC.

2.1 Servers

Il server costituisce la spina dorsale di IRC in quanto unico componente del protocollo in grado di collegare tra loro tutti gli altri componenti: esso costituisce un punto al quale i clients si possono connettere per dialogare tra loro [IRC-CLIENT], nonché un punto di collegamento per altri servers [IRC-SERVER]. Il server é anche responsabile della fornitura dei servizi di base definiti dal protocollo IRC.

2.2 Clients

Un client é tutto cio’ che si può connettere ad un server, e che non é un server a sua volta. Vi sono due tipi di clients, ciascuno usato per una diversa finalità.

2.2.1 User Clients

Gli user clients (‘clients utente’) sono di solito dei programmi che forniscono un’interfaccia basata su testo, usati per comunicare interattivamente via IRC. A questa particolare categoria di clients ci si riferisce spesso come “users” (utenti).

2.2.2 User Clients

A differenza degli users, i service clients (‘clients di servizi’) non sono concepiti per essere utilizzati a dialogare. Essi hanno un accesso piu’ limitato alle funzioni chat del protocollo, mentre hanno accesso facoltativo a dati maggiormente privati sui servers.

I services sono generalmente automazioni usate per fornire qualche sorta di servizio (non necessariamente relativo all’IRC in sé) agli users. Un esempio può essere un servizio che raccoglie statistiche circa l’origine degli utenti connessi alla rete IRC.

Index


3. ARCHITETTURA

Una rete IRC é definita da un gruppo di servers connessi tra loro. Un singolo server forma la rete IRC piu’ semplice.

La sola configurazione di rete permessa per gli IRC servers é quella della struttura ad albero, ove ciascun server funge da nodo centrale per il resto della rete che vede.

1– –\
                               A          D – – 4
         2 – – /    \        /
                         B – – C 
                        /          \
                        3           E

Servers: A, B, C, D, E                    Clients: 1, 2, 3, 4

        [ Fig. 1. Esempio di piccola rete IRC ]

L’implementazione del protocollo IRC nella comunicazione diretta tra due clients non ha alcun senso. Tutta la comunicazione tra clients passa attraverso il/i server(s).

Index


4. SERVIZI DEL PROTOCOLLO IRC

Questa sezione descrive i servizi offerti dal protocollo IRC. La combinazione di tali servizi consente conferenze in tempo reale (real-time).

4.1 Localizzatore di client

Per potersi scambiare messaggi due clients devono essere in grado di localizzarsi a vicenda.

Una volta collegatosi ad un server un client si registra tramite un’etichetta che viene poi usata da altri servers e clients per sapere dove il client é localizzato.

4.2 Trasmissione del messaggio

L’implementazione del protocollo IRC nella comunicazione diretta tra due clients non ha alcun senso. Tutta la comunicazione tra clients passa attraverso il/i server(s).

4.3 Hosting e amministrazione di un canale

Un canale é un insieme dotato di nome di uno o piu’ utenti, i quali riceveranno tutti i messaggi indirizzati a quel canale. Un canale é caratterizzato dal suo nome e dai membri attuali, nonché da una serie di proprietà che possono essere manipolate dai (alcuni) suoi membri.

I canali costituiscono un metodo affinché un messaggio possa essere inviato a svariati clients. I server, ospitando i canali, forniscono il multiplexing del messaggio. I servers sono anche responsabili della gestione dei canali, tenendo traccia dei membri del canali. L’esatto ruolo dei servers é definito in “Internet Relay Chat: Channel Management” [IRC-CHAN].

Index


5. CONCETTI DI IRC

Questa sezione si occupa di descrivere gli attuali concetti che stanno dietro l’organizzazione del protocollo IRC e come vengono distribuite differenti classi di messaggi.

5.1 Localizzatore di client

La comunicazione su base uno-a-uno è solitamente effettuata da clients, dal momento che la maggior parte del traffico server-server non è il risultato del reciproco dialogo tra essi. Affinchè sia possibile che i clients dialoghino tra loro è RICHIESTO che ogni servers sia in grado di inviare un messaggio in una precisa direzione lungo la struttura ad albero della rete, così da raggiungere qualsiasi client. Il percorso di un messaggio che viene inviato è quello piu’ corto tra i due punti da collegare della struttura ad albero.

Gli esempi che seguono fanno tutti riferimento alla Figura 1 di cui sopra.

Esempio 1:

Un messaggio tra i clients 1 e 2 è visto solamente dal server A, che lo invia direttamente al client 2.
Esempio 2:
Un messaggio tra I clients 1 e 3 è visto dai servers A & B, e il client 3. Nessun altro client o server vede il messaggio.
Esempio 3:
Un messaggio tra I clients 2 e 4 è visto dai servers A, B, C & D, e solamente dal client 4.

Index


5.2 Uno-a-molti

Lo scopo principale di IRC è fornire un forum che consenta conferenze semplici ed efficienti (conversazione uno-a-molti). IRC offre svariati modi per poter far questo, ciascuno dei quali ha un preciso obiettivo.

5.2.1 User Clients

In IRC il canale ha un ruolo equivalente a quello del gruppo multicast; la loro esistenza è dinamica (N.d.T. - viene e va a seconda che gli utenti si uniscano o abbandonino il canale) e la conversazione in corso su un canale DEVE essere inviata solamente ai servers che stanno sostenendo gli utenti sul dato canale. Il messaggio, inoltre, SARA’ inviato solamente una volta a tutti i collegamenti locali così che ciascun server sia responsabile di scompartimentare il messaggio originale per assicurare che esso raggiunga tutti i destinatari.

Gli esempi che seguono fanno tutti riferimento alla Figura 2.

Esempio 4:

Un qualsiasi canale con 1 solo client presente. I messaggi al canale vanno al server e da nessun’altra parte.
Esempio 5:
Due clients su un canale. Tutti i messaggi seguono un percorso come se fossero messaggi privati tra i due clients esterni al canale.
Esempio 6:
Client 1, 2 e 3 su un canale. Tutti i messaggi al canale sono inviati a tutti i clients e solo a quei servers che devono essere attraversati dal messaggio se questo è privato verso un singolo client. Se il client 1 invia un messaggio, questo raggiunge il client 2 e, via server B, al client 3.

5.2.2 Ad uno schema host/server

Per fornire qualche sorta di meccanismo che permetta di inviare messaggi ad un grande numero di utenti, sono previsti messaggi con schema host e server. Tali messaggi vengono spediti a quegli utenti le cui informazioni host o server corrispondono a quelle dello schema. I messaggi vengono trasmessi solamente alle posizioni in cui si trovano gli utenti, in maniera simile al modo usato per i canali.

5.2.3 Ad uno schema host/server

Il metodo meno efficiente di una conversazione uno-a-molti è un client che parla ad una ‘lista’ di destinatari (clients, canali, schemi). Come questo avviene si spiega da solo: il client fornisce una lista di destinazioni alla quale il messaggio dev’essere recapitato ed il server invia copie separate dello stesso a ciascuna destinazione data.

Questo metodo non è efficiente come l’utilizzo di un canale poichè la lista di destinazioni POTREBBE essere spezzata (N.d.T. – dal server per determinare ogni singola destinazione) e il messaggio inviato senza alcun controllo che eviti l’invio di duplicati.

Index


5.3 Uno-a-tutti

Il tipo di messaggio uno-a-tutti è meglio descrivibile come un messaggio broadcast, inviato a tutti i clients o servers o entrambi. In un’estesa rete di clients e servers, un singolo messaggio può produrre un notevole traffico per far si’ che possa raggiungere tutte le destinazioni desiderate.

Per taluni messaggi non vi è altra possibilità che inviarli a tutti i servers in modo che le informazioni di stato di ciascun server siano ragionevolmente coerenti tra loro.

5.3.1 Client-a-Client

Non vi sono tipologie di messaggio per cui un singolo messaggio venga inviato a tutti gli altri client.

5.3.2 Client-a-Server

La maggior parte dei comandi che risultano in uno scambio di informazioni di stato (come membri del canale, modi del canale, stato dell’utente, ecc.) DEVE essere inviata per default a tutti i servers, e tale operazione NON POTRA’ essere modificata dal client.

5.3.3 Server-a-Server

Benchè la maggior parte dei messaggi tra i servers è distribuita a tutti gli ‘altri’ servers, questo è richiesto solamente per quei messaggi che incidono su un utente, un canale od un server. Dal momento che questi sono gli elementi fondamentali di IRC, quasi tutti i messaggi originati da un server vengono inoltrati a tutti gli altri servers connessi.

Index


6. PROBEMI ATTUALI

Vi sono un certo numero di problemi riscontrati con questo protocollo; questa sezione si occupa solamente dei problemi relazionati all’architettura dello stesso.

6.1 Scalabilità

E’ ampiamente riconosciuto che questo protocollo non scala sufficientemente bene se usato in una grande arena. Il problema principale proviene dall’ esigenza che tutti i servers conoscano di tutti gli altri servers, utenti e canali e che le informazioni loro riguardanti siano aggiornate non appena sono modificate.

6.2 Affidabilità

Dal momento che l’ unica configurazione di rete ammessa è la struttura ad albero, ciascun collegamento tra due servers è un punto di guasto ovvio e piuttosto serio. Questa particolare problematica è richiamata con maggior dettaglio in “Internet Relay Chat: Server Protocol” [IRC-SERVER].

6.3 Intasamento di rete

Un altro problema che si allaccia alla scalabilità e all’ affidabilità, così come all’ architettura ad albero, riguarda il fatto che il protocollo e l’ architettura di IRC sono estremamente vulnerabili da instasamenti di rete. Questo problema è endemico, e dovrebbe essere risolto per la prossima generazione: se il sovraccarico e l’ alto volume di traffico causa un intoppo del collegamento tra due servers non solo genera un incremento di traffico, ma causa inoltre che la riconnessione (eventualmente altrove) dei due servers generi a sua volta ulteriore traffico.
Nel tentativo di minimizzare l’impatto di queste problematiche è fortemente RACCOMANDATO che i servers non tentino automaticamente di riconnettersi troppo in fretta, così da evitare l’ aggravamento della situazione.

6.4 Privacy

Oltre al fatto che non scalino bene, il fatto che i servers necessitino di conoscere tutte le informazioni delle altre entità, anche il problema della privacy è una faccenda complicata. Questo è particolarmente vero per i canali, poichè le informazioni relative sono maggiormente rilevabili rispetto a se un utente è online o meno.

Index


7. CONSIDERAZIONI SULLA SICUREZZA

Oltre alla questione privacy menzionata nella sezione 6.4 (Privacy), la sicurezza è ritenuta irrilevante per questo documento.

Index


8. Attuale supporto e disponibilita’

Mailing lists per discussioni relative ad IRC:
General discussion: ircd-users@irc.org
Protocol development: ircd-dev@irc.org

Implementazioni software:
ftp://ftp.irc.org/irc/server
ftp://ftp.funet.fi/pub/unix/irc
ftp://coombs.anu.edu.au/pub/irc

Index


9. RINGRAZIAMENTI

Parti di questo documento sono state copiate dall’ RFC 1459 [IRC] che per prima ha formalmente documentato il protocollo IRC. Si è inoltre beneficiato di numerose analisi e commenti. In particolare, le persone di seguito elencate hanno dato a questo documento un contributo significativo:

Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa Ruokonen, Magnus Tjernstrom, Stefan Zehl.

Index


10. RIFERIMENTI

[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[IRC] Oikarinen, J. and D. Reed, "Internet Relay Chat Protocol", RFC 1459, May 1993.

[IRC-CLIENT] Kalt, C., "Internet Relay Chat: Client Protocol", RFC 2812, April 2000.

[IRC-SERVER] Kalt, C., "Internet Relay Chat: Server Protocol", RFC 2813, April 2000.

[IRC-CHAN] Kalt, C., "Internet Relay Chat: Channel Management", RFC 2811, April 2000.


Articolo a cura di :
Roberto "Rob" Timmoneri rob@ircitaly.net
(Traduzione dell'RFC 1459 in lingua originale)
Ultima revisione: 25 Febbraio 2004

E' possibile copiare e diffondere, integralmente o parzialmente, gli articoli solo citando la fonte www.irchelp.it e i rispettivi autori.
IRCHelp.it e IRCItaly.net sono prodotti registrati da WWWorld S.r.l. P.IVA 02207191202 per correzioni, suggerimenti, contatti: info@ircitaly.net