O TCP (que significa Transmission Control Protocol, em português: Protocolo de Controlo de Transmissão) é um dos principais protocolos da camada transporte do modelo TCP/IP. Permite, a nível das aplicações, gerir os dados em proveniência da (ou com destino à) camada inferior do modelo (quer dizer, o protocoloIP). Quando os dados são fornecidos ao protocolo IP, este encapsula-os em datagramas IP, fixando o campo protocolo em 6 (para saber que o protocolo ascendente é TCP…). O TCP é um protocolo orientado para a conexão, quer dizer que permite, a duas máquinas comunicantes, controlar o estado da transmissão.
As principais características do protocolo TCP são as seguintes:
Graças ao protocolo TCP, as aplicações podem comunicar de forma segura (graças ao sistema de avisos de recepção do protocolo TCP), independentemente das camadas inferiores. Isto significa que routers (que trabalham na camada Internet) têm como único papel o encaminhamento dos dados sob a forma de datagramas, sem se preocuparem com o controlo dos dados, porque este é realizado pela camada transporte (mais concretamente pelo protocolo TCP).
Aquando de uma comunicação através do protocolo TCP, as duas máquinas devem estabelecer uma conexão. A máquina emissora (a que pede a conexão) chama-se cliente, enquanto a máquina receptora se chama servidor. Diz-se então que estamos num ambiente Cliente-Servidor.
As máquinas em tal ambiente comunicam em modo ligado, quer dizer que a comunicação se faz nos dois sentidos.
Para permitir o bom desenrolar da comunicação e de todos os controlos que a acompanham, os dados são encapsulados, isto é, juntamos ao pacote de dados um cabeçalho que vai permitir sincronisar as transmissões e assegurar a sua recepção.
Uma outra particularidade do TCP é poder controlar o débito dos dados graças à sua capacidade para emitir mensagens de dimensão variável: estas mensagens designam-se "segmentos".
O TCP permite efetuar uma tarefa importante: multiplexagem/desmultiplexagem, quer dizer fazer transitar numa mesma linha dados que provêm de aplicações diversas ou, por outras palavras, pôr em série informações que chegam em paralelo.
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-mux.gif|230px|]
Estas operações são realizadas graças ao conceito de portas(ou sockets), quer dizer, um número associado a um tipo de aplicação que, combinado com um endereço IP, permite determinar de maneira única uma aplicação que funciona numa dada máquina.
Um segmento TCP é constituído do seguinte modo :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| Porta Fonte | Porta destino | ||||||||||||||||||||||||||||||
|
Número de ordem | |||||||||||||||||||||||||||||||
|
Número de aviso de recepção | |||||||||||||||||||||||||||||||
| Desfasamento
dados | reservada | URG | ACK | PSH | RST | SYN | FIN | Janela | |||||||||||||||||||||||
|
Soma de controlo |
Ponteiro de emergência | ||||||||||||||||||||||||||||||
| Opções | Enchimento | ||||||||||||||||||||||||||||||
|
Dados | |||||||||||||||||||||||||||||||
Significado dos diferentes campos:
O protocolo TCP permite assegurar a transferência dos dados de maneira fiável, embora utilize o protocolo IP, que não integra nenhum controlo de entrega de datagrama.
Na realidade, o protocolo TCP possui um sistema de aviso de recepção que permite ao cliente e ao servidor terem a certeza da recepção correcta e mútua dos dados.
Aquando da emissão de um segmento, um número de ordem (chamado também número de sequência) é associado. Aquando da recepção de um segmento de dado, a máquina receptora vai devolver um segmento de dado cuja bandeira ACK é 1 (para assinalar que se trata de um aviso de recepção), acompanhado de um número de aviso de recepção igual ao número de ordem precedente.
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-ack1.gif|255px|]
Além disso, graças a um cronómetro desencadeado a partir da recepção de um segmento a nível da máquina emissora, o segmento é reenviado assim que o tempo fixado esgotar, porque neste caso a máquina emissora considera que o segmento se perdeu…
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-ack2.gif|255px|]
Contudo, se o segmento não se perder e chegar mesmo assim ao destino, a máquina receptora saberá, graças ao número de ordem, que se trata de uma cópia e conservará apenas o último segmento a chegar ao destino…
Já que este processo de comunicação, que se faz graças a uma emissão de dados e a um aviso de recepção, se baseia num número de ordem (chamado geralmente número de sequência), é necessário que as máquinas emissoras e receptoras (cliente e servidor) conheçam o número de ordem inicial da outra máquina.
O estabelecimento da ligação entre duas aplicações faz-se frequentemente de acordo com o esquema seguinte:
As duas máquinas devem então sincronisar as suas sequências graças a um mecanismo chamado habitualmente three ways handshake (aperto de mãos em três tempos), que encontramos também aquando do encerramento de sessão.
Este diálogo permite iniciar a comunicação e desenrola-se em três tempos, como a sua denominação o indica:
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-3way.gif|255px|three ways handshake - poignée de mains en trois temps]
Sequência à esta sequência que comporta três trocas as duas máquinas synchronisées e a comunicação pode começar!
Existe uma técnica de pirataria, chamada spoofing IP, permitindo corromper esta relação de aprovação à fins maliciosos!
Numerosos em casos, é possível limitar o número de acusados de recepção, a fim de descongestionar a rede, fixando um número de sequência à extremidade do qual acusado de recepção é um necessário. Este número com efeito é armazenado no campo janela da rubrica TCP/IP.
Chama-se certamente este método “método da janela que desliza” porque ele define-se em certa medida um garfo de sequências que não têm necessidade de acusado de recepção, e esta desloca-se a medida que os acusados de recepção forem recebidos.
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-gliss.gif|151px|]
[Image: http://static.commentcamarche.net/...|251px|]
De mais, a dimensão desta janela não é fixa. Com efeito, o servidor pode incluir nos seus acusados de recepção armazenando no campo fenestra a dimensão da janela que lhe parece adaptado. Assim, quando o acusado de recepção indica um pedido de aumento da janela, o cliente vai deslocar o bordo direito da janela.
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-plus.gif|151px|]
Em contrapartida, no caso de uma diminuição, o cliente não vai deslocar o bordo direito da janela para a esquerda mas esperar que o bordo esquerdo avança (com a chegada dos acusados de recepção).
[Image: http://static.commentcamarche.net/pt.kioskea.net/pictures/internet-images-moins.gif|151px|]
O cliente pode pedir a pôr fim à uma conexão assim como o servidor.
O fim da conexão faz-se como segue ::
Para mais informações sobre o protocolo TCP, melhor é adiar-se ao RFC 793 que explica de maneira detalhada o protocolo :