Baixe o app para aproveitar ainda mais
Prévia do material em texto
REDES DE COMPUTADORES - CCT0008 Semana Aula: 11 Protocolos de Transporte Tema Protocolos de Transporte Palavras-chave Objetivos O aluno deverá ser capaz de: Explicar a importância do uso dos protocolos TCP e UDP para a comunicação de dados; Comparar e confrontar recursos e serviços oferecidos pelos protocolos TCP e UDP; Descrever como os dados são transmitidos através dos protocolos TCP e UDP Estrutura de Conteúdo Unidade 8: Protocolos de Transporte 8.1. Fundamentos da Camada de transporte 8.1.1. Portas e Sockets 8.1.2. Conexão: Three Way Handshake 8.2. Protocolos TCP e UDP 8.2.1 ? Transporte orientado a conexão ? TCP 8.2.2 ? Transporte não orientado a conexão - UDP Dando continuidade ao aprendizado de protocolos da família TCP/IP. Nesta aula estudaremos os protocolos TCP e UDP, fundamentais para o processo de comunicação entre computadores; Vale lembrar que, tanto o TCP quanto o UDP são protocolos da camada de transporte (com referência ao modelo TCP/IP), enquanto o IP está posicionado na camada de rede; Toda aplicação, que utilizamos atualmente (se desenvolvida para o padrão TCP/IP), utilizará o protocolo TCP para garantir a entrega dos pacotes e utilizará o IP para identificar (por meio de um endereço que chamamos de IP) tanto a máquina de origem quanto a máquina de destino; Ao entender o funcionamento destes protocolos de camada de transporte e camada de rede, nas próximas aulas, abordar-se-ão os protocolos de camada de enlace e física completando, assim, toda a visão do fluxo de pacote desde a origem até o destino. Suporte conceitual: Unidade 8: Protocolos de Transporte 8.1. Fundamentos da Camada de transporte Camada de Transporte Posicionada entre as camadas de Aplicação e Redes, a camada de transporte é fundamental na arquitetura de rede em camadas, pois desempenha o papel fundamental de fornecer serviços de comunicação diretamente aos processos de aplicação que rodam em máquinas diferentes. Isto é, fornece uma comunicação lógica entre estes processos. Os processos de aplicação utilizam a comunicação lógica provida pela camada de transporte sem a preocupação com os detalhes da infraestrutura física utilizada para transportar as mensagens: Divide os dados que chegam da camada de aplicação em segmentos e passa-os com o endereço de destino para a próxima camada para transmissão, que neste caso será a camada de rede. Fornece uma comunicação lógica entre os processos do aplicativo em execução entre hosts diferentes, que pode ser orientada à conexão e não orientada à conexão. A transferência de dados na camada de transporte também pode ser categorizada como confiável ou não confiável, com informações de estado ou sem informações de estado; Utiliza o conceito de porta para a identificação dos processos de aplicação; Especifica 2 tipos de protocolos e a utilização de um ou de outro depende das necessidades da aplicação (SNMP-UDP, FTP-TCP): o TCP (Transmission Control Protocol) o UDP (User Datagram Protocol) 8.1.1. Portas e sockets Portas Identificam os processos de origem e de destino viabilizando a comunicação fim-a-fim. O Sistema operacional oferece uma interface (socket) (linkar com o texto sobre socket no final do arquivo) que permite às aplicações especificarem ou acessarem portas em um determinado host enviando e recebendo datagramas de forma independente. As portas são classificadas em: ? Reservadas (padronizadas através da RFC 1070) - 0 - 1023 ? Liberadas (automaticamente definida pelo SO para aplicações clientes e/ou portas de servidores de aplicações ainda não reconhecidas formalmente na Internet) - 1024 a 65535 Exemplos de Portas conhecidas Porta TCP - Descrição 20 - Servidor FTP (File Transfer Protocol, protocolo de transferência de arquivo) (canal de dados) 21 - Servidor FTP (canal de controle) 23 - Servidor Telnet 53 - Transferências de zona DNS (Domain Name System, sistema de nomes de domínios) 80 - Servidor da Web (HTTP, Hypertext Transfer Protocol, protocolo de transferência de hipertexto) 139 - Serviço de sessão de NetBIOS Porta UDP - Descrição 53 - Consultas de nomes DNS (Domain Name System, sistema de nomes de domínios) 69 - Trivial File Transfer Protocol (TFTP) 137 - Serviço de nomes de NetBIOS 138 - Serviço de datagrama de NetBIOS 161 - Simple Network Management Protocol (SNMP) 520 - Routing Information Protocol (RIP, protocolo de informações de roteamento) Socket A associação entre 2 processos cooperantes (cliente/servidor) é identificada por um par de sockets (socket1, socket2), uma vez estabelecida uma conexão, cada socket corresponde a um ponto final dessa conexão. É o identificador único de cada conexão existente num host em determinado momento pois associa IP origem, porta origem, IP de destino e Porta de Destino. 8.1.2. Conexão: Three Way Handshake O protocolo TCP especifica três fases durante uma conexão: estabelecimento da ligação, transferência e término de ligação. O estabelecimento da ligação é feito em três passos, enquanto que o término é feito em quatro. Durante a inicialização são inicializados alguns parâmetros, como o Sequence Number (número de sequência) para garantir a entrega ordenada e robustez durante a transferência. Estabelecimento da ligação Tipicamente, numa ligação TCP existe aquele designado de servidor (que abre um socket e espera passivamente por ligações) num extremo, e o cliente no outro. O cliente inicia a ligação enviando um pacote TCP com a flag SYN activa e espera-se que o servidor aceite a ligação enviando um pacote SYN+ACK. Se, durante um determinado espaço de tempo, esse pacote não for recebido ocorre um timeout e o pacote SYN é reenviado. O estabelecimento da ligação é concluído por parte do cliente, confirmando a aceitação do servidor respondendo-lhe com um pacote ACK. Durante estas trocas, são trocados números de sequência iniciais (ISN) entre os interlocutores que irão servir para identificar os dados ao longo do fluxo, bem como servir de contador de bytes transmitidos durante a fase de transferência de dados (sessão). No final desta fase, o servidor inscreve o cliente como uma ligação estabelecida numa tabela própria que contém um limite de conexões, o backlog. No caso do backlog ficar completamente preenchido a ligação é rejeitada ignorando (silenciosamente) todos os subsequentes pacotes SYN. Transferência de dados (sessão) Durante a fase de transferência o TCP está equipado com vários mecanismos que asseguram a confiabilidade e robustez: números de sequência que garantem a entrega ordenada, código detector de erros (checksum) para detecção de falhas em segmentos específicos, confirmação de recepção e temporizadores que permitem o ajuste e contorno de eventuais atrasos e perdas de segmentos. Como se pode observar pelo cabeçalho TCP, existem permanentemente um par de números de sequência, doravante referidos como número de sequência e número de confirmação (ACKnowledgement). O emissor determina o seu próprio número de sequência e o receptor confirma o segmento usando como número ACK o número de sequência do emissor. Para manter a confiabilidade, o receptor confirma os segmentos indicando que recebeu um determinado número de bytes contíguos. Uma das melhorias introduzidas no TCP foi a possibilidade do receptor confirmar blocos fora da ordem esperada. Esta característica designa- se por selective ACK, ou apenas SACK. A remontagem ordenada dos segmentos é feita usando os números de sequência, de 32 bit, que reiniciam a zero quando ultrapassam o valor máximo, 231-1, tomando o valor da diferença. As confirmações de recepção (ACK) servem também ao emissor para determinar as condições da rede. Dotados de temporizadores,tanto os emissores como receptores podem alterar o fluxo dos dados, contornar eventuais problemas de congestão e, em alguns casos, prevenir o congestionamento da rede. O protocolo está dotado de mecanismos para obter o máximo de performance da rede sem a congestionar ? o envio de tramas por um emissor mais rápido que qualquer um dos intermediários (hops) ou mesmo do receptor pode inutilizar a rede. São exemplo a janela deslizante, o algoritmo de início-lento Adequação de parâmetros O cabeçalho TCP possui um parâmetro que permite indicar o espaço livre atual do receptor (emissor quando envia a indicação): a janela (ou window). Assim, o emissor fica a saber que só poderá ter em trânsito aquela quantidade de informação até esperar pela confirmação (ACK) de um dos pacotes - que por sua vez trará, com certeza, uma atualização da janela. Curiosamente, a pilha TCP no Windows foi concebida para se auto-ajustar na maioria dos ambientes e, nas versões atuais, o valor padrão é superior em comparação com versões mais antigas. Porém, devido ao tamanho do campo, que não pode ser expandido, os limites aparentes da janela variam entre 2 e 65535, o que é bastante pouco em redes de alto débito e hardware de alta performance. Para contornar essa limitação é usado umaOpção especial que permite obter múltiplos do valor da janela, chamado de escala da janela, ou TCP window scale; este valor indica quantas vezes o valor da janela, de 16 bit, deve ser operado por deslocamento de bits (para a esquerda) para obter os múltiplos, podendo variar entre 0 e 14. Assim, torna-se possível obter janelas de 1gigabyte. O parâmetro de escala é definido unicamente durante o estabelecimento da ligação. Término da ligação A fase de encerramento da sessão TCP é um processo de quatro fases, em que cada interlocutor responsabiliza-se pelo encerramento do seu lado da ligação. Quando um deles pretende finalizar a sessão, envia um pacote com a flag FIN ativa, ao qual deverá receber uma resposta ACK. Por sua vez, o outro interlocutor irá proceder da mesma forma, enviando um FIN ao qual deverá ser respondido um ACK. Pode ocorrer, no entanto, que um dos lados não encerre a sessão. Chama-se a este tipo de evento de conexão semi-aberta. O lado que não encerrou a sessão poderá continuar a enviar informação pela conexão, mas o outro lado não. (http://pt.wikipedia.org/wiki/Transmission_Control_Protocol.) 8.2. Protocolos TCP e UDP TCP (Protocolo de Controle de Transmissão): protocolo que oferece serviços de entrega de pacotes orientados à conexão. Dentre esses serviços estão verificação de erros e numeração sequencial. O dispositivo de destino responde com um pacote de confirmação de recebimento a cada pacote ou grupo de pacotes recebido; UDP (Protocolo de Datagrama do Usuário): protocolo que oferece serviço de entrega de pacotes em conexão, ou seja, sem nenhum tipo de verificação de erros, numeração sequencial ou garantia de entrega; Entrega confiável x entrega não confiável A entrega confiável de dados assegura a entrega dos segmentos ao seu destino em uma sequência adequada, sem qualquer dano ou perda. Um protocolo confiável como o TCP cuida de todos os problemas fundamentais de rede como congestionamento, fluxo de dados e duplicação. A entrega não-confiável de dados não promete a entrega dos segmentos ao seu destino. No processo de entrega não confiável de dados, os segmentos podem ser corrompidos ou perdidos. Um protocolo não confiável como o UDP assume que a rede subjacente é completamente confiável. Os protocolos não confiáveis não cuidam de alguns problemas fundamentais como congestionamento, fluxo de dados e duplicação. Entrega com informação de estado x sem informação de estado A entrega de dados com informações de estado utiliza o conceito de ?sessão?, em que um lote de solicitações é enviado e respostas são recebidas. As informações divulgadas em uma solicitação podem ser utilizadas para modificar as solicitações futuras. Na entrega de dados sem informação de estado, cada solicitação é autocontida, sem quaisquer outras informações associadas a qualquer outras informações associadas a qualquer outra solicitação. 8.2.1 ? Transporte orientado a conexão ? TCP TCP O TCP (tranmission Control Protocol ? Protocolo de Controle de Transmissão), RFCs: 793, 1122, 1323, 2018, 2581, é um dos protocolos da pilha TCP/IP que está localizado na camada de transporte. O serviço oferecido pelo TCP tem sete caracterísitcas importantes: Orientação à conexão: um aplicativo primeiro deve solicitar uma conexão com um destino, e então usar a conexão para transferir dados. Comunicação ponto a ponto: cada conexão de TCP tem exatamente duas extremidades. Confiabilidade completa. O protocolo garante que os dados enviados através de uma conexão serão entregues exatamente como enviados, sem dados faltando ou fora de ordem. Comunicação full Duplex: Uma conexão TCP permite que os dados fluam em uma ou outra dreção e permite que um ou outro programa aplicativo envie dos a qualquer hora. Ele pode armazenar nos buffers dados que partem e que chegam em ambas as direções, possibilitando que um aplicativo envie dados e então continue uma computação enquanto os dados estão sendo transferidos. Interface de stream: um aplicativo envia uma sequência contínua de octetos através de uma conexão. Porém não garante que os dados serão entregues ao aplicativo receptor em pedaços do mesmo tamanho que foram transferidos pelo aplicativo remetente. Partida de conexão confiável: O TCP exige que dois aplicativos criem uma conexão, ambos devem concordar com a nova conexão; Desligamento de conexão graciosa(Graceful Connection Shutdown).: um programa aplicativo pode abrir uma conexão, enviar quantias arbitrárias de dados e então requisitar o fechamento da conexão.. O TCP garante a entrega confiável de todos os dados antes de fechar a conexão. O TCP estabelece uma conexão entre o processo na origem e o processo no host de destino antes de enviar os segmentos dos dados reais. Uma vez que a conexão esteja estabelecida, os dados podem ser transferidos em ambas as direções entre dois hosts (full duplex); Para que vários processos simultaneamente usem os serviços do TCP, é usado o conceito de porta, onde cada processo de aplicação, em um dado momento, é identificado por uma porta diferente. Cabeçalho (Header) TCP O TCP utiliza um único formato para todas as mensagens e emprega o termo segmento para se referir a uma mensagem. Onde, Porta Origem e Porta Destino identificam o processo de aplicação que está enviando dados e o processo de aplicação que irá receber os dados. Número de seqüência identifica os bytes enviados. Na prática ele é a identificação do primeiro byte de dados contido no segmento enviado. Os demais são seqüenciados a partir deste byte. Acknowledgement identifica os bytes que foram recebidos e tratados sem erro pelo destino, bem como a seqüência do próximo byte esperado Tamanho é representa o tamanho total do frame TCP Reservado é um campo ainda não utilizado FLAGS identifica as flags (syn, fin, psh, rst, ack, urg) Window identifica o tamanho da janela para o controle de fluxo Checksum destina-se a verificação de erros de transmissão. É calculado usando o pseudo header, o header TCP e também a área de dados Urgent Pointer é um ponteiro para dados urgentes, contidos na área de dados. 8.2.2 ? Transporte não orientado a conexão - UDP UDP O protcolo UDP, padronizado pela RFC 768, é bastante simples, é orientado a datagrama, não orientado à conexão, não executa controle de fluxo, controle de erro e sequenciamento. Não tem reconhecimento dos datagramas (ACK/NACK) e devido a sua simplicidade é considerado não confiável pois não asseguraque as mensagens transmitidas cheguem ao destino e caso cheguem, poderão chegar fora de ordem. A aplicação que utiliza o UDP deve tratar a falta de confiabilidade. Foi desenvolvido para aplicações que não geram volume muito alto de tráfego na Internet Estratégias de Aprendizagem Indicação de Leitura Específica Aplicação: articulação teoria e prática Capturem um fluxo de pacotes e descrevam todos os protocolos envolvidos nesta comunicação. Considerações Adicionais Livro Kurose - Cap 3 - 3.1, 3.2, 3.3 e 3.4
Compartilhar