Curso de Redes – Camada de Transporte da pilha TCP/IP

Camada de Transporte na pilha TCP/IP

A camada de Transporte se localiza entre as camadas de Aplicação e de Internet na pilha TCP/IP, e corresponde à camada de Transporte no modelo OSI. Ela é responsável por fornecer serviços à camada de aplicação, e recebe serviços da camada de Internet. A figura abaixo mostra a relação entre as camadas citadas:

Camadas TCP/IP - Aplicação, Transporte e Internet

No geral, a camada de transporte tem o papel de fornecer funções que permitam a comunicação entre processos de aplicações (softwares) entre computadores diferentes. Assim, a camada de transporte fornece um mecanismo pelo qual diversas aplicações distintas podem enviar e receber dados usando a mesma implementação de protocolos das camadas mais baixas.
Para que isso seja possível, a camada de transporte deve realizar diversas tarefas distintas (porém relacionadas entre si). Por exemplo, os protocolos da camada de transporte devem conseguir discernir quais dados provém de quais aplicações, combinar esses dados em um fluxo de dados que será enviado às camadas mais baixas da pilha de protocolos, e efetuar as tarefas inversas no host de destino, separando os dados e os entregando às aplicações que os devem processar (processos). Além disso, a camada de transporte pode dividir grandes quantidades de dados que devem ser transmitidos em pedaços – ou segmentos – menores para que sua transmissão seja possível.
E, ainda, a camada de transporte pode fornecer serviços de conexão para as aplicações (e outros protocolos) de camadas de nível superior. Esses serviços podem ser orientados á conexão, ou sem conexão, dependendo do protocolo utilizado.
Os protocolos da camada de transporte também podem assegurar uma comunicação confiável entre os hosts, realizando controle de fluxo (taxa de transmissão de dados) e detecção de erros, além de permitir o reenvio de dados quando são perdidos ou descartados.

Funções da Camada de Transporte

As principais funções da camada de transporte são:

  • Comunicação entre processos (processo-processo)
  • Controle de Fluxo
  • Controle de Erros
  • Multiplexação e Demultiplexação
  • Controle de Congestionamento de rede
  • Estabelecer e gerenciar conexões

Vamos estudar essas funções neste artigo e nos próximos artigos, onde trataremos dos protocolos específicos que agem na camada de transporte..

Comunicação entre processos

Um processo é um software em execução, considerado uma entidade da camada de aplicação, a qual irá utilizar os serviços da camada de transporte. Em uma comunicação via rede, a camada de rede é a camada responsável por realizar a comunicação em nível de host, permitindo entregar uma mensagem a um computador de destino. Mas isso não é suficiente para que a comunicação seja efetivamente realizada, pois ao chegar na máquina de destino, uma mensagem precisa ser encaminhada adequadamente para a aplicação que irá tratá-la, ou seja, para o processo correto. É aí que a camada de transporte deve agir, sendo responsável pela entrega da mensagem ao processo apropriado. A figura a seguir compara as camadas de Internet e de Transporte no tocante à transmissão de uma mensagem:

Camada de Transporte versus Camada de Rede

Para que seja possível entregar a mensagem ao processo correto, a camada de transporte se utiliza de identificadores denominados Números de Portas (Port Numbers), que estudaremos na seção a seguir.

Números de Portas

A comunicação entre processos via rede faz uso do paradigma Cliente-Servidor, no qual um processo em um dos hosts, chamado de cliente, requer serviços de um processo em outro host, remoto, chamado de servidor. Em ambos os casos, os processos possuem o mesmo nome. Por exemplo, podemos realizar a conexão remota a um host utilizando uma aplicação (processo) cliente chamado ssh no host local, que irá se comunicar a um processo servidor de nome ssh, executado no host remoto. Desta forma, para que seja possível realizar a comunicação entre dois hosts, precisamos definir alguns parâmetros, listados a seguir:

  • Host Local
  • Processo Local
  • Host Remoto
  • Processo Remoto

