Sunday, February 26, 2012

DUPLEX e SPEED em Switch Cisco

Em um artigo anterior falamos sobre as funções dos LEDs de um switch Cisco. É de extrema importância conhecermos bem suas funções,principalmente para quem precisa dar manutenção onsite em um CPD.

     Hoje vamos falar de algo ainda mais interessante e tão importante quanto : SPEED e DUPLEX. Funções inclusive mostradas pelos LEDs,como aprendemos antes: STAT,UTIL,DUPLX e PEED.

  Mas enfim, em que situação essas funções são de fato relevantes?

A resposta é: em muias. Para quem trabalha com suporte de rede, provavelmente já ouviu reclamações do tipo Internet lenta, transmissão de arquivos na rede local  lenta, problemas ao mapear pastas na rede e muitas outras. Muitas dessas reclamações pode estar relacionado a algum link entre switches, ou entre switches e  servidores e até mesmo entre switches e PCs, enfrentando problemas com SPEED e DUPLEX.

  Antes de iniciarmos explicações sobre o problema em si, vamos falar o que afinal essas duas palavras significam. SPEED, basta apenas fazer a traduçao,ou seja, significa a velocidade de um dado segmento de rede. As velocidades conhecidas hoje vão de 10 Mbps até 10 GBps. Outras velocidades existem,porem, vamos trabalhar dentro desse universo porque é o que encontraremos com mais probabilidade.

   DUPLEX já possui uma designação um pouco mais complexa. Ele se refere a forma de transmissão dentro de uma dada velocidade. DUPLEX pode ser HALF ou FULL DUPLEX. Vamos explicar cada um.

 A Ethernet é de origem uma rede Half Duplex. Ou seja, em um segmento de rede, apenas um dispositivo pode transmitir a cada vez.A transmissão realizada por dois dispositivos ao mesmo tempo acasiona a Colisão,ou seja, todos os dados se perdem.

 Para evitar a Colisão,foi desenvolvido o algoritmo CSMA/CD. A partir daí, os dispositivos deviam "Ouvir" o meio antes de colocar seu quadro Ethernet. Caso o meio estivesse livre, o dispositivo poderia transmitir seu quadro ethernet tranquilamente. Caso o meio estivesse ocupado, o dispositivo deveria esperar um tempo e após esse tempo, novamente ouviria o meio para certificar-se de que estaria  livre.

  Caso dois dispositivos ouvissem o meio ao mesmo tempo e ambos percebessem que o meio estava livre,ambos transmitiriam seus quadros e uma colisão fatalmente ocorreria. Nesse caso, o dispositivo que percebesse a Colisao,enviaria um sinal chamado de JAM signal e todos os dispositivos do segmento parariam de transmitir. Ambos os dispositivos disparariam um temporizador chamado de Back off aleatório e a medida que esse temporizador terminasse, todo o processo se repetia,ou seja, o dispositivo ouviria o meio para ver se o mesmo estava livre e daí por diante.

      Essa forma de comunicação supria muito bem as redes mais antigas onde eram utilizado HUBs como  equipamento concentrador,ou seja, a rede era realmente compartilhada. Com o advento do switch, cada dispositivo passou a ter um domínio de colisão, não precisando mais compartilhar o meio.

  Isso possibilitou um avanço nas redes Ethernet que hoje já atinge velocidades de 100 Giga. Entretanto, mesmo cada porta do switch sendo um único domínio de colisão, ainda é possível que ocorra colisão entre os dois dispositivos que eventualmente venha a se comunicar. Dessa forma, continua havendo a necessidade de haver mecenismos de controle para o envio e recebimento de quadros no segmento de rede.

  Porém, com o as velocidades atuais, o mecanismo HALF DUPLEX não atenderia, devido o desperdício de tempo que essa forma de transmissão impõe.

   Diante dessa demanda, o IEEE definiu o padrão 802.3x.

