1 / 77

Nível Transporte

Nível Transporte. Fornece aos níveis superiores serviço eficiente e confiável entre máquina de origem e destino, independente das redes utilizadas. Torna camadas superiores imunes à tecnologia e imperfeições da sub-rede. Questões típicas:

jontae
Download Presentation

Nível Transporte

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nível Transporte • Fornece aos níveis superiores serviço eficiente e confiável entre máquina de origem e destino, independente das redes utilizadas. Torna camadas superiores imunes à tecnologia e imperfeições da sub-rede. • Questões típicas: • Como controlar várias sessões transferindo dados? É possível várias conexões de transporte em uma de rede? E uma conexão de transporte com várias conexões de rede? • Como retomar uma sessão interrompida? • Que ação tomar em caso de congestionamento? Nível Transporte

  2. Porque distingui-lo do N3? • O nível 3 está presente nos roteadores. E se o roteador travar? E se o nível 3 perder pacotes? • É possível que o nível 4 solicite nova conexão de rede com a entidade remota. Pergunta ao remoto onde parou e retoma do ponto interrompido. • A questão é a qualidade de serviço. • As aplicações utilizam um conjunto padrão de primitivas que funcionam em várias redes. Nível Transporte

  3. Camadas de Rede, Transporte, Aplicação Nível Transporte

  4. Tipos de Serviço • Similar ao nível de rede, oferece 2 tipos de serviço: • Orientado a conexão: Estabelece conexão, transfere dados, libera conexão. • Sem conexão: Envia pacotes independentes. Segmento é o termo empregado para designar as mensagens trocadas entre entidades de transporte. Nível Transporte

  5. Endereço de Transporte • É preciso que uma aplicação em uma máquina faça referência à aplicação com a qual deseja se comunicar em outra máquina. • No TCP/IP o endereço de transporte é a porta, e o endereço de rede é o endereço IP. • Como um processo sabe que porta está associada a que serviço? Os endereços estáveis já são conhecidos. IANA – Internet Assigned Numbers Authority controla recursos dos protocolos. • Vide /etc/services ou http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml Nível Transporte

  6. IANA – Internet Assigned Numbers Authority O texto abaixo foi adaptado de www.iana.org “ Theportnumbers are dividedintothree ranges: • System Ports (WellKnown):from 0 through 1023. • UserPorts (Registered ): from 1024 through 49151 • Dynamicand/orPrivatePorts: from 49152 through 65535. The difference uses of these ranges is described in RFC6335 TheSystem Portsare assignedbythe IETF process for standards-trackprotocols (andonmost systems canonlybeusedby system (orroot) processes ). TheUserPortsare assignedby IANA usingthe “ExpertReview” process . DynamicPortsare notassigned. ” Nível Transporte

  7. Exemplo de serviços Trecho do arquivo /etc/services: ftp 21/tcp telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location nameserver 42/tcp name # IEN 116 whois 43/tcp nicname domain 53/tcp nameserver # name-domain server domain 53/udp nameserver No Windows, vide netstat -a Nível Transporte

  8. Soquetes (1) • SOCKET • Uma interface local,criadaporaplicações, ponto final de comunicação no qualosprocessos de aplicaçãopodemtantoenviarquantorecebermensagens de e paraoutroprocesso de aplicação (local ouremoto) • Socket API (Application Programming Interface) • Introduzida no BSD 4.1 - UNIX de Berkeley, 1981 • Hojehápara Linux e Windows (winsock) •  Explicitamentecriados, usados e liberadospelasaplicações •  Paradigmacliente-servidor •  Doistipos de serviço de transporte via socket API: • Datagramanãoconfiável • Confiável, orientado a cadeias de bytes Nível Transporte

  9. Soquetes (2) Serviço TCP: transferência confiável de bytesde um processo para outro Nível Transporte

  10. As primitivas de Soquetes para TCP Retornadescritor de soquete (s) Serv: Vincula IP+Porta a s Serv: Serv: Cliente: Qualquer: Qualquer: Qualquer: 10 Nível Transporte

  11. Pseudo-código Cria descritor de soquete socket( ) socket( ) S E R V I D O R Atribui endereço de protocolo a soquete C L I E N T E bind ( ) Solicita estabelecimento de conexão Indica que receberá conexões e o máximo listen ( ) accept ( ) Aguarda conexões connect( ) (read) recv ( ) send ( ) (write) send ( ) recv ( ) close ( ) Fecha soquete, termina conexão close ( ) Nível Transporte

  12. Informações complementares (1) • LittleEndian versus Big Endian: maneiras de armazenar um número na memória. LittleEndian: armazena os bytes de menor ordem em primeiro. Comum na arquitetura Intel. Ex: 0x12345678 seria armazenado como (0x78 0x56 0x34 0x12) Big Endian: 0x12345678 seria armazenado como (0x12 0x34 0x56 0x78). Comum nas arquiteturas RISC. É o formato da rede. • Função para padronizar a transmissão: • Htons: host to network – unsignedshort int to Bigendian. • Htonl:host to network – unsignedlongint to Bigendian. 12 Nível Transporte

  13. Informações complementares (2) • É montada uma estrutura de dados com o endereço a ser associado ao soquete: • channel.sin_addr.s_addr=htonl(INADDR_ANY) • INADDR_ANY: • “Thisallowedyourprogram to work withoutknowingthe IP addressofthe machine it wasrunningon, or, in the case of a machine withmultiple network interfaces, it allowedyourserver to receivepacketsdestined to anyofthe interfaces”. • Define de que versão virá a família de endereços: • channel.sin_family = AF_INET • AF_INET: AddressFamily for Internet Sockets is IPv4 13 Nível Transporte

  14. Código do Cliente (1) Solicita arquivo do servidor. Chamada client <url> <file> >f Nível Transporte

  15. Código do Cliente (2) 15 Nível Transporte

  16. Código do Cliente (3) 16 Nível Transporte

  17. Código do Servidor (1) 17 Nível Transporte

  18. Código do Servidor (2) 18 Nível Transporte

  19. Código do Servidor (3) 19 Nível Transporte

  20. Exemplo de aplicaçãocliente-servidor: 1) Cliente lê linha da entrada-padrão do sistema (inFromUser stream), envia para o servidor via socket (outToServer stream) 2) Servidor lê linha do socket 3) Servidor converte linha paraletras maiúsculas e envia de volta ao cliente 4) Cliente lê a linha modificadaatravés do soquete(inFromServer stream) Programação de sockets em JAVA

  21. Pseudo-código para JAVA (TCP)

  22. Cliente Java (1) Classes para cadeia de entrada e saída import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Classes para suporte de rede Cria stream de entrada Cria socket cliente, (IP,Porta) conecta ao servidor Cria stream de saída ligado ao socket Nível Transporte

  23. Cliente Java (2) Cria stream de entrada ligado ao socket BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } Envia linha para o servidor Lê linha do servidor Nível Transporte

  24. Servidor Java (1) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Cria socket de aceitação na porta 6789 Espera, no socket de aceitação, contato do cliente Cria stream de entrada ligado ao socket

  25. Servidor Java (2) Cria stream de saída ligado ao socket DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } } Lê linha do socket Escreve linha para o socket Fim do while loop, retorne e espere por outra conexão do cliente Nível Transporte

  26. Pseudo-código para JAVA (UDP)

  27. Cliente Java UDP (1) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); Cria stream de entrada Cria socket cliente Translada nome do hospedeiro para endereço IP usando DNS

  28. Cliente Java UDP (2) DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } Cria datagrama com dados a enviar, tamanho, endereço IP porta Envia datagrama para servidor Lê datagrama do servidor

  29. Servidor Java UDP (1) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Cria socket datagrama na porta 9876 Cria espaço para datagramas recebidos Recebe datagrama

  30. Servidor Java UDP (2) String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } } Obtém endereço IP e número da porta do transmissor Cria datagrama para enviar ao cliente Escreve o datagrama para dentro do socket Termina o while loop, retorna e espera por outro datagrama

  31. Portmapper Como pedir conexão a um software que não usa portas conhecidas? Através de processo portmapper: • Aplicação solicita conexão em porta conhecida associada ao portmapper (normalmente porta 111) que retorna a porta associada ao serviço desejado. • Usuário encerra conexão com portmapper e estabelece com o novo endereço fornecido. • Se a aplicação tem alta demanda é melhor que fique diretamente aguardando conexões. • Quando da criação do serviço a aplicação se comunica com o portmapper para se registrar. Portmapper equivale a telefonista de auxílio a lista. Nível Transporte

  32. Servidor de Processos (1) É preciso ter um processo aguardando conexões para cada serviço prestado? Sim e Não. Aplicações que não são tão utilizadas podem ser ativadas por demanda: um servidor de processos aguarda solicitações e ativa o processo que possa atendê-la. No UNIX, este processo é o inetd (ou xinetd). Se a aplicação tem alta demanda é melhor que fique diretamente aguardando conexões. 32 Nível Transporte

  33. Servidor de Processos (2) Como um processo do usuário no host 1 estabelece uma conexão com o processo servidor de correio no host 2. Nível Transporte

  34. Estabelecendo conexão no N4 (1) Que tal: CR para pedir e ACK para aceitar? Problema: a rede pode perder, atrasar, corromper ou duplicar pacotes (retransmissões). Os casos comuns devem ser implementados para obter um bom desempenho, mas o protocolo deve lidar com os casos incomuns também. Handshake de 3 vias em cenário normal Nível Transporte

  35. Estabelecendo conexão no N4 (2) Seq=x Antigo CR aparece duplicado Seq=z, Ack=x CR e ACK duplicados Seq=x Seq=z, Ack=x Host 1 percebe que é duplicata: Segundo ACK x Seq=x, Ack=z Host 2 percebe que é duplicata: ACK z novamente 35 Nível Transporte

  36. Problema dos dois Exércitos Nível Transporte

  37. Encerrando conexão no N4 (1) Encerramento abrupto com perda de dados Caso normal com Handshake de 3 vias 37 Nível Transporte

  38. Encerrando conexão no N4 (2) ACK final perdido Resposta e DR seguintes perdidos Resposta perdida 38 Nível Transporte

  39. Controle de Congestionamento (a) Goodput x carga (b) Atraso correspondente Encontrar uma boa alocação de banda que ofereça bom desempenho, evite congestionamento, seja justa entre entidades concorrentes. 39 Nível Transporte

  40. Imparcialidade max-min (Fairness) A alocação é imparcial max-min se a largura de banda dada a um fluxo não puder ser aumentada sem diminuir a largura de banda dada a outro fluxo. Rede com 4 fluxos: A,B,C,D. Cada enlace tem capacidade =. B recebe 1/3 entre R4 e R5 e continua com 1/3 entre R2 e R3 (1/2 não resolveria o gargalo). Para dar mais para B, deveria reduzir C ou D (ou ambos). Problema: Necessário conhecimento global da rede. 40 Nível Transporte

  41. Convergência Conexões vem e vão: convergir para o ponto de operação ideal e acompanhar ao longo do tempo. Ex: No início o Fluxo 1 tem toda largura de banda. Em t=1 divide a banda na metade com Fluxo 2. Em t=4 o Fluxo 3 precisa apenas de 0,2 e os fluxos 1 e 2 ficam com 0,4 cada. Quando o Fluxo 2 termina, o Fluxo 1 abocanha 0,8. 41 Nível Transporte

  42. Regulando a velocidade do fluxo (a) O limite é o receptor de pequena capacidade; (b) O limite é a rede interna. 42 Nível Transporte

  43. Feedback Diferentes protocolos de controle de congestionamento podem dar retorno sobre as condições de forma explícita ou implícita – precisa ou imprecisa: TCP 43 Nível Transporte

  44. Ajuste de banda Aumento e diminuição additivos - ângulo de 45º Aumento e diminuição multiplicativos – apontam para a origem A lei de controle AIMD – AdditiveIncrease MultiplicativeDecrease - Converge para ponto Ótimo. 44 Nível Transporte

  45. Problemas da rede sem fio Na Teoria: protocolos de transporte são independentes das tecnologias de rede e enlace. Na prática: problemas com redes sem fio. TCP usa perda de pacote como sinal de congestionamento, mas redes sem Fio perdem pacotes por erro não congestionamento… Pior ainda se os nós se movem e a qualidade do enlace varia. Cada nível faz o que pode: Enlace tenta retransmitir sem sinalizar nível superior; transporte aplica controle de congestionamento. Há muita pesquisa para desenvolver um Transporte para redes sem fio e como comunicar informações entre os níveis (abordagens cross-layer). 45 Nível Transporte

  46. Protocolo de Controle da InternetUser Data Protocol - UDP Permite envio de dados sem estabelecimento prévio de conexão, sem técnica de verificação que o dado atingiu a outra ponta. Muito utilizado em aplicações que tem como modelo – um pedido, uma resposta – não necessitando do overhead do estabelecimento de conexão. A própria resposta é o reconhecimento do pedido. Se a resposta não chegar, simplesmente pergunta novamente. Exemplo de aplicação que usa UDP: DNS 46 Nível Transporte

  47. Segmento UDP O segmento UDP consiste de um cabeçalho de 8 bytes, seguido pela carga útil. O simples cabeçalho UDP contém 8 bytes: Comprimento UDP: inclui cabeçalho e dados. Checksum: opcional. 47 Nível Transporte

  48. 0 16 31 Endereço IP Origem Endereço IP Destino Pseudo-Header Zero Protocolo Tamanho Porta Origem Porta Destino Header UDP Tamanho Checksum Datagrama UDP Dados Pseudo-cabeçalho O TCP e o UDP calculam o checksum incluindo cabeçalho e dados e um pseudocabeçalho que inclui dados do nível Rede, para garantir a integridade dos dados e das informações de rede, uma vez que o IP só calcula o checksum do cabeçalho IP, não incluindo dados. Pseudo-cabeçalho não é transmitido nem contado.

  49. RPC Remote Procedure Call – imita uma chamada de função, porém em máquinas diferentes. Possível para situações não idempotentes (chamadas que não tem problema serem repetidas, como uma consulta DNS – se efeito colateral como incrementar um timer usar TCP). Nível Transporte

  50. RTP Real-Time Transport Protocol – várias aplicações de multimídia precisavam de um protocolo de transporte em tempo real. Considerado protocolo de transporte implementado na camada de aplicação. Numera pacotes para a apl decidir o que faz com os pacotes e perdas, mas não retransmite (não dá tempo). Nível Transporte

More Related