Thursday, November 20, 2008

Bibliotecas Javascript para trabalhar com Imagens

http://odyniec.net/projects/imgareaselect/examples.php

http://www.defusion.org.uk/demos/060519/cropper.php?demoType=ratioFourThree&image=castle&formSubmit=Load+demo

Classes de endereços IPv4

Os endereços IPv4 são padronizados pelo instituto Iana, e são divididos em algumas classes bem definidas:

Classe A: De 1.0.0.0 a 126.0.0.0
Classe B: De 128.0.0.0 até 191.255.0.0
Classe C: De 192.0.0.0 até 223.255.255.254
Classe D: De 224.0.0.0 até 239.255.255.255
Classe E: De 240.0.0.0 até 255.255.255.255

Alguns endereços reservados:

10.0.0.0
14.0.0.0
39.0.0.0
127.0.0.0
172.16.0.0
192.168.0.0
169.254.0.0
191.255.0.0
191.88.99.0

Remontagem

Devido à comutação de pacotes, os dados que são enviados por um emissor a um receptor tendem a percorrer caminhos diferentes para chegar ao mesmo destino.

Assim, cabe ao receptor realizar a remontagem destes pacotes, seguindo algumas regras:

- Há um tempo limite para realizar a remontagem;
- Caso os pacotes já tenham sido recebidos e, ainda assim, falte um pacote para completar a remontagem, caso o tempo limite expire, o receptor enviará ao emissor destes pacotes uma ICMP de time exceeded.

A remontagem de pacotes exige processamento e consumo de memória por parte do receptor.

Fragmentação

Cada padrão de rede possui um MTU (Maximum Transfer Unit) próprio.

Assim sendo, caso um datagrama seja maior que o MTU da rede, este será fragmentado, de forma que seus fragmentos compartilhem o mesmo cabeçalho (com o valor de alguns campos alterados) e cada um receba uma porção de seus dados.

Frame IP

O frame utilizado no protocolo IP possui uma grande quantidade de campos, que serão detalhados nesta postagem.

Version: Campo de 4 bits que especifica a versão do frame;

HLEN: Campos que definem propriedades sobre o tamanho do cabeçalho. Indicam o tamanho em quantidade de palavras de 32 bits.

Service Type: Informações sobre precedência, confiabilidade, atraso e throughput;

Total Length: Tamanho da do cabeçalho mais a área de dados;

ID: identificador único do pacote IP;

Flags: reserved, more fragmented, no fragmented;

Fragment Ouset: Número de 13 bits múltiplo de byte;

Time to Live: Tempo de vida do pacote. Se o pacote entrar em ciclo (looping infinito), o TTL é decrementado a cada salto e quando chega a zero, o pacote é expirado e o roteador o elimina da rede, não o passando para frente.

Protocolo: Indica qual o protocolo superior de transporte utilizado (TCP/UDP);

Header checksum: Campo de 16 bits que permite verificar a integridade dos dados do cabeçalho;

Endereços de origem e destino: De onde o pacote partiu e onde quer chegar;

Padding: Ajuste técnico, para compensar a conversão do sinal, pois, quando surgiram os primeiros protocolos, o tamanho do frame era variável. Com isso, não se otimizavam os buffers, pois se perdia o sinal quando não era possível alocar um buffer. O padding permite que o buffer seja feito em múltiplos de 4. O protocolo IPv6 dispensa seu uso, pois ao invés de utilizar tamanhos variáveis e múltiplos de 4, faz o uso de octetos de tamanho fixo.

Data: São os dados transportados pelo pacote;

Time of Service (ToS):
T: Alto throughput;
D: Baixo atraso;
R: Elevada confiabilidade

IPv4 x IPv6

O IPv4 (RF791) é o protocolo mais utilizado para a camada de rede do modelo OSI. Entretanto, é um protocolo antigo, criado na década de 70, que deixa a desejar em diversos recursos, como, por exemplo, na implementação nativa do controle da qualidade do serviço.

