|
PROTOCÓLO TCP/IP
UPara
hackear um sistema ligado a internet/intranet ou ate mesmo um uma
simples rede que utiliza o tcp/ip, nada melhor do que saber lidar
a fundo com o protocolo mais usado e mais famoso no mundo
inteiro.
TCP/IP
TCP/IP e o nome que se da a toda a família de
protocolos utilizados pela Internet. Esta família de protocolos
foi desenvolvida pela DARPA (Defense Advanced Research Project
Agency) no DoD (Departamento de Defessa dos Estados Unidos).
Este conjunto de protocolos foi desenvolvido p/permitir aos
computadores compartilharem recursos numa rede. Toda a família
de protocolos inclui um conjunto de padrões que especificam os
detalhes de como comunicar computadores, assim como também
convenäes para interconectar redes e rotear o trêfego.
Mas ao contrario do que acontece na imprensa, o nome completo
raramente e usado. O TCP e o IP são protocolos individuais que
podem ser discutidos de modo isolado, mas eles não são os
únicos protocolos que compõem essa família. Pode acontecer de
um usuário do TCP/IP não utilizar o protocolo TCP propriamente
dito, mas sim alguns protocolos da família. A utilização do
TCP/IP nessa situação não deixa de ser apropriada porque o
nome se aplica de modo genérico ao uso de qualquer protocolo da
família TCP/IP.
Pilha
ARP........................................ Address Resolution
Protocol
ICMP ......................................Internet Control
Message Protocol
UDP User ............................ Datagram Protocol
RIP Routing .........................Information Protocol
HTTP .....................................Hypertext Transfer
Protocol
NNTP ....................................Network News Transfer
Protocol
*SMTP=">............................ Simple Mail Transfer
Protocol
SNMP ...................................Simple Network Management
Protocol
FTP .......................................File Transfer Protocol
TFTP ....................................Trivial File Transfer
Protocol
INETPhone ........................Telephone Services on Internet
IRC .......................................Internet Relay Chat
RPC .....................................Remote Procedure Call
NFS .....................................Network File System
DNS ....................................Domain Name System
Talvez seja dificil lembrar todos esses acrônimos, ate porque
alguns também são utilizados por outros protocolos (por exemplo
o protocolo RIP da família Novell, ou o IPX, e diferente do RIP
da família TCP/IP). Alem do mais, saber exatamente quais são os
protocolos que compõem uma determinada família não e
pre-requisito para compreender o funcionamento básico da rede.
Uma visão resumida do Protocolo
Alguma transferencia se inicia com um pedido de leitura ou
escrita de um arquivo, o qual também serve para pedir uma
conexão. Se o servidor reconhece o pedido, a conexão e aberta e
o arquivo e enviado num bloco de tamanho fixo de 512 bytes.
Cada pacote de dados contem um bloco de dados e deve ser
reconhecido por um pacote de acknowledgment antes que o próximo
pacote possa ser enviado. Um pacote de dados menor que 512 bytes
sinaliza a terminação de uma transferencia.
Se um pacote consegue se perder na rede, o receptor indicara
time-out e poderá retransmitir seu ultimo pacote (o qual pode
ser dados ou um reconhecimento ). Isto motiva ao transmissor do
pacote perdido a retransmitir o pacote perdido. O transmissor tem
que guardar apenas um pacote para retransmisão, desde cada passo
de reconhecimento garante que todos os pacotes mais anteriores
tenham sido recebidos.
Notar que as duas maquinas envolvidas na transferencia são
consideradas transmissoras e receptoras. Uma envia dados e recebe
reconhecimento, a outra envia reconhecimento e recebe dados.
Muitos erros são causados pela terminação da conexão. Um erro
e sinalizado enviando um pacote de erro. Este pacote não e
reconhecido nem retransmitido (i.e., um servidor TFTP ou usuário
pode terminar depois enviando uma mensagem de erro) assim o outro
terminal da conexão não deve recebe-lo. Portanto os time-out
são usados para detectar tais terminais quando o pacote de erro
foi perdido.
Protocolo IP
O protocolo IP define mecanismos de expedição de
pacotes sem conexão. IP define três pontos importantes:
A unidade básica de dados a ser transferida na Internet.
O software de IP executa a função de roteamento, escolhendo um
caminho sobre o qual os dados serão enviados.
Incluir um conjunto de regras que envolvem a idéia da
expedição de pacotes não confiáveis. Estas regras indicam
como os hosts ou gateways poderiam processar os pacotes; como e
quando as mensagens de erros poderiam ser geradas; e as
condições em que os pacotes podem ser descartados.
Dentro do protocolo IP tem os seguintes tópicos:
Endereços IP
Formato do datagrama IP
Roteamento do datagrama IP
ICMP (Internet Control Message Protocol)
TCP (Transport Control Protocol)
TCP e um protocolo da camada de transporte. Este e um protocolo
orientado a conexão, o que indica que neste nível vão ser
solucionados todos os problemas de erros que não forem
solucionados no nível IP, dado que este ultimo e um protocolo
sem conexão. Alguns dos problemas com os q TCP deve tratar são:
Pacotes perdidos ou destruídos por erros de transmissão.
Expedição de pacotes fora de ordem ou duplicados.
O TCP especifica o formato dos pacotes de dados e de
reconhecimentos que dois computadores trocam para realizar uma
transferência confiável, assim como os procedimentos que os
computadores usam para assegurar que os dados cheguem
corretamente. Entre estes procedimentos estão:
Distinguir entre múltiplos destinos numa maquina determinada.
Fazer recuperação de erros, tais como pacotes perdidos ou
duplicados.
Para entender melhor o protocolo TCP a seguir veremos alguns
conceitos, para depois passarmos ao formato TCP.
Portas, Conexões e Endpoints
Segmentos, fluxo e Numero de Seqüência
Formato do Segmento TCP
DNS (Domain Name System) O DNS (Domain Name System) e um esquema
de gerenciamento de nomes, hierárquico e distribuído. O DNS
define a sintaxe dos nome s usados na Internet, regras para
delegação de autoridade na definição de nomes, um banco de
dados distribuído que associa nomes a atributos (entre eles o
endereço IP) e um algoritmo distribuído para mapear nomes em
endereços. O DNS e especificado nas RFCs 882, 883 e 973.
As aplicações normalmente utilizam um endereço IP de 32 bits
no sentido de abrir uma conexão ou enviar um datagrama IP.
Entretanto, os usuários preferem identificar as maquinas
através de nomes ao invés de números. Assim e necessário um
banco de dados que permita a uma aplicação encontrar um
endereço, dado que ela conhece o nome da maquina com a qual se
deseja comunicar.
Um conjunto de servidores de nomes mantém o banco de dados com
os nomes e endereços das maquinas conectadas a Internet. Na
realidade este e apenas um tipo de informação armazenada no
domain system (sistema de domínios).Note que e usado um conjunto
de servidores interconectados, ao invés de um único servidor
centralizado. Existem atualmente tantas instituições conectadas
a Internet que seria impraticável exigir q elas notificassem uma
autoridade central toda vez que uma maquina fosse instalada ou
trocasse de lugar. Assim, a autoridade para atribuição de nomes
e delegada a instituições individuais. Os servidores de nome
formam uma arvore, correspondendo a estrutura institucional. Os
nomes também adotam uma estrutura similar.
Um exemplo típico e o nome chupeta.jxh.xyz.br. Para encontrar
seu endereço Internet, pode ser necessário o acesso a ate
quatro servidores de nomes. Inicialmente deve ser consultado um
servidor central, denominado servidor raiz, para descobrir onde
esta o servidor br. O servidor br e o responsável pela gerência
dos nomes das instituições/empresas brasileiras ligadas a
Internet. O servidor raiz informa como resultado da consulta o
endereço IP de vários servidores de nome para o nível br (pode
existir mais de um servidor de nomes em cada nível, para
garantir a continuidade da operação quando um deles para de
funcionar). Um servidor do nível br pode então ser consultado,
devolvendo o endereço IP do servidor xyz.
De posse do endereço de um servidor xyz e possível solicitar
que ele informe o endereço de um servidor jxh, quando,
finalmente, pode-se consultar o servidor jxh sobre o endereço da
maquina chupeta. O resultado final da busca e o endereço
Internet correspondente ao nome chupeta.jxh.xyz.br
Cada um dos níveis percorridos e referenciado como sendo um
domínio. O nome completo chupeta.jxh.xyz.br e um nome de
domínio.
Na maioria dos casos, não e necessário ter acesso a todos os
domínios de um nome para encontrar o endereço correspondente,
pois os servidores de nome muitas vezes possuem informações
sobre mais de um nível de domínio o que elimina uma ou mais
consultas. Alem disso, as aplicações normalmente tem acesso ao
DNS através de um processo local (servidor para as aplicações
e um cliente DNS),que pode ser implementado de modo a guardar os
últimos acessos feitos, e assim resolver a consulta em nível
local. Essa abordagem de acesso através de um processo local,
simplifica e otimiza a tarefa das aplicações no que tange ao
mapeamento de nomes em endereços, uma vez que elimina a
necessidade de implementar, em todas as aplicações que fazem
uso do DNS, o algoritmo de caminhamento na arvore de domínios
descrito anteriormente.
O DNS não se limita a manter e gerenciar endereços Internet.
Cada nome de domínio e um no em um banco de dados, que pode
conter registros definindo varias propriedades. Por exemplo, o
tipo da maquina e a lista de serviços fornecidos por ela. O DNS
permite que seja definido um alias (nome alternativo) para o no.
Também e possível utilizar o DNS para armazenar informações
sobre usuários, listas de distribuição ou outros objetos.
O DNS e particularmente importante para o sistema de correio
eletrônico. No DNS são definidos registros que identificam a
maquina que manipula as correspondências relativas a um dado
nome, identificado assim onde um determinado usuário recebe suas
correspondências. O DNS pode ser usado também para definição
de listas para distribuição de correspondências
SMTP - Simple Mail Transfer Protocol
O SMTP (Simple Mail Transfer Protocol) e o protocolo usado no
sistema de correio eletrônico na arquitetura Internet TCP/IP. Um
usuario, ao desejar enviar uma mensagem, utiliza o modulo
interface com o usuário para compor a mensagem e solicita ao
sistema de correio eletrônico que a entregue ao destinatário.
Quando recebe a mensagem do usuário, o sistema de correio
eletrônico armazena uma copia da mensagem em seu spool ( área
do dispositivo de armazenamento), junto com o horário do
armazenamento e a identificação do remetente e do destinatario.
A transferencia da mensagem e executada por um processo em
background, permitindo que o usuário remetente, após entregar a
mensagem ao sistema de correio eletrônico, possa executar outras
aplicações.
O processo de transferencia de mensagens, executando em
background, mapeia o nome da maquina de destino em seu endereço
IP, e tenta estabelecer uma conexão TCP com o servidor de
correio eletrônico da maquina de destino. Note que o processo de
transferencia atua como cliente do servidor do correio
eletrônico. Se a conexão for estabelecida, o cliente envia uma
copia da mensagem para o servidor, que a armazena em seu spool.
Caso a mensagem seja transferida com sucesso, o servidor avisa ao
cliente que recebeu e armazenou uma copia da mensagem. Quando
recebe a confirmação do recebimento e armazenamento, o cliente
retira a copia da mensagem que mantinha em seu spool local. Se a
mensagem, por algum motivo, não for transmitida com sucesso, o
cliente anota o horário da tentativa e suspende sua execução.
Periodicamente o cliente acorda e verifica se existem mensagens a
serem enviadas na área de spool e tenta transmiti-las. Se uma
mensagem não for enviada por um período, por exemplo de dois
dias, o serviço de correio eletrônico devolve a mensagem ao
remetente, informando que não conseguiu transmiti-la.
Em geral, quando um usuário se conecta ao sistema, o sistema de
correio eletrônico e ativado para verificar se existem mensagens
na caixa postal do usuário. Se existirem, o sistema de correio
eletrônico emite um aviso para o usuário que, quando achar
conveniente, ativa o modulo de interface com o usuário para
receber as correspondências.
Uma mensagem SMTP divide-se em duas partes: cabeçalho e corpo,
separados por uma linha em branco. No cabeçalho são
especificadas as informações necessárias para a transferencia
da mensagem. O cabeçalho e composto por linhas, que contem uma
palavra-chave seguida de um valor. Por exemplo, identificação
do remetente (palavra-chave "to: "seguida do seu
endereço), identificação do destinatário, assunto da
mensagem, etc... No corpo são transportadas as informações da
mensagem propriamente dita. O formato do texto e livre e as
mensagens são transferidas no formato texto.
Os usuários do sistema de correio eletrônico são localizados
através de um par de identificadores. Um deles especifica o nome
da maquina de destino e o outro identifica caixa postal do
usuário. Um remetente pode enviar simultaneamente varias copias
de uma mensagem, para diferentes destinatários utilizando o
conceito de lista de distribuição(um nome que identifica um
grupo de usuários). O formato dos endereços SMTP e o seguinte:
Nome_local@nome_do_dominio
Onde o nome_do_dominio identifica o domínio ao qual a maquina de
destino pertence (esse endereço deve identificar um grupo de
maquinas gerenciado por um servidor de correio eletrônico). O
nome local identifica a caixa postal do destinatário.
O SMTP especifica como o sistema de correio eletrônico transfere
mensagens de uma maquina para outra. O modulo interface com
usuário e a forma como as mensagens são armazenadas não são
definidos pelo SMTP. O sistema de correio eletrônico pode
também ser utilizado por processos de aplicação para
transmitir mensagens contendo textos.