viernes, 7 de mayo de 2021

Redes Token Ring

El sistema de redes de área local Token Ring fue lanzado por IBM en 1984 y un año después se estandarizó como IEEE 802.5. Coexistió con Ethernet hasta principios del siglo XXI pero finalmente dejó de usarse. Originalmente tenía una topología mixta estrella/anillo. Los ordenadores se conectaban en estrella a una MAU (Multistation Access Unit) (Unidad de Acceso Multiestación). Dentro de la MAU los ordenadores estaban conectados en anillo. Alrededor del anillo, de ordenador a ordenador, circulaban las tramas de red. Una de estas tramas era el "token", que daba permiso al ordenador que lo poseía para enviar datos. Los primeros equipos permitían velocidades de 4 Mb/s y poco después se amplió hasta 16 Mb/s. Durante los últimos años de utilización de la tecnología se estandarizaron velocidades de 100 Mb/s y 1000 Mb/s pero ya se comercializaron pocos aparatos que las usaran.

En un principio con Ethernet los ordenadores utilizaban un medio común para transmitir los datos. Se conectaban los ordenadores en serie con cable coaxial o se usaban "hubs" que reenviaban los datos recibidos a todos los ordenadores conectados. Al utilizar un medio común se producían colisiones entre paquetes y era necesario utilizar un sistema de detección de colisiones. En Token Ring el anillo de la MAU también funcionaba como un medio común pero no había colisiones ya que solo enviaba datos el ordenador que en aquel momento tenía el "token". Más adelante con la utilización de "switchs", que solo reenvían los datos recibidos a su destinatario, todos los ordenadores pueden enviar y recibir datos a la vez sin problemas de colisiones y sin la necesidad de usar "tokens". Esto hizo que ambos sistemas quedaran muy igualados en su funcionamiento.

Las primeras MAU utilizaban el conector "IBM Data Connector" y cable IBM "Type-1". Este tipo de conector era demasiado alto para usarse en las tarjetas de red de los ordenadores, por eso para este uso se utilizaba un conector DE-9. Después se empezaron a utilizar conectores RJ45 y cable UTP tanto en las MAU como en las tarjetas. En la siguiente foto se puede ver un cable IBM "Type-1" con un "IBM Data Connector" en un extremo y un conector DE-9 en el otro. A su derecha hay un cable UTP con conector RJ45. El conector IBM tiene cuatro contactos, dos para envio de datos y dos para recepción. Del conector DE-9 se utilizan los cuatro conectores de las esquinas y del RJ45 los cuatro conectores centrales. El conector IBM tiene sujeta al cable una tapa protectora para colocarsela cuando no está conectado.

Los conectores IBM tienen a los lados dos pestañas para sujetarse al puerto. Por la parte superior, entre las pestañas y el cuerpo del conector, se puede colocar un seguro que impide que se aprieten las pestañas y se pueda sacar el conector. En la siguiente imagen se ve un seguro colocado en el conector y otro sin colocar a su derecha.

Para hacer pruebas compré una MAU IBM 8228 con conectores IBM y un Madge Smart DeskStream Token Ring Switch con conectores RJ45. Ambos tienen una anchura de 19 pulgadas para alojarlos en un armario. De uno a otro equipo se puede ver la evolución de las MAU a través de los años.

En las siguientes imágenes se puede ver el IBM 8228. En los extremos tiene dos puertos, RI (Ring Input) y RO (Ring Output), para conectar en anillo con otras MAU. Es un equipo pasivo y no necesita alimentación. Solo tiene la electrónica necesaria para unir a los ordenadores conectados. Se aprecia como tiene ocho circuitos para conectar ocho ordenadores.





