Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

04 - Full-Duplex

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Full-Duplex (Comunicação Bidirecional Simultânea)

A característica Full-Duplex (Duplicação Completa ou Duplo Sentido) na Camada de Transporte refere-se à capacidade de um protocolo (notadamente o TCP) de suportar a transmissão de dados em ambas as direções simultaneamente e de forma independente sobre uma única conexão lógica.

Em um serviço Full-Duplex, os dois hosts (Cliente e Servidor) podem atuar como emissores e receptores ao mesmo tempo. Não é necessário esperar que um lado termine de enviar seus dados para que o outro lado comece a enviar os seus. Isso contrasta com o modelo Half-Duplex (como um rádio walkie-talkie), onde apenas um lado pode falar de cada vez, ou o Simplex (como uma rádio FM), onde a transmissão ocorre apenas em um sentido.


1. Comparação: Simplex, Half-Duplex e Full-Duplex

Modo Direção Exemplos
Simplex A → B (uma via) Rádio FM, TV aberta, sensor unidirecional
Half-Duplex A ↔ B (alternada) Walkie-talkie, Ethernet clássico (CSMA/CD)
Full-Duplex A ⇄ B (simultânea) Telefone moderno, Ethernet em switch, TCP

Diagrama Ilustrativo

SIMPLEX:        A ──────► B        (só A fala)

HALF-DUPLEX:    A ──────► B        (A fala, B ouve)
                A ◄────── B        (depois B fala, A ouve)

FULL-DUPLEX:    A ──────► B        (A e B falam E ouvem simultaneamente)
                A ◄────── B

2. Dois Fluxos de Dados Independentes

Embora estabeleçamos apenas uma conexão TCP (um circuito virtual), ela é composta internamente por dois fluxos de dados separados e independentes:

  1. Fluxo A → B: Dados enviados do Cliente para o Servidor.
  2. Fluxo B → A: Dados enviados do Servidor para o Cliente.

Esses fluxos coexistem no mesmo tubo físico, mas são logicamente distintos. Isso significa que o Cliente pode estar enviando um arquivo de 1 GB para o Servidor (fluxo A → B) enquanto, simultaneamente, o Servidor envia uma mensagem de erro ou status para o Cliente (fluxo B → A), sem que um trânsito interfira na capacidade do outro.

3. Números de Sequência Independentes

Para gerenciar esses dois fluxos simultâneos sem confusão, o protocolo de transporte mantém dois conjuntos separados de Números de Sequência (Sequence Numbers) para a mesma conexão:

  • Seq_A → B: Usado para numerar os bytes que o Cliente envia.
  • Seq_B → A: Usado para numerar os bytes que o Servidor envia.

Quando o Cliente envia um segmento, ele inclui o número de sequência referente aos dados que ele está enviando. Quando o Servidor recebe isso, ele olha para esse número para ordenar os dados do fluxo A → B. A presença de dois espaços de numeração garante que a confirmação de recebimento (ACK) de dados em uma direção não se confunda com os dados sendo enviados na direção oposta.

Estrutura do Cabeçalho TCP

Campo Sentido do Fluxo
Sequence Number Próprio fluxo de envio
Acknowledgment Number Confirma fluxo reverso
Window Size Buffer disponível para receber

4. Piggybacking (Carona de ACKs)

A principal vantagem técnica do modo Full-Duplex na Camada de Transporte é a eficiência obtida através do Piggybacking.

Como os dados fluem em ambas as direções simultaneamente, o protocolo utiliza os segmentos de dados que estão indo em uma direção para carregar as confirmações (ACKs) dos dados que vieram na direção oposta.

Exemplo Prático

Suponha que o Host A esteja enviando dados para o Host B. Simultaneamente, o Host B também tem dados para enviar para o Host A.

  • Sem Piggybacking: B precisaria enviar dois pacotes: um ACK puro confirmando dados de A, e depois outro pacote com seus próprios dados.
  • Com Piggybacking: B envia um único segmento contendo:
    1. Payload: Os dados que B quer enviar para A.
    2. Acknowledgment Number: Confirmação dos dados recebidos de A.
  • Resultado: Reduz significativamente o tráfego de controle na rede e melhora a utilização da largura de banda (overhead cortado pela metade).

5. Controle de Fluxo e Congestionamento Assimétrico

O fato de ser Full-Duplex permite que os mecanismos de controle sejam ajustados independentemente para cada direção da conexão, embora a conexão lógica seja única.

