sábado, 23 de maio de 2009

Tudo sobre TCP/IP - parte2


Internet Protocol (IP)

O Protocolo da Internet é responsável por endereçar e entregar os dados em uma comunicação de rede TCP/IP: ele sempre tenta entregar os dados, mas não garante que eles sejam entregues, que eles sejam entregues livres de erros ou que sejam entregues na mesma ordem pois isto é função de um protocolo da camada superior, (como o TCP) ou da aplicação. O IP não estabelece uma sessão (link virtual) entre o computador de origem e o de destino: ele também é responsável por pegar os dados da camada de Interface de Rede e apresentá-los ao protocolo da camada acima que os solicitou.

O IP, quando os dados chegam a ele vindos da camada superior, adiciona suas informações de controle e um cabeçalho aos dados. A partir daí, aquele bloco de dados é chamado de datagrama.

O datagrama, ao receber as informações de cabeçalho da camada de interface de rede (como o protocolo Ethernet) é chamado de pacote. Não estranhe se ouvir falar em pacote no lugar de datagrama: muitas pessoas confundem os dois termos.

O cabeçalho do IP tem vários campos, a saber:

Versão: Este campo define a versão do protocolo IP utilizada. A versão atual é a 4, mas já está em testes a versão de número 6.

Comprimento do Cabeçalho: Este campo define o tamanho, em blocos de 32 bits, do cabeçalho do IP. O menor cabeçalho possível conteria 5 neste campo, o que equivale a 5*32bits = 160bits.

Tipo de Serviço: Este campo contém quatro subcampos. O primeiro é o campo de precedência, que permite configurar a prioridade com que estes dados devem ser enviados na rede. Ele ocupa dois bits, e, por isso, seus valores variam de 0 a 7. Os outros três campos são bits únicos e, teoricamente, deveriam controlar como o datagrama deve ser roteado na rede: são os bits de baixo Retardo (Delay), Rendimento (Troughput) e Confiabilidade (Reliability).

Por exemplo, em uma videoconferência o aplicativo poderia definir o bit de retardo como 1, indicando que o programa necessita de baixo retardo (as informações de uma videoconferência devem chegar o mais rápido possível ao destino); o bit de rendimento como 1 também (já que enormes quantidades de dados precisam chegar ao destino) e o bit de confiabilidade como 0 (as informações que não chegarem em tempo ao destino não serão mais necessárias). Uma transferência de arquivos priorizaria a confiabilidade e assim por diante. Dizemos que isso deveria acontecer na teoria porque todos os roteadores por onde o datagrama passa devem suportar esta função para que ela funcione, o que é bem difícil em uma rede grande como a internet.

Roteador é um componente da rede que se encarrega de destinar os dados que devem ser encaminhados a outras redes que não a que seu computador se encontra.

Comprimento Total: Tamanho total do datagrama medido em bytes. Como este campo é composto por 16 bits, o tamanho máximo de um datagrama IP é de 65535 bytes.

Identificação: Este campo tem a ver com a fragmentação de datagramas IP. Ele identifica quais fragmentos pertencem a qual datagrama, para que o destino não se confunda na hora de remontá-lo.

A fragmentação pode ocorrer quando um datagrama é enviado entre duas redes diferentes e que têm tamanhos máximos de datagrama (MTU - Maximum Transmission Unit ou Unidade Máxima de Transmissão) diferentes. Tomemos por exemplo um datagrama de 3.000 bytes trafegando em uma rede FDDI e que chega em um roteador que deve encaminhá-lo por uma rede Ethernet, cuja MTU é de 1518 bytes. Ele deverá ser fragmentado pelo roteador para ser depois remontado pelo computador de destino.

Sinalizadores: Indicam, em uma fragmentação de datagramas, se mais fragmentos chegarão ou se não serão enviados mais dados pertencentes ao datagrama identificado no campo acima. Também indicam se um datagrama pode ou não ser fragmentado. Caso o bit de não fragmentação for definido, o roteador que receber o datagrama e precisar fragmentá-lo para seguir adiante simplesmente descartará aquele datagrama e enviará uma mensagem de erro ao computador de origem.

Offset do Fragmento: Indica de que parte do datagrama a estação de destino deve continuar a remontá-lo para determinado fragmento. Por exemplo, se o primeiro fragmento fosse de 576 bytes e este fragmento fosse o segundo, o campo offset conteria 577, indicando que este fragmento inicia o 577º byte do datagrama.

Tempo de Vida (TTL - Time to Live): O TTL define o tempo máximo que um datagrama pode trafegar na rede antes de ser descartado. Cada vez que o datagrama passa por um roteador, este campo é diminuído. Foi criado para que um pacote não fique eternamente dando voltas na rede. Ele é definido pela estação de origem e é de 8 bits, ou seja, seus valores variam de 0 a 255.

Protocolo: Este campo o protocolo da camada superior para o qual os dados devem ser repassados.

