O TCP (que significa Transmission Control Protocol, em português: Protocolo de Controle de Transmissão) é um dos principais protocolos da camada de transporte do modelo TCP/IP. Ele permite, a nível das aplicações, gerir os dados em proveniência da (ou com destino à) camada inferior do modelo (ou seja, o protocolo IP). 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 é o TCP...). O TCP é um protocolo orientado para a conexão, isto é, ele permite a duas máquinas comunicantes, controlar o estado da transmissão.
As principais características do protocolo TCP são:
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 os roteadores (que trabalham na camada Internet) teem como único papel o encaminhamento dos dados sob a forma de datagramas, sem se preocuparem com o controle dos dados, porque este é realizado pela camada de transporte (mais concretamente pelo protocolo TCP).
Durante 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, ou seja, que a comunicação é feita nos dois sentidos.
Para permitir o bom desenrolar da comunicação e de todos os controles que a acompanham, os dados são encapsulados, isto é, juntamos ao pacote de dados um cabeçalho que vai sincronizar as transmissões e assegurar a sua recepção.
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 são chamadas de "segmentos".
O TCP permite efetuar uma tarefa importante: multiplex/desmultiplex, quer dizer, fazer transitar numa mesma linha dados que proveem de aplicações diversas ou, em outras palavras, pôr em série informações que chegam em paralelo.

Estas operações são realizadas graças ao conceito de portas (ou sockets), ou seja, um número associado a um tipo de aplicação que, combinada com um endereço IP, determina, de maneira única, uma aplicação que roda 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 de destino | ||||||||||||||||||||||||||||||
|
Número de ordem | |||||||||||||||||||||||||||||||
|
Número de aviso de recepção | |||||||||||||||||||||||||||||||
| Defasagem
dados | reservada | URG | ACK | PSH | RST | SYN | FIN | Janela | |||||||||||||||||||||||
|
Soma de controle |
Ponteiro de emergência | ||||||||||||||||||||||||||||||
| Opções | Preenchimento | ||||||||||||||||||||||||||||||
|
Dados | |||||||||||||||||||||||||||||||
Significado dos diferentes campos:
O protocolo TCP assegura a transferência dos dados de maneira fiável, embora utilize o protocolo IP, que não integra nenhum controle 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.
Durante a emissão de um segmento, um número de ordem (também chamado de número de sequência) é associado. Na 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.

Além disso, graças a um cronômetro desencadeado a partir da recepção de um segmento na 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...

Contudo, se o segmento não se perder e chegar ao destino mesmo assim , 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, feito graças a uma emissão de dados e a um aviso de recepção, se baseia em um número de ordem (geralmente chamado 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.
Frequentemente, o estabelecimento da ligação entre duas aplicações é feito de acordo com o seguinte esquema :
Então, as duas máquinas deverão sincronizar 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 no encerramento de sessão.
Este diálogo inicia a comunicação e se desenrola em três tempos, como seu nome indica:

Depois desta sequência com três trocas, as duas máquinas sincronizadas e a comunicação podem começar !
Existe uma técnica de hacker, chamada spoofing IP, que corrompe esta relação de aprovação , com fins maliciosos!
Em muitos casos, é possível limitar o número de avisos de recepção, a fim de descongestionar a rede, fixando um número de sequência na extremidade do qual umaviso de recepção é um necessário. Este número é, na verdade, armazenado no campo janela do item TCP/IP.
Efetivamente, este método é chamado de "método da janela que desliza" porque, de uma certa maneira, definimos um trecho de sequências que não teem necessidade de aviso de recepção e, este trecho se desloca à medida que os avisos de recepção são recebidos.


Além disso, a dimensão desta janela não é fixa. Com efeito, o servidor pode incluir nos seus avisos de recepção, armazenando no campo da janela, a dimensão da janela que lhe parece mais adequada. Assim, quando o aviso de recepção indica um pedido de aumento da janela, o cliente vai mover a borda direita da janela.

Por outro lado, no caso de uma diminuição, o cliente não vai mover a borda direita da janela para a esquerda, mas esperar que a borda esquerda avance (com a chegada dos avisos de recepção).

O cliente pode pedir para terminar uma conexão assim como o servidor.
O fim da conexão é feita da seguinte maneira:
Para mais informações sobre o protocolo TCP, o melhor é se referir ao RFC 793, que explica de maneira detalhada o protocolo :