Esse padrão introduz a  forma de comunicaçao Full Duplex. Agora, dispositos de rede podem enviar e receber ao mesmo tempo em um segmento. O algoritmo CSMA/CD não é mais necessário  e existe uma comunicação ponto-a-ponto entre ambos os dispositivos.

   A bem da verdade, Ethernet passou a utilizar um mecanismo de controle de fluxo. Uma subcamada MAC controll foi introduzida na camada de enlace do modelo OSI e uma endereço MAC especial  01-80-C2-00-00-01 foi definido. Um dispositivo pode transmitir até que receba esse endereço MAC, a partir daí ele deve esperar.

    Essas evoluções estão  transformando redes Ethernet em redes WAN. A colisão sempre foi um fator limitante no que se refere a distância de transmissão. A medida que mecanismos para evitar colisões vão sendo desenvolvidos, distâncias maiores vão sendo alcançadas.

     Bem, posto isso, vamos ver um pouco de todos esses conceitos na prática.
    Vou usar novamente o GNS3 para mostrar como todo esse conceito se apresenta em um switch real. infelizmente não é possível simular situações de erros de SPEED e DUPLEX, mas é possível pelo menos visualizar como eles aparecem e como podem serem alterados.
    Nossa topologia é bem simples, apenas dois switches e dois PCs. Três domínios de colisão, um domínio de broadcast.



Primeiro vamos mostrar como estão as interfaces do switch 1:
switch1#sh int status


Port    Name               Status       Vlan       Duplex Speed Type
Fa0/0   2-PC               connected    1          a-full   a-100 unknown
Fa0/1                      notconnect   1            auto    auto unknown
Fa0/2                      disabled     1            auto    auto unknown
Fa0/3                      disabled     1            auto    auto unknown
Fa0/4                      disabled     1            auto    auto unknown
Fa0/5                      disabled     1            auto    auto unknown
Fa0/6                      disabled     1            auto    auto unknown
Fa0/7                      disabled     1            auto    auto unknown
Fa0/8                      disabled     1            auto    auto unknown
Fa0/9                      disabled     1            auto    auto unknown
Fa0/10                     disabled     1            auto    auto unknown
Fa0/11                     disabled     1            auto    auto unknown
Fa0/12                     disabled     1            auto    auto unknown
Fa0/13                     disabled     1            auto    auto unknown
Fa0/14                     disabled     1            auto    auto unknown
Fa0/15  2-switch           connected    1          a-full   a-100 unknown

Agora do switch 2:

switch2#sh int status


Port    Name               Status       Vlan       Duplex Speed Type
Fa0/0   2-PC               connected    1          a-full   a-100 unknown
Fa0/1                      notconnect   1            auto    auto unknown
Fa0/2                      disabled     1            auto    auto unknown
Fa0/3                      disabled     1            auto    auto unknown
Fa0/4                      disabled     1            auto    auto unknown
Fa0/5                      disabled     1            auto    auto unknown
Fa0/6                      disabled     1            auto    auto unknown
Fa0/7                      disabled     1            auto    auto unknown
Fa0/8                      disabled     1            auto    auto unknown
Fa0/9                      disabled     1            auto    auto unknown
Fa0/10                     disabled     1            auto    auto unknown
Fa0/11                     disabled     1            auto    auto unknown
Fa0/12                     disabled     1            auto    auto unknown
Fa0/13                     disabled     1            auto    auto unknown
Fa0/14                     disabled     1            auto    auto unknown
Fa0/15  2-switch           connected    1          a-full   a-100

Vamos considerar a seguinte linha:
Port    Name               Status       Vlan       Duplex Speed Type

   Temos primeiro a identificação de cada porta, depois temos o parâmetro Name, que pode ser configurado com o comando  Description em mode de configuração de interface:
switch1(config-if)#description  2-PC

   Em seguida vem o parâmetro Status. Intensionalemente, temos três tipo de Status em nosssas interfaces:
connected  
notconnect 
disabled   


