Transmission Control Protocol (Tcp)
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 camadas superiores de aplicação e do outro lado com o protocolo da camada de rede do modelo da 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 de maneira assíncrona.
Este protocolo é capaz de transferir uma cadeia (Stream) contínua de Bytes, nas duas direções, entre seus usuários. Normalmente o próprio protocolo decide o momento de parar de agrupar os Bytes e de, conseqüentemente, transmitir o segmento formado por esse agrupamento.
Porém, caso seja necessário, o TCP pode requerer a transmissão imediata dos Bytes que estão no buffer de transmissão, através da função push. Vale a pena enfatizar que esta função push deverá estar previamente habilitada no código fonte da aplicação em questão para que o TCP saiba como agir.
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 Byte a um número de seqüência. O número de seqüência do primeiro Byte 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 protocolo TCP realiza, além da multiplexagem, uma série de funções para tornar a comunicação entre origem e destino mais fiável.
São responsabilidades do protocolo TCP:
O controlo de fluxo,
O controlo de erro,
A seqüência e a multiplexagem de mensagens.
A camada de transporte oferece para o nível de aplicação um conjunto de funções e procedimentos para acesso ao sistema de comunicação de modo a permitir a criação e a utilização de aplicações de forma independente da implementação. Desta forma, as interfaces socket ou TLI (ambiente Unix) e Winsock (ambiente Windows) fornecem um conjunto de funções-padrão para permitir que as aplicações possam ser desenvolvidas independentemente do sistema operativo no qual funcionarão.
Estados De Uma Conexão TCP
Devido a que toda conexão TCP cria uma máquina de estados para o correto funcionamento da transferência de informação ponto é que vamos explicar em detalhe os diferentes estados de uma conexão TCP para viabilizar a análise do resultado da captura de pacotes na rede.
O TCP corresponde ao protocolo da camada de transporte do modelo de referência OSI que é orientado a conexão. Por ter essa característica, antes de ocorrer a transmissão de dados deve-se estabelecer uma sessão de comunicação entre as duas partes participantes. Essa sessão é estabelecida através de um processo chamado 3-Way Handshake, que irá sincronizar os números de seqüência e oferecer informações de controle necessárias para estabelecimento da conexão.
Como o início e o fim de uma sessão de comunicação são bem definidos e o TCP acompanha o estado de suas conexões mediante flags é importante saber quais são os muitos estados que uma conexão TCP passa.
A tabela mostra o processo de 3-Way Handshake para o estabelecimento de uma conexão TCP.
http://wiki.pm.sc.gov.br/images/Tabela1.png
O reconhecimento (ACK) constitui-se no número de seqüência do próximo Byte 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 Bytes com os números de seqüência menores que X, e que ele espera receber o Byte X na próxima mensagem.
http://wiki.pm.sc.gov.br/images/Tabela2.png
Os estados possíveis (em vermelho) de estabelecimento da conexão TCP são os seguintes:
LISTEN: esse é o estado verdadeiro de uma conexão TCP, ele ocorre quando um computador está esperando um pedido para iniciar uma conexão.
SYN-SENT: esse estado indica que o computador enviou um SYN para iniciar a conexão e está aguardando a resposta SYN-ACK adequada.
SYN-RCVD: esse estado indica que o computador enviou a resposta SYN-ACK depois de ter recebido o SYN.
ESTABLISHED: esse estado (em verde) indica que a conexão foi estabelecida. O computador que iniciou a conexão entra nesse estado depois de receber o SYN-ACK e o computador que responde depois que recebe o ACK.
Como verificamos na tabela acima esses são os estados que os computadores passam no processo de estabelecimento da conexão TCP no processo chamado 3-Way Handshake. Existem outros estados (em azul) que acontecem na hora de finalizar uma conexão TCP:
FIN-WAIT-1: O estado que um computador se encontra após ter enviado um pacote FIN inicial pedindo um fechamento correto da conexão TCP.
CLOSE-WAIT: O estado da conexão do computador que recebeu um FIN inicial e envia de volta um ACK para confirmar o FIN.
FIN-WAIT-2: O estado da conexão do computador que recebeu a resposta ACK para seu FIN inicial, e indica que agora está esperando um FIN final.
LAST-ACK: Esse estado indica que o computador acabou de enviar seu segundo FIN, que é necessário para encerramento correto da conexão TCP, e está aguardando uma confirmação.
TIME-WAIT: Nesse estado encontra-se o computador iniciador que recebeu um FIN final e enviou um ACK para fechar a conexão. Nesse momento ele não irá mais receber nenhuma confirmação do ACK que acabou de enviar, portanto espera um período de tempo para fechar a conexão.
CLOSED: pode-se considerar como “sem estado”. Esse estado existe antes que uma conexão seja iniciada ou quando ela é finalizada.
Estes estados estão ilustrados na tabela abaixo e eles ocorrem dessa forma para o correto fechamento da conexão TCP, onde n indica que o tempo de vida da conexão demorou n intervalos de tempo.
referencia: Wikipom - O Base de Conhecimento da Polícia Militar de Santa Catarina
Assim pessoal, o tempo que o tcp demora pra enviar novo pacote depende da resposta (ack) da máquina de destino.
O ack time out que setamos nos radinhos wireless, é o tempo máximo em que se espera uma resposta, mas não é um resposta a nível de protocolo TCP/IP, embora tenha certa semlhança na função que exerce dentro da conexão, este ack é do protocolo 802.11 utilizado na comunicação wireless.