Cisco EtherChannel® construye su tecnología en base a estándares 802.3 full-duplex de Fast Ethernet. EtherChannel agrupa varios enlaces Ethernet en un único enlace lógico, proveyendo así más ancho de banda de hasta 16 veces la capacidad máxima del enlace (full-duplex). Por ejemplo, agrupando enlaces Fast Ethernet de 100 Mbps cada uno, pudiéndose agrupar hasta 8 enlaces, se puede lograr una capacidad de hasta 1600 Mbps en full-duplex. Esta tecnología aplica tanto para Fast EthernetChannel (FEC) o Gigabit EtherChannel (GEC). Las características más resaltantes que se puede lograr con esta tecnología son:
Incremento de ancho de banda.
Convergencia rápida con tolerancia a fallas.
Balanceo de cargas.
Configuración de EtherChannel
EtherChannel maneja dos protocolos:
Port Aggregation Control Protocol (PAgP, propietario de Cisco) [1].
Link Aggregation Conrol Protocol (LACP, IEEE 802.3ad) [2].
Los protocolos ya mencionados son incompatibles.
Los modos de configuración son:
on: en este modo, un EtherChannel útil existe si dos grupos de puertos en modo on están conectados entre sí. En este modo no existe tráfico de negociación. auto: modo PAgP que coloca un puerto en estado de negociación pasiva, sólo responde a los paquetes PAgP. desirable: modo PAgP que coloca un puerto es estado de negociación activa, es decir, el puerto inicia el envío de paquetes PAgP a otros puertos LAN. pasive: modo LACP que pone a un puerto en modo pasivo de negociación, sólo recibe paquetes LACP. active: modo LACP que coloca a un puerto en modo activo de negociación.
Ejemplos:
1) Tenemos dos switches, SW1 y SW2, de la misma marca (Cisco), cuyas interfases Fast Ethernet 0/1 y 0/2 de cada switch serán configurados como EtherChannels en modo trunk, dentro de la VLAN 99 (para esto, los puertos 0/1 y 0/2 deben estar en la VLAN 99).
SW1#config t SW1(config)#int range fast 0/1 – 2 SW1(config-if)#no switchport mode access SW1(config-if)#switchport mode trunk SW1(config-if)#switchport trunk native vlan 99 SW1(config-if)#channel-group 2 mode active // El rango de número asignado a un grupo EtherChannel es de 1 – 64 SW1(config-if)#end
SW2#config t SW2(config)#int range fast 0/1 – 2 SW2(config-if)#no switchport mode access SW2(config-if)#switchport mode trunk SW2(config-if)#switchport trunk native vlan 99 SW2(config-if)#channel-group 2 mode pasive SW2(config-if)#end
* Nota: En caso los puertos se encuentren en la VLAN nativa por defecto (VLAN 1), se pueden omitir las líneas de color negro.
2) Configuraremos un switch SW3 para crear un EtherChannel PAgP y asociarlo a la VLAN 5. Tomarenos cuatro interfases Gigabit Ethernet, 0/1 al 0/4.
SW3#config t SW3(config)#interface range gigabitethernet 0/1 – 4 SW3(config-if)#switchport mode access SW3(config-if)#switchport access vlan 5 SW3(config-if)#channel-group 3 mode desirable SW3(config-if)#end
3) Ahora realizaremos una configuración de Capa 3 para el switch SW3 del ejemplo anterior, asignándole una dirección IP.
SW3#config t SW3(config)#interface port-channel 3 SW3(config-if)#no switchport //Este comando funciona para switches multicapas, el cual es para entrar a configuración de Capa 3 SW3(config-if)#ip address 192.168.20.10 255.255.255.0 SW3(config-if)#end
4) Ahora, si ya tenemos un EtherChannel, conformado por Fast Ethernets, ya configurado en el switch SW4 y queremos agregar una interfase más a ese puerto, debemos configurarlo de la siguiente manera:
SW4#config t SW4(config)#interface range fast 0/6 – 7 SW4(config-if)#no ip address SW4(config-if)#channel-group 4 mode desirable SW4(config-if)#end
5) Para configurar un switch con EtherChannel y agregarle balanceo de cargas, basta con seguir las siguientes líneas:
SW5#config t SW5(config)#port –channel load-balance {dst-mac | src-mac} // balanceo por MAC address destino u origen, respectivamente. Por defecto src-mac SW5(config)#end
Esta poderosa herramienta open source para simular redes desde cableadas hasta inalámbricas (local y satelital) permite estudiar y simular protocolos TCP y analizar diferentes topologías. El ns-2 está escrito en C++ y utiliza el lenguaje Tcl/OTcl como interfase de comando y configuración. Los programas o scripts escritos en lenguaje Tcl/OTcl describen la topología de red, los parámetros y los eventos a simular. Para su instalación en cualquier distro de GNU/Linux, y así evitar problemas durante la instalación, se deben tener todos estos paquetes instalados:
Adjunto un script para que puedan probar el simulador. El lenguaje OTcl es intuitivo, si se tienen conocimientos de programación. La topologia del scritp 'nssimulation.tcl' tiene 5 fuentes TCP CUBIC sobre un enlace de cuello de botella.
#Crear la instancia del simulador set ns [new Simulator]
#Definir las variables y archivos de salida set tf [open output.tr w] set window(1) [open win1 w] set window(2) [open win2 w] set window(3) [open win3 w] set window(4) [open win4 w] set window(5) [open win5 w] set param [open parameters w]
#Orden para trazar todos los eventos de la simulación $ns trace-all $tf
#Tres archivos de análisis del enlace #qsize, qlost [paquetes], qbw [Kbps], VS tiempo set qsize [open queuesize.tr w] set qbw [open queuebw.tr w] set qlost [open queuelost.tr w]
#Definir un proceso de finalización 'finish' proc finish {} { global ns tf qsize qbw qlost $ns flush-trace close $qsize close $qbw close $qlost close $tf exit 0 }
#Crear un cuello de botella y nodos de destino #y el enlace entre ellos set n0 [$ns node] set n1 [$ns node] $ns duplex-link $n0 $n1 2Mb 10ms DropTail
#Configurar número de flujos y duración de la simulación set NumbSrc 5 set Duration 150
#Nodos fuentes for {set j 1} {$j<=$NumbSrc} {incr j} { set S($j) [$ns node] }
#Definir 2 parámetros para cada conexión #Inicio de transmisión y el retardo de propagación
set startT(1) 1 set startT(2) 2 set startT(3) 3 set startT(4) 2 set startT(5) 5
set dly(1) 0 set dly(2) 40 set dly(3) 40 set dly(4) 90 set dly(5) 90
#Asignación de parámetros a cada nodo fuente for {set i 1} {$i<=$NumbSrc} {incr i} { puts $param "dly($i) $dly($i) ms" puts $param "startT($i) $startT($i) seg" }
#Enlace entre fuente y cuello de botella for {set j 1} {$j<=$NumbSrc} {incr j} { $ns duplex-link $S($j) $n0 100Mb $dly($j)ms DropTail $ns queue-limit $S($j) $n0 300 }
#Tamaño de cola n0-n1 $ns queue-limit $n0 $n1 150
#Fuentes TCP for {set j 1} {$j<=$NumbSrc} {incr j} { set tcp_src($j) [new Agent/TCP/Linux] $tcp_src($j) set timestamps_ true $tcp_src($j) set window_ 100000 $ns at 0 "$tcp_src($j) select_ca cubic" }
#Destinos TCP for {set j 1} {$j<=$NumbSrc} {incr j} { set tcp_snk($j) [new Agent/TCPSink/Sack1] $tcp_snk($j) set ts_echo_rfc1323_ true }
#Fuentes FTP for {set j 1} {$j<=$NumbSrc} {incr j} { set ftp($j) [$tcp_src($j) attach-source FTP] }
#Definir tamaño de paquetes de las fuentes TCP for {set j 1} {$j<=$NumbSrc} {incr j} { $tcp_src($j) set packetSize_ 1040 }
#Cronograma de eventos para los agentes FTP for {set i 1} {$i<=$NumbSrc} {incr i} { $ns at $startT($i) "$ftp($i) start" $ns at $Duration "$ftp($i) stop" }
#Proceso de salida del tamaño de ventana proc plotWindow {tcpSource file k} { global ns set time 0.005 set now [$ns now] set cwnd [$tcpSource set cwnd_] puts $file "$now $cwnd" $ns at [expr $now+$time] "plotWindow $tcpSource $file $k"}
#Guardar salidas de tamaño de ventana en winX for {set j 1} {$j<=$NumbSrc} {incr j} { $ns at 0.1 "plotWindow $tcp_src($j) $window($j) $j" }
#Muestrear la cola del cuello de botella a 100 Hz. #y guardarlo en qm.tr set qmon [$ns monitor-queue $n0 $n1 [open qm.tr w] 0.01] [$ns link $n0 $n1] queue-sample-timeout; proc record {} { global ns qmon qsize qbw qlost n0 n1 set time 0.01 set now [$ns now] $qmon instvar parrivals_ pdepartures_ bdrops_ bdepartures_ pdrops_ puts $qsize "$now [expr $parrivals_-$pdepartures_-$pdrops_]" puts $qbw "$now [expr $bdepartures_*8/1024/$time]" set bdepartures_ 0 puts $qlost "$now [expr $pdrops_/$time]" $ns at [expr $now+$time] "record" }
#Orden de inicio y finalización de eventos $ns at 0.0 "record" $ns at [expr $Duration] "finish" $ns run