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. 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.

2. 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.

3. 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.
  • Economia de Pacotes: Em vez de B enviar um pacote separado apenas para dizer “Recebi seus dados” (ACK) e logo em seguida outro pacote com os dados dele, B pode enviar um único segmento contendo:
    1. Payload: Os dados que B quer enviar para A.
    2. Cabeçalho TCP: O campo de Acknowledgment Number confirmando o recebimento dos dados de A.
  • Resultados: Isso reduz significativamente o tráfego de controle na rede e melhora a utilização da largura de banda.

4. 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.
  • Congestionamento: 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.

5. 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, teoricamente você pode ter 100 Mbps de upload e 100 Mbps de download acontecendo ao mesmo tempo (na prática, limitado pelo meio físico, mas a camada de transporte não é o gargalo).
    - 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.

Em resumo, 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, necessariamente, o tráfego na direção oposta, maximizando a eficiência e a interatividade da comunicação.