Connected :

 Significa que o switch reconhece um dispositivo conectado nessa interfaces, muito provavelmente o LED dessa interface estará verde e se comportando segundo algumas características do switch como piscando ou aceso contínuo.
  
notconnect  :
   Não há ou o switch não reconhece um dispositivo conectado nessa porta. A porta está, entretando, habilitada. Essa porta pode estar vaga, pode haver um problema no cabo que se conecta ao dispositivo ou o dispositivo pode estar desligado.

disabled:
    Nesse caso a porta está desabilitada.  ou seja, foi dado o comando "shutdown" na interface.

     Seguido do parametro status,temos o parâmetro Vlan.
nesse caso, todas as portas estão na Vlan 1, que é a VLAN nativa do switch.

  Uma outra abordagem que temos em relação as interfaces, é mostrá-las em termos de UP/DOWN, usando o comando abaixo:

Router#sh ip interface brief
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            unassigned      YES unset  up                    up
FastEthernet0/1            unassigned      YES unset  up                    down
FastEthernet0/2            unassigned      YES unset  administratively down down
FastEthernet0/3            unassigned      YES unset  administratively down down
FastEthernet0/4            unassigned      YES unset  administratively down down
FastEthernet0/5            unassigned      YES unset  administratively down down
FastEthernet0/6            unassigned      YES unset  administratively down down
FastEthernet0/7            unassigned      YES unset  administratively down down
FastEthernet0/8            unassigned      YES unset  administratively down down
FastEthernet0/9            unassigned      YES unset  administratively down down
FastEthernet0/10           unassigned      YES unset  administratively down down
FastEthernet0/11           unassigned      YES unset  administratively down down
FastEthernet0/12           unassigned      YES unset  administratively down down
FastEthernet0/13           unassigned      YES unset  administratively down down
FastEthernet0/14           unassigned      YES unset  administratively down down
FastEthernet0/15           unassigned      YES unset  up                    up
Vlan1                      unassigned      YES unset  administratively down down
 

podemos observar que interfaces cujo status seja "connected", apresetam o status UP/UP. Interfaces cujo status seja "Not Connected", apresenta o status UP/DOWN e, pot último, temos as interfaces cujo status é "Disabled",cujo status é "administratively down".

    Agora vamos focar nos parâmetros que mais nos interessa:

 Duplex  e Speed
Temos o Duplex em dois  status: a-full e auto.
Quanto ao Speed, temos todas em 100. Mas podemos passar para 10 M.

switch1(config)#int Fa0/0
switch1(config-if)#speed 10
switch1#sh int Fa0/0 status

Port    Name               Status       Vlan       Duplex Speed Type
Fa0/0   2-PC               connected    1            auto      10 unknown
 
  Obviamente, isso não é recomendado, mas existem casos em que é preciso. Recentemente eu tive que setar a interface para 10 porque o dispositivo do cliente era 10 e não conseguia subir com a interface a 100.

  Duplex a-full
     Essa configuração é alcançada quando ambas as interfaces estão em autonegotiation. A possibilidade de autonegotiation vem do padrão IEEE 802.3x, mencionado acima.
  Switches atuais possuem a capacidade de analisar o meio através do Fast Link Pulse (FLP) e deterinar a velocidade do meio.

     Com  base na velocidade do meio, o IEEE estabelece a seguinte regra:
