O desenvolvimento da arquitetura Internet Transmission Control Protocol/Internet Protocol (TCP/IP) foi patrocinado pela Defense Advanced Research Projects Agency (DARPA). O TCP/IP é um conjunto de protocolos desenvolvidos para permitir que computadores compartilhem recursos dentro de uma rede. Em uma definição mais básica, o nome correto para este conjunto de protocolos é " Conjunto de Protocolos Internet". Os protocolos TCP e IP são dois dos protocolos deste conjunto. Como os protocolos TCP e IP são os mais conhecidos, é comum se referir a TCP/IP para referenciar toda a família de protocolos.
Na família de protocolos TCP/IP, alguns protocolos, como
TCP, IP e User Datagram Protocol (UDP), provêm funções
de baixo nível, necessárias a diversas aplicações.
Os outros protocolos são execução de tarefas
específicas, como por exemplo, transferência de arquivos
entre computadores, envio de mensagens. Os serviços TCP/IP
mais importantes são [Hedrick88]:
O protocolo TCP/IP é baseado em um modelo que pressupõe
a existência de um grande número de redes independentes
conectadas através de gateways. Um usuário
pode ter acesso a computadores ou outros recursos em qualquer
uma destas redes. As mensagens, muitas vezes, passam por uma grande
quantidade de redes para atingirem seus destinos. O roteamento
destas mensagens deve ser completamente invisível para
o usuário. Assim para ter acesso a um recurso em outro
computador o usuário deve conhecer o endereço Internet
deste computador. Atualmente este endereço é um
número de 32 bits, escrito como 4 números decimais,
cada um representando 8 bits de endereço.
O protocolo IP, padrão para redes Internet, é baseado em um serviço sem conexão. Sua função é transferir blocos de dados, denominados datagramas, da origem para o destino, onde a origem e o destino são hosts identificados por endereços IP. Este protocolo também fornece serviço de fragmentação e remontagem de datagramas longos, para que estes possam ser transportados em redes onde o tamanho máximo permitido para os pacotes é pequeno.
Como o serviço fornecido pelo protocolo IP é sem
conexão, cada datagrama é tratado como uma unidade
independente que não possui nenhuma relação
com qualquer outro datagrama. A comunicação é
não-confiável, pois não são utilizados
reconhecimentos fim-a-fim ou entre nós intermediários.
Não são empregados mecanismos de controle de fluxo
e de controle de erros. Apenas uma conferência simples do
cabeçalho é realizada, para garantir que as informações
nele contidas, usadas pelos gateways para encaminhar datagramas,
estão corretas.
Os endereços IP são números de 32 bits, normalmente escritos como quatro octetos na forma decimal, como por exemplo 200.236.143.1. A primeira parte do endereço identifica uma rede específica na inter-rede, a segunda parte identifica um host dentro desta rede. Este endereço, portanto, pode ser usado para nos referirmos tanto a redes quanto a um host individual. É através do endereço IP que os hosts conseguem enviar e receber mensagens pela rede, em uma arquitetura Internet TCP/IP.
O protocolo IP utiliza três classes diferentes de endereços. A definição de classes de endereços deve-se ao fato do tamanho das redes que estão interligadas variar muito, indo desde redes locais de computadores a redes públicas interligando milhares de hosts [Soares97].
Na primeira classe de endereços, a classe A, o bit mais significativo é 0, os outros 7 bits do primeiro octeto identificam a rede, e os 24 bits restantes definem o endereço local. Essa classe é usada para redes de grande porte, seus endereços variam de 1 a 126, e cada rede tem capacidade de endereçar cerca de 16 milhões de hosts.
A classe B de endereços usa dois octetos para o número da rede e dois para endereços de hosts. Os endereços de redes classe B variam na faixa de 128.1 até 191.255 (os números 0 e 255 do segundo octeto, e 127 do primeiro octeto são usados para funções especiais e testes), e cada rede pode interligar cerca de 65 mil hosts.
Já os endereços classe C, utilizam três octetos
para identificar a rede e apenas um octeto para o host.
Os endereços de rede situam-se na faixa de 192.1.1 até
223.254.254 (os endereços acima de 223 no primeiro octeto
foram reservados para uso futuro), e cada rede pode endereçar
254 hosts.
O TCP é um protocolo da camada de transporte da arquitetura Internet TCP/IP. O protocolo é orientado a conexão e fornece um serviço confiável de transferência de arquivos fim-a-fim. Ele é responsável por inserir as mensagens das aplicações dentro do datagrama de transporte, reenviar datagramas perdidos e ordenar a chegada de datagramas enviados por outro micro. O TCP foi projetado para funcionar com base em um serviço de rede sem conexão e sem confirmação, fornecido pelo protocolo IP.
O protocolo TCP interage de um lado com processos das aplicações e do outro com o protocolo da camada de rede da arquitetura Internet. A interface entre o protocolo e a camada superior consiste em um conjunto de chamadas. Existem chamadas, por exemplo, para abrir e fechar conexões e para enviar e receber dados em conexões previamente estabelecidas. Já a interface entre o TCP e a camada inferior define um mecanismo através do qual as duas camadas trocam informações assincronamente.
Este protocolo é capaz de transferir uma cadeia (stream) contínua de octetos, nas duas direções, entre seus usuários. Normalmente o próprio protocolo decide o momento de parar de agrupar os octetos e de, conseqüentemente, transmitir o segmento formado por esse agrupamento. Porém, caso seja necessário, o usuário do TCP pode requerer a transmissão imediata dos octetos que estão no buffer de transmissão, através da função push [Soares97].
Conforme mencionado, o protocolo TCP não exige um serviço de rede confiável para operar, logo, responsabiliza-se pela recuperação de dados corrompidos, perdidos, duplicados ou entregues fora de ordem pelo protocolo de rede. Isto é feito associando-se cada octeto a um número de seqüência. O número de seqüência do primeiro octeto dos dados contidos em um segmento é transmitido junto com o segmento e é denominado número de seqüência do segmento. Os segmentos carregam "de carona" (piggybacking) um reconhecimento.
O reconhecimento constitui-se do número de seqüência
do próximo octeto que a entidade TCP transmissora espera
receber do TCP receptor na direção oposta da conexão.
Por exemplo, se o número de seqüência X for
transmitido no campo Acknowledge (ACK), ele indica que
a estação TCP transmissora recebeu corretamente
os octetos com número de seqüência menores que
X, e que ele espera receber o octeto X na próxima mensagem
[Soares97].
Muitas vezes não são necessários todos os recursos do protocolo TCP e alguns outros protocolos mais simples são utilizados em seu lugar. A alternativa mais comum é o protocolo UDP, designado para aplicações onde o usuário não necessita enviar seqüências longas de datagramas. Ele trabalha como o protocolo TCP, porém ele não divide os dados em múltiplos datagramas. Além disto, o protocolo UDP só mantém controle sobre os dados enviados quando o reenvio for necessário.
Na montagem do datagrama pelo protocolo UDP, o cabeçalho inserido é muito menor do que aquele inserido pelo protocolo TCP.
O protocolo UDP opera no modo sem conexão e fornece um
serviço de datagrama não confiável, sendo,
portanto, uma simples extensão do protocolo IP. O UDP recebe
os pedidos de transmissão de mensagens entregues pelos
processos de aplicação da estação
de origem, e os encaminha ao IP que é o responsável
pela transmissão. Na estação de destino,
o processo inverso ocorre. O protocolo IP entrega as mensagens
(datagramas) recebidas ao UDP que as entrega aos processos de
aplicação, sem nenhuma garantia.