470 likes | 584 Views
REDES DE COMPUTADORES SISTEMAS DE INFORMAÇÃO. UNIPAR – UNIVERSIDADE PARANAENSE Cidade Universitária Paranavaí-PR. Prof. Júlio César Pereira – juliocesarp@unipar.br. Comentários avaliação bimestral. 1 – Defina endereçamento unicast, multicast e broadcast. (1,5)
E N D
REDES DE COMPUTADORESSISTEMAS DE INFORMAÇÃO UNIPAR – UNIVERSIDADE PARANAENSE Cidade Universitária Paranavaí-PR Prof. Júlio César Pereira – juliocesarp@unipar.br
Comentários avaliação bimestral 1 – Defina endereçamento unicast, multicast e broadcast. (1,5) R - Unicast, a origem envia uma mensagem para apenas um destinatário, ou seja, apenas um dispositivo receberá a mensagem. Broadcast, a origem envia uma mensagem para todos os dispositivos da rede. Multicast, a origem envia uma mensagem para um grupo de disposto chamado grupo multicast. 2 – Defina endereçamento estático e dinâmico. (1,0) R - Endereçamento estático, cada host recebe um endereço IP, que fica permanentemente associado à interface de rede da estação sempre que é inicializada. Geralmente, o endereço estático é configurado manualmente. endereçamento dinâmico, os hosts não possuem um endereço predefinido. O host, ao ser inicializado, solicita um endereço IP a um servidor de endereços através de uma mensagem do tipo broadcast na rede. O servidor, ao receber pedido, consulta sua base de dados, seleciona um endereço que esteja livre e o envia para o host que fez a solicitação 2
Comentários avaliação bimestral 3 – Cite três características dos algoritmos de roteamento. (1,5) R – Selecionador o melhor caminho, convergir rapidamente, oferecer robustez, oferecer escalabilidade e consumir pouco recurso. 4 – O que é backbone? (1,0) R- O sistema de redes que forma a estrutura básica da Internet é chamado backbone. Para que sua rede esteja conectada à Internet, ela terá de estar conectada ao backbone de alguma forma, seja direta, seja indiretamente. No Brasil um backbone, é o da Embratel. 3
Comentários avaliação bimestral 5 – Baseado com conceito do protocolo TCP/IP descreva o funcionamento da figura abaixo. (2,0) R - Têm um ponto de saída da rede, também chamado de gateway, que é para onde vão todos os pacotes de dados recebidos e que não são para aquela rede. As redes subseqüentes vão, por sua vez, enviando o pacote aos seus gateways até que o pacote atinja a rede de destino. 4
CAMADA DE TRANSPORTE A principal função da camada de transporte é a comunicação fim a fim entre os processos transmissor e receptor, ou seja, permitir a comunicação entre a origem e o destino como se não existisse a rede de interconexão. Para que ocorra a comunicação fim a fim é necessária a implementação de algum mecanismo de endereçamento na camada de transporte. Nesse caso, serão apresentados os conceitos de portas e sockets utilizados no modelo Internet para endereçamento de transporte. Dependendo do tipo de serviço oferecido, são necessários outros mecanismo, como controle de erro fim a fim, estabelecimento e término de conexões e o controle de fluxo fim a fim. 5
CAMADA DE TRANSPORTE Comunicação Fim a Fim A principal função da camada de transporte é a comunicação fim a fim entre o processo que está sendo executado no host de origem e outro processo no host de destino. Um processo pode ser definido como o ambiente em que uma aplicação é executada. O conceito de processo está intimamente relacionando ao sistema operacional e é o sistema responsável por criar, escalonar e eliminar processos. Sempre que um usuário deseja executar uma aplicação, é necessário criar um processo para tal. O conceito de processo é fundamental para a implementação dos sistemas operacionais multiprogramáveis ou multitarefa, que permitem que diversas aplicações (processos) possam ser executadas concorrentemente. Enquanto a camada de rede está preocupada em conectar o host de origem ao host de destino, a camada de transporte tem a preocupação de conectar uma aplicação que está sendo executada no host de origem a uma aplicação executada no host de destino. Na figura a seguir um usuário utilizando um browser no host A e que faça acesso a um servidor Web no host B. No host A existirá um processo PA em que o browser é executado, e no host B existirá um processo PB em que o servidor WEB é executado. A comunicação fim a fim permite o browser (PA) tenha acesso ao servidor Web (PB) como se não existisse a rede de interconexão. 6
CAMADA DE TRANSPORTE Comunicação Fim a Fim 7
CAMADA DE TRANSPORTE Tipos de Serviços de Transporte A camada de transporte oferece dois tipos de serviços para a camada de aplicação: serviço orientado a conexão e serviço não orientado a conexão. O tipo de serviço irá determinar as características da comunicação fim a fim entre as aplicações. A tabela abaixo apresenta um resumo comparativo entre os serviços orientados e não orientados a conexão, considerando o modelo Internet. 8
CAMADA DE TRANSPORTE No serviço orientado a conexão, como o nome indica, é estabelecida uma conexão lógica entre a origem e o destino antes do início da transmissão, semelhante ao conceito de circuito virtual apresentado na camada de rede. Além disso, o serviço orientado a conexão garante a entrega e a seqüência dos dados transmitidos e, por isso, também é chamado de serviço de transporte confiável. No serviço não orientado a conexão não existe uma conexão lógica entre a origem e o destino, sendo semelhante ao conceito de datagrama apresentado na camada de rede. Além disso, o serviço não-orientado a conexão não garante a entrega e a seqüência dos dados transmitidos. Por isso, esse tipo de serviço também é chamado de serviço de transporte não confiável. O serviço orientado a conexão é indicado para a maioria das aplicações que façam a transmissão de grandes volumes de dados, como a transferência de arquivos e serviço Web. Nesse caso criar uma conexão lógica entre a origem e o destino e garantir que os dados transmitidos serão corretamente recebido simplifica as funções da camada de aplicação e, conseqüentemente, a tarefa de desenvolvimento dos programas. Por outro lado, o serviço orientado a conexão é de implantação extremamente complexa e acarreta atrasos à transmissão, devido à criação e manutenção da conexão lógica, além dos diversos mecanismos necessários para tornar a comunicação confiável. 9
CAMADA DE TRANSPORTE O serviço não-orientado a conexão é indicado para as aplicações que transmitam poucos dados de cada vez. Nesse tipo de aplicação não existe a necessidade de estabelecer uma conexão lógica, pois a conexão será encerrada logo após a ser estabelecida. Também não existe a necessidade de um controle de erro rígido caso um dados seja perdido, pois, nesse caso, basta retransmiti-lo se não houver uma resposta. Essas características tornam o serviço não-orientado a conexão mais rápido que um serviço orientado a conexão, e é indicado para aplicações em que o desempenho é mais importante que a confiabilidade. A camada de transporte pode oferecer apenas um tipo de serviço para a camada de aplicação ou pode oferecer dos dois tipos de serviços. No segundo caso,a aplicação pode escolher qual a melhor opção de comunicação fim a fim em função de suas característica. No modelo Internet, a camada de transporte oferece as duas opções: o protocolo TCP (Transmission Control Protocol), responsável pelo serviço orientado a conexão, e o protocolo UDP (User Datagram Protocol), responsável pelo serviço não-orientado a conexão. 10
CAMADA DE TRANSPORTE Modelo Internet: Aplicação TCP UDP Transporte IP Rede Acesso à rede 11
CAMADA DE TRANSPORTE É importante lembrar que a camada de rede do modelo Internet oferece apenas o serviço não-orientado a conexão, ou seja, não há garantia que os pacotes enviados serão entregues corretamente e em qual seqüência. Nesse caso, uma camada de transporte que ofereça um serviço confiável, com o TCP, permite que as aplicações utilizem a rede sem a preocupação com detalhes e problemas da transmissão. Uma aplicação utilizando o TCP como transporte envia um dado e tem a certeza de que ele será recebido pela outra aplicação. Além disso, o protocolo TCP oferece o mecanismo de controle de fluxo que impede que o receptor seja sobrecarregado com um grande volume de dados enviados pelo transmissor. 12
CAMADA DE TRANSPORTE A figura abaixo apresenta o formato do segmento TCP, definido na RFC-793. Segmento TCP 13
CAMADA DE TRANSPORTE Nem todas as aplicações necessitam dos recursos de controle de erro e controle de fluxo oferecidos pelo protocolo TCP. Em algumas situações é preferível abrir mão da confiabilidade para obter melhor desempenho na transmissão. O protocolo UPD, definido na RFC-768, não implementa os mecanismos de controle oferecidos pelo TCP, com exceção do endereçamento na camada de transporte. Como pode ser observado na figura abaixo, o cabeçalho do datagrama UDP é muito mais simples que o cabeçalho do segmento TCE. Datagrama UDP 14
CAMADA DE TRANSPORTE A tabela a seguir apresenta uma lista de serviços de rede, os protocolos de aplicação e os respectivos protocolos de transporte utilizados. É importante perceber que alguns protocolos de aplicação utilizam tanto TCP quando UDP, justamente pelas diferenças que apresentam. Um bom exemplo de protocolo de aplicação que faz uso de ambos os protocolos de transporte é o DNS (Domain Name System), responsável pelo serviço de nomes no modelo Internet. O DNS utilize o protocolo UDP para as solicitações de resolução de nomes, por serem pequenas e rápidas. Por outro lado, o DNS utiliza o protocolo TCP para a transferência de zonas, por serem grandes volumes de dados e exigirem confiabilidade. 15
CAMADA DE TRANSPORTE Protocolos de aplicação e transporte 16
CAMADA DE TRANSPORTE Endereçamento O endereçamento na camada de rede tem o objetivo de identificar um dispositivo e permitir o roteamento de um pacote entre a origem e o destino. O endereçamento na camada de transporte tem um objetivo deferente. Um host, geralmente, possui inúmeras aplicações em execução, e a camada de transporte permite identificar cada aplicação individualmente. Na figura a seguir existem apenas um endereço de rede e n endereços de transporte (ET), e cada endereço está identificando uma aplicação (AP) individualmente. 17 Endereçamento na camada de transporte
CAMADA DE TRANSPORTE Portas e Sockets Para exemplificar o esquema de endereçamento na camada de transporte, vejamos como esse funcionalidade é implementada no modelo Internet. Na figura seguinte, o servidor possui um endereço de rede lPs e oferece três serviços: Web (SW), correio eletrônico (SC) e terminal remoto (ST). Por sua vez, o cliente possui o endereço de rede lPc e acessa o servidor a partir de três aplicações: cliente Web (CW), cliente de correio (CC) e cliente de terminal remoto (CT). Para cada serviço no servidor e para cada aplicação no cliente deve existir um endereço de transporte associado, que os identifique unicamente e permita implementar a comunicação fim a fim entre os processos. Endereçamento utilizando portas 18
CAMADA DE TRANSPORTE Tanto o protocolo TCP quanto o UDP utilizam o conceito de portas como forma de endereçamento na camada de transporte. Uma porta identifica unicamente uma aplicação em um determinado host, e cada host pode ter 2^16 portas, numeradas de 0 a 65535. Como pode ser observado, os protocolos TCP e UDP possuem dois campos no cabeçalho para endereçamento: um identifica a porta de origem e o outro, a porte de destino. As portas de 0 a 1023 são chamadas de portas reservadas e destinam-se a serviços previamente definidos pelo IANA (Internet Assigned Number Authority) na RFC-1700. O protocolo de aplicação associado e a descrição do serviço. Na figura anterior, por default, o serviço Web (SW) atenderia na porta 80, o serviço de correio (SC) na porta 25 e o serviço de terminal remoto (ST) na porta 23. Essa é uma forma de mapeamento de endereço estático que facilita aos usuários remotos o acesso aos serviços de rede. Portas reservadas: 19
CAMADA DE TRANSPORTE As portas entre 1024 e 49151 são chamadas de portas registradas. Essas portas não são controladas pelo IANA, mas a entidade mantém um registro das portas utilizadas pela comunidade. Por exemplo, as portas 6000 a 6063 estão associadas a um servidor X Windows. As portas de 49152 a 65535 são chamadas de portas dinâmicas ou privadas podem ser alocadas e desalocadas dinamicamente pelo sistema operacional para as aplicações que precisem de um endereço temporário de transporte. Por exemplo, quando um cliente precisa de uma porta, a aplicação faz uma solicitação ao sistema operacional, que devolve uma porta livre para uso temporário. As portas permitem a identificação de uma aplicação no host em que estão sendo executadas, porem não e suficiente para que um usuário remoto possa identificar a aplicação. Para que isso seja possível, a camada de transporte utiliza conceito de socket, que permite a identificação única de uma aplicação em um determinado host. O socket e formado por duas informações básicas: o endereço IP do host e a porta em que a aplicação esta associada. Na figura a seguir existem seis sockets: três no servidor e três no cliente. Por exemplo, o socket (IPs, 80) identifica unicamente o serviço Web (SW) no servidor, e o socket (IPc, 1501) identifica unicamente o cliente Web (CW). 20
CAMADA DE TRANSPORTE Sockets e conexões lógicas 21
CAMADA DE TRANSPORTE No caso do protocolo TCP, que oferece um serviço orientado a conexão, o socket de origem associado ao socket de destino forma o que e definido como conexão lógica. Na figura acima existem três conexões lógicas como, por exemplo, o socket (IPs, 80) associado ao socket (IPc, 1501). Uma conexão lógica TCP e full-duplex, ou seja, a transmissão pode ocorrer nos dois sentidos ao mesmo tempo. As aplicações SW e CW podem enviar e receber dados simultaneamente utilizando apenas uma conexão lógica. No protocolo UDP, que trabalha com um serviço não-orientado a conexão, apesar de existir o conceito de socket, não existe a conexão lógica ligando as aplicações, como no protocolo TCP O comando netstat do MS Windows permite visualizar as conexões lógicas entre a máquina cliente, da qual se esta executando o comando, e os servidores acessados. O comando a seguir utiliza o parâmetro -n para exibir os endereços IPs dos hosts. Sem o parâmetro, o comando exibe o nome dos hosts. A saída do comando apresenta três conexões lógicas, todas partindo do cliente 10.41.1.110, que utiliza as portas dinâmicas 2691, 2892 e 2693, cada uma para uma conexão lógica. A primeira conexão é no servidor de FTP 200.192.112.10 na porta padrão 21, a segunda e no servidor Web 146.164.2.42 na porta padrão 80 e a terceira, uma conexão remota do tipo Telnet ao servidor 10.15.1.254 na porta padrão 23. A coluna Estado indica o estado da conexão e, no exemplo, ESTABLISHED significa que a conexão foi estabelecida. Existem diversos outros estados como por exemplo, LISTEN e CLOSING, que podem ser consultadas na RFC-793. 22
CAMADA DE TRANSPORTE O comando netstat. 23
CAMADA DE TRANSPORTE Port Address Translation (PAT) Camada de Rede foi apresentada a técnica de NAT (Network Address Translation) como forma de contornar o problema da escassez de endereços de rede. O PAT (Port Address Translation) ou NAPT (Network Address Port Translation) é um tipo de NAT que permite que uma instituição opere com apenas um endereço na rede pública, mesmo possuindo inúmeros hosts na rede privada. A principal diferença entre o NAT e o PAT é que este último utiliza o endereçamento de portas na camada de transporte. O PAT vem sendo utilizado, especialmente, em pequenas escritórios e redes domésticas para conectar uma rede local à Internet. Geralmente, as redes locais são conectadas à Internet via DSL (Digital Subscriber Line) ou cable modem utilizando apenas um endereço IP classe C. A figura a seguir apresenta a rede privada 10.0.0.0 conectada à rede pública, no caso a Internet, através do roteador R. O roteador R utiliza um endereço privado classe A (10.0.0 1 ) para a rede interna e um endereço classe C (206.245.160) para a rede externa. Vejamos como o host A (10.0.0.2) utiliza o serviço Web no host B (146.164.2.70) utilizando o esquema de PAT inicialmente, o pacote sai do host A e chega ao roteador (10.0.0.1), indicando que o host A quer sair para a rede pública. O roteador registra o socket interno 10.0.0.2:1108 em uma tabela e gera a porta 2101 para ser utilizada juntamente com o endereço externo, formando o socket 206.254.160.1:2101. 24
CAMADA DE TRANSPORTE O socket externo é registrado na tabela e associado ao socket interno. O roteador acessa a porta 80 do host B com o socket externo e todas as respostas vindas do host B são passadas para o socket interno, chegando ao host A. Para o host B é como se não existissem a rede 10.0.0.0 nem o host A. Para o host A o processo de PAT é totalmente transparente. Funcionamento do NPAT 25
CAMADA DE TRANSPORTE Segmentar A comunicação fim a fim entre duas aplicações pode ser resumida à gravação e leitura de dados no socket de origem e destino, respectivamente. Uma aplicação, quando grava dados em um socket, está, na verdade, transferindo dados da aplicação para um buffer na camada de transporte. Esse buffer, chamado de buffer de transmissão (BT), está associado ao socket, que, por sua vez, está associado à aplicação. De forma semelhante, uma aplicação, quando lê dados de um socket, está transferindo dados de um buffer, chamado de buffer de recepção (BR), na camada de transporte para a aplicação. 26 Buffers de transmissão e recepção
CAMADA DE TRANSPORTE No protocolo TCP, como a comunicação é full-duplex, cada socket tem associados dois buffers, um para transmissão e outro para recepção. Logo, uma conexão lógica utiliza quatro buffers, dois na origem e dois no destino. Para simplificar a explicação que se segue, consideramos que a transmissão ocorre apenas em um sentido, do host A para o host B. O processo de segmentação é a tarefa de dividir os dados armazenados no buffer de transmissão em pedaços menores, chamados segmentos, para serem reencaminhados pela camada de rede. No destino, a camada de transporte recebe os segmentos e remonta o dado original no buffer de recepção. O segmento é a estrutura básica que permite a troca de dados entre as camadas de transporte da origem e destino. Para compreender como esse mecanismo é implementado, vejamos um exemplo de uma comunicação fim a fim entre duas aplicações PA e PB executadas nos hosts A e B, respectivamente. Na figura a seguir, a aplicação PA grava dados no buffer de transmissão (BT) para serem enviados. O protocolo TCP, a partir desses dados, monta um segmento (S) que é passado para a camada de rede. Se tudo correr bem, o segmento é recebido pelo host B e remontado no buffer de recepção (BR), em que a aplicação PB pode, então, ler os dados. 27
CAMADA DE TRANSPORTE Transmissão de segmentos TCP 28
CAMADA DE TRANSPORTE No protocolo TCP, os dados gravados pela aplicação PA no buffer de transmissão são organizados como uma seqüência de bytes numerados seqüencialmente de 0 a 2^32 -1 sem nenhum tipo de estruturação. O TCP não reconhece caracteres de controle nem diferencia arquivos de dados e executáveis. O protocolo TCP trabalha com segmentos de tamanho variável, porém o transmissor e o receptor devem definir o tamanho máximo do segmento (Maximum Segment Size – MSS) que será utilizado na conexão. A definição do tamanho máximo do segmento ocorre durante o processo de inicialização da conexão lógica, quando a origem e o destino especificam seus respectivos MSS. A figura a seguir apresenta o exemplo de um buffer de transmissão com 8192 bytes, iniciando na posição 1 e segmentado utilizando um MSS de 1024 bytes. Como pode ser observado, o buffer foi dividido em oito segmentos de 1024 bytes. Cada segmento TCP transmitido identifica a posição do byte dentro do buffer de transmissão, utilizando o campo Número de seqüência que faz parte do cabeçalho do protocolo. Por exemplo, o primeiro segmento S! teria o número de seqüência na posição 1, o segundo segmento S@, o numero 1025 e o oitavo segmento, o número 7168. O receptor, a partir do número de seqüência, pode remontar corretamente os segmentos no buffer de recepção. Exemplo de segmentação 29
CAMADA DE TRANSPORTE A escolha do tamanho máximo do segmento tem um grande impacto no desempenho da rede. Se o MSS escolhido for muito pequeno, os segmentos transportarão poucos dados, subutilizando a capacidade da rede. Se, por outro lado, o MSS for muito grande, o segmento será encapsulado na camada de rede, produzindo um datagrama IP também grande. Dependendo da unidade máxima de transferência (Maximum Transfer Unit - MTU) da camada de enlace, os datagramas deverão ser fragmentados, ocasionando o problema da fragmentação. Para informações adicionais sobre MSS e seus inter-relacionamentos, consultar a RFC -879. A figura a seguir apresenta uma visão geral de uma mensagem na camada de aplicação sendo segmentada e encapsulada na camada de transporte, o segmento sendo encapsulado em um pacote IP e, finalmente, o datagrama sendo encapsulado em um quadro na camada de acesso à rede. 30
CAMADA DE TRANSPORTE Processo de encapsulamento e segmentação 31
CAMADA DE TRANSPORTE Controle de Erro Fim a Fim Nos protocolos não orientados a conexão, como no caso do protocolo UDP, o único controle de erro implementado é a utilização do checksum no cabeçalho. Mesmo assim esse controle é opcional. Nesse caso, o controle de erro é deixada para camada superior, ou seja, a camada de aplicação. Nos protocolos orientados a conexão, como no TCP, o protocolo deve resolver todos os problemas deixados pela rede de interconexão, como duplicação de pacotes, datagramas com erro, pacotes fora de ordem e perda de datagramas. O protocolo TCP, para oferecer um serviço de transporte confiável, implementa a maioria dos mecanismos para correção de erros apresentados camada de enlace, como reconhecimento positivo (ACK), reconhecimento negativo (NAK), retransmissão por timeout, piggybacking, reconhecimento cumulativo, janela deslizante e retransmissão seletiva 32
CAMADA DE TRANSPORTE A figura a seguir apresenta a transmissão de três segmentos pelo host A e o seu correto recebimento pelo host B. O host B reconhece os segmentos enviando de volta um segmento com o bit ACK ligado e a indicação do próximo byte esperado, utilizando o campo número de reconhecimento no cabeçalho do protocolo. Geralmente, essas informações são enviadas de carona (piggybacking) em um segmento transmitido do host B para A. Na figura, o ACK 3073 indica que o host B espera receber o segmento a partir da posição 3073 e que os bytes até 3072 foram recebidos com sucesso. Para cada segmento enviado existe um temporizador associado. Caso não seja recebido um ACK em um certo intervalo de tempo, o segmento é retransmitido. O protocolo TCP utiliza um algoritmo de retransmissão adaptativo que regula dinamicamente o temporizador em função da variação do atraso na rede. O receptor utiliza o número de seqüência contido no segmento para identificar segmentos duplicados e fora de ordem. 33
CAMADA DE TRANSPORTE Reconhecimento do Protocolo TCP 34
CAMADA DE TRANSPORTE O protocolo TCP utiliza o esquema de retransmissão seletiva e implementa dois esquemas adicionais que melhoram o desempenho do protocolo. O NAK (No Acknowledgement Option), definido na RFC-I 106, permite que o receptor informe ao transmissor um determinado segmento de dados que ainda não foi recebido. O SACK (Selechve Acknowledgement Opitons), definido na RFC-2018, permite que o receptor informe quais os segmentos de dados que foram corretamente recebidos. Sabendo quais segmentos foram recebidos, o transmissor pode enviar apenas os segmentos que estão faltando. Como o TCP opera no modo full-duplex, são implementadas quatro janelas deslizantes por conexão lógica, duas no host de origem e duas no host de destino, associadas aos buffers de transmissão e recepção. Por exemplo, a partir da janela de Transmissão é possível identificar os bytes já transmitidos e reconhecidos (BTR), os bytes transmitidos e não-reconhecidos (BTNR), os bytes não-transmitidos (BNT), mas que ainda podem ser transmitidos, e os bytes que devem aguardar para serem transmitidos (BAT). Na janela de recepção, teríamos os bytes recebidos e reconhecidos, os bytes não-recebidos, mas que ainda podem ser recebidos, e os bytes que devem aguardar para serem recebidos. 35
CAMADA DE TRANSPORTE Inicio e Término de Conexões Quando a camada de transporte oferece um serviço orientado a conexão, como é o caso do protocolo TCP, é necessário que seja implementado um mecanismo que permita o inicio e o término de conexões lógicas. Para exemplificar o processo, suponha duas aplicações que residam nos hosts A e B, respectivamente, e desejam se comunicar Para que as aplicações possam realizar uma transmissão é preciso que antes estabeleçam uma conexão lógica entre os dois processos. Depois de criada a conexão, as aplicações podem iniciar a troca de dados. Não havendo mais dados a serem transmitidos, as aplicações podem encerrar a conexão lógica. Para exemplificar o mecanismo de inicio e término de conexões, vejamos sua implementação no protocolo TCP de forma simplificada. O cabeçalho do protocolo possui dois bits que são utilizados na criação de uma conexão lógica: o bit SYNe o bitACK. Na figura a seguir o host A, que deseja estabelecera conexão, envia o segmento Sx com o bit SYN ligado. Ao receber o segmento, o host B responde com o segmento Sy com os bits SYN e ACK ligados, indicando que está reconhecendo o segmento Sx e dando continuidade ao processo de conexão. Finalmente, a origem confirma o seu desejo de estabelecer a conexão lógica enviando o segmento Só com o bit ACK ligado, reconhecendo o segmento Sy Por exigir três passos para o estabelecimento da conexão, esse mecanismo é chamado de three-way handshalke. 36
CAMADA DE TRANSPORTE Pedido de conexão 37
CAMADA DE TRANSPORTE Depois de estabelecida a conexão, a aplicação no host A pode enviar dados para a aplicação no host B, utilizando os sockets de origem e destino que formam a conexão lógica. Da mesma forma, o host B pode enviar dados para A, ou seja, a conexão lógica TCP permite a comunicação nos dois sentidos ao mesmo tempo. A figura a seguir apresenta o processo para o término de uma conexão lógica entre os hosts A e B. O cabeçalho do protocolo possui dois bits que são utilizados nesse processo: o bit FIN e o bit ACK. Por ser uma conexão full-duplex, o término da conexão deve ser realizado tanto pela origem quanto pelo destino. Inicialmente, o host A envia o segmento Sx com o bit FIN ligado, indicando que deseja encerrar a conexão. O host B recebe o pedido de desconexão e envia um segmento reconhecendo o pedido. Ao receber o reconhecimento, o host A está desconectado, porém o host B pode continuar enviando dados. Algum tempo depois, o host B envia o segmento Sy com o bit de FIN ligado, indicando que também deseja encerrar a conexão. Apesar de estar desconectado, o host A envia um reconhecimento para o segmento Sy, e o host BÁ ao recebe-lo, estará desconectado. 38
CAMADA DE TRANSPORTE Pedido de desconexão 39
CAMADA DE TRANSPORTE Controle de Fluxo Fim a Fim O problema de controle de fluxo na Camada de Enlace e permite que o dispositivo transmissor regule o volume de dados enviados de forma a não gerar uma sobrecarga no receptor. Caso contrario, o destino terá que descartar os dados transmitidos, obrigando à sua retransmissão. Enquanto o controle de fluxo na camada de enlace está preocupado com o volume de dados transmitido entre dois dispositivos adjacentes, o controle de fluxo na camada de transporte preocupa-se com o volume de dados transmitido entre duas aplicações e, por isso, é chamado de controle de fluxo fim a fim. Na próxima figura, o host A possui uma aplicação PA que transmite dados para a aplicação PB no host B. No host A existe um buffer de transmissão BT utilizado pela aplicação PA para gravar dados. À medida que os dados são gravados no BT, os dados são transmitidos. O host B recebe os dados e os armazena no buffer de recepção BR, que pode ser lido pela aplicação PB. Conforme os dados são lidos pela aplicação PB, novos dados podem ser recebidos e colocados no BR. Se, por algum motivo, a aplicação PB parar de ler os dados no buffer de recepção mas a aplicação PA continuar enviando dados, em algum momento o BR ficará cheio e novos dados deverão ser, simplesmente, descartados. Nesse caso, a origem deverá retransmitir os dados descartados, consumindo recursos da rede desnecessariamente. Os buffers de transmissão e recepção utilizados na camada de transporte geralmente fazem parte do núcleo do sistema operacional e possuem um tamanho máximo definido na criação do socket. 40
CAMADA DE TRANSPORTE No protocolo TCP, o controle de fluxo é implementado através do campo Tamanho da janela presente no cabeçalho do protocolo, juntamente com o mecanismo de janela deslizante. Sempre que um segmento é reconhecido o receptor informa ao transmissor o número de bytes ainda disponível no buffer de recepção. Conforme o espaço no buffer de recepção diminui, o receptor informa uma janela de recepção menor ao transmissor, que pode ajustar a sua janela de transmissão de forma a não sobrecarregar o receptor. 41 Problema de buffer
CAMADA DE TRANSPORTE Em um caso extremo, o receptor pode informar uma janela de recepção de tamanho zero, indicando que não há mais espaço para novos dados no buffer de recepção. Nesse caso, o transmissor para de enviar dados até que uma janela de recepção maior que zero seja informada. Para assegurar que a janela de recepção está realmente cheia, o transmissor pergunta ao receptor, periodicamente, o tamanho da sua janela de recepção. O protocolo UDP não utiliza o esquema de controle de fluxo fim a fim. Caso o buffer de recepção fique cheio, os dados serão simplesmente descartados e, como o protocolo não implementa nenhum mecanismo de correção de erro, os dados são, na verdade, perdidos. Fica a cargo da camada de aplicação implementar os mecanismos de controle caso necessário. 42
CAMADA DE TRANSPORTE Interface de Programação de Rede A interface de programação de rede ou API (Application Program Interface) permite o desenvolvimento de aplicações que se comuniquem utilizando a rede de forma rápida e simples. A partir da interface de programação, é possível utilizar os recursos da rede sem conhecer os detalhes do funcionamento dos protocolos e como são implementadas. Para permitir esse nível de abstração, a API de rede pode ser visualizada como uma subcamada isolando as camadas de transporte e aplicação. Interface de programação em modelo de camadas 43
CAMADA DE TRANSPORTE Uma interface de programação define um conjunto de rotinas e seus respectivos parâmetros de entrada e saída. Ao desenvolvedor basta utilizar as rotinas definidas na API dentro de seus programas para ter acesso aos recursos da rede. Geralmente, as rotinas que compõem a API fazem parte de uma biblioteca do sistema operacional, permitindo seu compartilhamento pelos diversos usuários e aplicações no sistema. A primeira interface de programação para ser utilizada em redes TCP/IP foi desenvolvida da década de 1980 para o sistema operacional Unix da Universidade de Berkeley, nos EUA, também conhecida como BSD Unix. Como a interface de programação utilizava o conceito de socket, a interface ficou conhecida como BSI (Berkeley Socket Interface) ou, simplesmente, interface de socket. Posteriormente, diversos fabricantes passaram a utilizar o Unix de Berkeley e, consequentemente, sua API de rede, tornando essa interface um padrão de mercado. Uma outra API disponível para sistemas Unix é conhecida como TLI (Transport Layer Interface). A interface TLI foi desenvolvida pela AT&T para o Unix System V porém é pouco popular. A Microsoft portou a interface de socket para o sistema operacional Windows, resultando no Windows Socket Interface ou, simplesmente, WinSock. Apesar de o BSI e o WinSock serem muito semelhantes, não são integralmente compatíveis. A Tabela a seguir apresenta as principais funções que fazem parte da interface de socket. 44
CAMADA DE TRANSPORTE Funções da interface de socket 45
CAMADA DE TRANSPORTE A interface de socket utiliza o conceito de aplicações cliente-servidor. Nesse modelo, o cliente solicita uma informação ao servidor, que processa o pedido e retorna uma resposta ao cliente. A figura apresenta um exemplo simplificado de duas aplicações, uma cliente e outra servidor, utilizando a interface de socket. 46 Exemplo de cliente-servidor utilizando sockets