Embora antigo, o protocolo IPv4 continua a ser utilizado em larga escala e não há previsões de que será atualizado pelo protocolo mais recente, o IPv6 (RF2460). Isto se deve ao fato de que a grande maioria das redes ainda utiliza IPv4 e a migração entre os protocolos exigiria investimentos demasiadamente grandes, uma vez que muitos computadores e roteadores não suportariam o protocolo mais atual.

Atualmente, o protocolo IPv6 tem sido utilizado apenas em backbones, sendo convertido para IPv4 antes de chegar até o usuário final.

O IPv6 utiliza o endereçamento de 128 bits, que permite que sejam endereçados 2^128 endereços, uma capacidade significantemente maior que a do IPv4, que utiiza 32 bits para endereçar, provendo até 2^32 endereços.

IP - Internet Protocol: Características

O protocolo IP é o protocolo mais utilizado atualmente, correspondendo à camada de rede do modelo OSI.

Versões do protocolo:
IPv4 (RF791)
IPv6 (RF2460)

Suas principais características são:

Serviço de entrega best-effort: Pacotes não são descartados sumariamente, o que torna o protocolo confiável em condições adequadas; O protocolo se torna não-confiável apenas quando há exaustão de recursos;

Datagramas de tamanho variável: Desde que seja respeitado o limite de 64Kb.

Provimento de envio e recebimento;

ICMP (Internet Control Message Protocol): Em caso de erro na entrega, faz uso do ICMP para enviar um relatório dos erros ocorridos ao emissor dos pacotes.

Tunelamento (tunneling)

Tunnelamento é criar uma única rede virtual que atravesse mais de uma rede real.

Os roteadores das diversas redes estão sincronizados e os hosts podem interagir como se estivessem em uma mesma rede real, embora estejam em uma mesma rede virtual.

A Rede Privada Virtual (VPN) utiliza o tunelamento para estabelecer uma interface virtual criptografada entre dois roteadores.

Wednesday, November 19, 2008

NAT - Network Address Translation

Network Address Translation (NAT) é a tradução existente entre endereços internos da rede e endereços externos.
Como benefícios, o NAT proporciona uma economia na utilização de endereços IPs reais, visto que é possível que vários hosts saiam para a rede externa com o mesmo endereço IP. No mesmo sentido, a segurança proporcionada à rede interna também é significativamente maior, pois as conexões têm início no interior da rede.

Caso seja necessário explorar recursos presentes no interior da rede a partir de redes externas, será necessário um servidor virtual, também conhecido como NAT reverso.

Moldagem de tráfego (traffic shapping)

O traffic shapping, ou moldagem de tráfego, consiste na adequação do tráfego da rede a fim de evitar ou amenizar futuros problemas de congestionamentos.

O traffic shapping pode ser realizado por pré-locação de buffers, descarte de pacotes ou pelo Algoritmo do Balde.

Pré-locação de buffers: Um pacote de sinalização é enviado sempre antes que um pacote de prioridade alta seja enviado, permitindo, deste modo, que o pacote prioritário encontre caminho livre para seguir seu caminho com maior velocidade.

Descarte de pacotes: Pacotes são sumariamente descartados.

Algoritmo do Balde: Há uma entrada de volume variável, um buffer de tamanho limitado e uma saída, que pode possui vazão constante (sem token) ou variável (com token), na qual há uma variação no valor do jitter.

Redes de Computadores: Congestionamentos

Congestionamentos ocorrem em uma rede de computadores quando a quantidade de pacotes enviados é maior do que a quantidade de pacotes recebidos, degradando a qualidade do serviço e podendo condenar nós e subredes.

A prevenção de congestionamentos é realizada através do monitoramento da rede e da identificação de gargalos.

Políticas de prevenção de congestionamentos podem ser aplicadas às camadas de enlace, rede e transporte.

Enlace
Cache fora de ordem;
Confirmações;
Retransmissão;
Controle de fluxo;

Rede
Serviço de enfileiramento de pacotes;
Tempo de vida dos pacotes;
Destruição dos pacotes;
Algoritmos de roteamento;

