Como funciona o protocolo TCP?
sobes.tech IA
Resposta da IA
O TCP (Protocolo de Controlo de Transmissão) é um protocolo de nível de transporte que garante uma entrega fiável e orientada à conexão de dados.
Aspectos-chave do funcionamento:
-
Handshake de três vias (Three-way Handshake):
- O cliente envia um pacote SYN (Synchronize) com um número de sequência inicial (ISN).
- O servidor recebe o SYN, envia um SYN-ACK (Synchronize-Acknowledge) que contém o seu ISN e uma confirmação (ACK) do ISN do cliente (
número de reconhecimento = ISN do cliente + 1). - O cliente recebe o SYN-ACK, envia um ACK que confirma o ISN do servidor (
número de reconhecimento = ISN do servidor + 1). - A ligação é estabelecida, e os dados podem ser transmitidos.
-
Transmissão de fluxo de dados: Os dados são transmitidos como um fluxo contínuo de bytes, não como pacotes separados. O TCP segmenta o fluxo de dados em segmentos para transmissão.
-
Numeração de sequência (Sequence Numbers): Cada byte no fluxo de dados tem um número único. Os segmentos contêm o número do primeiro byte que contêm (número de sequência) e o número de reconhecimento (acknowledgement number), que indica o próximo byte que o remetente espera receber com ACK.
-
Reconhecimentos (Acknowledgements - ACK): O receptor envia um ACK para informar ao remetente quais dados foram recebidos com sucesso. Se o remetente não receber um ACK num determinado tempo (timeout), ele retransmite o segmento.
-
Controlo de erro (Error Control): São utilizadas somas de verificação (checksums) para verificar a integridade dos dados. Se um segmento estiver corrompido, é descartado, e o remetente espera um timeout ou um ACK duplicado para retransmitir.
-
Controlo de fluxo (Flow Control): Mecanismo que impede a sobrecarga do buffer do receptor. O receptor informa ao remetente o tamanho da sua janela de receção nos pacotes ACK. O remetente só pode enviar tantos dados quanto a janela indicar.
-
Controlo de congestão (Congestion Control): Mecanismo para determinar a capacidade da rede e regular dinamicamente a velocidade de transmissão para evitar congestão. Inclui algoritmos como slow start, congestion avoidance, fast retransmit e fast recovery.
-
Fecho da ligação: Geralmente usa um handshake de quatro vias:
- Uma parte envia um pacote FIN (Finish).
- A outra parte envia um ACK para o FIN.
- A outra parte envia o seu próprio FIN (após terminar de enviar os seus dados restantes).
- A primeira parte envia um ACK para este FIN.
- A ligação é encerrada.
Estrutura do segmento TCP:
| Campo | Tamanho (bytes) | Descrição |
|---|---|---|
| Porta de origem | 2 | Porta do remetente |
| Porta de destino | 2 | Porta do destinatário |
| Número de sequência | 4 | Número do primeiro byte de dados no segmento |
| Número de reconhecimento | 4 | Número do próximo byte esperado |
| Deslocamento de dados / Comprimento do cabeçalho | 4 bits | Comprimento do cabeçalho TCP |
| Reservado | 6 bits | Reservado |
| Flags (Bits de controlo) | 6 bits | URG, ACK, PSH, RST, SYN, FIN |
| Tamanho da janela | 2 | Tamanho da janela do receptor |
| Soma de verificação | 2 | Soma de verificação do cabeçalho e dados |
| Ponteiro urgente | 2 | Indica dados urgentes (se URG estiver definido) |
| Opções | Variável | Opções adicionais |
| Relleno | Variável | Para alinhamento do cabeçalho |
| Dados | Variável | Dados transmitidos |
// Flags (Bits de controlo):
// URG: Campo de ponteiro urgente significativo
// ACK: Campo de reconhecimento significativo
// PSH: Função push
// RST: Reiniciar a ligação
// SYN: Sincronizar números de sequência
// FIN: Sem mais dados do remetente