-Se a velocidade é desconhecida, utilizar 10 Mbps e Half Duplex
-Se a velocidade é algo em torno de 10 ou 100 Mbps, usar Half Duplex
-Se a velocidade é algo em torno de 1000 Mbps, usar Full duplex

     Aqui posso dizer que temos o ponto alto do nosso artigo. Tudo que discutimos agora, ambasa o que eu gostaria de passar relacionado ao conceito de duplex e speed. Porém, essas últimas informações, trazem consequências realmente práticas para um profissonal de redes.
    Imagine o cenário onde temos nosso switch conectado a um servidor e ambos configurados a 100 Mbps Full. Tudo está perfeito até que um dia alguem restarta o servidor e ele perde a configuração de speed e duplex de sua interface.
    Consequentemente, ele irá para alguma velocidade default, que nos dias atuais, em geral é 100 Mbps.
    Ora, temos nosso switch com 100 Mbps cravado, isso significa dizer que o FLP está desativado e um servidor que acabou de ativar o seu FLP. De acordo com a determinação do IEEE acima, o servidor irá descobrir a velocidade do meio que será 100 Mbps. Ainda de acordo com o IEEE, 100 Mbps resulta  Half Duplex.
   Consequentemente haverá problemas no link.


    O mais crítico nesse tipo de situação é que ao analizar o switch, o link estará UP, e será preciso analizar parâmetros como Collision, Late Collisions e outros para tentar determiar o problema.

switch2#sh int fa 0/15
FastEthernet0/15 is up, line protocol is up
  Hardware is Fast Ethernet, address is cc01.0174.f00f (bia cc01.0174.f00f)
  Description: 2-switch
  MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, 100Mb/s
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:00:00, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     0 packets input, 0 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 input packets with dribble condition detected
     0 packets output, 0 bytes, 0 underruns
     0 output errors, 0 collisions, 3 interface resets
     0 babbles, 0 late collision, 0 deferred


   Caso seja observado que esses parâmetros aprensentam valores, é recomendado entrar com o comando :
switch2#clear counters
Clear "show interface" counters on all interfaces [confirm]
switch2#

      E posteriormente continuar a observar. Caso os valores continuam incrementando, temos certamente um problema relacionado a Speed e duplex. Infelizmente o GNS3 não dá a possibilidade de forçar uma situação problema, pelo menos eu não sei, o que seria bem interessante. Mas acredito que as explicações e demonstrações do artigo, são suficiente para compreender e tratar esse tipo de problema.
Num próximo artigo, eu vou falar um pouco mais sobre MAC ADDRESS. existem muitas situações que podem ser exploradas sobre o endereçamento físico das redes Ethernet.

Saturday, February 11, 2012

Capture no Cisco ASA



      E o post de hoje já faz parte do conhecimento que adquiri em meu trabalho atual. Basicamente, os firewalls em que atuamos são Cisco ASA e a função que vou apresentar aqui,apesar de simples, é de extrema importância em Troubleshooting de rede.
 Capture está para Cisco assim como TCPDUMP está para Linux, ambas as ferramentas são de extrema importância.
A poucos dias atrás eu me deparei com uma situação em que uma máquina atrás de um ASA não conseguia acessar a Web, com a ajuda do Capture, consegui evidenciar que o problema estava na máquina e não no firewall.
 O Lab que eu montei usando GNS3 é extremamente simples,porém, suficiente para nosso propósito:




A Ideia aqui é observar, através da funçao Capture, o trafego passando do host para o host .
Vamos iniciar configurando o Capture:


asa-apliance(config)# access-list  teste1 extended permit ip any host 172.16.1.2
asa-apliance(config)# access-list  teste1 extended permit ip host 172.16.1.2 any

Basicamente temos que criar duas ACLs, uma vai analisar o tráfego IN e a outra o tráfego OUT.
Criado nossa ACL, entramos com comando Capture:

 asa-apliance(config)#  capture <Nome para o Capture>   access-list < Em nosso caso teste1> interface <Nome da sua interface>

   
Como pode ser visto, meu ASA possui dois Capture cap1 e cap2:

asa-apliance# sh capture ?


  WORD  Capture name
  |     Output modifiers
  <cr>
asa-apliance# sh capture
capture cap1 type raw-data access-list capture-bastion trace interface wan interface lan [Capturing - 295556 bytes]
capture cap2 type raw-data access-list capture-bastion2 trace interface wan [Capturing - 5746 bytes]