Janela de Recepção (rwnd) Independente

O Host A pode ter muito espaço de buffer disponível para receber dados de B (grande rwnd), permitindo que B envie rápido. Ao mesmo tempo, o Host B pode estar ocupado e com pouco buffer, enviando para A um anúncio de janela baixo (rwnd pequeno), forçando A a enviar devagar. A velocidade em uma direção não dita a velocidade na direção oposta.

Controle de Congestionamento (cwnd)

Embora o congestionamento afete o caminho físico (que geralmente é compartilhado), as decisões de controle de congestionamento (cwnd) podem ser tomadas independentemente com base nos ACKs recebidos em cada direção. Se A está perdendo ACKs para seus dados (indício de congestionamento A→B), isso não afeta a velocidade de envio de B→A.

6. Encerramento Full-Duplex: Four-Way Handshake

Como a conexão é bidirecional independente, o encerramento também é independente. Cada lado fecha seu fluxo de envio separadamente com um FIN:

A → B: FIN, ACK     (A não tem mais dados para enviar)
B → A: ACK          (B confirma, mas pode ainda ter dados)
B → A: ... dados ... (B continua enviando, A só ouve)
B → A: FIN, ACK     (B agora também terminou)
A → B: ACK          (A confirma encerramento)

Esse processo de quatro vias (Four-Way Handshake) é necessário porque o TCP é Full-Duplex: cada direção precisa ser fechada independentemente. O estado CLOSE_WAIT e FIN_WAIT no TCP refletem essa independência.

7. Vantagens e Aplicações

O modo Full-Duplex é essencial para a interatividade moderna:

  • Baixa Latência de Comando: Em aplicações interativas (como SSH ou Telnet), o usuário digita um caractere (fluxo Cliente → Servidor) enquanto o servidor envia a resposta na tela (fluxo Servidor → Cliente) simultaneamente.
  • Throughput Máximo: Utiliza toda a capacidade do enlace em ambos os sentidos simultaneamente. Em um link de 100 Mbps Full-Duplex, você tem teoricamente 100 Mbps de upload E 100 Mbps de download acontecendo ao mesmo tempo.
  • HTTP Persistente: Navegação web moderna permite baixar múltiplos objetos (imagens, CSS) em uma única conexão TCP aberta. O cliente pode solicitar a imagem 1 enquanto já está recebendo a imagem 2 e enviando o pedido da imagem 3, tudo Full-Duplex.
  • Streaming Bidirecional: Aplicações como WebSockets, videoconferência (WebRTC) e jogos online dependem de Full-Duplex para operar com latência baixa em ambos os sentidos.

8. Suporte Full-Duplex na Camada Física

Para que o TCP opere Full-Duplex efetivamente, o meio físico também deve suportar transmissão simultânea bidirecional:

Meio Físico Suporta Full-Duplex? Como
Ethernet com Switch Sim Par separado para TX e RX (Cat 5+)
Ethernet com Hub Não (Half-Duplex) Domínio de colisão único (CSMA/CD)
Wi-Fi 802.11 clássico Não (Half-Duplex) Compartilha espectro (CSMA/CA)
Wi-Fi com MIMO OFDMA Parcial (simulação) Wi-Fi 7 melhora com DL/UL OFDMA
Fibra com 2 cores Sim Um core para TX, outro para RX
Fibra com 1 core (WDM) Sim Comprimentos de onda distintos (CWDM/DWDM)
Rádio Full-Duplex Sim (em laboratório) Cancelamento de auto-interferência

9. Conclusão

O Full-Duplex na Camada de Transporte transforma o canal de comunicação em uma "autoestrada de mão dupla", onde o tráfego em uma direção não bloqueia o tráfego na direção oposta, maximizando a eficiência e a interatividade da comunicação. A combinação de números de sequência independentes, piggybacking de ACKs e encerramento Four-Way faz do TCP um protocolo Full-Duplex sofisticado que sustenta praticamente toda a comunicação interativa da Internet moderna.

Atributo Valor
Modo de operação TCP Full-Duplex
Fluxos de dados por conexão 2 (independentes)
Números de sequência Um por fluxo (Seq_A, Seq_B)
ACKs Piggybacked em segmentos de dados reversos
Encerramento Four-Way Handshake (FIN/ACK/FIN/ACK)
RFC referência RFC 793 (TCP), RFC 9293 (TCP modernizado)