Un componente importante es el relé, en este equipo el modelo DS4E-SL2-DC1.5v. En una posición conecta con los circuitos anterior y posterior formando el anillo por el que se realizan las comunicaciones. Cuando se conecta un ordenador este energiza el relé haciendo que cambie de posición y le conecte al anillo. De este modo el ordenador pasa a formar parte del anillo y las tramas de red pasarán por el. Cuando se desconecta el ordenador el relé vuelve a su posición inicial y el anillo queda cerrado. Al conectar o desconectar un ordenador se puede oír el ruido del relé al cambiar de posición.

El relé podía quedar en una posición que impidiera el funcionamiento y como el aparato no tiene alimentación era necesario conectar una herramienta de configuración al puerto para energizar el relé y colocarlo en la posición correcta. Probé a conectar un ordenador a todos los puertos y ninguno funcionaba. Seguí las instrucciones para crear la herramienta de configuración y con ella pude hacer funcionar dos de los puertos para conectar dos ordenadores. El resto de circuitos deben tener roto el relé o algún otro componente.

Para los ordenadores compré dos tarjetas Olicom PCI/II 16/4 Adapter OC-3137. Tienen los dos tipos de conectores usados (DE-9 y RJ45) y permiten las velocidades de 4 Mb/s y 16 Mb/s.


Las tarjetas utilizan el chip de comunicaciones Token Ring Texas Instruments TI380C30APGF. Arriba a la izquierda se encuentra el resonador de 8 MHz que utiliza para su frecuencia de funcionamiento. Este chip usa una memoria DRAM Sanyo LC321664BJ-70 de 128 KiB que se encuentra un poco más abajo.


A la derecha se encuentra el chip Olicom 119000026-1106p4 del que no he podido encontrar información. Debe ser un chip creado por el fabricante de la tarjeta para complementar el funcionamiento del chip TI380C30APGF y comunicar con el ordenador a través del bus PCI. El oscilador de 48 MHz que se encuentra a su derecha debe ser el que marque su frecuencia.

Junto al conector DE-9 hay un componente que parece ser un transformador de aislamiento para proteger a la tarjeta y a la red a la que esté conectada de las corrientes anómalas que puedan entrar o salir por las conexiones.

Después de instalar las tarjetas en dos ordenadores las conecté al IBM 8228 con dos cables "Type-1" y conectores "IBM Data Connector" y DE-9.


La empresa Olicom creó un controlador no libre para Linux que distribuía en su web en formato binario. Su web ya no está operativa por lo que no se puede descargar. En FreeBSD se incluía un controlador creado usando los archivos binarios del controlador de Linux. Yo solo conseguí que funcionaran las tarjetas con el controlador de la versión 5.0 de FreeBSD que se puede descargar del archivo de versiones antiguas.

# wget http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/5.0/5.0-RELEASE-i386-disc1.iso

Una vez instalado FreeBSD 5.0 encontraremos el controlador en el módulo del kernel /boot/kernel/if_oltr.ko. Debemos configurar en los dos ordenadores la carga de este modulo al iniciar el sistema en el archivo /boot/loader.conf.

if_oltr_load="YES"

En el archivo /etc/rc.conf es necesario configurar el interfaz de red con su dirección IP y máscara de red. A un ordenador le asigné la dirección 192.168.3.10 y al otro 192.168.3.11. Todos los comandos y ejemplos que se muestran a continuación son en el ordenador con la dirección 192.168.3.11.

ifconfig_oltr0="inet 192.168.3.11 netmask 255.255.255.0"

Si queremos conectar remotamente con SSH desde un ordenador con sistema operativo moderno debemos ejecutar el comando ssh con los sistemas de cifrado antiguos utilizados por el servidor SSH de FreeBSD 5.0.

# ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss -c 3des-cbc -l root 192.168.3.11

Después de configurar el ordenador podemos reiniciar. Es necesario que la tarjeta esté conectada ya que tiene que comunicar con la MAU para su inicialización. Una vez iniciado el sistema podemos ver con el comando dmesg como se ha cargado el módulo y la tarjeta se ha insertado en el anillo (ring insert) a la velocidad de 16 Mb/s y modo TKP (Token Passing Protocol). Como la MAU solo tiene un canal de comunicación, los 16 Mb/s son compartidos por todos los ordenadores conectados para envío y recepción.

