terça-feira, 23 de outubro de 2012

Aplicações de Subnet Mask (Máscara de Sub-rede)


Aplicações de Subnet Mask (Máscara de Sub-rede)

Como Descobrir Rede e Broadcast Através de um Endereço de Host

 

Hoje vamos falar um pouco sobre máscaras de sub-rede. Para começar é bom saber que, as máscaras de sub-rede só existem devido à escassez que teríamos dos endereços IP devido ao avanço da internet e distribuição da mesma para fins comerciais, o que não era seu objetivo.

 As máscaras servem para identificar no endereço IP a parte que se refere à rede e a parte referente aos hosts. Assim conseguimos obter a quantidade de endereços IP necessária para nossa rede, sem deixar sobra.

Para existir máscaras de sub-rede é necessário existir sub-redes, que são divisões de uma mesma rede (meio óbvio, mas só para constar ^^’).
 

  

Ok suponha então que tenhamos este endereço de host em “nossas mãos”:

201.222.10.60/29

Como saber qual a rede e broadcast que este host pertence?

Há diversas maneiras para descobrir isso, vou citar aqui apenas a que achei didaticamente mais fácil de entender:

Pela tabela de endereços CIDR (Classless Inter-Domain Routing):

CIDR
Máscara
Nº Sub-redes
Nº Hosts
/26
255.255.255.192
2
62
/27
255.255.255.224
6
30
/28
255.255.255.240
14
14
/29
255.255.255.248
30
6
/30
255.255.255.252
62
2

 

O endereço do host acima está com /29, sabemos então que sua máscara é 255.255.255.248, que ele possui 30 sub-redes e apenas 6 hosts.

            Agora vamos converter o endereço do host e a máscara de decimal para binário {para aprender sobre conversão acessar esse link}.


 
 
            Acima usamos a lógica AND para obter o endereço encontrado (endereço da rede).{Lógica AND, OR, acessar esse link}

 

            Convertendo o endereço da rede de binário para decimal:

            201.222.10.56 – Endereço da Rede

            Sabemos pelo CIDR que esta rede possui 6 hosts, contando a partir daí os hosts são:

 

            E sempre o próximo endereço após o número de host é o endereço de Broadcast:

 

                      201.222.10.63 – Broadcast

           

            A máscara na verdade é exatamente a quantidade de “1s” que a tabela CIDR indicar. Vou ilustrar para melhor entendimento:

 
            Acabamos de resolver um exercício onde o endereço de host dado era /29.

            Não precisamos saber a máscara do endereço, apenas contar 29 “1s” e adicionar “0s” para completar o octeto.

 

                  11111111.11111111.11111111.111110000
 

            Ok?

 

            Outra possível dúvida: “aah, mas a tabela CIDR que você fez está só do /26 em diante, por quê? E o que acontece se o número for menor (/18, por exemplo)?

 
            Se vocês buscarem na internet irão encontrar tabelas imensas do /1 até o /32 (isso porque estamos falando de IPv4).

           Mas não é preciso, só precisamos fazer uma relação com os números:

            O /29 no exemplo anterior preencheu quantos “1s” do ultimo octeto? Cinco!!!

           E sua máscara ficou: 255.255.255.248

           Qual o número que preenche cinco “1s” no terceiro octeto? O /21 !!!

            Apenas deslocamos o “.248” do ultimo octeto para o terceiro octeto e o ultimo é completado com "0s".

          Máscara para o /21:  255.255.248.0

            E assim sucessivamente.

         Vamos ver o /18:

                       11111111.11111111.11000000.00000000

            Apenas dois “1s” no terceiro octeto, qual número do ultimo octeto tem apenas dois “1s”? O /26 ! J

          O ultimo octeto do /26 é “.192”

          Deslocando o “.192” para o terceiro octeto, a máscara do /18 fica:

          255.255.192.0 J

           Muito bem, assim aprendemos a encontrar rede e broadcast através de um endereço de host! Agora.. se quiséssemos definir quais as sub-redes encontradas através de um endereço de rede, por exemplo, 192.168.10.0/26 ?

            Let’s go!

          Agora além do número de hosts, vamos usar também a campo número de sub-redes da tabela CIDR:

           

     Vejamos, o /26 tem apenas 2 endereços de sub-rede e 62 endereços de hosts.

Contamos então a partir do endereço da rede obtido no enunciado, lembrando que temos 1 endereço de rede + 62 hosts + 1 endereço de broadcast, totalizando 64 endereços:

 
         

            Importantíssimo, SEMPRE o primeiro e o ultimo conjuntos de sub-redes encontradas são descartados, isso se chama regra de eliminação dos extremos que nos possibilita obter apenas os endereços válidos da sub-rede.

 

           RESPOSTA: As sub-redes encontradas para a rede 192.168.10.0/26 são a 192.168.10.64 e a 192.168.10.128.      

  
            Espero ter ajudado a todos, qualquer dúvida ou sugestão deixem seus comentários! ^^’

 

    

           

           

 

 

 

terça-feira, 25 de setembro de 2012

Inverter a ordem dos nós de uma Lista usando Pilha

Boa Noite Folks!

      Nosso intuito com o blog é postar não apenas curiosidades sobre o avanço da tecnologia nas diversas ramificações da informática, mas também auxiliar o estudante nas mais "duras" barreiras que ele irá encontrar em seu meio universitário! xD
      Por isso hoje, em nosso primeiro post, iremos exemplificar o uso de Pilha em linguagem C para inverter a ordem de nós de uma lista usando pilha.
      

  •  Implementar uma função em C que inverta a ordem dos nós de uma lista usando uma pilha:
void lstInverter(lista * l) { // função que inverta a ordem dos nós de uma lista usando uma pilha
int i = 0;
lstInfo x;
pilha p;
stackInit(&p); // função que inicia pilha
while (lstRemover(l, 0, &x)) //enquanto houver valor na lista para remover, remove o elemento da posição 0 da lista
push(&p, x); // e empilha no topo da pilha
while (!stackIsEmpty(p)) // enquanto a pilha não estiver vazia
lstInserir(l, i++, pop(&p)); //  remove o topo da pilha e insere na lista novamente, mas em ordem inversa
}

Figura 1 - Esquema inicial da lista e da pilha


while (lstRemover(l, 0, &x)) //Enquanto houver valor na lista para remover, remove o elemento da posição '0' da lista
push(&p, x); // E empilha no topo da pilha

Significa que o programa não sairá deste while (lstRemover(l, 0, &x))  enquanto houver valor para remover na lista e passar para pilha através do push(&p, x);  !

Quando terminar esse while (lstRemover(l, 0, &x))  ficaremos assim:

Figura 2 - Lista e Pilha após aplicar o laço While

  •  Perceba que na pilha inserimos sempre no topo. O primeiro elemento que sai da lista é o 1, ele vai para o topo da pilha, que.. como estava vazia, insere o elemento 1 na sua posição 0, e outros vão sendo inseridos em cima. Pense na pilha como uma pilha de pratos (eu entendi assim rs)