# Introdução às Redes de Computadores/Pilha de protocolos da Internet

Segundo Kurose, "a Internet é um sistema extremamente complicado e que possui muitos componentes.". Para que um sistema tão complexo possa permitir a comunicação de usuários, independente da plataforma de Software utilizada, ou meio físico de transmissão, ou mesmo de hardware usado, foi necessário criar padrões e regras. Com isso, surgiram os protocolos de rede. Segundo definição da CISCO, "um protocolo é uma descrição formal de um conjunto de regras e convenções que governam a maneira de comunicação entre os dispositivos em uma rede."

## Camada de Enlace (CE)

Para que duas máquinas se comuniquem, é necessário haver um certo grau de cooperação. "Em vez de implementar a lógica para isso como um único módulo, a tarefa é dividida em subtarefas, cada qual implementada separadamente.". Então desenvolveu-se a arquitetura da Internet em camadas. A modularização facilita o entendimento das funções e também a detecção de erros. Cada camada tem características próprias.
Assim, surgiu a pilha de protocolos da Internet (ou pilha TCP/IP), que é formada pelos protocolos que regem a comunicação na Internet. Nessa arquitetura em forma de pilha, as camadas inferiores fornecem serviços às camadas superiores, de forma que estas não precisem saber o funcionamento de uma camada inferior, apenas conhecer os seus serviços. Na pilha TCP/IP, o TCP é o principal protocolo da camada de transporte, enquanto que o IP é o responsável pela camada de redes.
Um exemplo típico da relação entre esses protocolos é a comunicação entre duas pessoas. Uma pessoa pensa em algo para falar e "processa" o que quer dizer. O cerébro ordena a movimentação das cordas vocais, e depois da boca. O ar é o responsável por enviar a mensagem até os ouvidos de outra pessoa. A mensagem é então levada ao cérebro, processada, e essa segunda pessoa é capaz de compreender o que foi dito pela primeira. Para o outro responder, é feito o mesmo processo realizado pela primeira pessoa.
As regras para redes, ou protocolos, são criadas e mantidas por diferentes organizações e comitês, como: Institute of Electrical and Electronic Engineers (IEEE), American National Standards Institute (ANSI), Telecommunications Industry Association (TIA), Electronic Industries Alliance (EIA) e International Telecommunications Union (ITU), anteriormente conhecida como Comité Consultatif International Téléphonique et Télégraphique (CCITT).

## Modelos OSI e TCP/IP

Quando a Internet surgiu, não existia ainda um modelo padrão para suas aplicações, ela simplesmente "funcionava". Então, criaram o modelo OSI (Open Systems Interconnection - Interconexão de Sistemas Abertos), que descreve toda a comunicação em 7 camadas: Aplicação, Apresentação, Sessão, Transporte, Rede, Enlace de Dados e Física. Esse modelo descreve e separa cada parte da comunicação, porém, trata-se de um modelo complexo, que não é realmente implementado pela Internet. Surgiu então o modelo para descrevê-la, o modelo TCP/IP, baseado em seus dois principais protocolos (o TCP e o IP). O modelo TCP/IP em si não é muito utilizado, mas é mais próximo à realidade da comunicação na grande rede mundial.
Será explicado aqui as camadas do modelo TCP/IP, com algumas adições, fornando o modelo Híbrido, pois este une a didática de um lado, e a utilização prática da internet do outro.

## TCP/IP

A pilha TCP/IP é formada por quatro camadas. Este modelo apresenta uma solução prática ao modelo OSI que nunca chegou a ser implementado. As camadas que formam o TCP/IP são:

### Aplicação

Na camada superior, a Aplicação, funcionam os serviços que são diretamente fornecidos ao usuário da Internet. Nesta camada funcionam protocolos como HTTP, DNS, DHCP, MSN Messenger e outros. É implementada simplesmente por software. Sua principal funcionalidade é padronizar a forma com que os programas consigam conversar entre si, definindo regras que devem ser obedecidas por todos os softwares que implementem tal serviço.

### Transporte

A camada seguinte é responsável por criar uma comunicação fim-a-fim, ou seja, ela faz uma conexão virtual entre a origem e o destino. Os principais protocolos dessa camada são o TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão) e o UDP (User Datagram Protocol - protocolo de datagramas do usuário).
O TCP (descrito na RFC 793) provê uma transmissão confiável, garantindo que o que foi mandado chegue ao destino, como o uso de pacotes ACK(confirmação) e janelamento. O TCP garante que os dados são entregues livres de erro, em sequência e sem perdas ou duplicação. O lema do TCP é "transmitir com segurança". Portanto, esse protocolo é mais usado em aplicações em que é necessária a garantia de entrega dos pacotes de forma ordenada e sem erros, como acessos a páginas WEB, por exemplo.
O UDP (descrito na RFC 768) corresponde a um protocolo não orientado a conexão, sem confiabilidade, já que não há garantia de recebimento de pacotes, quer dizer, o UDP não implementa nenhum mecanismo de controle de congestionamento, de fluxo ou de erros. Geralmente é utilizado por aplicações que necessitam de velocidade (o UDP é um protocolo bastante leve) e dispensam a confirmação de que as informações foram recebidas (como videoconferências).
Essa camada trabalha com endereçamento baseado em portas. Cada serviço fornecido pela camada de aplicação possui um endereço de porta, e a camada de transporte faz a conexão entre porta de origem e porta de destino. Segundo Tanenbaum: "A Camada de Transporte não é simplesmente outra camada. Ela é o núcleo de toda hierarquia de protocolos...Sem a camada de transporte, todo o conceito de protocolos em camada faria pouco sentido."(Andrew S. Tanenbaum, Redes de Computadores). Nessa camada, os dados vindos da camada de Aplicação são agrupados em segmentos.
A figura TCP Header mostra as partes do cabeçalho TCP. Esta exibição é apenas uma representação esquemática. Na analogia com a realidade, deve-se considerar uma disposição horizontal, com a segunda linha após a primeira e, assim sucessivamente, até a última.
Source port / Destination port: parte que identifica as portas das camadas de aplicação da origem e do destino.
Sequence number: normalmente especifica o número assinalado para o primeiro byte de dados na mensagem corrente. Na fase de estabelecimento de uma conexão, pode ser usado como uma identificação da transmissão.
Acknowledgment number: contém o número sequencial do próximo byte de dados que o dispositivo de origem espera receber.
Data offset: o número de palavras de 32 bits do cabeçalho TCP.
Reserved: reservado para uso futuro.
Flags: usado para uma variedade de informações de controle, como SYN e ACK para estabelecer conexão e FIN para terminar.
Window: especifica o tamanho da parte de memória (buffer) disponível para os dados a receber.
Checksum: verificação da integridade do cabeçalho.
Urgent pointer: aponta para o primeiro byte urgente de dados no pacote.
Options: especifica várias opções do TCP.
Data: contém cabeçalho e dados da camada superior, isto é, a de aplicação. O seu comprimento é variável, podendo ser bem mais que os 32 bits indicados na tabela.

