# Redes de computadores/Camada de transporte
## Introdução à Camada de Transporte

A camada de transporte, dentro do modelo OSI, localiza-se abaixo da camada de sessão e acima da camada de rede (Internet). A principal finalidade dessa camada é manter a comunicação entre dois hosts, ou seja, ela é responsável pela transferência fim-a-fim, de maneira eficiente, confiável e econômica de dados entre uma máquina de origem e uma máquina de destino. A camada de transporte prevê dois protocolos, o primeiro deles é o TCP (Transmission Control Protocol — protocolo de controle de transmissão), que é um protocolo orientado a conexões confiáveis, ou seja, ele permite a entrega sem erros de dados de uma determinada máquina a outra máquina da rede. O outro protocolo, o UDP (User Datagram Protocol - protocolo de datagramas do utilizador) corresponde a um protocolo não orientado a conexão, ou seja, sem confiabilidade, já que não há garantia de envio/recebimento de pacotes.
O serviço de transporte mantém um relacionamento muito próximo com o destinatário do serviço. Portanto, deve ser fácil de usar. Podemos relacionar algumas primitivas que os provedores deste tipo de serviço devem adotar, de modo a oferecer um serviço orientado a conexão com um mínimo de funcionalidade (em geral, basta permitir requisições de estabelecimento, uso e encerramento de uma conexão). Primitivas: LISTEN, CONNECT, SEND DATA, RECEIVE e DISCONNECT.
Uma ilustração do serviço provido pela camada de trasporte. Observe a implementação de um serviço de transporte confiável de dados sobre uma camada não confiável.

### Multiplexação e Demultiplexação

Enquanto que a camada de rede fornece uma comunicação host a host, a camada de transporte irá fornecer também uma comunicação processo a processo. Para realizar essa ampliação do serviço provido pela camada de redes, a camada de transporte utiliza o conceito de portas, que é, na verdade, um número que identifica qual processo deverá se encarregar da informação trazida por aquele pacote. Na prática, o aplicativo informa ao sistema operacional que estará escutando uma determinada porta e então todos os pacotes daquele protocolo (UDP ou TCP) serão repassados àquele processo.
O método de receber os dados do processo utilizando uma determinada porta, colocar um cabeçalho e enviar a um determinado processo de outro host é chamado de multiplexação.
O método de receber um pacote vindo de outro host e repassar as informações ao processo correto é chamado de demultiplexação.
Abaixo segue uma ilustração do funcionamento da Multiplexação/Demultiplexação, na qual dois clientes usam o mesmo números de porta destino (80) para se comunicar com a mesma aplicação do servidor web.

### Protocolo UDP

O protocolo UDP é um dos protocolos utilizados pela camada de transporte. A idéia central do protocolo é receber os dados de um processo e entregar ao processo de destino. Não leva em consideração o congestionamento da rede, ou uma entrega confiável dos dados, apenas a multiplexação e demultiplexação.
A grande vantagem do UDP em relação ao TCP (outro protocolo da camada de transporte) está na velocidade de transmissão, relevando a confiabilidade na entrega dos pacotes. Nas aplicações onde velocidade é mais importante do que a ordem em que os pacotes são recebidos, como jogos, vídeos e músicas, o UDP é preferível.
Observe o Cabeçalho UDP, podemos notar a tamanha simplicidade deste protocolo, bem como uma ilustração da idéia do UDP, que é a de transmitir (busca pelo tempo real, velocidade), independentemente da chegada ou não dos pacotes no destinatário (sem garantia de envio/ recebimento).

### Protocolo TCP

O protocolo TCP é outro protocolo utilizado pela camada de transporte. A idéia central deste protocolo é prover confiabilidade no transporte dos dados, não deixando de lado o tráfego na rede (controle de congestionamento) e a multiplexação e demultiplexação.
A grande vantagem do TCP em relação ao UDP está na confiabilidade em que os dados são entregues ao remetente. Este protocolo provê mecanismos que garantem que todos os dados repassados a camada de aplicação não estão corrompidos. Desta forma um host A pode enviar um arquivo ao host B tendo a certeza de que o arquivo, caso seja entregue á camada de aplicação do host B, está íntegro.
O Tcp é orientado a conexão, isto é, um host estabelece uma conexão com outro host, de forma que um pode enviar dados para o outro em modo full duplex.
O TCP, portanto, provê transferência confiável de dados entre processos rodando em sistemas finais. A comunicação entre os dois aplicativos se dá como se eles estivessem fisicamente interligados por um cabo, embora ambos possam estar a milhares de quilômetro de distância um do outro.
Observe uma representação do cabeçalho TCP, uma simples demonstração do propósito do TCP. Percebe-se a complexidade de um pacote TCP, o que reflete toda a confiabilidade e garantia oferecidos por este protocolo. O TCP não está preocupado em apenas enviar os pacotes (velocidade, tempo real), mas sim dar a garantia ao destinatário de que o pacote enviado pelo remetente tenha sido entregue.

## Referências

* James F. Kurose e Keith W. Ross, Redes de Computadores e a Internet - Uma abordagem Top-Down
* Andrew S. Tanenbaum, Redes de Computadores