SEM 0544 Desenvolvimento de Produtos Mecatrônicos Glauco Caurin José Martins Jr
Roteiro da aula Conceitos básicos Histórico das redes Redes locais Modelo de referência OSI Arquitetura TCP/IP Camada de Inter-redes IP Camada de transporte TCP e UDP Camada de aplicação Serviços e protocolos bem conhecidos Paradigma cliente-servidor Desenvolvimento de aplicações usando sockets Prática: implementação de aplicações cliente e servidora
Histórico sobre redes 60 s primeiros padrões. Ex.: RS-232 Comunicação de dados DTE x DCE modems (Dialup) Surgimento da ARPANet (projeto do DoD) 70 s soluções proprietárias para redes locais Rede pública de dados X.25 80 s padronização de redes Frame relay, Ethernet (IEEE 802.3), OSI, TCP/IP 90 s popularização do uso das redes locais Wireless LANs, ATM, Web, ISPs, redes pessoais
Principais características Altas taxas de transmissão Baixo custo Redes locais Principal entidade normativa: IEEE IEEE 802 família de normas para LANs e MANs Principal padrão atual: IEEE 802.3 (Ethernet) Taxas de 10Mbps a 10Gbps Meio compartilhado: barramento (BUS) Controle de acesso baseado em contenção CSMA/CD Componente aleatório do algoritmo implica em não determinismo Uma solução: uso de switches para se evitarem colisões
Família 802 Escopo das normas
Quadro Ethernet
Modelo OSI (Open System Interconnection) da ISO Modelo de referência Diferentes níveis de abstração para um mesmo problema 7 camadas (inspirado nas 8 camadas da SNA IBM) (1) Física (2) Enlace (3) Rede (4) Transporte (5) Sessão (6) Apresentação (7) Aplicação Cada camada define seu PDU (Protocol Data Unit) Header (controle) + payload (PDU da camada superior)
Modelo OSI (Open System Interconnection) da ISO Interface da camada n provê o acesso aos serviços à camada n+1 npdu = H n + (n+1)pdu
Arquitetura TCP/IP 1981: o protocolo IPv4 é publicado (RFC 791) Normas publicadas em RFCs: http://www.ietf.org/ Internet timeline: http://www.zakon.org/robert/internet/timeline/ Modelo TCP/IP padrão de fato e aberto 4 camadas Rede local (nada define para ela) Inter-redes Transporte Aplicação Não define camadas de sessão e apresentação A implementação de suas funções fica a cargo da aplicação
Modelo TCP/IP x OSI
Camada de inter-redes Equivalente à camada de rede do modelo OSI Encaminhamento best-effort de mensagens Datagramas são roteados individualmente do host de origem ao de destino, a cada hop, entre gateways IP (Internet Protocol) RFC 791 Versão oficial em uso: 4 (desde 1981) Características de serviço Connectionless entrega fora de ordem Não confiável pode perder datagramas É encapsulado por quadros (camada 2) em cada enlace
O cabeçalho IP
Campos do cabeçalho IP Version: versão do protocolo IP IHL (Internet Header Length): tamanho total do header ( 5) em palavras de 32 bits ToS (Type of Service): qualidade do serviço de roteamento desejada Total Length: tamanho total do datagrama em bytes (tamanho máximo é de 65535) Identification: identificação do datagrama Flags: informa se permite/não a fragmentação e se é/não último fragmento Fragment Offset: indica a posição de início do fragmento TTL (Time To Live): tempo máximo de vida de um datagrama Protocol: tipo de payload (numeração IANA RFC 1700) Header Checksum: soma binária para conferência do cabeçalho Source IP Address: endereço IP do remetente Destination IP Address: endereço IP do destinatário Options: de tamanho variável informações adicionais sobre o datagrama Padding: de tamanho variável complementa options com zeros (múltiplo de 32 bits)
Endereçamento IP Classe A: bit mais significativo do byte a é 0 (zero) byte a no intervalo 0-127 Prefixo (redes): combinatória dos outros 7 bits do byte a 2 7 redes Sufixo (hosts): combinatória dos bytes b, c e d 2 24 hosts Classe B: 2 bits mais significativos do byte a valem 1 e 0 byte a no intervalo 128-191 Prefixo (redes): combinatória dos outros 6 bits do byte a, mais o byte b 2 14 redes Sufixo (hosts): combinatória dos bytes c e d 2 16 hosts Classe C: 3 bits mais significativos do byte a valem 1, 1 e 0 byte a no intervalo 192-223 Prefixo (redes): combinatória dos outros 5 bits do byte a, mais os bytes b e c 2 21 redes Sufixo (hosts): combinatória do byte d 2 8 hosts Endereço para loopback 127.0.0.0 Endereços para Intranets RFC 1918 Endereços de rede valores 0 são atribuídos ao sufixo Endereços broadcast valores 1 são atribuídos ao sufixo
Máscara de rede (netmask) Delimitam a abrangência de uma rede (ou subrede) O prefixo da máscara (rede) é composto por bits de valor 1 O sufixo da máscara (hosts) é composto por bits de valor 0 Exemplos: Máscara de rede classe A: 255.0.0.0 (notação abreviada: endereço/8) Máscara de rede classe B: 255.255.0.0 (notação abreviada: endereço/16) Máscara de rede classe C: 255.255.255.0 (notação abreviada: endereço/24) Divisão de uma classe C em 2 subredes de 128 hosts: 255.255.255.128 (endereço/25) Subredes: a.b.c.0 e a.b.c.128 Divisão de uma classe C em 8 subredes de 32 hosts: 255.255.255.224 (endereço/27) Exercício: calcular os números das subredes e seus broadcasts
Uso da netmask A partir de uma operação lógica AND sobre um endereço de destino obtém-se o endereço da rede Exemplos: Para um host configurado com: Endereço IP 200.201.202.203 e máscara 255.255.255.0, o número da rede será 200.201.202.0 Endereço IP 200.201.202.203 e máscara 255.255.255.224, número da rede será 200.201.202.192 Analisando o último byte: 203 = 11001011 224 = 11100000 (AND) -------- 192 = 11000000
Protocolos de controle ICMP (Internet Control Message Protocol) RFC 792 Comunicação de mensagens (informação e erro) ARP (Address Resolution Protocol) RFC 826 Resolução de endereços IP em endereços MAC
Dois protocolos UDP TCP Características Camada fim-a-fim Funções Controle de fluxo Camada de transporte Controle de congestionamento Escolha de MTU evitar fragmentação do IP Identificação de aplicações Porta: número inteiro de 16 bits controlado pela IANA (RFC 3232)
UDP (User Datagram Protocol) RFC 768 Extremamente simples Basicamente: portas de origem e de destino Tipo de serviço (idêntico ao IP) Connectionless entrega fora de ordem Não confiável pode perder datagramas Exemplos de uso Sistemas distribuídos RPC (Remote Procedure Call) RFC 1057 Vídeo RT junto com RTP (Real Time Protocol) RFC 1889
TCP (Transmission Control Protocol) RFC 793 Mais completo header maior Serviço baseado em stream (fluxo) Orientado à conexão entrega em ordem Confiável faz confirmação de cada unidade Processo de conexão e desconexão Three-way handshake Negocia tamanho da janela Exemplos de uso Maioria das aplicações
O cabeçalho TCP
Campos do cabeçalho TCP Source port: porta de origem Destination port: porta de destino Sequence number: número de seqüência (distinto por conexão) do TPDU Acknowledgement number: número de seqüência do TPDU que está sendo confirmado TCP header length: tamanho do cabeçalho TCP em palavras de 32 bits Flags: URG (Urgent pointer foi usado) ACK (Acknowledgement foi usado) PSH (PUSHed data entrega cada mensagem que chega) RST(reset de uma conexão) SYN (solicitar/aceitar o estabelecimento de uma conexão) FIN (solicitar/aceitar o encerramento de uma conexão) Window size: tamanho da janela para controle de fluxo
Camada de aplicação Protocolos de aplicação são associados a serviços Exemplos DNS nomes de domínio SMTP transmissão de mensagens eletrônicas FTP transferência de arquivos HTTP serviço Web Associação serviços x portas Well Known Ports menores que 1024. Ex: 80 - Web server Registered Port Numbers maiores que 1023 Podem também ser utilizadas por aplicativos de usuários
DNS (Domain Name System) RFCs 1034 e 1035 Tradução entre nomes simbólicos e endereços IP FQDN (Full-Qualified Domain Name) Seqüências de alfanuméricos separados pontos Parte mais à esquerda: nome do host Parte da direita: domínio (e sua hierarquia) Hierarquia: define zonas de autoridade Mais altas: TLDs (Top Level Domains) países e atividades Banco de dados distribuído Resolução DNS request x reply Iterativa sobre a hierarquia Inicia no TLD (parte mais à direita do nome) e segue abaixo Porta default do servidor DNS: 53
Exemplo de hierarquia no DNS / br pe usp com eesc icmc terra mecatronica www www www.mecatronica.eesc.usp.br
SMTP (Simple Mail Transfer Protocol) RCF 2821 Serviço de transferência de correio eletrônico Mail boxes (caixas postais): login_name@host Cliente Acessa a caixa postal de um usuário (login) Contacta o servidor para encaminhamento de mensagens (MTA Message Transfer Agent) Servidor porta default 25 Contacta o MTA de destino (cada um) e encaminha a mensagem MTA de destino grava mensagem na caixa postal do destinatário Transporta exclusivamente texto (ASCII) Anexos com outros conteúdos são convertidos para texto e identificados MIME (Multipurpose Internet Mail Extensions) RFCs 2045 e 2049
FTP (File Transfer Protocol) RFC 959 Serviço de transferência de arquivos na Internet Formas distintas de transferência para conteúdos ASCII Binário Duas portas servidoras 21 canal de controle (comandos, etc) 20 canal de dados Modos Ativo cliente conecta porta 21 do servidor e informa uma porta para ser conectada para o canal de dados Passivo cliente conecta porta 21 do servidor, informa modo passivo e abre uma conexão com a porta 20 do servidor
HTTP (HyperText Transfer Protocol) RFC 2616 Serviço de transferência de hipertextos Conteúdo exclusivamente ASCII (também usa o MIME) Cada par requisição/resposta usa uma conexão Cliente (browser) requisita uma página de hipertexto referenciada por um URL (Uniform Resource Locator) RFC 1738 Cada objeto hipermídia (figuras, sons..) inserido na página é requisitado em uma nova conexão Métodos de encaminhamento: PUT, GET e POST Servidor Web pode suportar interpretadores e recursos para desenvolvimento de sistemas Porta default do servidor: 80
Paradigma cliente-servidor Aplicações relacionam-se em pares com diferentes papéis Cliente: tem comportamento ativo (mestre) Solicita conexão e serviços a um servidor Servidor: tem comportamento passivo (escravo) Aguarda solicitações do cliente, através de uma porta previamente registrada e informada à camada de transporte
Modelo de interação Comportamento solicitação-resposta (request-reply) Cliente demanda um serviço e fica aguardando a resposta Servidor recebe a solicitação, processa o pedido e envia resposta ao cliente Dois tipos de serviços de comunicação Orientados à conexão (SOCK_STREAM) Não-orientado à conexão (SOCK_DGRAM)
Formatos de mensagens A definição de formato em um protocolo de aplicação descreve características sintáticas de mensagens Mensagens são usadas para Coordenação entre cliente e servidor Troca de dados Estratégias Campos de tamanho fixo (a exemplo do IP, TCP,..) Delimitadores de campos de caracteres (como SMTP, HTTP,..) Exemplos: Cabeçalho fixo: 1;José;Professor Cabeçalho variável: codigo=1;nome=josé;tipo=professor Problema: caracteres delimitadores no conteúdo de um campo Solução: byte stuffing
Desenvolvimento de aplicações usando sockets API de sockets Berkeley Labs (1980's) Interface da camada de transporte Conjunto de funções e estruturas de alto nível Extensão das abstrações de operações com arquivos Um descritor de socket é mantido na tabela de arquivos abertos As operações para ler e escrever em um socket são semelhantes às realizadas em arquivos read, write, close, etc.. Multiplataforma: funções idênticas/semelhantes na maioria dos SOs (Linux/Unix, Windows, VxWorks) e linguagens (Java, C, e outras) CUIDADO: operações de leitura são geralmente BLOQUEANTES
Modelo geral de comportamento: SOCK_STREAM
Modelo geral de comportamento: SOCK_DGRAM
Funções de sockets (resumo) int socket(int domain, int type, int protocol) cria e retorna um descritor de socket int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) registra um socket a um número de porta, junto à entidade de transporte int listen(int sockfd, int backlog) usado pelo servidor, coloca o socket no modo passivo int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) usado pelo cliente, inicia a conexão de um socket int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) usado pelo servidor aceita uma conexão através de um socket ssize_t send(int sockfd, const void *buf, size_t len, int flags) envia dados através de uma conexão (SOCK_STREAM). Opcionalmente, usar a função write ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) envia dados através de datagrama (SOCK_DGRAM) ssize_t recv(int sockfd, void *buf, size_t len, int flags) recebe dados da conexão (SOCK_STREAM) e escreve no buffer. Opcionalmente, usar a função read ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) recebe dados através de datagrama (SOCK_DGRAM) int close(int fd) fecha a conexão e libera o descritor do socket (Windows: closesocket)
Funções auxiliares int getsockname(int sockfd, struct sockaddr *name, socklen_t *namelen) retorna o identificador do registro de um socket struct hostent *gethostbyname(const char *name) retorna a identificação de um host (consulta DNS) int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) permite a modificação de opções para um socket Para operação com porta: uint16_t htons(uint16_t hostshort) converte um número de 16 bits da ordem usada no host para usada na rede uint16_t ntohs(uint16_t netshort) converte um número de 16 bits da ordem usada na rede para usada no host Para operação com endereço IP: uint32_t htonl(uint32_t hostlong) converte um número de 32 bits da ordem de bytes usada no host para a usada na rede uint32_t ntohl(uint32_t netlong) converte um número de 32 bits da ordem usada na rede para usada no host
Desenvolvimento de aplicação no Workbench Aplicações host em plataforma nativa (Windows) New => Native Application Project Forneça um nome para o projeto (sem espaços) Siga até a tela Build Target Nessa tela, selecione C-Linker, como Build Tool Conclua a inicialização Em Properties do projeto Selecione Build Properties e, na tela, a aba Libraries Selecione Add Para a opção Add library file (-l), insira wsock32 Crie o código fonte.c (obs.: veja exemplos fornecidos) (continua)
Desenvolvimento de aplicação no Workbench (continuação) Compile o projeto Selecione Build Project A tela Generate Includes será oferecida, aceite-a até concluir Execute o projeto Selecione Open Workbench Development Shell Caminhe (cd) até o subdiretório Debug Chame o executável, passando argumentos, se necessários
Desenvolvimento de aplicação no Workbench Aplicações target em plataforma VxWorks New => VxWorks Real Time Process Project Forneça um nome para o projeto (sem espaços) Conclua a inicialização Crie o código fonte.c (obs.: veja exemplos fornecidos) Compile o projeto Selecione Build Project A tela Generate Includes será oferecida, aceite-a até concluir (continua)
Desenvolvimento de aplicação no Workbench (continuação) Crie uma nova conexão com o target Na aba Remote Systems selecione New connection Escolha Wind River VxWorks 6.x Simulator Connection Em Advanced Boot Parameters, selecione, para Boot device: a opção simnet, e conclua Execute o projeto no terminal VxWorks Caminhe (cd) até o subdiretório Debug. Ex.: cd "/WindRiver/workspace/vxWorksUdpServer/SIMPENTIUMdiab_RTP/vxWorksUdpServer/Debug/" Carregue o RTP criado (.vxe) com o comando rtpsp. Ex.: rtpsp "./vxworksudpserver.vxe Obs.: se tiver dúvidas, use os comandos pwd (mostra o diretório atual) e ls (lista o diretório)
Exercícios Implemente projetos para todos os exemplos de aplicações clientes e servidoras, fornecidos em classe, para ambas as plataformas (Windows e VxWorks) Realize os seguintes testes de comunicação: Cliente UDP Windows com: servidor UDP Windows e servidor UDP VxWorks Cliente TCP Windows com: servidor TCP Windows e servidor TCP VxWorks
Fontes para estudo e pesquisa Livros: TANENBAUM, A.S. Redes de Computadores. 4. ed. Elsevier, 2003. Sites: TANENBAUM, A.S. Distributed systems: principles and paradigms. Prent.Hall, 2002 STEVENS, W.R. UNIX network programming. Prentice Hall, 1998. RFCs: http://www.ietf.org/ IEEE 802: http://standards.ieee.org/getieee802/ Outros Man Pages de funções, no Linux Documentação do VxWorks e do Workbench