Transporte
Controle de fluxo;
Retransmissão;
Cache fora de ordem;
Confirmação;
Determinação do time-out;

Quality of Service (QoS)

Algumas aplicações apresentam um certo grau de severidade em relação ao desempenho das redes de computadores para que funcionem corretamente.

É possível implementar no roteamento políticas que priorizem a passagem de pacotes considerados prioritários em relação aos demais. Estes pacotes de maior prioridade passam à frente dos demais e são despachados primeiro pelo roteador.

Algumas variáveis relacionadas à QoS:
Delay: Corresponde ao atraso que há entre o envio e o recebimento dos dados;

Jitter: É calculado a partir do delay, sendo um cálculo de desvio padrão.

Confiabilidade: É a garantia de que todos os pacotes que partem da origem serão entregues corretamente no destino.

Algoritmo Flooding

É um algoritmo muito simples, que consiste em um roteador repassar os dados que recebe para todos os seus roteadores vizinhos, exceto para aquele de quem recebeu o pacote.

É pouco utilizado em redes maiores, pois gera sobrecarga.

Classificação de Algoritmos de Roteamento

Os algoritmos de roteamento são adotados pelos protocolos de roteamento, que podem optar em possuir um ou vários algoritmos para roteamento.

Os algoritmos de roteamento podem ser classificados em duas categorias:

Algoritmos de roteamento globais

Algoritmos de roteamento descentralizados

Os algoritmos de roteamento globais trabalham com o objetivo de determinar o menor caminho entre os nós de origem e de destino. Para que possam trabalhar, os algoritmos de roteamento globais devem ter pleno conhecimento da topologia da rede e seu enlace. O envio e recebimento de numerosa quantidade de mensagens em broadcast informando o estado dos roteadores é uma das principais características de seu funcionamento, o que o torna inadequado para redes maiores.

Um exemplo de algoritmo de roteamento global é o algoritmo de Dijkstra, que tem como objetivo determinar o menor caminho entre dois nós. Seu funcionamento constitui em uma etapa de inicialização seguida por um looping, o qual possui quantidade de iterações equivalente ao tamanho de hosts na rede. Ao seu término, é retornado o menor caminho possível entre dois nós.
Com freqüência, o roteador dispara mensagens em broadcast para os demais roteadores, informando sobre seu estado e também recebe informações sobre o estado de outros roteadores, a fim de atualizar suas tabelas de roteamento. Isso torna o algoritmo de Dijkstra inadequado para redes maiores, sendo utilizado apenas em segmentos menores da rede, em casos específicos.

Os algoritmos de roteamento descentralizados são algoritmos iterativos e distribuídos. O algoritmo Distance-Vector é um algoritmo dinâmico, distribuído e iterativo, utilizado em protocolos de roteamento como IPX, Apple Talk e RIP. Nele, os roteadores conhecem seus vizinhos imediatos e trocam tabelas de retardos entre si.
O algoritmo de Bellman-Ford é utilizado para calcular a distância métrica de Distance Vector.

Princípio de otimização: árvore de escoamento

A árvore de escoamento é um princípio de otimização que define que a melhor rota de A até B também será a melhor rota de B até A.

Pelo fato de a Internet não ser uma malha regular, muitas vezes há a formação de loopings no roteamento dos dados.

Tabelas de roteamento

Nas tabelas de roteamento os roteadores armazenam as informações necessárias para realizarem seu trabalho.

Os campos presentes nas tabelas de roteamento variam de acordo com o protocolo de roteamento que está sendo utilizado. Todavia, os mais comumente encontrados são:

Destino: Para onde os dados irão;
Gateway: Por onde sairão da rede atual;
Saltos: Número de pulos para chegar até o destino;
Interface: Por qual interface os dados sairão do host (PC ou roteador) onde se encontram.

Redes de computadores: Sistemas autônomos

Sistemas autônomos consistem em um grupo de redes e roteadores controlados por uma única autoridade administrativa.