Soma de Verificação: Aqui está contida uma CRC (Cyclic Redudancy Check - Checagem Cíclica Redundante) do cabeçalho IP com o objetivo de evitar erros na transmissão. O CRC é um número que é calculado pelo computador de origem com base no conteúdo do cabeçalho. Quando a estação de destino receber o datagrama, ela calculará a sua CRC com base nos dados de cabeçalho que foram recebidos e caso os valores sejam diferentes dos contidos no campo soma de verificação, um erro na transmisão ocorreu - e o datagrama será descartado. Note que este campo é recalculado cada vez que o datagrama passa por um roteador, pois este altera o campo TTL do cabeçalho.

Endereço IP de Origem e Destino: Estes campos dispensam explicações. O endereçamento IP será discutido posteriormente neste tutorial.

Opções do IP: Pode ou não estar presente (pouco utilizado atualmente). Especifica diversas opções do datagrama IP, como a que permite que os pontos por onde o datragrama passa sejam "ecoados" para o computador de origem e a que configura uma rota restrita, limitando a liberdade dos roteadores em encaminhar o datagrama.


Endereçamento IP

O endereço IP é composto por 32 bits. No entanto, é representado por quatro números de 8 bits separados por pontos chamados de octetos. Cada octeto tem seus valores variando de 0 a 255 (2^8 possibilidades). Por essa definição, 55.82.254.13 é um endereço IP válido. O endereço IP identifica, ao mesmo tempo, a rede em que o host se encontra e o próprio host.

É chamado de host (em português significa anfitrião) qualquer cliente TCP/IP, como computadores, roteadores, impressoras conectadas diretamente à rede e assim por diante.

Mas como o computador faz para descobrir qual parte se refere à rede e qual identifica o host?

Método Baseado em Classes

Antigamente na Internet (note como a história do TCP/IP se confunde com a da Internet), o método existente para determinar qual a parte da rede e qual a pertencente à identificação de host era muito simples: o primeiro byte (8 bits) era utilizado para identificar a rede. Isto permitia cerca de 250 redes e um número quase que incontável de hosts por rede ([2^24] -2 = 16.777.214 hosts). É praticamente impossível uma rede com tantos hosts, o que resultava em desperdício de números IP. Como a internet ainda engatinhava, não havia escassez de endereços. Com seu crescimento (as universidades e grandes escolas passaram a ter acesso a ela), foi necessário inventar um método melhor. Desta maneira que surgiram as classes de IP.



Cinco classes foram criadas: A, B, C, D e E.

Identificando uma Classe

Aqui explicaremos como o IP faz para descobrir a qual classe pertence um determinado endereço IP. Para fazermos isso, usaremos apenas o primeiro octeto do endereço em sua forma binária, já que é para ele que o sistema olha para determinar a classe:



1.
O protocolo verifica o primeiro bit do primeiro octeto do endereço: caso ele seja 0 (zero), o endereço é de Classe A. Se ele for 1, o protocolo passa para o segundo bit.
2. Se o segundo bit for 0, o endereço é de classe B. Se for 1, o próximo bit é analisado.
3. Se o primeiro e o segundo bits são 1 e o terceiro bit é 0, o endereço IP é da classe C. E assim o protocolo continua a analisar os bits até chegar na classe E.

Por esse processo, podemos inferir alguns detalhes de cada classe de IP:

Classe A: Os valores do primeiro octeto variam de 1 à 126. Permite 126 redes e 16.777.214 hosts por rede. Por essa definição, o endereço 110.224.16.15 (01101110.11100000.00010000.00001111) é da classe A. Na classe A, o primeiro byte é reservado à identificação de rede e os três últimos identificam o host.

Classe B: O primeiro octeto varia de 128 à 191. Permite 16.384 redes e 65.534 hosts por rede. Exemplo de endereço classe B: 135.200.223.5 (10000111.11001000.11011111.00000101). Na classe B, os dois primeiros bytes são reservados à identificação de rede e os dois restantes identificam o host.

Classe C: O byte inicial tem seu valor variando de 192 a 223. Nesse caso, 2.097.152 redes são possíveis, com 254 hosts por rede. Exemplo: 200.248.170.1 (11001000.11111000.10101010.00000001). Na classe C, os três primeiros bytes identificam a rede e o último byte identifica um host.

Classe D: A classe D está reservada para endereços de Multicast, que permite enviar datagramas IP para um grupo de computadores. O intervalo reservado vai do IP 224.0.0.0 ao 239.255.255.255.

Classe E: Esta classe está reservada para uso futuro (240.0.0.0 à 254.255.255.255).


A identificação de rede 127.0.0.0 (normalmente seria um endereço classe A) está reservada para testes de conectividade do TCP/IP. Note que o endereço 127.0.0.1 é chamado de endereço de loopback, ou seja, ele aponta para a própria máquina.

Um endereço de host válido NUNCA pode conter todos os bits para identificação de host definidos como 0 ou definidos como 1. Se todos referentes à parte de host do endereço IP forem definidos como zero, este IP identificará aquela rede em específico (um roteador utiliza o endereço 10.0.0.0 em sua tabela de roteamento para representar os hosts de 10.0.0.1 até 10.0.0.254). Já se os bits de host forem todos definidos como 1, este endereço designará o endereço de broadcast para aquela rede. Por exemplo, todos os datagramas IP enviados para o endereço 192.168.255.255 (classe B) serão recebidos pelos computadores dentro do intervalo de 192.168.0.1 ao 192.168.255.254.

Nenhum comentário:

Postar um comentário