### Inter-Redes

A camada de Redes está relacionada com o transporte dos pacotes da origem até o destino. Quando se fala nisso, se fala em roteadores, que são os responsáveis por esse trabalho. Eles não devem conhecer a localização de cada endereço na rede de ip em redes de comunicação curta. Os protocolos tcp/ip dessa camada não podem garantir que pacotes possam ser roteados pela rede, ou seja, protocolos que contenham endereçamento de origem e destino (IP, IPX/SPX, etc.) e protocolos que conheçam a rede e os respectivos endereços nela (RIP, OSPF, EIGRP, IS-IS, etc.), além de utilizarem algoritmos de roteamento para determinar o caminho de menor custo. O principal protocolo dessa camada é o IP (Internet Protocol). Nessa camada, os segmentos da camada superior (transporte) são agrupados em datagramas.

### Host/Rede

O modelo de referência TCP/IP não define muito bem essa camada, somente deve ser garantido que os pacotes IP trafeguem de algum modo, independentemente do protocolo e do meio físico, até o destino. Por isso, para explicar essa parte, costuma-se usar o modelo híbrido de referência, que é composto pelas camadas: Aplicação, Transporte, Rede, Enlace de Dados e Física.

### Enlace de Dados

A camada de Enlace é responsável por dar acesso ao meio físico de comunicação. Como é uma camada bem próxima à transferência de bits, ela também fornece correção de erros, através da Checagem Cíclica de Redunância (CRC - Cyclic Redundancy Checksum). Também é responsável por fazer o controle do fluxo de bits, de forma que o receptor possa receber os dados a uma velocidade que possa processar. Essa camada trata as topologias de rede e engloba dispositivos como Switch, placas de rede, interfaces, etc. Os pacotes de dados, nessa camada, são denominados quadros. Exemplos de protocolos da camada de enlace são o Ethernet e o PPP, e é nessa camada onde são adicionados cabeçalhos e trailers MAC. Isso permite que seja feita a análise do MAC Address em um dado aplicativo. Uma breve descrição a respeito do MAC Address é feita abaixo.

#### Endereço MAC (MAC Address)

O endereço MAC (Media Access Control) é o endereço físico único de uma interface de rede. Todos os dispositivos que estão conectados à rede local Ethernet, possuem interfaces endereçadas: estações de trabalho, impressoras, roteadores e switches, etc. O IEEE controla o espaço de endereçamento Ethernet e distribui faixas de endereços aos fabricantes. Cada faixa consiste de um identificador de 24 bits (3 primeiros dos 6 bytes - pares hexadecimais), chamado “Organizationally Unique Identifier” (OUI). Cada fabricante adquire um ou mais OUIs e produz interfaces de rede cujos endereços são compostos do seu OUI concatenado com um número de 24 bits ( 3 últimos bytes) que identifica a interface. Apesar de ser único, praticamente todo hardware hoje permite a alteração do endereço MAC. Isso acontece devido ao fato de as interfaces de rede terem o MAC gravado em memória ROM, a qual é depois copiada para a RAM, com a inicialização da placa de rede, o que abre brechas para sua modificação. Tal modificação é conhecida como MAC spoofing, uma técnica em que se altera o endereço MAC, muitas vezes para fins maliciosos ilegais.

### Física

Em uma rede, uma informação é controlada, manipulada e processada por um agente específico, e sinais são a materialização dessas informações. O meio onde esses sinais se propagam pode ser descrito pela camada Física. Resumidamente, essa camada inclui o elemento condutor e os parâmentos que definem a transmissão. Muitas vezes chamada de PHY, essa é a camada que conecta um dispositivo de link ao meio de transmissão, onde os dados realmente trafegam. A camada física trata da distância máxima dos cabos (por exemplo, no caso do UTP onde são 100m), de conectores físicos (tipo BNC do coaxial ou RJ45 do UTP), dos pulsos elétricos (no caso de cabo metálico) ou pulsos de luz (no caso da fibra ótica). Na transmição de qualquer tipo de sinal, pode-se usar cabos par-trançado, cabos coaxiais, fibras-ópticas ou até mesmo o ar (wireless). O papel dessa camada, portanto, é apenas permitir que os dados saiam do transmissor e cheguem ao receptor, não provendo nenhum serviço de segurança, nem integridade.