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.