# dmesg | grep oltr0

oltr0: <Olicom PCI/II 16/4 Adapter (OC-3137)> port 0xe800-0xe83f irq 10 at device 10.0 on pci0
oltr0: MAC address 00:00:83:24:a6:fb
oltr0: ring insert (16 Mbps - TKP)

El comando kldstat permite ver como el modulo if_oltr.ko se ha cargado. Con ifconfig podemos ver la configuración del interfaz de red y con pciconf información de la tarjeta.

# kldstat

Id Refs Address    Size     Name
 1    4 0xc0100000 52679c   kernel
 2    1 0xc0627000 4a6ac    acpi.ko
 3    1 0xc1b24000 2f000    if_oltr.ko

# ifconfig oltr0

oltr0: flags=43<UP,BROADCAST,RUNNING> mtu 1500
	inet 192.168.3.11 netmask 0xffffff00 broadcast 192.168.3.255
	lladdr .0.83.25.63.da
	media: Token ring UTP/16Mbit

# pciconf -l -v

oltr0@pci0:10:0:  class=0x020100 card=0x00000000 chip=0x0001108d rev=0x03 hdr=0x00
    vendor   = 'Olicom'
    device   = 'OC-3136/37 Token-Ring 16/4 PCI Adapter'
    class    = network
    subclass = token ring

Para poder analizar las comunicaciones podemos instalar algunas aplicaciones de red como nload y tcpdump. Para que nload muestre la velocidad en la mayor unidad posible para facilitar su visualización hay que usar el parámetro -u h. tcpdump solo se encuentra a partir de la versión 7.0 de FreeBSD.

# fetch http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/5.0-RELEASE/packages/net/nload-0.5.0.tbz
# fetch http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/7.0-RELEASE/packages/net/tcpdump-3.9.7.tbz

# pkg_add nload-0.5.0.tbz
# pkg_add tcpdump-3.9.7.tbz

Para probar la comunicación copié un archivo con scp. Al terminar se muestra que el archivo de 469 MiB ha tardado en transferirse 04:35 minutos. 469 MiB = 491782144 bytes = 3934257152 bits = 3934,257 Mb. 04:35 minutos = 275 segundos. 3934,257 Mb / 275 s = 14,306 Mb/s. La velocidad se acerca bastante a los 16 Mb/s de la conexión y hay que tener en cuenta que parte de la velocidad de la conexión se utiliza para los protocolos de comunicación.

# scp archivo-prueba root@192.168.3.10:/tmp

archivo-prueba   100% |*************************|   469 MB   04:35

Mientras se copiaba el archivo estaba ejecutando nload en otra consola para monitorizar el tráfico. Se veía algo extraño, la velocidad oscilaba entre 5,51 Mb/s y 14,64 Mb/s.

Debía estar pasando algo raro, ejecuté dmesg para ver los mensajes del kernel y descubrí que se estaba produciendo un error. La cola de salida del interfaz de red se llenaba, por eso no permitía enviar más datos a veces. El fallo se produce con las dos tarjetas, parece ser un fallo del controlador.

oltr0: tx queue full
oltr0: queue restart

El Madge Smart DeskStream Token Ring Switch tiene 24 puertos RJ45 y su funcionamiento es muy similar a los "switch" Ethernet. En el puerto 24 tiene encendida la luz roja, lo que indica que ese puerto está configurado para conectar a otra MAU. El pulsador rojo de la derecha sirve para restablecer los valores de configuración iniciales. Las tarjetas se conectan con dos cables UTP y conectores RJ45.




En la parte trasera tiene un conector para alimentación igual al de las fuentes de alimentación ATX, un puerto serie al que se puede conectar con un cable "null modem" para configurar el aparato y dos bahías de ampliación.


