Autonegociación

Andaba repasando algunos de mis apuntes cuando encontré un tema que aunque parezca básico y elemental puede, en algunos casos, darnos algún quebradero de cabeza, la auto-negociación.

Para que dos dispositivos de red, bien un equipo final (PC o servidor) y un switch o un switch con otro, se comuniquen entre sí ambos deben tener los mismos parámetros del enlace configurados en ambos extremos. Estos parámetros son, la velocidad y el dúplex. La velocidad normalmente viene expresada en mega-bits o giga-bits por segundo , siendo los valores más comunes 100 Mbps y 1000 Mbps (1Gbps) aunque también los hay de 10 Gbps o incluso se habla ya de 100 Gbps. Por otro lado, el dúplex se refiere a cómo fluyen los datos en la interfaz de red. Esto es, se puede enviar o recibir (half dúplex), método similar a aquellos “walkie-talkies” que más de uno hemos tenido de pequeños, en los que hablabas o escuchabas, pero las dos cosas a la vez no podían ser. O por otro lado tenemos el otro caso en el que puedes enviar y recibir a la vez (full dúplex). Por poner otro ejemplo, es lo que vendría a ser un teléfono. Allí puedes hablar y escuchar al mismo tiempo; otra cosa es que te entiendas con el otro, pero por poder, se puede.

Estos parámetros de velocidad y dúplex pueden ser configurados tanto de forma automática, como manual. La forma automática es lo que se denomina auto-negociación, es decir los equipos ya sean PC’s, servidores, switches, routers, etc. “hablan” entre si y acuerdan emplear una velocidad y un dúplex (half o full) concreto. Comenzarán por las velocidades más altas y modos full-dúplex hasta llegar a las más bajas y en modo half-dúplex. La auto-negociación es un mecanismo/protocolo y como tal debe ejecutarse en ambos extremos. Por el contrario otra de las opciones configurarlos manualmente, indicar que el enlace funcione a una velocidad y dúplex concreto.

Uno de los problemas más comunes que pueden darse, es que los extremos no estén configurados de manera igual por algún fallo en el proceso de negociado. Por ejemplo un extremo a 100 Mbps full-duplex y otro a 100 Mbps half-duplex.

Si esto sucede las consecuencias podrán ser desde una pérdida de rendimiento hasta que no haya comunicación en el enlace. En este caso el modo en half-dúplex escuchará el medio y enviará datos si no detecta ninguna señal en la línea Rx (recepción). En cambio si detecta alguna señal mientras envía se producirá una colisión con lo que el envío cesará, esperando un tiempo aleatorio hasta que se pueda reenviar la trama y proseguir con la comunicación. Sin embargo, en el modo full-duplex esto no ocurre ya que una interfaz operando en este modo puede emitir y recibir a la vez con lo que no se producirían colisiones. Por tanto, puesto que el extremo con full dúplex enviará siempre que tenga tráfico, pero en el extremo con half-dúplex la cosa se complicará puesto que al llegarle señales, con más o menos frecuencia, en su línea Rx no podrá enviar hasta que estas no cesen. Cuantas más tramas genere el extremo full-duplex menos posibilidad de envío tendrá el extremo half-dúplex.

Para evitar problemas lo mejor es comprobar que ambos extremos estén configurados de igual manera, o los dos extremos en auto-negociación o en manual. Sin embargo diré que he visto cómo un switch Cisco 3750G-12S y un Firewall Juniper sólo se comunicaban en modo automático y no había manera de que lo hiciesen configurándolos de forma manual; y otro en que algunos servidores con sistema operativo concreto parece que no negocian bien con el switch y hay que configurarlos manualmente.

En los switches Cisco se pueden elegir los dos modos de configuración. Para equipos con IOS, dentro del modo de configuración de cada interfaz con los comandos speed y duplex  indicaremos los valores concretos:

switch(config-if)#speed ?
10    Force 10 Mbps operation
100   Force 100 Mbps operation
auto  Enable AUTO speed configuration

switch(config-if)#duplex ?
auto  Enable AUTO duplex configuration
full  Force full duplex operation
half  Force half-duplex operation

Y si lo que tenemos es CatOS:

Switch> (enable)set port dúplex <modulo/puerto> full|half|auto

Switch> (enable)set port speed <modulo/puerto> 10|100|auto

En cualquier caso son características que deberemos tener en cuenta a la hora de la configuración de equipos o detectar posibles puntos de fallos, especialmente de rendimiento. En fin otra cosa más a tener en cuenta sobre todo si alguien nos compromete un switch al que tenemos servidores conectados y nos cambia los valores…

Bueno, nos vemos en la próxima…

Seguiremos informando…

4 pensamientos en “Autonegociación

Deja un comentario