|
Autor:
Roman Soft (home page) - 19/09/2003
|
|
|
El
servidor de IRC propiamente dicho
no es más que un programa
corriendo en background (un
daemon) en una máquina
determinada (en Unix correría el
"ircd"). Los usuarios
se conectan a dicha máquina y
acceden al servidor en forma de
clientes.
Una
red IRC se compone de varios
servidores corriendo en paralelo
y enlazados entre ellos, de forma
que se mantegan comunicados (puedan
intercambiar mensajes entre ellos).
Cuando un usuario se conecta a un
servidor determinado, éste (el
servidor) lo notifica a los demás
servidores que forman parte de la
red IRC. Igualmente, cualquier
otra acción es notificada a
todos los servidores, de forma
que éstos actuan como una unidad.
De esta forma el usuario se deja
ver en todos los servidores
aunque físicamente sólo esté
conectado a uno. Esto permite
tener muchos usuarios repartidos
por diferentes servidores pero
que virtualmente es como si
estuvieran todos en uno sólo.
La
estructura de la red IRC es en
forma de árbol (es decir, no
puede haber bucles, o "caminos
cerrados": partiendo de un
nodo no se llegue por ningún
camino otra vez a dicho nodo)
aunque un tanto especial: cada
nodo se ve a sí mismo como el
nodo raiz de la red y tiene un
grafo en forma de árbol que le
indica el camino a seguir para
alcanzar cada uno de los
restantes nodos. En la "literatura"
esto se conoce como "spanning
tree", que podríamos
traducir como "árbol de
expansión". Esto quiere
decir que en un momento
determinado un nodo cualquiera
tendrá almacenada información
para alcanzar cada uno de los
otros nodos de forma unívoca (tiene
un único camino posible hacia
cada nodo). Esa información sería
el árbol que está usando el
nodo en cuestión. Pero además
este árbol puede ser distinto
para el mismo nodo en un instante
diferente, es decir, puede
cambiar (digamos que el nodo va
reconfigurándose). Esto tiene la
ventaja de que permite adaptarse
a posibles variaciones (eventuales)
de la topología de la red (así,
si un nodo cae, los restantes
nodos lo detectarán y se
reconfigurarán de forma que los
caminos que antes pasaban por
dicho nodo dejen de hacerlo: se
tomarían caminos alternativos
con lo cual la red seguiría
funcionando correctamente a pesar
de la caida del nodo).
Un
ejemplo de topología de red podría
ser:
[ Server 15 ] [ Server 13 ]
[ Server 14]
/
\
/
/
\
/
[ Server 11 ] ------ [ Server 1 ]
[ Server 12]
/
\ /
/
\ /
[ Server 2 ]
[ Server 3 ]
/
\
\
/
\
\
[ Server 4 ] [
Server 5 ]
[ Server 6 ]
/ |
\
/
/ |
\
/
/ |
\____
/
/
|
\
/
[ Server 7 ] [ Server 8
] [ Server 9 ] [
Server 10 ]
:
[ etc. ]
:
El
paso de un nodo a otro adyacente
se conoce como "hop" (salto).
Así para alcanzar el nodo 5
partiendo de 4 tendremos que dar
2 saltos (hops): uno de 4 a 2 y
otro de 2 a 5.
Podemos
visualizar el árbol que está
usando el server al que estamos
conectados usando el comando
"/links". Este sacará
un listado por pantalla de los
servidores alcanzables desde el
nuestro, de forma jerarquizada,
es decir, respetando la
estructura del árbol.
Normalmente se indica entre paréntesis
al lado de cada servidor el número
de hops que habría que dar para
alcanzar cada uno de los nodos
partiendo del nuestro.
Cuando
se rompe uno de los eslabones (links)
que unen 2 servidores el conjunto
se divide en 2 subconjuntos, los
cuales intentarán seguir
funcionando normalmente aunque de
forma aislada. Esto es, cada
subconjunto permanece operativo y
mantiene la comunicación entre
los servers pertenecientes a
dicho subconjunto. Pero por
razones obvias los servidores de
un subconjunto no ven a los del
otro y viceversa. Esta situación
se conoce como net-split.
En
una sesión normal de IRC esto lo
veríamos:
[1:23] ***
Case_Zer0 has quit IRC (fuego.irc-hispano.org
io.irc-hispano.org)
Esto
indica que se han spliteado los
dos servidores indicados entre
paréntesis y que a consecuencia
de ello el usuario Case_Zer0
[ hi Case ;-) ] ha salido
"de nuestra red IRC" (lo
que está ocurriendo es que se
encuentra en el otro subconjunto
de servidores: a todos los
efectos es que como si se
encontrase ya en otra red IRC).
Cuando
el enlace caido se recupera (i.e.
se reestablece la comunicación
entre los servers spliteados) se
habla de net-merge. Esto se vería
en la sesión anterior como un
"join" por parte del
usuario que estaba en el servidor
spliteado (tanto el quit como el
join anteriores son mecanismos
del propio IRC, es decir, el
usuario anterior no dio ninguna
orden de quit ni de join, es
transparente a dicho usuario).
Hay
programas que detectan y avisan
cuando se produce algún net-split
o net-merge: son los denominados
"link-lookers", y su
utilidad es bastante obvia.
Por
ejemplo, si el enlace dibujado en
rojo (enlace server 2 <->
server 5) cayera, el servidor 5
estaría aislado de la red. Los
usuarios de dicho servidor dejarían
de ver a todos los demás
pertenecientes a servidores
distintos, y al contrario. Se
dice que el servidor 5 está
spliteado. Es fácil reconocer a
un servidor en esta situación:
si entras en una red a través de
un determinado servidor y te
encuentras a muy poca gente es
muy normal que se deba a que está
spliteado de la red.
Otra
posibilidad es que el enlace azul
(3 <-> 12) cayera. En este
caso el servidor 12 se splitea de
la red, pero también lo hacen
los servidores 13 y 14
indirectamente, por conectarse a
través del primero.