A las dos bahías de ampliación se accede quitando una placa atornillada. En la bahía "UPLINK" se puede instalar un módulo para conectar con redes Ethernet, ATM, Token Ring por fibra óptica o HSTR (High Speed Token Ring) (Token Ring de Alta Velocidad) a 100 Mb/s. La bahía "STACK" sirve para conectar un módulo que permite unir varios equipos DeskStream.

Con el comando dmesg se puede ver como la tarjeta se inserta en el anillo a la velocidad de 16 Mb/s en modo TXI (Transmit Immediate). El modo TXI permite enviar datos en cualquier momento sin la utilización de "tokens". La comunicación es full-duplex, 16 Mb/s de envío y 16 Mb/s de recepción simultáneos para cada uno de los ordenadores conectados.

# dmesg | grep oltr0 

oltr0: <Olicom PCI/II 16/4 Adapter (OC-3137)> port 0xe800-0xe83f irq 10 at device 10.0 on pci0
oltr0: MAC address 00:00:83:24:a6:fb
oltr0: ring insert (16 Mbps - TXI)

Volví a hacer la prueba de copiar un archivo y tardó 10 segundos menos, por lo que la velocidad es de 3934,257 Mb / 265 s = 14,846 Mb/s.

# scp archivo-prueba root@192.168.3.10:/tmp

archivo-prueba   100% |*************************|   469 MB   04:25

Para probar la comunicación full-duplex copié dos archivos simultáneamente entre los dos ordenadores en las dos direcciones. En uno de ellos la velocidad fue de 3934,257 Mb / 393 s = 10,011 Mb/s. En el otro 3934,257 Mb / 396 s = 9,935 Mb/s. La velocidad conjunta es de 19.946 Mb/s, algo más de los 14,846 Mb/s que se consiguen al copiar un solo archivo en una dirección, pero lejos de los teóricos 32 Mb/s que podría permitir una comunicación full-duplex de 16 Mb/s.

# scp archivo-prueba root@192.168.3.10:/tmp

archivo-prueba   100% |*************************|   469 MB   06:33

# scp archivo-prueba root@192.168.3.11:/tmp

archivo-prueba   100% |*************************|   469 MB   06:36

Monitorizando la comunicación con nload se puede ver como hay picos de hasta 13,17 Mb/s + 11,40 Mb/s = 24.57 Mb/s pero la velocidad sufre muchos altibajos por el problema de cola llena.

Con el comando tcpdump podemos capturar paquetes de la comunicación para luego analizarlos con Wireshark en otro ordenador. En los paquetes se puede ver como hay una cabecera "Token-Ring" con los campos "Access Control" y "Frame Control".

# tcpdump -i oltr0 -w captura.pcap

# wireshark captura.pcap

Frame 15: 106 bytes on wire (848 bits), 96 bytes captured (768 bits)
Token-Ring
    Access Control: 0x10, Frame
        000. .... = Priority: 0
        ...1 .... = Frame: Frame
        .... 0... = Monitor Count: 0
        .... .000 = Priority Reservation: 0
    Frame Control: 0x40, Frame Type: LLC, Frame PCF: Normal buffer
        01.. .... = Frame Type: LLC (1)
        .... 0000 = Frame PCF: Normal buffer (0)
    Destination: TadpoleT_25:63:da (00:00:83:25:63:da)
    Source: TadpoleT_24:a6:fb (00:00:83:24:a6:fb)
    Source Routed: False
Logical-Link Control
Internet Protocol Version 4, Src: 192.168.3.11, Dst: 192.168.3.10
Internet Control Message Protocol

Así fue el funcionamiento y evolución de las redes Token Ring, para seguir leyendo sobre tipos de red antiguos se puede consultar el artículo Redes 10Base2.

No hay comentarios:

Publicar un comentario