Multiplexação e demultiplexação orientadas para conexão
Para entender demultiplexação TCP, temos de examinar de perto sockets TCP e estabelecimento de conexão TCP. Há uma diferença sutil entre um socket UDP e um socket TCP: o socket TCP é identificado por uma tupla de quatro elementos: (endereço IP da fonte, número de porta da fonte, endereço IP de destino, número de porta do destino). Assim, quando um segmento TCP que vem da rede chega a um hospedeiro, este usa todos os quatro valores para direcionar (demultiplexar) o segmento para o socket apropriado. Em especial, e ao contrário do UDP, dois segmentos TCP chegando com endereços IP de fonte ou números de porta de fonte diferentes serão direcionados para dois sockets diferentes (com exceção de um TCP que esteja carregando a requisição de estabelecimento de conexão original).
A aplicação servidor TCP tem um socket de entrada que espera requisições de estabelecimento de conexão vindas de clientes TCP (ver Figura 2.29) na porta número 6789.
O cliente TCP gera um segmento de estabelecimento de conexão com a linha
Socket clientSocket = new Socket(“serverHostName”, 6789);
Uma requisição de estabelecimento de conexão nada mais é do que um segmento TCP com número de porta de destino 6789 e um bit especial de estabelecimento de conexão marcado no cabeçalho TCP (que será discutido na Seção 3.5). O segmento inclui também um número de porta de fonte que foi escolhido pelo cliente. A linha acima cria ainda um socket TCP para o processo cliente, através do qual dados podem entrar e sair do processo cliente.
Quando o sistema operacional do computador que está rodando o processo servidor recebe o segmento
de requisição de conexão que está chegando e cuja porta de destino é 6789, ele localiza o processo servidor que está esperando para aceitar uma conexão na porta número 6789. Então, o processo servidor
cria um novo socket:
Socket connectionSocket = welcomeSocket.accept();
A camada de transporte no servidor também nota os quatro valores seguintes no segmento de requisição de conexão: (1) o número de porta da fonte no segmento, (2) o endereço IP do hospedeiro da fonte, (3) o número de porta do destino no segmento e (4) seu próprio endereço IP. O socket de conexão recém-criado é identificado por esses quatro valores; todos os segmentos subsequentes que chegarem, cuja porta da fonte, endereço IP da fonte, porta de destino e endereço IP de destino combinarem com esses quatro valores, serão demultiplexados para essa porta. Com a conexão TCP agora ativa, o cliente e o servidor podem enviar dados um para o outro.
O hospedeiro servidor pode suportar vários sockets TCP simultâneos, sendo cada um ligado a um processo e identificado por sua própria tupla de quatro elementos. Quando um segmento TCP chega ao hospedeiro, todos os quatro campos (endereço IP da fonte, porta da fonte, endereço IP de destino, porta de destino) são usados para direcionar (demultiplexar) o segmento para o socket apropriado.
A situação é ilustrada na Figura 3.5, na qual o hospedeiro C inicia duas sessões HTTP para o servidor B, e o hospedeiro A inicia uma sessão HTTP para o servidor B
Os hospedeiros A e C e o servidor B possuem, cada um, seu próprio endereço IP exclusivo: A, C e B, respectivamente. O hospedeiro C atribui dois números diferentes (26145 e 7532) de porta da fonte às suas duas conexões HTTP. Como o hospedeiro A está escolhendo números de porta independentemente de C, ele poderia.
também atribuir um número de porta da fonte 26145 à sua conexão HTTP. Apesar disso, o servidor B ainda será capaz de demultiplexar corretamente as duas conexões que têm o mesmo número de porta de fonte, já que elas têm endereços IP de fonte diferentes.
Comentários
Postar um comentário