Em um sistema autônomo, todos os roteadores seguem as mesmas "regras" de roteamento.

Os protocolos de roteamento aplicados variam de acordo com a atuação dos roteadores, que pode ser interna ou externa.

Para os roteadores internos, que são aqueles que se comunicam apenas com outros roteadores internos, são adotados protocolos de roteamento interiores IGP (Interior Gateway Protocol). Roteadores internos tendem a ser mais confiáveis quando se comunicam com outros roteadores internos.

Para os roteadores externos, também conhecidos como roteadores de borda, aplicam-se protocolos de roteamento externos, os EGP (Exterior Gateway Protocol), que são mais adequados para que estes roteadores se comuniquem com roteadores de outras redes.
Os roteadores de borda apresentam custo mais elevado e possibilitam que um sistema autônomo possua interfaces externas com outras redes.

Exercícios de roteamento

Links para download dos exercícios de roteamento utilizados na aula de redes.

Download aqui

O que é roteamento? Quais os possíveis tipos de algoritmos de roteamento?

O roteamento é uma atividade realizada na camada de rede, cujo objetivo é definir qual será o caminho trilhado pelos dados (empacotados) até chegarem ao seu destino.
O dispositivo responsável por esta atividade é o roteador, que possui em sua memória tabelas com as informações necessárias para determinar o destino dos pacotes que recebe. As informações desta tabela variam de acordo com o protocolo de roteamento utilizado.

Os algoritmos de roteamento são a lógica aplicada pelos roteadores na definição do caminho pelo qual os pacotes seguirão. Os algoritmos utilizados nestes dispositivos podem ser divididos em duas categorias:

Algoritmos de roteamento estáticos ( ou não-adaptativos): são aqueles em que as tabelas de roteamento são definidas manualmente pelo administrador da rede. As rotas são fixas e não se alteram em virtude de qualquer fator que não seja a ação do administrador.

Algoritmos de roteamento dinâmicos (ou adaptativos): Os algoritmos de roteamento dinâmico definem as tabelas de roteamento através da utilização de protocolos de roteamento.

Redes de Computadores: Diferenças entre datagramas e circuitos virtuais

Na camada de rede, existem dois serviços possíveis para entregar os pacotes em seus respectivos destinos: datagrama e circuito virtual.

Um serviço de datagrama é aquele em que os diversos roteadores são autônomos ao decidir qual será o caminho adotado pelos pacotes. Cada pacote que parte de uma mesma origem para um mesmo destino pode seguir pode diferentes rotas. O serviço de datagrama dispensa a configuração de circuitos virtuais e, em caso de paralização de um roteador, os serviços mantêm-se ativos, sendo os pacotes desviados por outras rotas. Neste serviço, cada pacote traz em seu cabeçalho as informações sobre sua origem e seu destino e os roteadores não armazenam as informações das conexões que se mantém ativas. Em contrapartida, devido a sua autonomia ao decidir qual a rota aplicada a cada pacote, os roteadores necessitam de um maior processamento para executar seus algoritmos de roteamento. O controle da rede, em um serviço de datagrama, também é mais complexo, visto que a implementação de políticas de controle de congestionamento e Qualidade do Serviço (QoS) é mais complicada.

No serviço de circuito virtual, o primeiro passo a ser realizado é a configuração do circuito pelo qual os pacotes serão transportados. Cada pacote possui em seu cabeçalho a informação sobre a qual circuito pertence e, independentemente do seu ponto de partida, fará o mesmo caminho até chegar a um destino específico. As informações sobre conexões são mantidas em tabelas pelo roteador e, caso este pare de funcionar, todas as conexões que passam por ele também deixarão de funcionar. Como pontos positivos, os circuitos virtuais podem facilmente ter implementados mecanismos de controle de congestionamentos e Qualidade do Serviço (QoS). O processamento no processo de transporte dos pacotes também é inferior ao do datagrama, uma vez que não há preocupação sobre qual destino os pacotes tomarão.