jueves, 29 de octubre de 2009

ETHERCHANNEL

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

* Comandos de control EtherChannel

#show etherchannel X port-channel
#show interface {fastethernet | gigabitethernet} X/X etherchannel
#show etherchannel load-balance

Referencias

[1] http://www.cisco.com/en/US/tech/tk389/tk213/tk484/tsd_technology_support_sub-protocol_home.html

[2] http://www.ieee802.org/3/ad/index.html


viernes, 4 de septiembre de 2009

Network Simulator ns-2

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:

  • autoconf
  • automake
  • gcc-c++
  • libX11-devel
  • xorg-x11-proto-devel
  • libXt-devel
  • libXmu-devel
La última versión de este simulador se puede encontrar en el siguiente link: http://www.isi.edu/nsnam/ns/ns-build.html

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.

#Script: nssimulation.tcl
#Autor: Rodolfo Ledesma
#Licencia: GPLv3

#Programa

#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
}

#Conexiones
for {set j 1} {$j<=$NumbSrc} {incr j} {
$ns attach-agent $S($j) $tcp_src($j)
$ns attach-agent $n1 $tcp_snk($j)
$ns connect $tcp_src($j) $tcp_snk($j)
}

#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
Búsqueda personalizada