Redes de computadores Prof Nelson Fonseca 2 Camada
- Slides: 36
Redes de computadores Prof. Nelson Fonseca 2: Camada de Aplicação 1
DNS: Domain Name System Pessoas: muitos identificadores: ü CPF, nome, no. da Identidade hospedeiros, roteadores Internet : ü ü endereço IP (32 bit) usado p/ endereçar datagramas “nome”, ex. , jambo. ic. uff. br - usado por gente P: como mapear entre nome e endereço IP? Domain Name System: Ø base de dados distribuída implementada na hierarquia de muitos servidores de nomes Ø protocolo de camada de aplicação permite que hospedeiros, roteadores, servidores de nomes se comuniquem para resolver nomes (tradução endereço/nome) ü note: função imprescindível da Internet implementada como protocolo de camada de aplicação ü complexidade na borda da rede 2: Camada de Aplicação 2
DNS Ø Roda sobre UDP e usa a porta 53 Ø Especificado nas RFCs 1034 e 1035 e atualizado em outras RFCs. Ø Outros serviços: ü apelidos para hospedeiros (aliasing) ü apelido para o servidor de mails ü distribuição da carga 2: Camada de Aplicação 3
Servidores de nomes DNS Por que não centralizar o Ø Nenhum servidor mantém todos os mapeamento nome. DNS? para-endereço IP Ø ponto único de falha servidor de nomes local: Ø volume de tráfego ü cada provedor, empresa tem Ø base de dados servidor de nomes local (default) centralizada e distante ü pedido DNS de hospedeiro vai primeiro ao servidor de nomes Ø manutenção (da BD) local Não é escalável! servidor de nomes oficial: ü ü p/ hospedeiro: guarda nome, endereço IP dele pode realizar tradução nome/endereço para este nome 2: Camada de Aplicação 4
DNS: Servidores raiz Ø procurado por servidor local que não consegue resolver o nome Ø servidor raiz: ü procura servidor oficial se mapeamento desconhecido ü obtém tradução ü devolve mapeamento ao servidor local Ø ~ uma dúzia de servidores raiz no mundo 2: Camada de Aplicação 5
Exemplo simples do DNS hospedeiro manga. ic. uff. br requer endereço IP de www. cs. columbia. edu servidor de nomes raiz 2 5 3 4 1. Contata servidor DNS local, pitomba. ic. uff. br servidor oficial servidor local 2. pitomba. ic. uff. br cs. columbia. edu contata servidor raiz, se 1 6 necessário 3. Servidor raiz contata servidor oficial cs. columbia. edu, se solicitante www. cs. columbia. edu manga. ic. uff. br necessário 2: Camada de Aplicação 6
Exemplo de DNS Servidor raiz: Ø pode não conhecer o servidor de nomes oficial Ø pode conhecer servidor de nomes intermediário: a quem contatar para descobrir o servidor de nomes oficial servidor de nomes raiz 6 2 7 3 servidor intermediário pitomba. ic. uff. br saell. cc. columbia. edu 5 4 1 8 servidor local solicitante servidor oficial cs. columbia. edu manga. ic. uff. br www. cs. columbia. edu 2: Camada de Aplicação 7
DNS: consultas interativas consulta recursiva: Ø transfere a responsabilidade de resolução do nome para o servidor de nomes contatado Ø carga pesada? consulta interativa: 2 consulta interativa 3 4 7 servidor intermediário pitomba. ic. uff. br saell. cc. columbia. edu 5 6 1 8 servidor local Ø servidor consultado responde com o nome de um servidor de contato Ø “Não conheço este nome, mas pergunte para esse servidor” servidor de nomes raíz solicitante servidor oficial cs. columbia. edu manga. ic. uff. br www. cs. columbia. edu 2: Camada de Aplicação 8
DNS: uso de cache, atualização de dados Ø uma vez que um servidor qualquer aprende um mapeamento, ele o coloca numa cache local ü futuras consultas são resolvidas usando dados da cache ü entradas na cache são sujeitas a temporização (desaparecem depois de um certo tempo) ttl = time to live (sobrevida) Ø estão sendo projetados pela IETF mecanismos de atualização/notificação dos dados ü RFC 2136 ü http: //www. ietf. org/html. charters/dnsind-charter. html 2: Camada de Aplicação 9
Registros DNS: BD distribuído contendo registros de recursos (RR) formato RR: (nome, valor, tipo, sobrevida) Ø Tipo=CNAME Ø Tipo=A ü nome é nome alternativo ü nome é nome de hospedeiro (alias) para algum nome ü valor é o seu endereço IP “canônico” (verdadeiro) Ø Tipo=NS ü valor é o nome ü nome é domínio (p. ex. canônico foo. com. br) Ø Tipo=MX ü valor é endereço IP de ü nome é domínio servidor oficial de nomes ü valor é nome do servidor de para este domínio correio para este domínio 2: Camada de Aplicação 10
DNS: protocolo e mensagens protocolo DNS: mensagens de pedido e resposta, ambas com o mesmo formato de mensagem cabeçalho de msg Ø identificação: ID de 16 bit para pedido, resposta ao pedido usa mesmo ID Ø flags: ü pedido ou resposta ü recursão desejada ü recursão permitida ü resposta é oficial 2: Camada de Aplicação 11
DNS: protocolo e mensagens campos de nome, e de tipo num pedido RRs em resposta ao pedido registros para outros servidores oficiais info adicional “relevante” que pode ser usada 2: Camada de Aplicação 12
Programação com sockets Meta: aprender a construir aplicações cliente/servidor que se comunicam usando sockets socket API Sockets uma interface (uma Ø apareceu no BSD 4. 1 UNIX em 1981 Ø são explicitamente criados, usados e liberados por apls Ø paradigma cliente/servidor Ø dois tipos de serviço de transporte via API Sockets ü ü datagrama não confiável fluxo de bytes, confiável “porta”), local ao hospedeiro, criada por e pertencente à aplicação, e controlado pelo SO, através da qual um processo de aplicação pode tanto enviar como receber mensagens para/de outro processo de aplicação (remoto ou local) 2: Camada de Aplicação 13
Programação com sockets usando TCP Socket: uma porta entre o processo de aplicação e um protocolo de transporte fim-a-fim (UDP ou TCP) Serviço TCP: transferência confiável de bytes de um processo para outro controlado pelo programador de aplicação controlado pelo sistema operacional processo socket TCP com buffers, variáveis estação ou servidor internet socket TCP com buffers, variáveis controlado pelo programador de aplicação controlado pelo sistema operacional estação ou servidor 2: Camada de Aplicação 14
Programação com sockets usando TCP Cliente deve contactar servidor Ø Quando cliente cria socket: TCP do cliente estabelece conexão com Ø processo servidor deve antes TCP do servidor estar em execução Ø Quando contatado pelo cliente, o Ø servidor deve antes ter TCP do servidor cria socket novo criado socket (porta) que para que o processo servidor possa aguarda contato do cliente se comunicar com o cliente Cliente contacta servidor para: ü permite que o servidor Ø criar socket TCP local ao converse com múltiplos cliente Ø especificar endereço IP, ponto de vista da aplicação número de porta do processo TCP provê transferência servidor confiável, ordenada de bytes (“tubo”) entre cliente e servidor 2: Camada de Aplicação 15
Comunicação entre sockets 2: Camada de Aplicação 16
Exemplo de aplicação cliente-servidor Ø servidor lê linha do socket Ø servidor converte linha para letras maiúsculas, devolve para o cliente Ø cliente lê linha modificada do socket (fluxo do. Servidor), imprime-a do. Usuário do. Servidor padrão (fluxo do. Usuário), envia para servidor via socket (fluxo para. Servidor) ppara. Servidor Ø cliente lê linha da entrada Fluxo de entrada: seqüência de bytes recebida pelo processo Fluxo de saída: seqüência de bytes transmitida pelo processo socket do cliente 2: Camada de Aplicação 17
Interações cliente/servidor usando o TCP Servidor (executa em nome. Hosp) Cliente cria socket, porta=x, para receber pedido: socket. Recepção = Server. Socket () aguarda chegada de setup pedido de conexão socket. Conexão = socket. Recepção. accept() lê pedido de socket. Conexão escreve resposta para socket. Conexão fecha socket. Conexão TCP da conexão cria socket, abre conexão a nome. Hosp, porta=x socket. Cliente = Socket() Envia pedido usando socket. Cliente lê resposta de socket. Cliente fecha socket. Cliente 2: Camada de Aplicação 18
Exemplo: cliente Java (TCP) import java. io. *; import java. net. *; class Cliente. TCP { public static void main(String argv[]) throws Exception { String frase; String frase. Modificada; Cria fluxo de entrada Cria socket de cliente, conexão ao servidor Cria fluxo de saída ligado ao socket Buffered. Reader do. Usuario = new Buffered. Reader(new Input. Stream. Reader(System. in)); Socket socket. Cliente = new Socket(”nome. Hosp", 6789); Data. Output. Stream para. Servidor = new Data. Output. Stream(socket. Cliente. get. Output. Stream()); 2: Camada de Aplicação 19
Exemplo: cliente Java (TCP), cont. Cria fluxo de entrada ligado ao socket Buffered. Reader do. Servidor = new Buffered. Reader(new Input. Stream. Reader(socket. Cliente. get. Input. Stream())); frase = do. Usuario. read. Line(); Envia linha ao servidor para. Servidor. write. Bytes(frase + 'n'); frase. Modificada = do. Servidor. read. Line(); Lê linha do servidor System. out. println(”Do Servidor: " + frase. Modificada); socket. Cliente. close(); } } 2: Camada de Aplicação 20
Exemplo: servidor Java (TCP) import java. io. *; import java. net. *; class servidor. TCP { Cria socket para recepção na porta 6789 Aguarda, no socket para recepção, o contato do cliente Cria fluxo de entrada, ligado ao socket public static void main(String argv[]) throws Exception { String frase. Cliente; Stringf. Frase. Maiusculas; Server. Socket socket. Recepcao = new Server. Socket(6789); while(true) { Socket socket. Conexao = socket. Recepcao. accept(); Buffered. Reader do. Cliente = new Buffered. Reader(new Input. Stream. Reader(socket. Conexao. get. Input. Stream())); 2: Camada de Aplicação 21
Exemplo: servidor Java (TCP), cont Cria fluxo de saída, ligado ao socket Data. Output. Stream para. Cliente = new Data. Output. Stream(socket. Conexão. get. Output. Stream()); Lê linha do socket frase. Cliente= do. Cliente. read. Line(); frase. Em. Maiusculas= frase. Cliente. to. Upper. Case() + 'n'; Escreve linha ao socket para. Client. write. Bytes(frase. Em. Maiusculas); } } } Final do elo while, volta ao início e aguarda conexão de outro cliente 2: Camada de Aplicação 22
Programação com sockets usando UDP: não tem “conexão” entre cliente e servidor Ø não tem “handshaking” Ø remetente coloca explicitamente endereço IP e porta do destino Ø servidor deve extrair endereço IP, porta do remetente do datagrama recebido ponto de vista da aplicação UDP provê transferência não confiável de grupos de bytes (“datagramas”) entre cliente e servidor UDP: dados transmitidos podem ser recebidos fora de ordem, ou perdidos 2: Camada de Aplicação 23
Interações cliente/servidor usando o UDP Servidor (executa em nome. Hosp) cria socket, porta=x, para pedido que chega: socket. Servidor = Datagram. Socket() lê pedido do socket. Servidor escreve resposta ao socket. Servidor especificando endereço IP, número de porta do cliente Cliente cria socket, socket. Cliente = Datagram. Socket() cria, endereça (nome. Hosp, porta=x, envia pedido em datagrama usando socket. Cliente lê resposa do socket. Cliente fecha socket. Cliente 2: Camada de Aplicação 24
Cliente UDP 2: Camada de Aplicação 25
Exemplo: cliente Java (UDP) import java. io. *; import java. net. *; Cria fluxo de entrada Cria socket de cliente Traduz nome de hospedeiro ao endereço IP usando DNS class cliente. UDP { public static void main(String args[]) throws Exception { Buffered. Reader do Usuario= new Buffered. Reader(new Input. Stream. Reader(System. in)); Datagram. Socket socket. Cliente = new Datagram. Socket(); Inet. Address IPAddress = Inet. Address. get. By. Name(”nome. Hosp"); byte[] send. Data = new byte[1024]; byte[] receive. Data = new byte[1024]; String frase = do. Usuario. read. Line(); send. Data = frase. get. Bytes(); 2: Camada de Aplicação 26
Exemplo: cliente Java (UDP) cont. Cria datagrama com dados para enviar, comprimento, endereço IP, porta Envia datagrama ao servidor Datagram. Packet pacote. Enviado = new Datagram. Packet(dados. Envio, dados. Envio. length, IPAddress, 9876); socket. Cliente. send(pacote. Enviado); Datagram. Packet pacote. Recebido = new Datagram. Packet(dados. Recebidos, dados. Recebidos. length); Lê datagrama do servidor socket. Cliente. receive(pacote. Recebido); String frase. Modificada = new String(pacote. Recebido. get. Data()); System. out. println(”Do Servidor: " + frase. Modificada); socket. Cliente. close(); } } 2: Camada de Aplicação 27
Servidor UDP 2: Camada de Aplicação 28
Exemplo: servidor Java (UDP) import java. io. *; import java. net. *; Cria socket para datagramas na porta 9876 class servidor. UDP { public static void main(String args[]) throws Exception { Datagram. Socket socket. Servidor = new Datagram. Socket(9876); byte[] dados. Recebidos = new byte[1024]; byte[] dados. Enviados = new byte[1024]; Aloca memória para receber datagrama Recebe datagrama while(true) { Datagram. Packet pacote. Recebido = new Datagram. Packet(dados. Recebidos, dados. Recebidos. length); socket. Servidor. receive(pacote. Recebido); 2: Camada de Aplicação 29
Exemplo: servidor Java (UDP), cont String frase = new String(pacote. Recebido. get. Data()); Obtém endereço IP, no. de porta do remetente Inet. Address IPAddress = pacote. Recebido. get. Address(); int porta = pacote. Recebido. get. Port(); String frase. Em. Maiusculas = frase. to. Upper. Case(); dados. Enviados = frase. Em. Maiusculas. get. Bytes(); Cria datagrama p/ enviar ao cliente Escreve datagrama no socket } Datagram. Packet pacote. Enviado = new Datagram. Packet(dados. Enviados, dados. Enviados. length, IPAddress, porta); socket. Servidor. send(pacote. Enviado); } } Fim do elo while, volta ao início e aguarda chegar outro datagrama 2: Camada de Aplicação 30
Servidor Web Simples Ø Funções do servidor Web: ü Trata apenas um pedido HTTP por vez ü Aceita e examina o pedido HTTP ü Recupera o arquivo pedido do sistema de arquivos do servidor ü Cria uma mensagem de resposta HTTP consistindo do arquivo solicitado precedido por linhas de cabeçalho ü Envia a resposta diretamente ao cliente. 2: Camada de Aplicação 31
Servidor Web Simples Contém a classe String. Tokenizer que é usada para examinar o pedido Primeira linha da mensagem de pedido HTTP e Nome do arquivo solicitado Aguarda conexão do cliente import java. io. *; import java. net. *; import java. util. *; class Web. Server { public static void main(String argv[]) throws Exception { String request. Message. Line; String file. Name; Server. Socket listen. Socket = new Server. Socket(6789); Socket connection. Socket = listen. Socket. accept(); Cria fluxo de Entrada Buffered. Reader in. From. Client = new Buffered. Reader(new Input. Stream. Reader( connection. Socket. get. Input. Stream())); Cria fluxo de Saída Data. Output. Stream out. To. Client = new Data. Output. Stream( connection. Socket. get. Output. Stream()); 2: Camada de Aplicação 32
Servidor Web Simples, cont Lê a primeira linha do pedido HTTP que deveria ter o seguinte formato: GET file_name HTTP/1. 0 Examina a primeira linha da mensagem para extrair o nome do arquivo Associa o fluxo in. File ao arquivo file. Name Determina o tamanho do arquivo e constrói um vetor de bytes do mesmo tamanho request. Message. Line = in. From. Client. read. Line(); String. Tokenizer tokenized. Line = new String. Tokenizer(request. Message. Line); if (tokenized. Line. next. Token(). equals("GET")){ file. Name = tokenized. Line. next. Token(); if (file. Name. starts. With("/") == true ) file. Name = file. Name. substring(1); File file = new File(file. Name); int num. Of. Bytes = (int) file. length(); File. Input. Stream in. File = new File. Input. Stream ( file. Name); byte[] file. In. Bytes = new byte[]; in. File. read(file. In. Bytes); 2: Camada de Aplicação 33
Servidor Web Simples, cont Inicia a construção da mensagem de resposta out. To. Client. write. Bytes( "HTTP/1. 0 200 Document Followsrn"); if (file. Name. ends. With(". jpg")) out. To. Client. write. Bytes("Content-Type: image/jpegrn"); if (file. Name. ends. With(". gif")) out. To. Client. write. Bytes("Content-Type: image/gifrn"); out. To. Client. write. Bytes("Content-Length: " + num. Of. Bytes + "rn"); out. To. Client. write. Bytes("rn"); Transmissão do cabeçalho da resposta HTTP. out. To. Client. write(file. In. Bytes, 0, num. Of. Bytes); connection. Socket. close(); } else System. out. println("Bad Request Message"); } } 2: Camada de Aplicação 34
Capítulo 2: Resumo Terminamos nosso estudo de aplicações de rede! Ø Requisitos do serviço de aplicação: ü confiabilidade, banda, retardo Ø paradigma cliente- servidor Ø modelo de serviço do transporte orientado a conexão, confiável da Internet: TCP ü não confiável, datagramas: UDP Ø Protocolos específicos: ü http ü ftp ü smtp, pop 3 ü dns Ø programação c/ sockets ü implementação cliente/servidor ü usando sockets tcp, udp 2: Camada de Aplicação 35
Capítulo 2: Resumo Mais importante: aprendemos sobre protocolos Ø troca típica de mensagens pedido/resposta: ü ü cliente solicita info ou serviço servidor responde com dados, código de status Ø formatos de mensagens: ü cabeçalhos: campos com info sobre dados (metadados) ü dados: info sendo comunicada Ø msgs de controle X dados na banda, fora da banda centralizado X descentralizado s/ estado X c/ estado transferência de msgs confiável X não confiável “complexidade na borda da rede” segurança: autenticação ü Ø Ø Ø 2: Camada de Aplicação 36
- Nelson fonseca unicamp
- Stallings william comunicaciones y redes de computadores
- Redes de computadores
- Redes de computadores
- Fundamentos de redes de computadores
- Protocolo link state
- Newton color theory
- Lobito fonseca edad
- Ana maria fonseca zampieri
- Nancy fonseca
- Dra isabel fonseca
- Jim fonseca
- Rodrigo fonseca md
- "guilherme fonseca travassos"
- Computadores
- Provedor tier 1
- Computadoras neuroelectrónicas
- Classificação dos computadores
- Que es mantenimiento correctivo
- Organização de computadores
- Organização e arquitetura de computadores
- Pc compònentes
- Organização de computadores
- Rede de computadores
- Arquitetura de computadores
- Camada limite
- Camada limite termica
- Camada osi
- Camada delgada
- Camada mais energetica
- Camada de ozonio
- Camada de forma cobertura
- Camada
- Protocolos da camada de aplicação
- Camada de
- Camada gasosa
- Camada delgada