Para definirmos os hosts que irão se comunicar, usamos o endereçamento IP, realizado na camada de Internet do TCP/IP (camada de Rede do modelo OSI). Já para que seja possível definir os processos em questão, usamos o conceito de números de portas, que são números inteiros no intervalo de 0 a 65535 (16 bits).

Assim, o processo cliente escolhe um número de porta a utilizar, o qual pode ser um número de porta registrado ou um número de porta efêmero. Esse número, que é utilizado apenas durante a comunicação em curso, é geralmente escolhido como um número de valor maior que 1023, de forma aleatória – isso é, na verdade, uma necessidade para que alguns programas funcionem de forma adequada. O processo servidor também utilizará um número de porta. Porém, nesse caso, a escolha do número a utilizar não será aleatória, mas sim um número escolhido especificamente para o processo em questão, chamado de número de porta bem-conhecido (well-known port number). Por exemplo, para que um cliente possa se comunicar com um servidor via ssh,  o cliente irá escolher um número de porta temporário, como por exemplo 41265, e o servidor irá utilizar um número de porta fixo e “oficial” para o serviço de ssh, que é o número 22.

Desta forma, o IP permite definir o host que está se comunicando e o número de porta define o processo (aplicação) dentro daquele host.

Os números de portas são divididos em três faixas pelo IANA (Internet Assigned Numbers Authority), que é um departamento do ICANN, empresa sem fins lucrativos que coordena a alocação de endereços IPs globalmente, além de outras informações, como os números de portas, cujas faixas são descritas como:

  • Portas Bem-conhecidas, de 0 a 1023. Atribuídas e controladas pelo ICANN
  • Portas Registradas, de 1024 a 49151. Não atribuídas nem controladas pelo ICANN, mas podem ser registradas para evitar duplicação
  • Portas Dinâmicas, Privadas ou Efêmeras, de 49152 a 65535. Não atribuídas nem controladas. Em tese, os sistemas clientes deveriam apenas usar portas desta faixa, mas na prática essa recomendação não é seguida.

Sockets

Um socket (soquete) é a combinação de um endereço IP com um número de porta, o que permite definir um processo de forma única tanto no cliente quanto no servidor. Para que seja possível usar serviços de rede da camada de transporte são necessários, portanto, um par de endereço de socket: um para o cliente e outro para o servidor. Um socket possui dados tanto da camada de Internet (endereço IP), quanto da camada de transporte (número de porta). A seguir temos uma representação de um endereço de socket:

Sockets de Rede

Encapsulamento de mensagens da Camada de Transporte

Para que uma mensagem possa ser enviada de um processo a outro, o protocolo da camada de transporte a ser utilizado deverá encapsular (e desencapsular) as mensagens. O encapsulamento ocorre, naturalmente, na máquina que origina a mensagem, de modo que quando uma aplicação possui uma mensagem a enviar, essa mensagem é passada à camada de Transporte, na qual a mensagem recebe um cabeçalho adequado, contendo entre ouras informações, os números de portas envolvidos na comunicação. Chamamos de segmentos os conjuntos de mensagens e cabeçalhos da camada de transporte, os quais são repassados à camada de Internet onde, ao receberem o cabeçalho apropriado, passam a ser chamados de pacotes. Veja como funciona o encapsulamento e desencapsulamento na figura a seguir:

Encapsulamento da Camada de Transporte

Ao chegar na máquina de destino, o segmento é desencapsulado, seu cabeçalho é descartado e a mensagem é repassada à aplicação determinada na camada de aplicação, para processamento da mensagem. 

Protocolos da Camada de Transporte

A Camada de Transporte da suíte TCP/IP define dois protocolos de transporte padrão: o TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol). O TCP implementa um protocolo de fluxo de dados confiável, podendo assegurar que os dados sejam entregues de forma confiável em seu destino, pois fornece um serviço orientado à conexão. Já o UDP implementa um protocolo de fluxo de dados não-confiável, sem conexão, e que portanto não pode garantir a entrega dos dados ao host de destino. Ambos os protocolos são muito úteis em situações distintas, e serão estudados nos próximos artigos.

 

Sobre Fábio dos Reis (1333 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*