Basicamente são essas as configurações necessárias. Agora vamos começar a analisar o tráfego.

asa-apliance(config)# show capture cap1
12 packets captured
   1: 00:08:06.538225 192.168.1.2 > 172.16.1.2: icmp: echo request
   2: 00:08:06.538225 172.16.1.2 > 192.168.1.2: icmp: echo reply
   3: 00:08:07.107843 192.168.1.2 > 172.16.1.2: icmp: echo request
   4: 00:08:07.107843 172.16.1.2 > 192.168.1.2: icmp: echo reply
   5: 00:08:07.685191 192.168.1.2 > 172.16.1.2: icmp: echo request
   6: 00:08:07.685191 172.16.1.2 > 192.168.1.2: icmp: echo reply
   7: 00:08:08.238619 192.168.1.2 > 172.16.1.2: icmp: echo request
   8: 00:08:08.238619 172.16.1.2 > 192.168.1.2: icmp: echo reply
   9: 00:08:08.797367 192.168.1.2 > 172.16.1.2: icmp: echo request
  10: 00:08:08.797367 172.16.1.2 > 192.168.1.2: icmp: echo reply
  11: 00:08:09.357769 192.168.1.2 > 172.16.1.2: icmp: echo request
  12: 00:08:09.357769 172.16.1.2 > 192.168.1.2: icmp: echo reply


Aqui temos o Cap1 capturando pacotes ICMP vindos do PC 192.168.1.2 e indo para o PC 172.16.1.2. Como podemos ver, tudo está funcionado perfeitamente.

No exemplo abaixo, temos o Cap2, no sentido contrário do tráfego. Ou seja, Origem 172.16.1.2 e destino 192.168.1.2.

asa-apliance(config)# show capture cap2
6 packets captured
   1: 00:10:50.220188 172.16.1.2 > 192.168.1.2: icmp: echo request
   2: 00:10:50.220188 192.168.1.2 > 172.16.1.2: icmp: echo reply
   3: 00:10:50.778875 172.16.1.2 > 192.168.1.2: icmp: echo request
   4: 00:10:50.778875 192.168.1.2 > 172.16.1.2: icmp: echo reply
   5: 00:10:51.346661 172.16.1.2 > 192.168.1.2: icmp: echo request
   6: 00:10:51.346661 192.168.1.2 > 172.16.1.2: icmp: echo reply


Vamos testar uma conexão onde ocorrerá falha para vermos como se comporta:

Do lado Wan de nossa rede, vamos tentar acessar o servidor que está dentro da rede:

root@server_wan:~# telnet 172.16.1.2
telnet: can't connect to remote host (172.16.1.2): No route to host
root@server_wan:~#

Vejamos o que o Capture pegou:
asa-apliance(config)# show capture cap1
 3 packets captured
   1: 00:15:31.773260 192.168.1.2.33522 > 172.16.1.2.23: S 723235514:723235514(0) win 5840 <mss 1460,sackOK,timestamp 420198 0,nop,wscale 4>
   2: 00:15:33.452887 192.168.1.2.33522 > 172.16.1.2.23: S 723235514:723235514(0) win 5840 <mss 1460,sackOK,timestamp 421104 0,nop,wscale 4>
   3: 00:15:33.472723 192.168.1.2.33522 > 172.16.1.2.23: S 723235514:723235514(0) win 5840 <mss 1460,sackOK,timestamp 421109 0,nop,wscale 4>
3 packets shown


Como podemos ver, ocorreu apenas o envio de pacotes. Uma analise mais detalhada poderá ajudar na busca de uma solução.
   Basicamente essa é a função do Capture. Ferramenta muito importante tendo em vista que a função do firewall é realmente de bloqueio de tráfego. Dessa forma, qualquer desconfiança sobre um provável bloqueio indesejado, é preciso analisar o tráfego para ver se está ocorrendo de fato um bloqueio no firewall.
    Espero que seja útil a outros como tem sido pra min.