Prévia do material em texto
G RU PO SER ED U CACIO N AL R ED E D E CO M PU TAD O R ES E PRO G RAM AÇÃO APLICAD A A R ED ES David de Oliveira, Sergio Ricardo Master Penedo, Organizadora: Aline Ferreira Barbosa. REDE DE COMPUTADORES E FUNDAMENTOS DE PROGRAMAÇÃO APLICADA À REDES David de Oliveira; Sergio Ricardo Master Penedo. Organizadora: Aline Ferreira Barbosa. REDE DE COMPUTADORES E PROGRAMAÇÃO APLICADA A REDES Rede de Computadores e Fundamentos de Programação Aplicada à Redes © by Ser Educacional Todos os direitos reservados. Nenhuma parte desta publicação poderá ser reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de sistema de armazenamento e transmissão de informação, sem prévia autorização, por escrito, do Grupo Ser Educacional. Imagens e Ícones: ©Shutterstock, ©Freepik, ©Unsplash. Diretor de EAD: Enzo Moreira. Gerente de design instrucional: Paulo Kazuo Kato. Coordenadora de projetos EAD: Jennifer dos Santos Sousa. Equipe de Designers Instrucionais: Gabriela Falcão; José Carlos Mello; Lara Salviano; Leide Rúbia; Márcia Gouveia; Mariana Fernandes; Mônica Oliveira e Talita Bruto. Equipe de Revisores: Camila Taís da Silva; Isis de Paula Oliveira; José Felipe Soares; Nomager Fabiolo Nunes. Equipe de Designers gráficos: Bruna Helena Ferreira; Danielle Almeida; Jonas Fragoso; Lucas Amaral, Sabrina Guimarães, Sérgio Ramos e Rafael Carvalho. Ilustrador: João Henrique Martins. Oliveira , David de; Penedo, Sergio Ricardo Master; Organizador(a): Barbosa, Aline Ferreira. Rede de Computadores e Programação Aplicada a Redes: Recife: Ser Educacional - 2022. 136 p.: pdf ISBN: --- 1. redes 2. computadores 3. programação. Grupo Ser Educacional Rua Treze de Maio, 254 - Santo Amaro CEP: 50100-160, Recife - PE PABX: (81) 3413-4611 E-mail: sereducacional@sereducacional.com Iconografia Estes ícones irão aparecer ao longo de sua leitura: ACESSE Links que complementam o contéudo. OBJETIVO Descrição do conteúdo abordado. IMPORTANTE Informações importantes que merecem atenção. OBSERVAÇÃO Nota sobre uma informação. PALAVRAS DO PROFESSOR/AUTOR Nota pessoal e particular do autor. PODCAST Recomendação de podcasts. REFLITA Convite a reflexão sobre um determinado texto. RESUMINDO Um resumo sobre o que foi visto no conteúdo. SAIBA MAIS Informações extras sobre o conteúdo. SINTETIZANDO Uma síntese sobre o conteúdo estudado. VOCÊ SABIA? Informações complementares. ASSISTA Recomendação de vídeos e videoaulas. ATENÇÃO Informações importantes que merecem maior atenção. CURIOSIDADES Informações interessantes e relevantes. CONTEXTUALIZANDO Contextualização sobre o tema abordado. DEFINIÇÃO Definição sobre o tema abordado. DICA Dicas interessantes sobre o tema abordado. EXEMPLIFICANDO Exemplos e explicações para melhor absorção do tema. EXEMPLO Exemplos sobre o tema abordado. FIQUE DE OLHO Informações que merecem relevância. SUMÁRIO UNIDADE 1 Introdução a redes de computadores � � � � � � � � � � � � � � � � � � � � � � � � � � � 13 Redes locais, metropolitanas e geograficamente distribuídas � � � � � � �16 Redes geograficamente distribuídas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �18 Topologias de redes de computadores � � � � � � � � � � � � � � � � � � � � � � � � � � � � �21 Topologia física � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 22 Topologia lógica � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 25 Princípios de transmissão da informação � � � � � � � � � � � � � � � � � � � � � � �26 Tecnologias básicas de comunicação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 27 Tipos de sinal � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 28 Sinal analógico � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 28 Sinal digital � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 29 Modos de transmissão � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 30 Taxa de transmissão � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 31 Baud Rate (Taxa Baud) � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 31 Codecs e modems � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 32 Modelos de redes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 33 TCP/IP � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �33 Modelo OSI � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 34 UNIDADE 2 Estrutura do modelo osi � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 39 Camada física � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 39 Transmissão por meios físicos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 40 Transmissão sem fio � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 43 Camada enlace� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �45 Mecanismos de detecção e controle de erros � � � � � � � � � � � � � � � � � � � � � � 48 Tipos de erros � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 48 Controle de erros � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 49 Técnicas de detecção de erros � � � � � � � � � � � � � � � � � � � � � � � 50 Técnicas de correção de erros � � � � � � � � � � � � � � � � � � � � � � � � �51 Camada de redes � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 52 Redes por circuitos virtuais � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 55 Redes por Datagrama � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 56 Arquitetura TCP/IP � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 57 Endereçamento IP � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 58 Endereços IPv4 e IPv6 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 59 Conceito de NAT � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �61 Camada transporte � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �62 O Protocolo TCP � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 64 O Protocolo UDP � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 66 Camada sessão � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �67 Camada apresentação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �68 Camada aplicação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �68 Serviços em rede � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 69 Protocolos da camada de aplicação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 69 UNIDADE 3 Caracterização da linguagem de script � � � � � � � � � � � � � � � � � � � � � � � � � �79 O que é o shell � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 79 Tipos de shell � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 80 Inicialização do shell � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 85 Noçõesbásicas sobre arquivos de inicialização do shell de todo o sistema � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 88 Noções básicas sobre arquivos de inicialização do shell específicos do usuário � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 90 Definição do ambiente de aplicabilidade e desenvolvimento � � � 94 Definição de algoritmo � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 94 Por que utilizar algoritmos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 95 Características dos algoritmos e suas formas de representação � � � � 96 Fundamentação da lógica dentro do ambiente de programação 99 Estruturas principais para a construção de algoritmos � � � � � � � � � � � � 100 UNIDADE 4 Desenvolvimento de aplicações � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �105 Descritores de arquivos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 105 Operadores em descritores de arquivos � � � � � � � � � � � � � 108 Redirecionamentos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 111 Dutos (pipes) � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 113 Caracteres especiais e curingas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �114 Controle de processos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 117 Substituição da saída padrão � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �118 História de comandos � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 124 Aplicação básica � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 127 Desenvolvimento de aplicação básica para automação de tarefas cotidianas � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 127 Roteiro de aplicação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 128 Estado da automação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 129 Passos do teste � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 129 Verificação e validação � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 131 Dados de teste � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 131 Resultados � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 132 Pós-operações � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 132 Apresentação Olá, aluno(a)! No universo moderno da tecnologia de comunicação, deparamo-nos com o desafio atual da busca pela conectividade com disponibilida- de constante e qualidade nas taxas de transmissão a custo acessí- vel para a maioria, em uma infraestrutura dispendiosa que requer relativamente alta manutenção. É importante que você, enquanto profissional atuante nesta área, esteja constantemente atualizado, pois a implementação de novas tecnologias é o caminho para sua permanência no disputado mercado de trabalho de Tecnologia da Informação. Neste material, abordaremos conhecimentos sobre os padrões e tecnologias, princípios de instalação, configuração, ade- quação e manutenção para cada aplicação. Abordaremos a classifi- cação das redes quanto à abrangência, tipos, topologias, elementos de transmissão. Além disso, o conhecimento do Modelo OSI e suas camadas serão detalhados com intuito de esclarecer o funciona- mento das redes de computadores. De forma complementar, trataremos, também, os concei- tos clássicos de programação e os desafios diários do profissional de Redes de Computadores, a fim de explorar ao máximo as ferra- mentas de desenvolvimento de programas em suas tarefas, promo- vendo, assim, pontos de análise e reflexão sobre as possibilidades quando ligadas à programação. Contemple esses conteúdos e ótimos estudos! Autoria David de Oliveira. É especialista em redes de computadores pela ESAB, graduado em engenharia elétrica pela FESP, em tecnologia em automação indus- trial pelo IF-SP e em tecnologia em processamento de dados pela FATEC-SP. Possui atuação e vivência como docente na área de tec- nologia da informação por mais de 15 anos, com foco em redes, in- fraestrutura, segurança da informação e aplicativos, e também na área de engenharia, com foco em automação predial, projetos Turn- Key e desenho assistido por computador, em instituições de educa- ção de grande porte. Experiência como profissional em tecnologia da informação por mais de 20 anos, com foco em gestão de equipes de implantação e manutenção de parque tecnológico. Desenvolvimento e condução de projetos do cotidiano corporativo nas áreas de transmissão de dados, switching e routing, hardening e implantação, serviços de re- des, gerenciamento e monitoramento de servidores, virtualização, centrais telefônicas e cabeamento estruturado. Curriculo Lattes Sergio Ricardo Master Penedo. É doutor em Engenharia Elétrica pela Escola Politécnica da Univer- sidade de São Paulo (PO- LI-USP), em 2014, área em que também é Mestre pela Universidade Federal de Santa Catarina (UFSC), em 2000. Graduado pela Universidade Federal do Pará (UFPA), em 1998. É docente do Ensino Superior desde 2002, em cursos de Engenharia Elétrica, Engenharia Mecânica, Engenharia Mecatrônica, Engenha- ria de Telecomunicações e Engenharia de Produção, tendo exercido também funções de coordenação dos cursos de Engenharias Elétri- ca, Mecatrônica, Mecânica, Química, de Produção e da Computação. Atua nas Engenharias Elétrica, de Produção e da Computação, com ênfase na pesquisa e orientação de trabalhos em Automação e Con- trole, Processamento de Sinais, Imagens e Vídeo, Robótica, Inteli- gência Artificial, Pesquisa Operacional e Inovação Tecnológica. Curriculo Lattes Organizadora Aline Ferreira Barbosa. é Doutoranda em Engenharia da Computação pela Universidade de Pernambuco (2019-2023), Mestre em Engenharia da Computação pela Universidade de Pernambuco (2019) e Graduada em Licencia- tura em Computação pela Universidade de Pernambuco (2014). Atuou como Diretora Presidente na empresa TEC Jr (Tecnologia, Educação e Consultoria Júnior) - empresa júnior do curso de Licen- ciatura em Computação vinculada a Universidade de Pernambuco. Tem artigos científicos em eventos brasileiros importantes na sua área de pesquisa, tais como SBGames, WIE, WEI, SQBS, WER. Possui experiência em lecionar diferentes disciplinas na área de computação, tais como: Programação, Segurança em Redes de Computadores, Engenharia de Requisito, Engenharia de Software e Gestão de Projetos de Software. Curriculo Lattes UN ID AD E 1 Introdução a redes de computadores Objetivos 1. Compreender os conceitos fundamentais sobre redes de com- putadores. 2. Conhecer os princípios de transmissão de informação. 3. Entender os Modelos TCP/IP e Modelo OSI. 12 Introdução Caro(a) aluno(a), Neste material, abordaremos os conceitos básicos relacionados às redes de computadores. Inicialmente, discutiremos como as redes de computadores são classificadas, como redes locais, metropoli- tanas e de longa distância. A topologia também será discutida, elas representam as várias formas de interconectar os componentes de uma rede de comunicação de dados, são elas: barramento, anel, e estrela, além da combinação de todas elas, que entraremos em detalhes no decorrer desta unidade. Vamos também ver alguns princípios da transmissão da in- formação, incluindo detalhes sobre o canal de comunicação que é necessário para transportar o sinal de um ponto para outro. O trans- missor tem duas opções de formas de onda disponíveis para enviar informações pela rede: analógicae digital. Por fim, entraremos em detalhes sobre o modelo OSI e seu conjunto de sete elementos funcionais ou camadas de serviços. E claro, não se esqueça que nessa unidade consta assuntos importan- tes que servirão como base para a sua jornada de aprendizagem na área de redes computadores. Bons estudos! 13 Introdução a redes de computadores Durante as primeiras décadas da utilização dos computadores, eles estavam restritos a áreas corporativas, governamentais, científi- cas e militares, criando, assim, sistemas computacionais altamente centralizados, o que implicava em existir uma máquina que con- centrava todos os dados, ou seja, um dispositivo que fornecia todo o processamento e todas as informações necessárias. Esse disposi- tivo era tipicamente um computador de grande porte para época, conhecido como Mainframe, do qual o maior fabricante da época era a IBM. Figura 1: Um computador de grande porte do tipo Mainframe. Fonte: Shutterstock. Estas poderosas máquinas tinham um poder incrível de pro- cessamento (para a época) e uma estrutura onde concentrava as informações. Os terminais eram chamados de “Terminais Burros”, pois não tinham processamento interno. Apesar de sua capacidade de processamento, o modelo centralizado acabou perdendo forças com a evolução dos PCs (Personal Computers ou Computadores Pes- soais), pois o custo elevado e características de manutenção acaba- ram tornando os PCs a solução mais adotada com o passar do tempo. 14 Com o crescimento da variedade e oferta dos computadores pes- soais, vem também a necessidade de integrá-los de alguma forma. Até certo ponto, essa necessidade de integrar ou interagir uns com os outros tinha que ser feita gravando os dados em discos (disquete ou fita) e levando até o outro computador. Nesse momento, vários fabricantes iniciaram o desenvol- vimento de redes proprietárias, como a Novell e o IPX, o que difi- cultava a vida das empresas, pois ficavam presas a um determinado padrão ou fabricante, o que gerou a necessidade de padronização e o nascimento de modelos de referência como o OSI (Open Systems Interconnection ou Interconexão de Sistemas Abertos). As redes se tornam populares e praticamente indispensáveis a partir dos anos 1990 com o surgimento da internet e a massificação do uso do protocolo TCP/IP, atual protocolo de rede utilizado na internet e nas redes internas das empresas (Intranet). Em termos físicos, as redes iniciam com os cabos coaxiais, depois evoluem para o uso do UTP, com as redes Ethernet 10baseT. Os cabos coaxiais foram subs- tituídos por pares metálicos após algum tempo devido ao custo, es- paço ocupado (eles são mais espessos), os conectores mais caros, e também devido ao fato de que quando o cabo tinha um problema, todos os computadores para trás perdiam conexão com a rede. Atualmente, a maioria das redes utiliza uma velocidade de 100Mbps ou 1Gbps em suas LANs (Local Area Network ou Redes Locais) utilizando cabos metálicos UTP (Unshielded Twisted Pair ou Pares Trançados não Blindados) e são interligadas por meio de equipamentos chamados switches (comutadores) ou eventualmen- te hubs (atualmente em desuso). Também não podemos esquecer a evolução das redes sem fio, chamadas de wireless ou Wi-Fi (Wireless Fidelity ou Fidelidade Sem Fio), que nasceram com velocidades de 11Mbps e, atualmente, tem versões em desenvolvimento que pro- metem velocidades acima de 400Mbps. Em uma rede sem fio, temos um elemento chamado AP (Access Point ou Ponto de Acesso) que faz a distribuição do sinal de rede para as diversas placas de rede sem fio que estão nos dispositi- vos dos usuários. Outro meio muito, principalmente para interligar os diversos dispositivos de redes, como os switches, é a fibra ótica. Apesar do seu custo elevado (tanto de instalação como de manu- 15 tenção), ela é muito utilizada para interligar os diversos switches ou servidores de alta capacidade dentro de uma rede de computadores. A grande vantagem da fibra ótica é sua imunidade às interferências eletromagnéticas e maior largura de banda que o par metálico. O uso das redes de computadores em corporações tem o ob- jetivo de gerar economia de tempo e maior controle dos processos, ou seja, tornar a organização mais eficiente. Outro ponto impor- tante é a necessidade que as corporações possuem de manter infor- mações em tempo real, tornando a rede não apenas um “artigo de luxo”, mas uma necessidade real para seus negócios poderem fluir da melhor maneira possível. A maioria das empresas já reconhece que, para ter sucesso nos negócios, é preciso compartilhar informa- ção e manter uma boa comunicação não apenas internamente, mas também com todo o ambiente externo (clientes, parceiros, governo etc.). Uma empresa que utiliza redes acaba se tornando mais com- petitiva, uma vez que sua eficiência interna aumenta. O uso das redes, em especial da internet, tem proporcio- nado novas oportunidades para as empresas e novos mercados são alcançados, permitindo que a empresa ultrapasse barreiras geográ- ficas, atuando não apenas em sua região, mas de forma nacional, regional ou até global. O avanço das redes permitiu o desenvolvi- mento de diversas aplicações que atualmente fazem parte do nosso cotidiano, tais como: • Acessos a bases de dados via internet; • Acessos às contas bancárias via Internet Banking; • Realização de compras de diversos tipos de produtos e servi- ços por meio de sites de e-commerce (comércio eletrônico); • Ferramentas de comunicação online como as de chat (bate- -papo), • Envio e recebimento de correio eletrônico (e-mail) com fer- ramentas como o Gmail e muitas outras opções e serviços são cada vez mais comuns. Em um ambiente corporativo, a rede permite acesso a ca- 16 dastros de clientes e fornecedores, banco de dados com os produtos disponíveis, diversos controles de processos como estoque, pedidos de compra, logística e muito mais. Esses sistemas têm diversos no- mes padronizados pelas indústrias como ERP (Enterprise Resource Planning ou Planejamento de Recursos Empresariais), CRM (Cus- tomer Relationship Management ou Gestão de Relacionamento com o Cliente) e assim por diante. Esses sistemas podem ser utilizados para administrar os processos de uma corporação de maneira única e muito mais eficiente. Além disso, em um ambiente corporativo, existe ainda o grande desafio da convergência entre os dados e serviços de multi- mídia, como voz e imagem, pois, atualmente, essa é a realidade de uma rede em uma grande corporação e não mais uma tendência, ou seja, ambientes de rede complexos e com cada vez mais dispositi- vos, diferentes tipos de tráfego e necessidades para serem tratadas pelos elementos de rede. Redes locais, metropolitanas e geograficamente distribuídas O conceito de rede se refere à transmissão de dados digitais entre dois ou mais computadores. Este sistema de comunicação é com- posto por elementos ou dispositivos que têm funções bem especí- ficas na rede, tais como os switches, que têm a função de dar acesso à rede para os computadores, ou os roteadores, que têm a função de encaminhar os pacotes IP para os destinos corretos, e assim por diante. A conexão física entre os dispositivos de computação em rede é estabelecida usando mídia cabo (com fio) ou mídia ar (sem fio). A rede de computadores mais conhecida é a internet. 17 Figura 2: Redes de Longa Distância (WAN) integrando Redes Locais (LAN). Fonte: Shutterstock. Toda essa troca de informação é realizada por meio de pro- tocolos. Na ciência da computação ou informática, um protocolo é uma convenção ou padrão que controla e possibilita uma conexão, comunicação, transferência de dados entre dois sistemas computa- cionais. De maneira simples, um protocolo pode ser definido como “as regras que governam” a sintaxe, semântica e sincronização da comunicação, ou seja, que controlam essa “conversa” entre os dis- positivos. Os protocolos podem ser implementados pelo hardware, software oupor uma combinação dos dois. 18 É bem simples de visualizar a importância dos protocolos de co- municação em rede. Imagine uma reunião em que diversas pessoas estão sentadas ao redor da mesa querendo expor seus problemas e pontos de vista. Se não houver uma regra ou protocolo, fica impos- sível haver a comunicação. Afinal, se todos falarem ao mesmo tem- po, ninguém irá se entender. A função dos protocolos de rede é bem semelhante, porém muito mais complexa e com uma variedade de padrões. Falando em termos simples, uma rede precisa dos seguintes protocolos: • Os que regulam o acesso aos meios físicos, como Ethernet com CSMA/CD, PPP, Frame-relay etc.; • Os que regulam o envio pela rede e o endereçamento lógico da rede, como o protocolo IP; • Os que regulam o envio das informações dentro dos computa- dores e as separam em diversas comunicações, como os pro- tocolos TCP e UDP; • Os que fornecem os serviços de rede aos usuários, como os protocolos HTTP, FTP, Telnet, DHCP, DNS etc. Redes geograficamente distribuídas Uma maneira de categorizar os diferentes tipos de projetos de redes de computadores é pelo seu escopo ou escala. Por razões históri- cas, a indústria de redes refere-se a quase todo tipo de projeto como uma espécie de rede de área. A classificação quanto à abrangência geográfica é a mais comum e a que utilizamos em nosso dia a dia. Exemplos comuns de tipos de redes de área são: EXEMPLIFICANDO 19 LAN (Local Area Network ou Rede Local): são redes que for- necem recursos a um grupo de computadores muito próximos uns dos outros, como em um prédio de escritórios, escola ou casa. Ge- ralmente, as LANs são criadas para permitir o compartilhamento de recursos e serviços, como arquivos, impressoras, jogos, aplicativos, e-mail ou acesso à internet. Ela é uma rede restrita a áreas físicas menores, um escritório local, escola ou casa. Aproximadamente to- das as LANs atuais, com ou sem fio, são baseadas em Ethernet. Em uma rede local, as velocidades de transferência de dados são maio- res do que as da WAN e da MAN, que podem se estender a 10 Mbps (Ethernet) e 1,0 Gbps (Gigabit Ethernet). Figura 3: Exemplo de Rede Local (LAN). Fonte: Shutterstock. WLAN (Wireless Local Area Network ou Rede Local sem fio): são redes LAN que funcionam usando tecnologia sem fio, também conhecida como Wi-Fi. Esse tipo de rede está se tornando mais po- pular à medida que a tecnologia sem fio é desenvolvida e é usada mais em casa e por pequenas empresas. Isso significa que os dispo- sitivos não precisam depender tanto de cabos e fios físicos e podem organizar seus espaços com mais eficiência. Uma WLAN opera um ou mais pontos de acesso sem fio aos quais os dispositivos dentro do alcance do sinal se conectam. 20 Figura 4: Exemplo de Rede Local sem Fio (WLAN). Fonte: Shutterstock. WAN (Wide Area Network ou Rede de Longa Distância): são redes consideradas de longa distância, geralmente implantadas por empresas de telecomunicações privadas. Elas têm como caracterís- tica serem distribuídas geograficamente e interconectar várias re- des locais (LANs). Em uma empresa, uma WAN pode consistir em conexões com a sede da empresa, filiais, site-site, serviços em nu- vem e outras instalações. Normalmente, um roteador ou outro dis- positivo multifuncional é usado para conectar uma LAN a uma WAN. As WANs corporativas permitem que os usuários compartilhem o acesso a aplicativos, serviços e outros recursos localizados central- mente. Isso elimina a necessidade de instalar o mesmo servidor de aplicativos, firewall ou outro recurso em vários locais, por exemplo. MAN (Metropolitan Area Network ou Rede Metropolitana): são redes que conectam dois ou mais computadores, comunicando dispositivos ou redes em uma única rede que possui área geográfica maior do que a coberta por uma rede local (LAN), mas menor que a região coberta por uma rede de longa distância (WAN). Na maioria das vezes, as MANs são construídas para cidades ou vilarejos para 21 fornecer uma alta conexão de dados e geralmente pertencentes a uma única grande organização. SAN (Storage Area Network ou Rede de Armazenamento, Rede de Sistema, Rede de Servidores ou, às vezes, Rede Área Pe- quena): são redes de armazenamento que compartilham uma base de dados comuns em um determinado ambiente, normalmente um Data Center. As SANs são mais comuns nos armazenamentos de grande porte (storage). O Data Center é um ambiente projetado para abrigar servidores e outros componentes como sistemas de armazenamen- to de dados e ativos de rede (switches, roteadores). Utilizam tecno- logias como o Fiber Channel (canal de fibra). PAN (Personal Area Network ou Rede Pessoal ou Privativa): são redes para uso pessoal. As redes PAN geralmente são sem fio, instaladas sob demanda (ad-hoc) quando são necessárias para se comunicar entre dois ou mais dispositivos. As redes PAN podem ser usadas entre dispositivos pertencentes a duas partes diferentes ou entre dois dispositivos pertencentes a uma pessoa, como um laptop ou telefone celular. Essas redes geralmente são caracterizadas como de curto alcance, geralmente limitadas a 10 metros ou menos de al- cance. Um exemplo de uma tecnologia PAN é a rede sem fio blue- tooth. Topologias de redes de computadores As redes de computadores permitem que os usuários utilizem sua estrutura de forma que possam compartilhar informações com um melhor desempenho. É com a topologia de redes que podemos des- crever como estes computadores estão ligados em rede e interli- gados entre si, tanto do ponto de vista lógico como físico. Existem duas maneiras de definir a geometria da rede: a topologia física e a topologia lógica. 22 Topologia física Descreve o posicionamento dos nós da rede e as conexões físicas entre eles. Isso inclui o arranjo e a localização dos nós da rede e a maneira como eles estão conectados. Veja a seguir os tipos de topo- logias físicas: • Barramento: cada estação de trabalho é conectada a um cabo principal chamado barramento. Portanto, na verdade, cada estação é conectada diretamente a todas as outras estações de trabalho na rede. Figura 5: Barramento Fonte: Shutterstock. • Estrela: existe um concentrador central (hub, switch, rotea- dor, computador etc.) em que todas as estações de trabalho são conectadas. Cada estação de trabalho é independente, mas com diversos concentradores elas acabam todas indiretamen- te conectadas. 23 Figura 6: Estrela Fonte: Shutterstock. • Anel: as estações de trabalho são conectadas em uma confi- guração de circuito fechado. Pares adjacentes de estações de trabalho são conectados diretamente. Outros pares de esta- ções de trabalho estão indiretamente conectados, os dados passando por um ou mais nós intermediários. Figura 7: Anel Fonte: Shutterstock. 24 • Malha: emprega um dos dois esquemas, chamados de malha completa e malha parcial. Na topologia de malha completa, cada estação de trabalho é conectada diretamente a cada uma das outras. Na topologia de malha parcial, algumas estações de trabalho são conectadas a todas as outras e algumas são conectadas apenas àqueles outros nós com os quais trocam a maior parte dos dados. Figura 8: Malha Fonte: Shutterstock. • Árvore: usa duas ou mais redes em estrela conectadas juntas. Os computadores centrais das redes estelares estão conecta- dos a um barramento principal. Assim, uma rede de árvores é uma rede de barramento de redes estelares. 25 Figura 9: árvore Fonte: Shutterstock. Topologia lógica Refere-se à natureza dos caminhos que os sinais seguem de nó para nó; uma rede lógica é governada por protocolos usados pelos da- dos que se movem sobre ela. Em muitos casos, a topologia lógica é igual à topologia física, mas nem sempre é esse o caso. Por exem- plo, algumas redes são fisicamente dispostas em uma configuração em estrela, mas operam logicamente como redes de barramento ou anel. “Um protocolo define o formato e a ordem das mensagens troca-das entre duas ou mais entidades comunicantes, bem como as ações realizadas na transmissão e/ou no recebimento de uma mensagem ou outro evento” (KUROSE; ROSS, 2010, p. 7). DEFINIÇÃO 26 Princípios de transmissão da informação A comunicação de dados é o movimento da informação do compu- tador de um ponto para outro por meio de sistemas de transmis- são elétrica ou óptica. Tais sistemas são frequentemente chama- dos de redes de comunicação de dados. Isso contrasta com o termo mais amplo de telecomunicações, que inclui a transmissão de voz e imagem (fotos e vídeos), bem como dados, e geralmente implica distâncias maiores. Em geral, as redes de comunicação coletam dados de com- putadores e outros dispositivos e transmitem essas informações para um servidor central, que é um computador, microcomputador ou mainframe mais potente, ou executam o processo inverso ou ainda uma combinação dos dois. As redes de comunicação de dados facilitam o uso mais eficiente de computadores e melhoram o controle diário de uma empresa, fornecendo um fluxo de informações mais rápido. Eles também fornecem serviços de transferência de mensagens para permitir que usuários de computador conversem entre si via e-mail, bate-papo e streaming de vídeo. Um canal de comunicação é necessário para transportar o sinal de um ponto para outro. Tradicionalmente, o canal é forneci- do por pares de fios de cobre, por meio de micro-ondas terrestres, micro-ondas por satélite, cabo de fibra óptica e sinais de rádio. Es- ses meios diferem em termos de largura de banda, que é a faixa de frequências que podem transmitir. Quanto maior a largura de banda de um meio, maior a quantidade de informação que ele pode carre- gar. Guias de onda são tubos ocos projetados para confinar e guiar as ondas de rádio entre dois locais. O transmissor tem duas opções de formas de onda disponíveis para enviar informações pela rede: analógica e digital, que serão detalhadas nos próximos tópi- cos. 27 O conhecimento científico de eletricidade e magnetismo que é necessário para permitir as telecomunicações começou com as investigações de Michael Faraday, muitas vezes considerado o maior experimentalista de sua época. Faraday não era habilidoso em matemática, mas seu amigo James Clerk Maxwell era. Foi Maxwell quem unificou as descobertas discrepantes so- bre as propriedades da eletricidade, do magnetismo e suas inter-re- lações íntimas, consagrando-as nas quatro belas equações vetoriais conhecidas como as equações de Maxwell, do eletromagnetismo. Além disso, Maxwell representou matematicamente o con- ceito intuitivo de Faraday dos campos elétricos e magnéticos. To- das as teorias físicas modernas são teorias de campo e desfrutam da vantagem atraente de banir os conceitos de “ação à distância” da ciência. A partir da matemática das equações de Maxwell, ele con- seguiu calcular explicitamente a velocidade da luz a partir da medi- ção de duas constantes elétricas e demonstrar que os efeitos eletro- magnéticos viajam pelo espaço à velocidade da luz. Em sua análise, Maxwell introduziu o famoso conceito da corrente de deslocamento mostrando que sem ele as outras equações seriam inconsistentes com a conservação da carga elétrica. John Henry Poynting mostrou que, onde quer que campos elétricos e magnéticos estejam presentes, há um fluxo de energia naquele ponto. É essa energia que permite a transmissão de mensa- gens pelo espaço. Tecnologias básicas de comunicação A tecnologia de telecomunicação envolve a transferência de sinais de informação por meio de fios, fibra ou pelo ar por meio de sinais SAIBA MAIS 28 elétricos ou ópticos. Os sinais de comunicação são geralmente ca- racterizados por sua intensidade (tensão e corrente) e frequência (ciclos por segundo). Para permitir que informações sejam transferidas usando sinais de comunicação, uma fonte de informação (dados, voz ou imagem) é representada pelo sinal em si (chamado de sinal de ban- da base) ou a informação muda ligeiramente a forma de onda do sinal de comunicação (chamado sinal de banda larga). A informação é imposta ao sinal de transporte (chamado de portadora), variando o nível do sinal ou mudanças de tempo (mudança de frequência). Tipos de sinal Existem dois tipos básicos de sinais: analógico e digital. Muitos sis- temas de comunicação recebem sinais analógicos (por exemplo, si- nais de áudio), convertem para um formato digital, transportam os sinais digitais por meio de uma rede e reconvertem os sinais digitais de volta à sua forma analógica quando chegam ao seu destino. Sinal analógico É uma onda contínua denotada por uma onda senoidal e pode variar em intensidade do sinal (amplitude) ou frequência (tempo). O valor de amplitude da onda senoidal pode ser visto como os pon- tos mais alto e mais baixo da onda, enquanto o valor da frequência (tempo) é medido no comprimento físico da onda senoidal da es- querda para a direita. Existem muitos exemplos de sinais analógicos a nossa volta. O som de uma voz humana é analógico, porque as ondas sonoras são con- tínuas, assim como nossa própria visão, porque vemos várias for- mas e cores de maneira contínua devido às ondas de luz. Mesmo um EXEMPLO 29 típico relógio de cozinha, com seus ponteiros se movendo continua- mente, pode ser representado como um sinal analógico. Sinal digital Tem um número limitado de estados discretos, geralmente dois, em contraste com sinais analógicos, que variam continuamente e têm um número infinito de estados. Os sinais digitais transferem níveis discretos de sinal em intervalos de tempo predeterminados. Os sinais digitais normalmente possuem dois níveis: on (logic 1) e off (logic 0). A informação contida em um único período de tempo é chamada de um pulso. O número de bits transferidos em um segun- do é chamado de taxa de transferência de dados ou bits por segundo (bps). Como muitos bits são tipicamente transferidos em um segun- do, a taxa de dados é normalmente precedida por um multiplicador k (mil) ou M (milhões). Por exemplo, se a taxa de transferência de dados for de 3 milhões de bits por segundo, 3 Mbps indicariam isso. Normalmente, os bits são combinados em grupos de 8 bits para for- mar um byte. Quando a referência é feita para bytes em vez de bits, o b é capitalizado. A forma mais antiga de comunicação por rádio digital era o códi- go Morse. Para enviar o código Morse, o transmissor de rádio era simplesmente ligado e desligado para formar pontos e traços. O re- ceptor detectaria a portadora de rádio para reproduzir os pontos e traços. Um livro de códigos de pontos e traços foi usado para deco- dificar a mensagem em símbolos ou letras. Os pulsos ou bits ligados e desligados que compõem um sinal digital moderno são enviados de maneira semelhante. CURIOSIDADE 30 A tendência nos sistemas de comunicação, assim como em outros tipos de produtos eletrônicos, como discos compactos, é mudar de sistemas analógicos para sistemas digitais. Os sistemas digitais têm uma série de vantagens importantes, incluindo o fato de que os sinais digitais são mais imunes ao ruído. Ao contrário dos sistemas analógicos, mesmo quando o ruído foi introduzido, quais- quer erros resultantes no fluxo de bits digital podem ser detecta- dos e corrigidos. Além disso, os sinais digitais podem ser facilmente manipulados ou processados de maneiras úteis, usando técnicas modernas de computação. Modos de transmissão A transmissão de dados entre duas máquinas pode ser realizada de diferentes maneiras, tais como: o sentido das trocas, como as trocas são realizadas, o modo de transmissão, o número de bits enviados simultaneamente e a sincronização entre o emissor e o receptor. Es- pecificamente neste tópico, vamos estudar os três modos de trans- missão de dados: ligação simplex, half-duplex e full-duplex. Simplex Envia apenas informações em uma direção. Por exemplo, uma estação de rádio geralmente envia sinais para o público, mas nunca recebe sinaisdeles, portanto, uma estação de rádio é um ca- nal simplex. Também é comum usar o canal simplex na comunica- ção por fibra ótica. Um fio é usado para transmitir sinais e o outro é para receber sinais. Mas isso pode não ser óbvio porque o par de fios de fibra é frequentemente combinado a um cabo. A boa parte do modo simplex é que toda a sua largura de banda pode ser usada durante a transmissão. Half-duplex Os dados podem ser transmitidos em ambas as direções em um portador de sinal, não ao mesmo tempo. Em certo ponto, é na verdade um canal simplex cuja direção de transmissão pode ser tro- cada. Walkie-talkie é um dispositivo half-duplex típico. Ele tem um botão “push-to-talk” (apertar para falar) que pode ser usado para ligar o transmissor, mas desliga o receptor. Portanto, uma vez que 31 você apertar o botão, você não poderá ouvir a pessoa com quem está falando, mas seu parceiro poderá ouvi-lo. Full-duplex É capaz de transmitir dados em ambas as direções em uma portadora de sinal ao mesmo tempo. Ele é construído como um par de links simplex que permite a transmissão simultânea bidirecio- nal. Por exemplo, as pessoas nas duas extremidades de uma chama- da podem falar e ser ouvidas umas pelas outras ao mesmo tempo, porque há dois caminhos de comunicação entre elas. Assim, usar o modo full duplex pode aumentar muito a eficiência da comunicação. Taxa de transmissão A taxa de transmissão é a velocidade na qual os dados são transmi- tidos por um canal. Foi nomeado posteriormente de Código Baudot em homenagem ao cientista francês Jean Maurice Émile Baudot, que inventou um dos primeiros códigos de transmissão de dados. Em baixas velocidades, um baud é equivalente a um bit por segundo, portanto, um canal de 1200 bauds transmitirá dados a uma taxa de 1200 bps. Quando a taxa de transmissão de uma linha é definida para DCE, o termo baud é frequentemente usado. Se usado corretamente, baud indica o número de mudanças de sinal de linha por segundo, portanto, se cada sinal transmitido for um ou zero, então a taxa de transmissão e a taxa de transmissão real são os mesmos. No entan- to, há muitos casos em que o sinal de linha pode assumir mais de dois estados e, como tal, cada sinal pode ser usado por mais de um bit. Baud Rate (Taxa Baud) É a medida das unidades de sinal necessárias para transmitir os da- dos. O ideal é criar um sistema eficiente usando o menor número de sinais possível. Quanto menos sinais houver, menor será a largura de banda necessária para mover os dados. A taxa de transmissão de- 32 termina a quantidade de largura de banda necessária nos enlaces de comunicação. A taxa de transmissão de dados ou bit (DTR) é medida em bits por segundo (bps). A taxa de transmissão de dados indica quanto tempo levará para transmitir os dados; em termos do usuá- rio e do computador, essa é a informação mais importante, porque o DTR é usado para comparar velocidades e desempenho. Baud sem- pre será menor ou igual ao DTR. Codecs e modems O fato é que hoje não temos redes totalmente digitais ou totalmente analógicas: temos uma mistura dos dois. Portanto, em vários pontos de uma rede, é necessário converter entre os dois tipos de sinal. Os dispositivos que lidam com essas conversões são codecs e modems. Um codec (que é uma contração do codificador-descodifi- cador) converte sinais analógicos em sinais digitais. Existem dife- rentes codecs para diferentes finalidades. Para a PSTN (Public Swit- ched Telephone Network ou Rede Pública de Telefonia Comutada), por exemplo, existem codecs que minimizam o número de bits por segundo necessário para transportar voz digitalmente por meio da PSTN. Nas redes celulares, por causa das restrições e do espectro disponível, um codec precisa comprimir ainda mais a voz para obter o uso mais eficiente do espectro. Os codecs aplicados à comunicação de vídeo também exigem técnicas de compressão muito específicas para poder mover os sinais de alta largura de banda sobre o que pode ser um pouco limitado nos canais atuais. Um modem é um dispositivo de rede que modula e desmo- dula sinais analógicos da portadora (chamados ondas senoidais) para codificar e descodificar informações digitais para processa- mento. Os modems realizam essas duas tarefas simultaneamente e, por esse motivo, o termo modem é uma combinação de “modular” e “desmodular”. Existem também modems projetados para funcio- nar especificamente com recursos digitais (por exemplo, modems ISDN, modems ADSL). Um modem manipula as variáveis da onda eletromagnética para diferenciar entre uns e zeros. 33 Embora seja possível converter entre redes analógicas e digitais, em geral, as conversões são um elo fraco em uma rede. Uma conversão é um ponto no qual problemas de rede podem ocorrer, uma oportu- nidade para erros e distorções serem introduzidas. Portanto, ideal- mente, queremos avançar em direção a um ambiente óptico de pon- ta a ponta e digital de ponta a ponta. Isso significa que em nenhum lugar entre o transmissor e o receptor é necessário fazer conversões de sinais. Modelos de redes Os modelos tentam explicar o funcionamento da rede, dividindo- -a em camadas. Não é necessário segui-lo à risca pelos protocolos de redes, mas ajuda na compreensão de vários aspectos teóricos de como é o funcionamento da rede. TCP/IP São dois dos padrões de rede que tornam a internet possível. O Pro- tocolo IP (Internet Protocol ou Protocolo Internet) define como os computadores podem obter dados entre si por meio de um conjun- to interconectado de redes. O Protocolo TCP (Transmission Control Protocol ou Protocolo de Controle de Transmissão) define como os aplicativos podem criar canais confiáveis de comunicação em uma rede IP. O IP basicamente define endereçamento e roteamento, en- quanto o TCP define como ter uma conversa por meio de um enlace mediado por IP sem perder os dados. IMPORTANTE 34 O TCP/IP surgiu da pesquisa de redes do Departamento de Defesa dos EUA. Modelo OSI O OSI (Open System Interconnection ou Interconexão de Sistemas Abertos) descreve como os diferentes componentes de software e hardware envolvidos em uma comunicação de rede devem dividir seu trabalho e interagir de outra forma. Foi criado pela ISO (Interna- tional Organization for Standardization ou Organização Internacional de Normalização) para incentivar os fornecedores e desenvolve- dores de redes a criar sistemas interoperáveis e intercambiáveis. É definido no padrão ISO/IEC 7498-1. O modelo OSI define uma rede como um conjunto de sete elementos funcionais ou camadas de serviço. Essas camadas variam de interconexão física de nós (por exemplo, via interface de rede ou interface de rádio bluetooth) na camada 1, também conhecida como camada física, até a camada 7, chamada de camada de aplicação. Idealmente, um componente em qualquer camada fornece serviços à camada acima dela, consome serviços da camada abaixo dela e nunca alcança diretamente ne- nhuma outra camada ou fornece funções que pertencem a elas. CURIOSIDADE 35 Figura 11: Modelo OSI x TCP/IP. Fonte: Editorial Digital Pages (2019) Caro(a) aluno(a), Neste material, abordamos os conceitos básicos sobre as redes de computadores, incluindo os tipos de redes mais utilizados e como eles são apresentados geograficamente, em redes locais, metropo- litanas e de longa distância. Estudamos os tipos de topologia mais utilizados, como barramento, anel e estrela, além da combinação de todas elas, no que definimos hoje como nossa infraestrutura de rede. Vimos, também, os princípios de transmissão utilizados nas redes de computares, assim como as tecnologias básicas, como a rede ca- beada e a não cabeada, ou wireless, como é mais conhecida. Exem- plificamos os tipos de sinal, separando-os em digitais e analógicos, SINTETIZANDO 36 e a taxa de transmissão. Apresentamos, além disso, o conceito de codificadores e decodificadores de modem e de moduladores. Por fim, falamos um pouco sobre o modelo OSI,padrão de norma, que é a base para toda documentação que envolve rede. Tratamos do modelo TCP/IP, padrão de fato, que é base para toda implementação que envolve rede, e sua relação direta com o modelo OSI nas redes e na internet hoje em dia. Espero que tenha aprendido bastante! Até a próxima! UN ID AD E 2 Modelo OSI Objetivos 1. Entender os modelos TCP/IP e modelo OSI. 2. Conhecer os princípios das camadas do modelo OSI. 3. Conhecer os principais protocolos das camadas do modelo OSI. 38 Introdução Olá, aluno(a)! Convidamos você a nos acompanhar e a aprofundar os conhecimen- tos sobre o modelo OSI. Esse modelo ajuda na compreensão de como as redes de computadores devem se comportar. Sendo assim, neste material, demonstraremos quais camadas compõem o modelo OSI e quais as suas respectivas funções. Iniciaremos com a camada física, que representa a trans- missão de bits, assim como o estabelecimento de conexões físicas. Seguiremos para a camada enlace, caracterizada por transformar os bits em quadros (frames), buscando fornecer um meio de trans- missão confiável entre dois sistemas adjacentes. Então, veremos a camada rede, que é responsável pelo roteamento e controle de con- gestionamento dos dados transmitidos em rede. Seguindo os estudos, detalharemos a camada transporte, que tem como uma das suas funções a detecção e correção de er- ros fim a fim. Conheceremos, também, a camada de sessão, que fica responsável por gerenciar uma sessão incluindo a sua abertura e o seu encerramento. A penúltima camada, denominada de apresen- tação, representa a interface responsável por exibir as informações recebidas pelo usuário. Por fim, veremos que a camada aplicação representa a ca- mada mais próxima do usuário, na qual são executados a maioria dos softwares e são utilizados a maioria dos serviços. Contemple esses conteúdos e ótimos estudos! 39 Estrutura do modelo osi O modelo OSI tem como objetivo criar uma estrutura para definições de padrões para interoperabilidade de sistemas e a conectividade de sistemas diferentes, ou seja, para que diferentes fabricantes possam montar protocolos que sejam interoperáveis. Esse modelo define um conjunto de sete camadas e os serviços atribuídos a cada uma; porém, é importante destacar que o modelo OSI é uma referência, e não uma implementação. Nos próximos tópicos, vamos explorar cada uma das sete camadas deste modelo. Camada física A camada física se destina a consolidar os requisitos de hardware de uma rede para permitir a transmissão bem-sucedida de dados. Os engenheiros de rede podem definir diferentes mecanismos de transmissão de bits para o nível da camada física, incluindo formas e tipos de conectores, cabos e frequências para cada meio físico. Ela às vezes desempenha um papel importante no compartilhamento efetivo dos recursos de comunicação disponíveis e ajuda a evitar a contenção entre vários usuários. Ela também lida com a taxa de transmissão para melhorar o fluxo de dados entre um remetente e um receptor. A camada física fornece os seguintes serviços: • Modula o processo de conversão de um sinal de uma forma para outra, para que possa ser transmitido fisicamente por meio de um canal de comunicação. • Entrega bit a bit. • Codificação de linha, que permite que os dados sejam envia- dos por dispositivos de hardware otimizados para comuni- cações digitais que podem ter um tempo discreto no link de transmissão. • Sincronização de bits para comunicações seriais síncronas. • Sinalização de partida, parada e controle de fluxo em comuni- 40 cação serial assíncrona. • Comutação de circuitos e controle de hardware de multiple- xação de sinais digitais multiplexados. • Detecção de colisão, em que a camada física detecta a dispo- nibilidade da operadora e evita os problemas de congestiona- mento causados por pacotes não entregues. • Equalização de sinal para garantir conexões confiáveis e faci- litar a multiplexação. • Encaminhar correção de erro/codificação de canal, como có- digo de correção de erro. • Intercalação de bits para melhorar a correção de erros. • Autonegociação. • Controle do modo de transmissão. Exemplos de protocolos que usam camadas físicas incluem: • xDSL (Digital Subscriber Line ou Linha Digital de Assinante). • ISDN (Integrated Service Digital Network ou Rede Digital de Serviços Integrados). • IrDA (Infrared Data Association ou Associação de Dados Infra- vermelhos). • USB (Universal Serial Bus ou Barramento Serial Universal). • Bluetooth. • Ethernet. Transmissão por meios físicos Os meios, ou mídias, pelos quais os dados são transportados de um lugar para outro são chamados de meios de transmissão ou de co- municação. A mídia é a ligação física por meio da qual os sinais são 41 confinados da origem até o destino. Ela é formada por um condu- tor interno (geralmente cobre), revestido por um material externo (capa). A mídia é ótima para redes porque oferece alta velocidade, boa segurança e boas taxas de transmissão. No entanto, alguns tipos não podem ser usados em comunicações de grandes distâncias, por limitação construtiva própria. Três tipos comuns de mídia são usa- dos na transmissão de dados: Cabo coaxial: é uma mídia de comunicação muito comum e amplamente utilizada. Por exemplo, o sinal de televisão a cabo é ge- ralmente coaxial. Ele recebe esse nome porque contém dois condu- tores paralelos entre si. O condutor central é geralmente de cobre, podendo ser um fio sólido ou um cabo trançado marcial. Fora des- te condutor central há um material não condutor, normalmente de plástico branco, chamado de dielétrico, usado para separar o con- dutor interno do condutor externo, como ilustra a figura 1. O outro condutor é uma malha fina feita de cobre. Ele é usado para ajudar a proteger o cabo da EMI (Electromagnetic Interference ou Interfe- rência Eletromagnética). Fora da malha de cobre é a capa protetora final. Os dados reais viajam pelo condutor central. A interferência EMI é capturada pela malha externa de cobre, que é devidamente aterrada. Figura 1 - Cabo coaxial Fonte: Shutterstock. 42 Cabo par trançado: o cabeamento de rede mais popular é o par trançado. Isto se deve por ele ser leve, fácil de instalar, apresen- tar baixo custo e suportar muitos tipos diferentes de rede. Também suporta velocidades de até 40 Gbps. O cabeamento de par trançado é feito de pares de cobre de fio sólido (rígido) ou de cabo trançado (flexível), um ao lado do outro. As tranças são feitas para reduzir a vulnerabilidade da EMI e da paradiafonia (CrossTalk ou “Linha Cru- zada”). O número de pares no cabo depende da aplicação. O núcleo de cobre é geralmente 22 AWG a 26 AWG, conforme medido no pa- drão americano de bitola de fio. Os tipos de cabos de pares trançados são: Figura 2 – Exemplo de cabo par trançado sem blindagem (a) e com blindagem (b) Fonte: Shutterstock. Fibra óptica: o cabo de fibra óptica não usa sinais elétricos para transmitir dados, mas, sim, sinais luminosos. Nele, a luz se move apenas em uma direção. Para comunicação bidirecional, uma segunda conexão deve ser feita entre os dois dispositivos. Temos 43 duas partes no cabo: a casca (cladding) e o núcleo (core). Um feixe de laser gerado por um dispositivo é enviado no formato de pulso de luz por meio deste cabo para outro dispositivo. Esses pulsos são traduzidos em 1 (um) e 0 (zero) no outro extremo. No centro do cabo de fibra há o núcleo de vidro envelopado em uma casca de vidro de densidade diferente. A luz do laser se move por este vidro para o ou- tro dispositivo, refletindo nesta casca (cladding). Nenhuma luz es- capa do núcleo de vidro devido a este revestimento reflexivo. O cabo de fibra óptica possui largura de banda maior que 2Gbps. Figura 3 - Fibra óptica Fonte: Freepik. Transmissão sem fio A comunicação sem fio desempenha um papel significativo no dia a dia. Além da comunicação, a tecnologia se tornou parte integrante de nossas atividades diárias.Ela é referida como comunicação sem fio, isto é, fornece uma troca de dados sem qualquer condutor por meio de sinais de ondas eletromagnéticas. A informação é transmi- tida por meio dos dispositivos ao longo de alguns metros ou a cen- tenas de quilômetros por meio de canais bem definidos; diferentes tipos de sinais são listados na comunicação entre os dispositivos para transmissão de dados sem fio. 44 A tecnologia de comunicação sem fio é categorizada em di- ferentes tipos, dependendo da distância da comunicação, do inter- valo de dados e do tipo de dispositivos usados. A seguir estão alguns dos diferentes tipos de tecnologias de comunicação sem fio: Rádio: a comunicação por rádio foi uma das primeiras tec- nologias sem fio desenvolvidas e ainda em uso. Os rádios multica- nais portáteis permitem que o usuário se comunique a curtas dis- tâncias em terra com outros usuários por meio de uma banda cidadã (pública). Da mesma forma, os rádios marítimos e aeronáuticos se comunicam a longas distâncias no mar e no ar, com embarcações e aeronaves, usando uma banda restrita (militar). A transmissão acontece com o envio de dados da antena do transmissor na forma de sinais de rádio para a antena do receptor. Outra forma de comu- nicação bastante difundida é a transmissão de estações de progra- mação comuns de rádio. A transmissão acontece em simultâneo por diversas emissoras em frequências distintas, de forma que o recep- tor é passivo e apenas recebe a informação, sem retransmiti-la. Ela pode ocorrer por modulação de amplitude das ondas, AM (Amplitude Modulation) ou por modulação de frequência das ondas, FM (Fre- quency Modulation), em longas distâncias. Celular: uma rede celular usa enlaces de rádio criptografa- dos, modulados para permitir que muitos usuários se comuniquem por meio da única banda de frequência. Como os aparelhos indivi- duais não possuem um poder de transmissão significativo, o siste- ma depende de uma rede de torres de celular capazes de triangular a fonte de qualquer sinal e transferir as funções de recepção para a antena mais adequada. A transmissão de dados por meio de redes celulares é possível com sistemas 4G modernos capazes de atingir velocidades de DSL com fio. As empresas de telefonia celular co- bram de seus clientes por minuto de voz ou kilobytes de dados. Satélite: a comunicação por satélite é uma tecnologia sem fio que possui importância significativa em todo o mundo. Eles en- contraram uso generalizado em situações especializadas. A tecno- logia de satélite é utilizada em dispositivos para se comunicar dire- tamente com o satélite em órbita por meio de sinais de rádio. Isso permite que os usuários permaneçam conectados virtualmente de qualquer lugar da Terra. Os telefones e modems por satélite portáteis 45 têm um recurso de transmissão e hardware de recepção mais pode- rosos do que os dispositivos celulares devido ao aumento do alcance. A comunicação por satélite consiste em um segmento espacial e um segmento terrestre. Quando o sinal é enviado para o satélite por um dispositivo, o satélite amplifica o sinal e o envia de volta para a an- tena do receptor, que está localizada na superfície da Terra. O seg- mento terrestre consiste em um transmissor, receptor e o segmento espacial consiste no próprio satélite. Wi-Fi: é uma tecnologia de comunicação sem fio de baixo custo. Uma configuração Wi-Fi consiste em um roteador sem fio que serve como um hub de comunicação, ligando o dispositivo por- tátil a uma conexão com a internet. Essa rede facilita a conexão de vários dispositivos, dependendo da configuração do roteador. Essas redes têm alcance limitado devido à baixa transmissão de energia, permitindo que o usuário se conecte apenas nas proximidades. Essa rede facilita a conexão de vários dispositivos, dependendo da confi- guração do roteador. Camada enlace A camada de enlace esconde características físicas do meio de transmissão para as camadas superiores, pois transforma os bits em quadros (frames). Sua principal função é fornecer um meio de transmissão confiável entre dois sistemas adjacentes. Para redes locais, a camada de enlace é dividida em dois subníveis: LLC (Logi- cal Link Control ou Controle Lógico do Enlace) e MAC (Media Access Control ou Controle de Acesso a Mídia), sendo que a LLC faz inter- face com a camada de rede e o MAC com a camada física. Os representantes da camada de enlace são as interfaces de rede, switches e bridges. Nas redes atuais, recomenda-se o uso de switches (comutadores) no lugar dos HUBs (Hardware Unit Broadcast ou Unidade de Equipamento de Difusão) por questões de desem- penho e segurança, pois estes, ao invés de enviar uma informação recebida para todas as portas, criam um caminho virtual ponto a ponto entre os computadores que estão se comunicando. As infor- mações trocadas pelos protocolos da camada, tais como a Ethernet, 46 Fast Ethernet, PPP (Point-to-Point Protocol ou Protocolo Ponto-a- -Ponto) e demais são chamadas de quadros (frames). As funções mais comuns dessa camada são: • Delimitação e formato dos quadros de bits. • Detecção de erros. • Sequenciamento dos dados. • Controle de fluxo de quadros. • Endereçamento físico (endereço MAC). • Controle de acesso aos meios físicos. Diz-se que os sistemas na rede de transmissão estão no mesmo en- lace e que o trabalho da camada de enlace de dados tende a se tor- nar mais complexo quando está lidando com múltiplos hosts em um único domínio de colisão. A camada de enlace fornece os meios processuais e fun- cionais para a transferência de dados entre os nós da rede, assim como fornece os meios para detectar e corrigir erros que possam ocorrer na camada física. Funciona entre dois hosts que estão di- retamente conectados em algum sentido. Essa conexão direta pode ser ponto a ponto ou broadcast. Além disso, ela também é responsável por converter o fluxo de dados em sinais bit a bit e enviá-los pelo hardware subjacen- te. Na extremidade de recepção, a camada de enlace de dados coleta dados de hardware que estão na forma de sinais elétricos, os monta em um formato de quadro reconhecível e passa para a camada supe- rior. Os bits de dados são codificados, decodificados e organizados na camada de enlace de dados antes de serem transportados como CURIOSIDADE 47 quadros entre dois nós adjacentes na mesma LAN ou WAN. São ser- viços da camada de enlace: • Enquadramento e acesso ao enlace: quase todos os protoco- los da camada de enlace encapsulam cada datagrama da ca- mada de rede dentro de um quadro de camada de enlace antes da transmissão no enlace. Um quadro consiste em um campo de dados, no qual o datagrama da camada de rede é inserido e vários campos de cabeçalho (um quadro também pode incluir campos de trailer; no entanto, nos referimos a campos de ca- beçalho e trailer como campos de cabeçalho). Um protocolo de enlace de dados especifica a estrutura do quadro, bem como um protocolo de acesso de canal que especifica as regras pe- las quais um quadro é transmitido para o enlace. Para enlaces ponto-a-ponto que têm um único remetente em uma extre- midade do enlace e um único receptor na outra extremidade do enlace, o protocolo de acesso ao enlace é simples (ou ine- xistente), o remetente pode enviar um quadro sempre que o enlace está ocioso. • Entrega confiável: se um protocolo de camada de enlace for- nece o serviço de entrega confiável, ele garante a movimenta- ção de cada datagrama da camada de rede por meio do enlace sem erros. Semelhante a um serviço de entrega confiável de camada de transporte, um serviço de entrega confiável de ca- mada de enlace é obtido com confirmações e retransmissões. Um serviço de entrega confiável da camada de enlace é fre- quentemente usado para enlaces propensos a altas taxas de erro, como um enlace sem fio, com o objetivo de corrigir um erro localmente, no enlace em que o erro ocorre, em vez de forçar um fim de retransmissão completa dos dados por pro- tocolode transporte ou camada de aplicação. No entanto, a entrega confiável da camada de enlace é frequentemente con- siderada como desnecessária para enlaces de erro de bit baixo, incluindo enlaces de fibra, coaxial e muitos de cobre de par trançado. Por esse motivo, muitos dos protocolos de camada de enlace mais populares não fornecem um serviço de entrega confiável. 48 • Controle de fluxo: os nós em cada lado de um enlace têm uma quantidade limitada de capacidade de buffer de pacote. Esse é um problema em potencial, já que um nó receptor pode rece- ber quadros a uma taxa mais rápida do que pode processar os quadros (durante algum intervalo de tempo). Sem controle de fluxo, o buffer do receptor pode transbordar e os quadros po- dem se perder. Semelhante à camada de transporte, um pro- tocolo de camada de enlace pode fornecer controle de fluxo para impedir que o nó de envio em um lado de um enlace so- brecarregue o nó receptor no outro lado do enlace. Mecanismos de detecção e controle de erros A camada de enlace de dados usa técnicas de controle de erros para garantir que quadros, ou seja, fluxos de bits de dados, sejam trans- mitidos da origem para o destino com um certo grau de precisão. Para isso, a camada de enlace se utiliza de algumas técnicas a fim de detectar e corrigir possíveis erros que, porventura, venham a ocorrer nesta camada. Quando os bits são transmitidos pela rede de computadores, eles estão sujeitos a serem corrompidos devido a problemas de interferência e de rede. Os bits corrompidos levam a dados espúrios, sendo recebidos pelo destino e chamados de erros. Tipos de erros Os erros podem ser de três tipos, que são: erros de bit único, erros de vários bits e erros de conjuntos de bits (burst, ou rajada). • Erro de bit único: no quadro recebido, apenas um bit foi cor- rompido, ou seja, foi alterado de 0 para 1 ou de 1 para 0. Figura 4 - Erro de bit único Fonte: Editorial Digital Pages (2020). 49 • Erro de vários bits: no quadro recebido, mais de um bit está corrompido. Figura 5 - Erro de vários bits Fonte: Editorial Digital Pages (2020). • Erro de burst: no quadro recebido, mais de um bit consecutivo está corrompido. Figura 6 - Erro de burst Fonte: Editorial Digital Pages (2020) . Controle de erros O controle de erros pode ser feito de duas maneiras: • Detecção de erros: o receptor de um nó pode decidir incorre- tamente que um bit em um quadro seja zero quando for trans- mitido como um (e vice-versa). Esses erros são introduzidos por atenuação de sinal e ruído eletromagnético. Como não há necessidade de encaminhar um datagrama com erro, muitos protocolos de camada de enlace fornecem um mecanismo para que um nó detecte a presença de um ou mais erros. Isso é feito tendo os bits de detecção de erro do conjunto de nós de transmissão no quadro e fazendo com que o nó receptor 50 execute uma verificação de erro. A detecção de erros é um ser- viço muito comum entre os protocolos da camada de enlace, geralmente é mais sofisticada e implementada no hardware. • Correção de erros: a correção de erros é semelhante à detec- ção de erros, exceto pelo fato de um receptor não só detectar se erros foram introduzidos no quadro, mas também deter- minar exatamente onde ocorreram os erros (e, portanto, cor- rigir esses erros). Alguns protocolos (como o ATM) fornece correção de erro na camada de enlace para o cabeçalho do pa- cote e não para o pacote inteiro. Para detecção e correção de erros, o remetente precisa enviar alguns bits adicionais junta- mente com os bits de dados. O receptor executa as verificações necessárias com base nos bits redundantes adicionais. Se ele achar que os dados estão livres de erros, ele remove os bits redundantes antes de passar a mensagem para as camadas superiores. Técnicas de detecção de erros Existem três técnicas principais para detectar erros em qua- dros: 1. Verificação de paridade: a verificação de paridade é feita adi- cionando um bit extra, chamado bit de paridade aos dados. Ao criar um quadro, o remetente conta o número de 1s e adiciona o bit de paridade da seguinte maneira: • no caso de paridade par: se os dados originais são 1010001, existem três 1s. Quando a verificação de paridade par é usada, um bit de paridade com valor 1 é adicionado ao lado esquerdo dos dados para fazer com que o número de 1s seja par; os da- dos transmitidos tornam-se 11010001; • no caso de paridade ímpar: se a verificação de paridade ím- par for usada, o valor do bit de paridade é zero; 01010001. Se os dados originais contiverem um número par de 1s (1101001). Ao receber um quadro, o receptor conta o número de 1s nele. 51 Em caso de verificação de paridade par, se a contagem de 1s é par, o quadro é aceito, caso contrário, é rejeitado. Uma regra semelhante é adotada para verificação de paridade ímpar. A verificação de parida- de é adequada apenas para detecção de erros de bit único. 2. Checksum: envolve a divisão dos dados em quadros ou seg- mentos de tamanho fixo. O remetente adiciona os segmentos usando a aritmética de complemento de 1 para obter a soma. Em seguida, ele complementa a soma para obter a soma de verificação e a envia junto com os quadros de dados. O recep- tor adiciona os segmentos de entrada junto com a soma de ve- rificação usando a aritmética de complemento de 1 para obter a soma e, em seguida, a complementa. Se o resultado for zero, os quadros recebidos serão aceitos; caso contrário, eles são descartados. 3. Verificação de Redundância Cíclica (CRC): envolve a divisão binária dos bits de dados sendo enviados por um divisor pre- determinado acordado pelo sistema de comunicação. O divisor é gerado usando polinômios. Aqui, o remetente executa a divi- são binária do segmento de dados pelo divisor. Em seguida, ele anexa os bits restantes de CRC ao final do segmento de dados. Isso torna a unidade de dados resultante exatamente divisível pelo divisor. O receptor divide a unidade de dados de entrada pelo divisor. Se não houver nenhum resto, a unidade de dados será considerada correta e aceita. Caso contrário, entende-se que os dados estão corrompidos e, portanto, são rejeitados. Técnicas de correção de erros Técnicas de correção de erros descobrem o número exato de bits que foram corrompidos e suas localizações. Existem duas ma- neiras principais: • Retransmissão: se o receptor detectar um erro no quadro re- cebido, ele solicitará ao remetente que retransmita o quadro. É uma técnica relativamente simples. Mas ele pode ser usado com eficiência somente quando a retransmissão não é cara como na fibra óptica e o tempo de retransmissão é baixo em 52 relação aos requisitos da aplicação. • Correção de erro de encaminhamento: se o receptor detec- tar algum erro no quadro de entrada, ele executará o código de correção de erros que gera o quadro real. Isso economiza a largura de banda necessária para a retransmissão. É inevitável em sistemas de tempo real. No entanto, se houver muitos er- ros, os quadros precisam ser retransmitidos. Os quatro prin- cipais códigos de correção de erro são: • Códigos Hamming. • Código de convolução binária. • Reed: código de Solomon. • Código de verificação de paridade de baixa densidade. Camada de redes A camada de redes tem a função de fornecer um canal de comuni- cação independente do meio, pois ela transmite pacotes de dados por meio da rede utilizando um esquema de endereçamento lógico que pode ser roteado por diversas redes até chegar ao seu destino. As funções características da camada 3 são: • Tradução de endereços lógicos em endereços físicos. • Esquema de endereçamento lógico. • Roteamento de pacotes. • Não possuem garantia de entrega dos pacotes. Assim, a responsabilidade da camada de rede é transportar pacotes de um hospedeiro origem a um hospedeiro destino. Para fa- zer essa ação, duas importantes funções da camada de rede podem ser identificadas, são elas: • Repasse: Quando um pacote chega ao enlacede entrada de um roteador, este deve conduzi-lo até o enlace de saída apropria- 53 do. Por exemplo, um pacote proveniente do hospedeiro H1 que chega ao roteador R1 deve ser repassado ao roteador seguinte por um caminho até H2. • Roteamento: A camada de rede deve determinar a rota ou o caminho tomado pelos pacotes ao fluírem de um remetente a um destinatário. Os algoritmos que calculam esses caminhos são denominados algoritmos de roteamento. Um algoritmo de roteamento determinaria, por exemplo, o caminho pelo qual os pacotes fluiriam de H1 para H2. Vamos considerar um exemplo de viagem que tem origem em Recife e destino em São Paulo. Durante a viagem, nosso motorista passa por muitos cruzamentos de rodovias em sua rota. Podemos imagi- nar o repasse como o processo de passar por um único cruzamento: um carro chega ao cruzamento vindo de uma rodovia e determina qual rodovia ele deve pegar para sair do cruzamento. Podemos ima- ginar o roteamento como o processo de planejamento da viagem de Recife até São Paulo: antes de partir, o motorista consultou um mapa e escolheu um dos muitos caminhos possíveis. Cada um deles consiste em uma série de trechos de rodovias conectados por cru- zamentos. EXEMPLO 54 Figura 7 - Representação dos dispositivos e suas camadas Fonte: Kurose (2014). Na época do seu desenvolvimento, a arquitetura TCP/IP era a única alternativa para fazer frente aos protocolos proprietários dos diversos fabricantes. O conjunto de protocolos TCP/IP foi desenvol- vido como parte da pesquisa feita pela DARPA (Defense Advanced Re- search Projects Agency ou Agência de Projetos de Pesquisa Avançada de Defesa). Posteriormente, o TCP/IP foi incluído no BSD (Berkeley Software Distribution ou Distribuição de Software de Berkeley) da UNIX. As redes de computadores que fornecem serviços orienta- dos à conexão são denominadas circuitos virtuais, enquanto as que 55 fornecem serviços sem conexão são chamadas de redes de datagra- ma. A internet que usamos é realmente baseada na rede de datagrama (sem conexão) no nível da rede, pois todos os pacotes de uma fonte para um destino não seguem o mesmo caminho. Redes por circuitos virtuais Figura 8 - Redes por circuitos virtuais Fonte: Editorial Digital Pages (2020). • O primeiro pacote vai e reserva recursos para os pacotes sub- sequentes que, como resultado, seguem o mesmo caminho durante todo o tempo de conexão. • Como todos os pacotes seguem o mesmo caminho, um cabe- çalho global é necessário apenas para o primeiro pacote da conexão, e outros pacotes geralmente não exigem cabeçalhos globais. • Como os dados seguem um determinado caminho dedicado, CURIOSIDADE 56 os pacotes alcançam o destino. • Nos circuitos virtuais (switching ou comutação), é certo que todos os pacotes irão definitivamente alcançar o destino. Ne- nhum pacote será descartado devido à indisponibilidade de recursos. • Os circuitos virtuais, portanto, são meios altamente confiá- veis de transferência. • Cada vez que uma nova conexão tem que ser configurada com reserva de recursos e manipulação extra de informações em roteadores, torna-se caro implementar circuitos virtuais. • Eles são usados em redes TDM (Time Division Multiplex ou Multiplexação por Divisão de Tempo), que são usadas para as chamadas telefônicas. Redes por Datagrama Figura 9 - Redes por datagrama Fonte: Editorial Digital Pages (2020) • É um serviço sem conexão. Não há necessidade de reserva de recursos, pois não há caminho dedicado para uma sessão de conexão. • Todos os pacotes estão livres para ir para qualquer caminho 57 em qualquer roteador intermediário que é decidido em qual- quer lugar, mudando dinamicamente as tabelas de roteamen- to nos roteadores. • Como cada pacote é livre para escolher qualquer caminho, todos os pacotes devem ser associados a um cabeçalho com informações adequadas sobre a fonte e os dados da camada superior. • A propriedade sem conexão faz com que os pacotes de dados cheguem ao destino em qualquer ordem, o que significa que eles não precisam chegar no destino na ordem em que foram enviados. • As redes de datagrama não são confiáveis como circuitos vir- tuais. • A principal desvantagem do datagrama (Packet Switching ou Comutação de Pacotes) é que, se o buffer, a CPU e a largura de banda estiverem disponíveis, somente o pacote será encami- nhado. Caso contrário, o pacote será descartado. • Geralmente são usados em redes IP, que usam serviços de da- dos como internet. Arquitetura TCP/IP Quando o TCP (Transmission Control Protocol ou Protocolo de Con- trole de Transmissão) se associa ao IP, você obtém o controlador de tráfego da internet. O TCP e o IP trabalham juntos para transmitir dados pela internet, mas em diferentes níveis. Como o IP não ga- rante a entrega confiável de pacotes através de uma rede, o TCP assume a responsabilidade de tornar a conexão confiável. O TCP é o protocolo que garante confiabilidade em uma transmissão, o que garante que não haja perda de pacotes, ou seja, que eles estejam na ordem correta, que o atraso esteja em um nível aceitável e que não haja duplicação de pacotes. Tudo isso é para ga- rantir que os dados recebidos sejam consistentes, em ordem, com- 58 pletos e suaves (para que você não ouça a fala interrompida). Du- rante a transmissão de dados, o TCP funciona um pouco antes do IP. O TCP agrupa dados em pacotes TCP antes de enviá-los para o IP, que por sua vez os encapsula em pacotes IP. Figura 10 - Arquitetura TCP/IP Fonte: Editorial Digital Pages (2020). Endereçamento IP Um endereço IP é um número que identifica um computador ou outro dispositivo na internet. É semelhante a um endereço de cor- respondência, que identifica de onde vem o correio e onde deve ser entregue. Os endereços IP identificam de forma exclusiva a origem e o destino dos dados transmitidos com o protocolo da internet. Um endereço IP é um endereço único que identifica uma máquina (que pode ser um computador, um servidor, um dispositivo eletrô- nico, um roteador, um telefone etc.) em uma rede, servindo, por- tanto, para rotear e encaminhar pacotes IP da origem para o destino. SAIBA MAIS 59 Endereços IPv4 e IPv6 Os endereços IPv4 têm 32 bits de comprimento (4 bytes). Um exem- plo de um endereço IPv4 é 216.58.216.164, que é a primeira página do Google.com. O endereço IP é representado pelos 4 bytes separa- dos por “.” e representados por números decimais. Desta forma o endereço IP 11010000 11110101 0011100 10100011 é representado por 208.245.28.63. O valor máximo de endereços IPv4 de um número de 32 bits é 232, ou 4.294.967.296. Nos anos 80, isso era suficiente para abordar todos os dis- positivos em rede, mas os cientistas sabiam que esse espaço rapida- mente se esgotaria. Tecnologias como o NAT atrasaram o problema, permitindo que muitos dispositivos usassem um único endereço IP, mas é necessário um espaço de endereçamento maior para atender à internet moderna. Uma grande vantagem do IPv6 é que ele usa 128 bits de da- dos para armazenar um endereço, permitindo 2128 endereços úni- cos, ou 340.282.366.920.9 38.463.463.374.607.431.768.211.456. A quantidade de endereçamento do IPv6, de 340 undecilhões, é muito maior que o IPv4. Figura 11 - Exemplo de cabeçalho de datagrama internet Fonte: Comer (2006 apud MARTINS, 2010, p. 105). 60 O IPv6 (Internet Protocol versão 6) é um conjunto de espe- cificações da IETF (Internet Engineering Task Force ou Força-tarefa de engenharia da internet) que é essencialmente uma atualização da versão 4 do IP (IPv4). Os fundamentos do IPv6 são semelhantes aos do IPv4, os dispositivos podem usar o IPv6 como endereços de origem e destino para passar pacotes pela rede, e ferramentas como o ping funcionam para testes de rede, como fazem no IPv4, com al- gumas pequenas variações. A melhoria mais óbvia no IPv6 sobre o IPv4 é que os ende- reços IP são ampliados de 32 bits para 128 bits. Essa extensão ante- cipa um considerávelcrescimento futuro da internet e fornece alívio para o que foi percebido como uma iminente escassez de endereços de rede. O IPv6 também oferece suporte à configuração automática para ajudar a corrigir a maioria das deficiências da versão 4 e possui recursos integrados de segurança e mobilidade. Confira alguns recursos do IPv6: • Suporta endereços de origem e destino com 128 bits (16 bytes) de comprimento. • Requer suporte IPSec. • Usa o campo Flow Label para identificar o fluxo de pacotes para o gerenciamento de QoS por roteador. • Permite que o host envie pacotes de fragmentos, mas não ro- teadores. • Não inclui uma soma de verificação no cabeçalho. • Usa um endereço multicast de todos os nós do escopo do link local. • Não requer configuração manual ou DHCP. • Usa registros de recurso de endereço do host (AAAA) no DNS para mapear nomes de host para endereços IPv6. • Usa registros de recursos de ponteiro (PTR) no domínio DNS IP6.ARPA para mapear endereços IPv6 para nomes de host. 61 • Suporta um tamanho de pacote de 1280 bytes (sem fragmen- tação). • Move dados opcionais para cabeçalhos de extensão IPv6. • Usa NDP (Neighbor Discovery Protocol ou Protocolo de Desco- berta de Vizinhos) para reconhecimento da vizinhança a fim de resolver endereços IP para endereços de camada de link. • Usa mensagens MLD (Multicast Listener Discovery ou Desco- berta de Escuta de Multicast) para gerenciar a associação em grupos de sub-rede locais. Figura 12 - Exemplo de cabeçalho de datagrama internet versão 6 Fonte: Editorial Digital Pages (2020). Conceito de NAT A NAT (Network Address Translation, ou Tradução do Endereço da Rede) converte os endereços IP dos computadores em uma rede local em um único endereço IP. Esse endereço é geralmente usado pelo roteador que conecta os computadores à internet. Ela permite que um único dispositivo atue como um gateway de internet para 62 clientes de LAN internos, traduzindo os endereços IP de rede interna dos clientes para o endereço IP no dispositivo de gateway habilitado para NAT. Em outras palavras, a NAT é executada no dispositivo que está conectado à internet e oculta o restante da sua rede do público, fazendo com que toda a sua rede apareça como um único dispositivo (ou computador, se quiser) para o resto do mundo. A NAT é transparente para a sua rede, ou seja, todos os dis- positivos de rede internos não precisam ser reconfigurados para acessar a internet. Tudo o que é necessário é permitir que seus dis- positivos de rede saibam que o dispositivo NAT é o gateway padrão da internet. A NAT é segura, pois oculta sua rede da internet. Todas as comunicações da sua rede privada são tratadas pelo dispositivo NAT, o que garantirá que todas as traduções apropriadas sejam exe- cutadas e forneçam uma conexão perfeita entre seus dispositivos e a internet. Figura 13 - Exemplo de funcionamento do conceito de NAT Fonte: Editorial Digital Pages (2020). Camada transporte A camada de transporte do modelo OSI está intimamente relaciona- da à camada de rede, mas adiciona funcionalidade a ela. Você pode pensar nessa camada como um policial de trânsito ou um supervi- sor para a multidão irracional de pacotes que é a camada de rede. A camada de transporte assume a responsabilidade pela verifica- ção da entrega de dados. A camada de rede pode ter uma alta taxa de sucesso na obtenção de dados para o destino, mas a camada de 63 transporte é especificamente informada para garantir a entrega dos dados. De qualquer maneira, você usará mecanismos de entrega de camada de transporte, mas você (ou o aplicativo que estiver usando) precisará decidir se usará a entrega de dados verificada ou a entrega de dados não verificada. Os mecanismos reais que são usados para garantir a entrega de dados dependem do protocolo de rede que está em uso, enquan- to o conceito de confiabilidade de entrega é mais universal. Ao tra- balhar com o conjunto de protocolos TCP/IP, a entrega verificada é executada usando o TCP (Transmission Control Protocol ou Protocolo de Controle de Transmissão), enquanto a entrega não verificada é executada usando o UDP (User Datagram Protocol ou Protocolo de Datagrama do Usuário). A camada de transporte pode fornecer al- guns ou todos os seguintes serviços: • Comunicação orientada à conexão: os dispositivos nos pon- tos finais de uma comunicação de rede estabelecem um pro- tocolo de “handshake” (“aperto de mão”) para garantir que a conexão seja robusta antes que os dados sejam trocados. A fraqueza desse método é que, para cada mensagem entregue, há um requisito para uma confirmação, adicionando uma car- ga de rede considerável em comparação com os pacotes corre- tores de erros de autocorreção. As solicitações repetidas cau- sam lentidão significativa na velocidade da rede quando são enviados fluxos de bytes ou datagramas com defeito. • Entrega de mesmo pedido: garante que os pacotes sejam sempre entregues em sequência estrita. Embora a camada de rede seja responsável, a camada de transporte pode corrigir quaisquer discrepâncias na sequência causadas por quedas de pacotes ou interrupção do dispositivo. • Integridade dos dados: usando “checksums” (verificação de soma de bits), a integridade dos dados em todas as camadas de entrega pode ser assegurada. Essas somas de verificação garantem que os dados transmitidos são os mesmos que os dados recebidos por meio de tentativas repetidas feitas por outras camadas para que os dados ausentes sejam reenviados. 64 • Controle de fluxo: os dispositivos em cada extremidade de uma conexão de rede geralmente não têm como saber quais são os recursos uns dos outros em termos de taxa de transfe- rência de dados e, portanto, podem enviar dados mais rapi- damente do que o dispositivo receptor pode armazená-los ou processá-los. Nesses casos, os excessos de buffer podem cau- sar interrupções completas na comunicação. Por outro lado, se o dispositivo receptor não estiver recebendo dados com ra- pidez suficiente, isso causa um estouro de buffer, o que pode causar uma redução desnecessária no desempenho da rede. • Controle de tráfego: as redes de comunicação digital estão sujeitas a restrições de largura de banda e velocidade de pro- cessamento, o que pode significar uma enorme quantidade de potencial para congestionamento de dados na rede. Esse con- gestionamento de rede pode afetar quase todas as partes de uma rede. A camada de transporte pode identificar os sinto- mas de nós sobrecarregados e taxas de fluxo reduzidas. • Multiplexação: a transmissão de múltiplos fluxos de pacotes de aplicativos não relacionados a outras fontes (multiple- xação) por meio de uma rede requer alguns mecanismos de controle muito dedicados, que são encontrados na camada de transporte. Essa multiplexação permite o uso de aplicativos simultâneos em uma rede, como quando diferentes navega- dores da internet são abertos no mesmo computador. No mo- delo OSI, a multiplexação é manipulada na camada de serviço. • Orientação byte: algumas aplicações preferem receber fluxos de bytes em vez de pacotes; a camada de transporte permite a transmissão de fluxos de dados orientados por bytes, se ne- cessário. O Protocolo TCP O TCP é um padrão que define como estabelecer e manter uma con- versação de rede através da qual os programas e aplicativos possam trocar dados. O TCP funciona com o IP, que define como os compu- 65 tadores enviam pacotes de dados entre si. Juntos, TCP e IP são as regras básicas que definem a internet. Veja algumas das suas carac- terísticas: • Viabiliza conexão confiável fim-a-fim. • Opera em modo orientado a conexão. • Possibilita adequado controle de fluxo através da janela des- lizante. • Permite utilizar controle de erros através de algoritmos de checksum. • Permite várias conexões TCP simultâneas no mesmo host. • Realiza a abertura de conexão através de handshake triplo. Figura 14 - Protocolos que utilizam TCP Fonte: EditorialDigital Pages (2020). 66 O Protocolo UDP A função básica da camada de transporte é aceitar os dados da ca- mada acima, dividi-los em unidades menores, passar essas unida- des de dados para a camada de rede e garantir que todas as peças cheguem corretamente na outra extremidade. Além disso, tudo isso deve ser feito de forma eficiente e isolar as camadas superiores das inevitáveis mudanças na tecnologia de hardware. A camada de transporte também determina o tipo de ser- viço a ser fornecido à camada de sessão e, em última análise, aos usuários da rede. O tipo mais popular de conexão de transporte é um canal ponto-a-ponto livre de erros que entrega mensagens ou bytes na ordem em que foram enviados. Ela é uma verdadeira camada de ponta a ponta, desde a origem até o destino. Em outras palavras, um programa na máquina de origem realiza uma conversa com um programa semelhante na máquina de destino, usando os cabeçalhos das mensagens e as mensagens de controle. O protocolo UDP fornece uma forma simples de acesso ao sistema de comunicação, provendo um serviço sem conexão, sem confiabilidade e sem correção de erros. A principal função do nível de transporte implementada em UDP é a capacidade de multiplexa- ção de acesso ao sistema de comunicação. Esta função permite que vários processos ou programas sendo executados em um computador possam acessar o sistema de comunicação e o tráfego de dados respectivo a cada um deles seja corretamente identificado, separado e utilize buffers individuais. Os protocolos de camada de transporte são definidos pela IETF no RFC 793. Suas características são: • Oferece protocolo sem confiabilidade, não orientado a cone- xão. • Não há campos de sequência ou de reconhecimento. • Os protocolos da camada de aplicação (superiores) devem prover reconhecimento para haver confiabilidade. • Possibilita várias conexões UDP simultâneas no mesmo host� 67 Figura 15 - Protocolos que utilizam UDP Fonte: Editorial Digital Pages (2020). Camada sessão Essa camada gerencia uma sessão iniciando a abertura e o encerramento de sessões entre processos de aplicativos do usuá- rio final. Também controla conexões únicas ou múltiplas para cada aplicativo de usuário final e se comunica diretamente com as ca- madas de apresentação e de transporte. Os serviços oferecidos pela camada de sessão são geralmente implementados em ambientes de aplicativos usando RPCs (Remote Procedure Call ou Chamada Remota de Procedimento). As sessões são mais comumente implementadas em navegadores da web usando protocolos como o ZIP (Zone Infor- mation Protocol ou Protocolo de Informações de Zona), AppleTalk Protocol (Protocolo de Comunicação Apple) ou SCP (Session Control Protocol ou Protocolo de Controle de Sessão). Esses protocolos tam- bém gerenciam a restauração de sessão por meio de pontos de veri- ficação e recuperação. Esta camada suporta operações full-duplex e half-duplex e cria procedimentos para verificação, adiamento, reinicialização e encerramento. A camada de sessão também é responsável por sin- cronizar informações de diferentes origens. Por exemplo, as sessões são implementadas em programas de televisão ao vivo nos quais os fluxos de áudio e vídeo emergentes de duas fontes diferentes são mesclados. Isso evita a sobreposição e o tempo de transmissão si- 68 lencioso. Camada apresentação A camada de apresentação traduz principalmente dados entre a camada de aplicação e o formato de rede. Os dados podem ser co- municados em diferentes formatos por meio de diferentes fontes. Assim, a camada de apresentação é responsável por integrar todos os formatos em um formato padrão para uma comunicação efi- ciente e eficaz. Ela segue esquemas de estrutura de programação de dados desenvolvidos para diferentes linguagens e fornece a sintaxe em tempo real para a comunicação entre dois objetos, como cama- das, sistemas ou redes. O formato de dados deve ser aceitável pelas próximas camadas; caso contrário, a camada de apresentação pode não ser executada corretamente. Dispositivos de rede ou componentes usados pela camada de apresentação incluem redirecionadores e gateways. A camada de apresentação é responsável por: • Criptografia/descriptografia de dados. • Conversão de caracteres/string. • Compressão de dados. • Manipulação gráfica. Camada aplicação O modelo OSI define a camada de aplicação como a interface res- ponsável por exibir as informações recebidas pelo usuário. Ela fornece acesso total do usuário final a uma variedade de serviços de rede compartilhados, garantindo uma comunicação de forma extremamente eficiente. Essa camada tem muitas atribuições, in- cluindo tratamento e recuperação de erros, fluxo de dados em rede particular ou como um todo. Também é utilizada para desenvolver aplicações baseadas em rede. 69 Serviços em rede São softwares que atuam de forma remota e com a função de esta- belecer uma relação cliente-servidor na comunicação entre dispo- sitivos em uma rede, provendo um serviço. Mais especificamente, esses serviços estabelecem comunicação padronizada, fornecendo interoperabilidade entre aplicações diferentes. Eles fazem isso, por exemplo, em HTTP usando tecnologias como XML (Extensible Mar- kup Language ou Linguagem de Marcação Extensível), SOAP (Sim- ple Object Access Protocol ou Protocolo Simples de Acesso a Objetos), WSDL (Web Services Description Language ou Linguagem Descrição dos Serviços da Web) e UDDI (Universal Description, Discovery and In- tegration ou Descrição, Descoberta e Integração Universal). A relação cliente-servidor é definida como uma solicitação de um serviço pelo host (cliente) e a provisão de tal solicitação pelo seu respectivo provedor (servidor). Como apresentam transparên- cia de linguagem, não importa se o sistema servidor que fornece o serviço é programado em Java e o cliente é programado em Perl, Py- thon ou Ruby, por exemplo. Por meio de serviços, um servidor Win- dows pode interagir com um servidor Linux ou fornecer um aplicati- vo remoto a desktops, laptops ou smartphones e outros dispositivos móveis em toda a internet com sistemas operacionais diversos. Protocolos da camada de aplicação São exemplos de protocolos da camada de aplicação: a. Telnet (TN): é um protocolo de rede, e uma aplicação (soft- ware), utilizado para acesso remoto a computadores e ter- minais por meio de uma rede pública (internet) ou privada, ambas TCP/IP. Ele foi concebido em 1969 e é considerado um dos primeiros padrões da internet pela IETF. Projetado para acesso remoto ao servidor pelo gerenciamento e arquitetura cliente-servidor, o Telnet funciona por meio de um progra- ma criado especificamente para fornecer conectividade entre dois computadores remotos: o do cliente e outro do servidor. Ao fornecer credenciais de usuário (log in) e senha (password) 70 corretas, um usuário pode acessar a funcionalidade privi- legiada de um sistema remoto. Além disso, os comandos do Telnet podem ser executados em um dispositivo do cliente ou servidor suportado. Todas as mensagens em texto são não criptografadas e não possuem mecanismos de segurança es- pecíficos. Por conta disso, em muitos aplicativos e serviços, o Telnet foi posteriormente substituído pelo SSH (Secure Shell ou Encapsulamento Seguro). b. FTP (File Transfer Protocol ou Protocolo de transferência de arquivos): sua especificação original foi escrita por Abhay Bhushan e publicada como RFC 114, em 16 de abril de 1971, tendo sido substituída posteriormente pela RFC 765, em ju- nho de 1980 e cuja especificação atual é RFC 959 (outubro de 1985). Os primeiros aplicativos de cliente FTP usavam o prompt de comando do DOS com comandos e sintaxe padronizados. Desde então, muitos clientes GUI (Graphic User Interface ou Interface Gráfica do Usuário) foram desenvolvidos dentro dos sistemas operacionais, facilitando o upload e o download de arquivos pelo usuário. Existem vários usos e tipos de FTP: • site FTP: site no qualos usuários podem facilmente fazer upload ou download de arquivos específicos. • FTP por e-mail: permite que os usuários sem acesso à inter- net acessem e copiem arquivos com um FTP anônimo, en- viando uma mensagem de e-mail para ftpmail@decwrl.dec. com com a palavra help no corpo do texto. • FTP Explorer: cliente FTP baseado no gerenciador de arquivos do Windows. • servidor FTP: servidor dedicado que fornece um serviço FTP. Ele requer hardware ou software de segurança, utilização de nomes de usuário/senhas e controle de acesso a arquivos para prevenir possíveis invasões. • cliente FTP: aplicação de computador que acessa um servidor FTP. Ela requer que os usuários bloqueiem as tentativas de co- nexão FTP de entrada usando o modo passivo e verifiquem se 71 há vírus em todos os arquivos baixados. • TFTP (Trivial File Transfer Protocol ou Protocolo de Transfe- rência de Arquivos Simples): protocolo simples usado para transferência de arquivos. Utiliza o protocolo UDP para trans- portar dados de uma extremidade para outra, principalmen- te para ler e gravar arquivos de um servidor remoto. Tem re- cursos limitados em comparação com o FTP, pois não oferece autenticação e segurança durante a transferência de arquivos. Como resultado, geralmente é usado para transferir arquivos de inicialização ou arquivos de configuração entre máquinas em uma configuração local. Por causa de seu design simples, raramente é usado de maneira interativa por usuários em uma rede de computadores. c. SMTP (Simple Mail Transfer Protocol ou Protocolo Simples de Transferência de Correio): é um protocolo TCP/IP usado no envio e recebimento de e-mail. Como é limitado em sua ca- pacidade de enfileirar mensagens na extremidade de recebi- mento, é usado com um dos dois outros protocolos, POP3 ou IMAP, que permitem que o usuário salve mensagens em uma caixa de correio do servidor e faça o download delas periodica- mente. Em outras palavras, os usuários geralmente usam um programa que usa SMTP para enviar e-mails e POP3 ou IMAP para receber e-mails. Em sistemas baseados em Unix, o Send- mail é o servidor SMTP mais usado para e-mail. Em um pacote comercial, o Sendmail inclui um servidor POP3. O Microsoft Ex- change inclui um servidor SMTP e pode ser configurado para incluir suporte a POP3. O SMTP geralmente é implementado para operar na porta 25 da internet. Uma alternativa ao SMTP amplamente usada na Europa é o X.400. Muitos servidores de e-mail agora oferecem suporte ao ESMTP (Extended Simple Mail Transfer Protocol ou Protocolo Simples de Transferência de Correio Estendido), que permite que os arquivos de multi- mídia sejam entregues na forma de e-mail. d. POP3 (Post Office Protocol ou Protocolo dos Correios): proto- colo padrão da Internet que extrai e recupera e-mails de um servidor de e-mail remoto para acesso pela máquina host� 72 Fornece aos usuários finais a capacidade de buscar e receber e-mails, sendo o principal protocolo por trás da comunicação por e-mail. Funciona por meio de um cliente de software de e-mail de suporte que integra o POP para se conectar ao ser- vidor de e-mail remoto e fazer o download de mensagens de e-mail para a máquina do computador do destinatário. Utiliza a pilha do protocolo TCP/IP para conexão de rede e funciona com o protocolo SMTP para comunicação de e-mail de ponta a ponta, em que o POP envia mensagens e o SMTP as envia para o servidor. A partir de 2012, o Post Office Protocol está em sua terceira versão, conhecida como POP3, e é comumente utilizado na maioria das arquiteturas de comunicação clien- te-servidor de e-mail. e. IMAP (Internet Message Access Protocol ou Protocolo de Acesso a Mensagem da Internet): é um protocolo padrão para acessar e-mails em um servidor remoto de um cliente local. O IMAP é um protocolo de internet da camada de aplicação que usa os protocolos da camada de transporte subjacente para estabe- lecer serviços de comunicação de host para host para aplica- tivos. Isso permite o uso de um servidor de correio remoto. O endereço de porta conhecido para o IMAP é 143. A arquitetura IMAP permite que os usuários enviem e recebam e-mails por meio de um servidor remoto, sem suporte de um dispositivo específico. Esse tipo de acesso é ideal para viajantes que rece- bem ou respondem e-mails de seu computador de mesa ou de escritório doméstico. Ele também é conhecido como protoco- lo de acesso a e-mail interativo, protocolo de acesso a correio da internet e protocolo de acesso a e-mail provisório. O IMAP foi originalmente projetado em 1986, por Mark Crispin, como um protocolo de caixa de correio remota. Isso foi durante o uso popular do POP. O IMAP e o POP ainda são suportados pela maioria dos servidores e clientes de e-mail modernos. No en- tanto, o IMAP é um servidor de arquivos remoto, enquanto no POP os arquivos são enviados e encaminhados. Em outras pa- lavras, com o IMAP, todos os e-mails permanecem no servi- dor até que o cliente os exclua. Ele também permite que vários clientes acessem e controlem a mesma caixa de correio. Quan- 73 do um usuário solicita um e-mail, ele é roteado por meio de um servidor central. Isso mantém um documento de armaze- namento para os arquivos de e-mail. Alguns dos benefícios do IMAP incluem a capacidade de excluir mensagens, pesquisar palavras-chave no corpo dos e-mails, criar e gerenciar várias caixas de correio ou pastas e exibir os títulos para verificações visuais fáceis dos e-mails. O IMAP ainda é amplamente uti- lizado, embora seu uso tenha diminuído devido aos serviços de envio de e-mails por meio de interfaces baseadas na web, como Gmail, Hotmail, Yahoo Mail etc. f. HTTP (Hypertext Transfer Protocol ou Protocolo de Transferên- cia de Hipertexto): protocolo da camada de aplicação usado principalmente na internet. O HTTP usa um modelo cliente/ servidor no qual o navegador é o cliente e se comunica com o servidor da Web que hospeda o site. O navegador usa HTTP, que é transportado por TCP/IP para se comunicar com o ser- vidor e recuperar o conteúdo da web para o usuário. O HTTP é um protocolo amplamente utilizado e foi rapidamente ado- tado pela internet devido à sua simplicidade. É um protocolo sem estado e sem conexão. Embora a simplicidade do HTTP seja sua maior força, também é sua principal desvantagem. Como resultado, o projeto HTTP-NG (Next Generation ou Próxima Geração) surgiu como uma tentativa de substituir o HTTP. O HTTP-NG promete oferecer um desempenho mui- to mais alto e recursos adicionais para suportar aplicativos comerciais eficientes, além de simplificar os recursos de se- gurança e autenticação do HTTP. Algumas das metas do HT- TP-NG já foram implementadas no HTTP 1.1, que incorpora melhorias de desempenho, segurança e outros recursos à sua versão original HTTP 1.0, tais como: conexão para cada tran- sação de solicitação e resposta. Em sua versão anterior, era necessária uma conexão separada. Na versão posterior, a co- nexão pode ser reutilizada. Um pedido HTTP básico envolve os seguintes passos: • uma conexão com o servidor HTTP é aberta; • uma solicitação é enviada ao servidor; 74 • algum processamento é feito pelo servidor; • uma resposta do servidor é enviada de volta; • a conexão está fechada. g. HTTPS (Hypertext Transfer Protocol Secure ou Protocolo de Transferência de Hipertexto Seguro): variante do protocolo de transferência da web (HTTP) padrão que adiciona uma cama- da de segurança aos dados em trânsito por meio de uma cone- xão SSL (Secure Sockets Layer ou Camada de Soquetes Seguros) ou TLS (Transport Layer Security ou Segurança da Camada de Transporte). O HTTPS permite comunicação criptografada e conexão segura entre um usuário remoto e o servidor web. Ele é projetado principalmente para fornecer uma camada de se- gurança aprimorada sobre o protocolo HTTP, inseguro para dados e transações confidenciais, tais como: detalhes de fatu- ramento, transações de cartão de crédito, log in de usuário etc.O HTTPS criptografa todos os pacotes de dados em transição, utilizando a criptografia SSL ou TLS para evitar ataques nos quais é possível extrair o conteúdo dos dados mesmo que a conexão esteja comprometida. É configurado e suportado por padrão na maioria dos navegadores web e inicia uma conexão segura automaticamente se os servidores da web acessados solicitarem conexão segura. O HTTPS funciona em colabora- ção com autoridades de certificação que avaliam o certificado de segurança do site acessado. h. DNS (Domain Name System ou Sistema de Nomes de Domí- nio): é um dos instrumentos mais fundamentais da internet. O DNS é um protocolo TCP/IP. Sua finalidade é a conversão de nomes de domínio fáceis para o entendimento humano, como “howstuffworks.com”, em um endereço IP (Internet Protocol), como 70.42.251.42, que os dispositivos usam para identificar um ao outro na rede. É, em suma, um sistema de correspon- dência de nomes com números. Seu conceito é como uma lista telefônica para a internet. Sem esse tipo de sistema de orien- tação, seria necessário recorrer a meios muito mais complica- dos para encontrar a informação que busca, ou conhecer todos 75 os números de telefone dos seus contatos por analogia ao IP. i. SSH (Secure Shell ou Encapsulamento Seguro): protocolo crip- tográfico e interface para execução de serviços de comunica- ção de rede com um dispositivo remoto de forma segura, ou seja, permite que dois usuários conectados remotamente exe- cutem comunicação de forma segura em uma rede não segura. Inicialmente, era um comando baseado em Unix, mas agora também é suportado em sistemas baseados em Windows. Foi projetado para permitir que um usuário faça acesso com se- gurança em um dispositivo remoto e execute serviços e co- mandos em rede. Por exemplo, ele pode ser usado por admi- nistradores de rede para fazer acesso remoto a um servidor web e, a partir disso, configurá-lo. É considerado o substituto seguro para os protocolos Telnet, RSH e Rexec. Normalmen- te, as comunicações ou processos baseados em SSH funcio- nam em uma arquitetura cliente/servidor que consiste em um cliente e um servidor SSH. O cliente é autenticado e conectado com segurança e envia comandos criptografados para serem executados no servidor. Tanto o cliente quanto o servidor são autenticados com certificados digitais baseados em cripto- grafia de chave pública RSA. O SSH usa AES, IDEA e Blowfish como algoritmos de criptografia. Caro(a) aluno(a), Neste material, abordamos o Modelo OSI em detalhes. Aprendemos que esse modelo define um conjunto de sete camadas e os serviços atribuídos a cada uma. Vimos que a camada física fica responsável pela transmissão por meios físicos ou sem fio, enquanto a camada de enlace é fundamental para a comunicação entre sistemas compu- tacionais em uma mesma rede, inclusive em longa distância. Com- plementar a isto, vimos que a camada de redes é fundamental para a comunicação entre sistemas computacionais em redes distintas. SINTETIZANDO 76 Através da camada de transporte, conhecemos os protocolos TCP e UDP, responsáveis pela garantia da transmissão, confiabilidade e segurança de nossas redes. Para gerenciamento de sessões, vimos que a camada de sessão verifica se a sessão está aberta, assim como o seu encerramento entre processos de aplicativos do usuário final. Já a camada de apresentação traduz principalmente os dados entre a camada de aplicação e o formato de rede. Para finalizar, abordamos a camada de aplicação, ou seja, a cama- da mais próxima do usuário, na qual são executados a maioria dos softwares e é nela que também são utilizados a maioria dos serviços. Mesmo que eventualmente operem em outras camadas, é na aplica- ção que eles ficam visíveis, bem como os seus resultados, sucessos ou falhas. Bons estudos e até a próxima! UN ID AD E 3 Introdução à linguagem de script Objetivos ◼ Compreender os métodos de caracterização da linguagem de script; ◼ Definir com propriedade os elementos de um ambiente de de- senvolvimento de scripts; ◼ Compreender os elementos lógicos em que se baseia um am- biente de aplicação de script em shell; 78 Introdução Olá, aluno(a)! Neste material, vamos entrar no universo da programação e estudar suas possibilidades aplicadas a redes de computadores. Para início, é importante saber que shell é o “prompt” da linha de comando do Unix e Linux, a famosa telinha preta que recebe comandos digitados pelo usuário e os executa. Assim, cada comando digitado pelo usuá- rio é lido, verificado, interpretado e enviado ao sistema operacional para finalmente ser executado. Portanto, neste material, vamos buscar contribuir com o seu aprendizado na área de programação por meio da construção de shell script, isto é, construção de arquivos que guardem vários co- mandos e que poderão ser executados sempre que necessário ou so- licitado pelo usuário. A organização desses comandos deve ser feita de forma lógica, seguindo regras e sintaxe da linguagem. Para isso, vamos estudar as estruturas principais para a construção de algo- ritmos aplicados a exemplos de problemas reais. Vamos lá! 79 Caracterização da linguagem de script Para que você possa compreender o que é uma linguagem de script e como ela se posiciona nas tarefas de desenvolvimento de aplica- ções, é necessário apresentarmos alguns conceitos concernentes a tal teoria, os quais veremos a seguir. O que é o shell Em programação, podemos utilizar a criação de arquivos de script para tornar mais simples as execuções de tarefas repetitivas no dia a dia. Isso se dá pelo fato de que muito do que um programador, ou desenvolvedor, desempenha reside em ações dessa natureza: abrem-se os mesmos programas diariamente, esvaziam-se a lixei- ra e diretórios temporários para economia de espaço em disco, entre outras tarefas recorrentes. Nesse contexto, um script nada mais é do que um algoritmo designado a realizar uma dada tarefa, fazendo uso de comandos es- pecíficos da interface a ele oferecida e dos arquivos que sejam exe- cutáveis dentro do sistema operacional que utiliza. Essa interface, que recebe o nome de shell, representa a ligação entre o usuário (seja ele programador ou usuário final) e o sistema. Figura 1 - Exemplo de shell Fonte: print do autor, 2019. Basicamente, todas as linguagens de script são linguagens de programação. A diferença teórica entre os dois conceitos é que as linguagens de script não requerem a etapa de compilação e são bastante interpretadas – por exemplo, normalmente, um progra- ma em C precisa ser compilado antes de ser executado, enquanto normalmente uma linguagem de script como JavaScript ou PHP não 80 precisa ser compilada. De um modo geral, programas compilados são executados mais rapidamente do que programas interpretados, porque são convertidos primeiramente em código de máquina na- tivo. Além disso, os compiladores leem e analisam o código apenas uma vez e relatam os erros coletivamente que o código pode trazer em si, ao passo que o interpretador lerá e analisará as instruções de código toda vez que eles forem atendidos e irá interromper seu fluxo nessa instância se houver algum erro. Na prática, a distinção entre os dois conceitos se torna cada vez mais difícil, devido à me- lhor capacidade de computação do hardware moderno e às práticas avançadas de codificação. O shell interpreta os comandos que são inseridos pelos usuários para dispor de acesso a outros aplicativos nativos, ou mesmo inseridos diretamente como chamadas de sistema. Além disso, os recursos providos pelo shell são indispensáveis ao manuseio de diversos ar- quivos simultaneamente, seja para realizar uma tarefa de forma re- petida, seja para programar uma dada ação para determinada oca- sião, entre outros recursos. Neste material, apresentaremos os tipos de shell mais di- fundidos no mercado, e na sequência definiremos conceitos que se mostrarão úteis em sua utilização, para então conhecermos exem- plos práticosde shell. Tipos de shell Apresentaremos aqui os tipos de shell mais comuns do mercado, a fim de que você consiga se situar no andamento do desenvolvimen- to dessa linguagem. Shell Bourne IMPORTANTE 81 O mais comum dos tipos de shell é o shell Bourne (sh), conce- bido a partir de um shell original datado de 1975. O shell Bourne era tomado como o shell padrão para o Unix versão 7 (no caso, a maioria dos sistemas baseados em Unix continua a ter o Bourne como shell padrão, mesmo quando outros shell forem usados pela maioria de seus usuários). Desenvolvido por Stephen Bourne, funcionário do Bell Labs, esse shell foi um substituto para o shell Thompson, cujo arquivo executável possuía a mesma nomenclatura (sh). O Bourne foi lan- çado em 1979 na versão 7 do Unix, e na sequência distribuído para instituições de ensino superior. Embora seja usado como um inter- pretador de comandos interativos, o Bourne foi também planejado como uma linguagem de script e contém a maioria dos recursos que geralmente são considerados para produzir programas estrutura- dos. O Bourne ganhou popularidade com a publicação de “The Unix Programming Environment”, por Brian Kernighan e Rob Pike, o pri- meiro livro publicado comercialmente que apresentava o shell como uma linguagem de programação em forma de tutorial. Alguns dos principais objetivos desse shell foram: • Permitir que scripts de shell fossem usados como filtros. • Fornecer programação, incluindo fluxo de controle e variá- veis. • Prover controle sobre todos os descritores de arquivos de en- trada e saída. • Prover controle sobre manipulação de sinal dentro de scripts. • Não delimitar comprimentos de string ao interpretar scripts de shell. • Racionalizar e generalizar o mecanismo de cotação de strings. • Implementar o mecanismo do ambiente, permitindo que o contexto fosse estabelecido na inicialização e fornecendo uma maneira de os scripts de shell passarem o contexto para subs- cripts (processos), sem precisar usar parâmetros posicionais 82 explícitos. Shell C (csh) Posteriormente, alguns estudantes da Universidade da Cali- fórnia, em Berkeley, conceberam o shell C (csh), útil para quem é familiar com a sintaxe da linguagem de programação C: o shell C (csh ou a versão melhorada, tcsh) é um shell Unix criado por Bill Joy, quando este era um estudante de pós-graduação na Universidade da Califórnia, Berkeley, no final da década de 1970. Ele foi amplamen- te distribuído, começando com o lançamento do 2BSD do Berkeley Software Distribution (BSD), que Joy começou a distribuir em 1978. Outros colaboradores iniciais das ideias e de seu código foram Mi- chael Ubell, Eric Allman, Mike O’Brien e Jim Kulp. O shell C é um processador de comandos normalmente exe- cutado em uma janela de texto, permitindo que o usuário digite comandos. O shell C também pode ler comandos de script, e como todos os shell do Unix, suporta wildcarding de arquivos, piping, do- cumentos, substituição de comandos, variáveis e estruturas de con- trole para testes de condição e iteração. O que diferenciou o shell C dos outros, especialmente na década de 1980, foram seus recursos interativos e estilo generalista. Seus novos recursos tornaram mais fácil e rápido o uso de um shell. O estilo generalista da linguagem parecia mais com C e era visto pelos programadores como mais le- gível. Em muitos sistemas operacionais, como o Mac OS X e o Red Hat Linux, o csh é na verdade o tcsh, uma versão melhorada do csh. Muitas vezes, um dos dois arquivos é um link físico ou um link sim- bólico para o outro, de modo que qualquer nome se refere à mesma versão aprimorada do shell C. Na distribuição Debian e em alguns derivados (incluindo o Ubuntu), para Linux, existem dois pacotes diferentes: csh e tcsh. O primeiro é baseado na versão original do csh e o último é o tcsh me- lhorado. O tcsh adicionou ao csh a funcionalidade do uso de nomes de arquivo e conclusão de comandos e conceitos de edição de linha de comando emprestados do sistema Tenex (que é a fonte da inicial ‘t’ 83 em tcsh). Como o tcsh apenas adicionou funcionalidades e não al- terou o que já existia no shell, o tcsh permaneceu compatível com as versões anteriores do shell C original. Embora tenha começado como uma ramificação lateral da árvore fonte original que Joy criou em seu primeiro projeto, o tcsh é agora o principal ramo para o de- senvolvimento contínuo, sendo muito estável. Ainda assim, novos lançamentos continuam a aparecer aproximadamente uma vez por ano, consistindo principalmente em pequenas correções de erros. Shell Korn O terceiro dos mais difundidos shell do mercado é o shell Korn. Trata-se de um shell Unix que foi desenvolvido por David Korn, no Bell Labs, no início da década de 1980 e anunciado na USENIX, em 14 de julho de 1983. Seu desenvolvimento inicial foi baseado no códi- go-fonte do shell Bourne. Outros colaboradores anteriores foram os desenvolvedores do Bell Labs, Mike Veach e Pat Sullivan, que escre- veram o código dos modos de edição de linhas do estilo Emacs e VI (do Unix), respectivamente. O shell Korn é compatível com versões anteriores do shell Bourne e inclui muitos recursos do shell C, inspi- rados nas solicitações dos usuários do Bell Labs. O KornShell se encontra em conformidade com as normas PO- SIX.2, Shell & Utilities, e IEEE 1003.2-1992. As principais diferenças entre o shell Korn e o shell Bourne tradicional incluem: • Controle de tarefas, alias de comandos e histórico de coman- dos projetados após os recursos correspondentes do shell C (o controle de trabalho foi adicionado ao shell Bourne em 1989). • Uma escolha de três estilos de edição de linha de comando ba- seados em VI, Emacs e Xemacs. • Matrizes associativas e operações aritméticas de ponto flu- tuante incorporadas (disponíveis apenas na versão ksh93 do KornShell). • Extensibilidade dinâmica de comandos incorporados (a partir do ksh93). Shell Bash (bsh) 84 O shell Bash é uma linguagem de comandos e shell do Unix es- crita por Brian Fox para o Projeto GNU como uma substituição gra- tuita de software para o shell Bourne. Lançado pela primeira vez em 1989, foi amplamente distribuído como o shell de login padrão para a maioria das distribuições Linux e o macOS da Apple (antigo OS X). Uma versão também está disponível para o Windows 10. É também o shell do usuário padrão no Solaris 11. O Bash é um processador de comandos que normalmente é executado em uma janela de texto onde o usuário digita comandos que causam ações. O Bash também pode ler e executar comandos de shell script. Como todos os shells do Unix, ele suporta globbing de nomes de arquivos (correspondência de curingas), piping, substi- tuição de comandos, variáveis e estruturas de controle para teste de condição e iteração. As palavras-chave, sintaxe e outras caracterís- ticas básicas da linguagem são todas copiadas do sh. Outros recur- sos, por exemplo, histórico, são copiados dos shells csh e ksh. O Bash é um shell compatível com POSIX, mas com várias extensões. O nome do shell é um acrônimo para Bourne-again shell, um trocadilho com o nome do shell Bourne, que ele substitui, e o termo comum born again. Uma brecha no Bash datada da versão 1.03 (especificamente em agosto de 1989), apelidada de shellshock, foi descoberta no início de setembro de 2014 e rapidamente levou a uma série de ataques pela Internet. Pacotes para corrigir os bugs foram disponibilizados logo após sua identificação, mas nem todos os computadores foram atualizados. A escolha do shell pelo usuário depende principalmente de suas pre- ferências pessoais, pois os principais recursos se encontram dispo- níveis em qualquer uma das alternativas. SAIBA MAIS 85 Inicialização do shell Os sistemas operacionais que suportam scripts de shell são usual- mente sistemas de compartilhamento de tempo com vários usuá- rios, sugerindo que mais de um usuário possa efetuar login e usar o sistema. Nesse contexto, os administradoresde sistemas têm a tarefa de gerenciar vários aspectos de como diferentes usuários podem operar um sistema em termos de instalação, atualização e remoção de software, programas que podem executar, arquivos que podem ser visualizados, editados e assim por diante. Os siste- mas também permitem que os ambientes dos usuários sejam cria- dos ou mantidos de duas maneiras principais: usando configurações globais (do sistema) e específicas do usuário (pessoais). Para fins didáticos, apresentaremos alguns exemplos nesta seção com o uso do shell Bash. Normalmente, o método básico para trabalhar com um siste- ma dessa natureza é, como já vimos, o shell, que cria um ambiente dependente de certos arquivos que lê durante sua inicialização após um login de usuário bem-sucedido. Para que um usuário inicie sua sessão, tanto de forma local como remota, é preciso que ele insira seus dados de login e senha para o script de login, responsável pela inicialização de sessão de usuário no sistema. O script de login exa- mina se o nome informado consta da lista de usuários e se sua senha é igual à armazenada. Caso positivo, o script de login invoca o shell configurado para que o usuário devidamente identificado comece a trabalhar dentro do sistema. A informação de login e senha de usuá- rios está armazenada no arquivo /etc/passwd na grande parte dos sistemas, sendo a senha criptografada, além de também serem ar- mazenados valores de número de identificação do usuário, número de identificação do seu grupo, uma descrição sucinta do usuário, seu diretório padrão de login (usualmente HOME) e o shell de seu uso, nesta ordem. Nessa configuração de armazenamento, os campos em questão são separados por dois pontos (:). Quando o shell é invocado, há certos arquivos de inicializa- ção que o ajudam a configurar um ambiente para o próprio shell e o usuário do sistema, que é predefinido (e personalizado) com fun- ções, variáveis, aliases e assim por diante. Existem duas categorias 86 de arquivos de inicialização lidos pelo shell: • Arquivos de inicialização de todo o sistema – Estes contêm configurações globais que se aplicam a todos os usuários no sistema e geralmente estão localizadas no diretório /etc. Eles incluem: /etc/profiles e /etc/bashrc ou /etc/ bash.bashrc. • Arquivos de inicialização específicos do usuário – Estes ar- mazenam configurações que se aplicam a um único usuário no sistema e normalmente estão localizados no diretório ini- cial do usuário como arquivos de ponto. Eles podem substituir as configurações de todo o sistema. Eles incluem: .profiles, .bash_profile, .bashrc e .bash_login. O shell pode ser invocado em três modos possíveis: Shell interativo com login O shell é invocado depois que um usuário efetua login com sucesso no sistema, usando /bin/login, depois de ler as credenciais armazenadas no arquivo /etc/passwd. Quando o shell é iniciado como um shell interativo com login, ele lê o /etc/ profile e seu equivalente específico do usuário ~/.bash_ profile. Figura 2 - Exemplo de shell interativo com login Fonte: print do autor, 2019. Shell interativo sem login O shell é iniciado na linha de comando usando um programa shell, por exemplo, $/bin/bash ou $/bin/zsh. Também pode ser ini- 87 ciado executando o comando /bin/su. Além disso, um shell interativo sem login também pode ser invocado com um programa de terminal como o konsole, termina- tor ou xterm de dentro de um ambiente gráfico. Quando o shell é iniciado neste estado, ele copia o ambiente do shell pai e lê o arquivo ~/.bashrc específico do usuário para obter instruções adicionais de configuração de inicialização. Figura 3 - Exemplo de shell interativo sem login Fonte: print do autor, 2019. Shell não interativo O shell é invocado quando um script de shell está sendo exe- cutado. Nesse modo, ele está processando um script e não requer a entrada do usuário entre os comandos, a menos que seja de outra forma. Ele opera usando o ambiente herdado do shell pai. Ultrapassados os processos de login em si, o shell executa os comandos nos arquivos de sistema e depois procura pelos arquivos de inicialização dentro do diretório HOME do usuário. Reforçamos, aqui, que os arquivos de inicialização têm como finalidade estabele- cer configurações relativas às particularidades do sistema, ao passo que os arquivos de inicialização de cada usuário têm por objetivo assegurar que cada usuário possa personalizar o comportamento do shell como entender melhor. Tais arquivos podem conter quaisquer comandos que façam sentido ao shell, que os executará na ordem em que os localizar. As tarefas mais comuns inerentes a tais arquivos se referem quase sempre ao gerenciamento básico de arquivos. 88 Noções básicas sobre arquivos de inicialização do shell de todo o sistema Nesta seção, iremos ressaltar os arquivos de inicialização do shell que armazenam configurações para todos os usuários no sistema. Estes se dispõem da seguinte forma: • Arquivo /etc/profile – Armazena configurações de ambiente em todo o sistema e programas de inicialização para configu- ração de login. Todas as configurações que se deseje aplicar a todos os ambientes de usuários do sistema devem ser adicio- nadas neste arquivo. Por exemplo, pode-se definir a variável de ambiente global PATH aqui. Figura 4 - Arquivo de configuração de todo o sistema Fonte: print do autor, 2019. 89 • Diretório /etc/profile.d/ – Armazena scripts de shell usados para fazer alterações personalizadas no ambiente. Figura 5 - Scripts de shell customizados. Fonte: print do autor, 2019. • Arquivo /etc/bashrc ou /etc/bash.bashrc – Contém funções e aliases que abrangem todo o sistema, incluindo outras confi- gurações que se aplicam a todos os usuários do sistema. Se o sistema possuir vários tipos de shells, é uma boa ideia inserir configurações específicas de bash nesse arquivo. 90 Figura 6 - Funções e aliases de todo o sistema. Fonte: print do autor, 2019. Noções básicas sobre arquivos de inicialização do shell específicos do usuário Explicaremos aqui mais sobre os arquivos de ponto de inicialização do shell específico do usuário (bash), que armazenam configura- ções para um usuário específico no sistema e que estão localiza- dos no diretório inicial de um usuário. Estes incluem os seguintes arquivos: 91 Figura 7 - Inicialização do shell Fonte: print do autor, 2019. • Arquivo ~/.bash_profile – Armazena configurações especí- ficas de ambiente de usuário e de inicialização. Pode-se defi- nir a variável de ambiente PATH personalizada aqui, confor- me a figura a seguir. 92 Figura 8 - Perfil bash Fonte: print do autor, 2019. • Arquivo ~/.bashrc – Este arquivo armazena aliases e funções específicas do usuário. Figura 9 - Arquivo de usuário bashrc Fonte: print do autor, 2019. 93 • Arquivo ~/.bash_login – Contém configurações específicas que normalmente são executadas apenas quando se efetua lo- gin no sistema. Quando o ~/.bash_profile está ausente, este arquivo será lido pelo bash. • Arquivo ~/.profile – Este arquivo é lido na ausência de ~/.bash_profile e ~/.bash_login. Ele pode armazenar as mes- mas configurações, que também podem ser acessadas por outros shells no sistema. Observe que falamos principalmente sobre o bash aqui – outros shells podem não entender a sintaxe do bash. • Arquivo ~ /.bash_history – O bash mantém um histórico dos comandos que foram inseridos por um usuário no sistema. Essa lista de comandos é mantida no diretório inicial de um usuário no arquivo ~ /.bash_history. Figura 10 - Visão dos últimos comandos executados Fonte: print do autor, 2019. • Arquivo ~ /.bash_logout – Não é usado para a inicialização do shell, mas armazena instruções específicas do usuário para o procedimento de logout. Ele é lido e executado quando um usuário sai de um shell de login interativo. Um exemplo prático seria limpar a janela do terminal no logout. Isso é importante para conexões remotas, o que deixaráuma janela limpa depois de fechá-las. 94 Figura 11 - Limpeza de histórico após logout. Fonte: print do autor, 2019. Definição do ambiente de aplicabilidade e desenvolvimento Para que possamos entender como se definem os elementos cons- titutivos de um ambiente de aplicabilidade e desenvolvimento de algoritmos, é preciso elencar sua definição e propriedades, que ve- remos a seguir. Definição de algoritmo A palavra algoritmo, à primeira vista, pode parecer algo estranho. Embora possua designação desconhecida, fazemos uso constan- temente de algoritmos em nosso cotidiano: a maneira como uma pessoa toma banho ou como prepara uma receita é considerado um algoritmo. Podemos listar outros exemplos de algoritmos, como: • instruções para se operar uma máquina; • orientações de como preencher um formulário para abertura de conta corrente em um banco; • regras para determinação de pontos de máximos e mínimos ao se determinar o volume máximo de uma caixa; • os passos para o cálculo de tarifas de água e luz de uma resi- dência, entre outras tarifas. 95 São vários, portanto, os conceitos que podem ser arbitrados para algoritmos. Por definição própria, algoritmo é um conjunto limita- do de regras e procedimentos devidamente ordenados que têm por meta a resolução sistemática de um determinado problema. Por que utilizar algoritmos Cientistas da computação aprendem por experiência. Aprendemos vendo outros resolvendo problemas e solucionando problemas por nós mesmos. O fato de estarmos expostos a diferentes técnicas de resolução de problemas e de vermos como diferentes algoritmos são projetados nos ajuda a assumir o próximo problema desafiador que nos é dado. Considerando vários algoritmos diferentes, podemos começar a desenvolver o reconhecimento de padrões para que, da próxima vez que surgir um problema semelhante, possamos melhor resolvê-lo. Algoritmos são frequentemente diferentes um do outro. É inteiramente possível que existam muitas maneiras diferentes de implementar os detalhes para calcular a função de raiz quadra- da de um número. Um algoritmo pode usar muito menos recursos que outro, ou levar 10 vezes mais tempo para retornar o resultado como o outro. Seria interessante haver alguma maneira de compa- rar essas duas soluções. Mesmo que ambas funcionem, uma talvez seja melhor que a outra. Podemos sugerir que uma é mais eficiente, que simplesmente trabalha mais rápido ou usa menos memória. Ao estudarmos algoritmos, podemos aprender técnicas de análise que nos permitem comparar e contrastar soluções baseadas unicamente em suas próprias características, não nas características do progra- ma ou computador usado para implementá-los. Na pior das hipóteses, podemos ter um problema que é in- tratável, o que significa que não há algoritmo que possa resolver o DEFINIÇÃO 96 problema em um tempo realista. É importante ser capaz de distin- guir entre os problemas que têm soluções, aqueles que não têm, e aqueles em que as soluções existem, mas requerem muito tempo ou outros recursos para funcionar razoavelmente. Muitas vezes haverá trocas que precisaremos identificar e decidir. Como cientistas da computação, além de nossa capacidade de resolver problemas, também precisaremos conhecer e entender as técnicas de avaliação de soluções. Ao final, muitas vezes há inú- meras maneiras de resolver um problema. Encontrar uma solução e, em seguida, decidir se é uma boa decisão são tarefas que faremos repetidamente. A importância do algoritmo está, assim, no fato de termos que especificar uma sequência de passos lógicos necessária ao compu- tador para que resolva uma tarefa qualquer, pois a máquina por si só não possui vontade própria para tal. Com algoritmos, é possível formular uma solução para um dado problema, independente de se usar uma linguagem específica. Características dos algoritmos e suas formas de representação Todo algoritmo deve possuir uma estrutura mínima: • possuir início e fim; • não ser ambíguo; • poder receber dados de entrada; • poder gerar informações de saída; • ser efetivo e eficaz, ou seja, apresentar passos ou etapas reali- záveis em um tempo finito. Algoritmos podem ser representados, dentre outras manei- ras, por: 1. Descrição baseada em uma narrativa - Utiliza a língua (no 97 nosso caso, o português) para ser descrito. Por exemplo, uma receita de bolo simples: • Separe 500 g de manteiga. • Separe 5 ovos. • Separe 2 kg de massa pronta para bolo. • Misture os ingredientes acima. • Reserve a mistura obtida em uma forma de bolo. • Leve a forma ao forno pré-aquecido em temperatura de 180 ºC. • Aguarde 20 a 25 minutos. • Retire a forma do forno e deixe esfriar. • Sirva a gosto. Vantagens: a língua portuguesa nos é bastante conhecida. Desvantagens: • pode haver imprecisão na descrição dos passos do algoritmo; • a descrição livre de passos acarreta baixa confiabilidade; • a descrição de passos é extensa, podendo ser prolixa. 2. Fluxograma - Corresponde ao uso de símbolos gráficos para representar algoritmos. Em um fluxograma, há símbolos pa- dronizados para as etapas de início, entrada de dados, proces- samento, cálculos, saída de dados e fim. 98 Fluxograma 1 - Blocos de um fluxograma e exemplo de utilização Fonte: Editorial Digital Pages, 2019. Vantagens: • fluxogramas são bastante conhecidos; • a representação gráfica facilita o entendimento do algoritmo; • é padronizado mundialmente para tal uso. Desvantagens: • não oferece muita atenção aos dados, sem construir recursos específicos para descrevê-los ou representá-los; • fluxogramas tendem a ficar muito longos à medida que o al- goritmo se torna mais complexo. 99 3. Pseudolinguagem - Consiste em uma forma linguística de programação, com a definição de comandos próximos do por- tuguês, para representar passos de um algoritmo. Por exemplo: Algoritmo CALCULA_TRIPLO NUM, TRIPLO: inteiro inicio Leia NUMERO TRIPLO 3 * NUM Escreva TRIPLO fim Vantagens: • utiliza o português como base; • admite a quantificação e qualificação de dados na estrutura de variáveis; • permite a transcrição quase imediata do algoritmo para uma determinada linguagem de programação. Desvantagens: • exige a formalização de linguagem não realística; • não possui padronização em nível mundial. Fundamentação da lógica dentro do ambiente de programação Para compreender como a lógica de programação tem seu propósi- to justificado quando se lida com algoritmos, elencamos nas seções seguintes os conceitos a ela concernentes. 100 Estruturas principais para a construção de algoritmos Há três estruturas básicas de controle nas quais deve se basear um bom algoritmo, descritas a seguir. • Sequenciação: os comandos de um algoritmo fazem parte de uma certa e definida sequência, em que é relevante a ordem na qual se encontram os dispostos. De um modo genérico, tal sequência pode ser expressa da seguinte forma: Comando 1 Comando 2 Comando 3 : Comando N Tem-se assim de uma sequenciação com N comandos, exe- cutados na ordem em que aparecem. • Decisão ou seleção: Tal estrutura também é referida como estrutura condicional. Nela, há a subordinação do proces- samento de um ou mais comandos à realização de uma dada condição. Por exemplo: Se <condição>, então <sequência de comandos 1>, senão <sequência de comandos 2>. Se a <condição> for verdadeira, será executada a <sequência de comandos 1>. Do contrário, será executada a <sequência de co- mandos 2>. Outro exemplo: Se eu dispuser de dinheiro suficiente, comprarei uma boa calça jeans. Caso contrário, comprarei uma calça de qualidade qual- quer. 101 • Repetição ou iteração: essa estrutura, também conhecida por laço, permite que tarefas individuais sejam iteradas um certo número determinado de vezes segundo dada lógica. Observe os exemplos a seguir. a. Atirarei pedras em uma janela até quebrá-la. b. Farei cinco arremessos livres. c. Enquanto dispuserde saúde e recursos, desfrutarei de minha vida. No exemplo (a), repete-se a ação de atirar pedras em uma ja- nela até que seja satisfeita a condição de quebrá-la. No exemplo (b), haverá a repetição da tarefa de se arremes- sar uma bola de basquete em uma cesta um número determinado de vezes (cinco). No exemplo (c), a condição que permitirá a alguém continuar desfrutando a vida é possuir recursos e saúde. A utilização conjugada das três estruturas supracitadas per- mite a solução de uma elevada miríade de problemas, e todas as linguagens de programação oferecem elementos representantes de tais estruturas. Conheceremos essas estruturas com mais proprie- dade mais à frente na nossa trajetória de estudos! Caro(a) aluno(a), Neste material, apresentamos os conceitos básicos de programação shell, bem como introduzimos os conteúdos preliminares necessá- rios ao entendimento de como converter problemas do mundo real em algoritmos. A finalidade maior do material, na forma com que seus tópicos foram distribuídos, é a de fazer com que você com- preenda os pilares de utilização das regras de construção de algorit- mos, visando assim ao melhor desempenho quando você, aluno(a), SINTETIZANDO 102 ensejar, com propriedade, elaborar seus próprios scripts de resolu- ção de tarefas. Em termos específicos, apresentamos métodos elaborados para ca- racterizar o que é uma linguagem de script, trazendo na sequência, de forma bem justificada, os elementos constitutivos de um am- biente de desenvolvimento de scripts. Com tal embasamento e se- gundo as restrições de resolução de problemas, trouxemos elemen- tos relevantes para que você consiga compreender o encadeamento lógico de partes de uma aplicação de script em shell. Ao aproximar os conceitos técnicos apresentados de situações realísticas, nosso objetivo foi criar em você o claro sentimento de transformar toda e qualquer tarefa, preferencialmente vinculada a um problema, em um algoritmo. Assim, você poderá definir de for- ma mais confortável e assertiva que caminho tomar na solução de um problema de computação. Bons estudos e até a próxima! UN ID AD E 4 Desenvolvimento de Aplicações Objetivos 1. Capacitar o aluno a desenvolver uma aplicação básica com scripts de log-on. 2. Capacitar o aluno a desenvolver uma aplicação básica para au- tomação de tarefas cotidianas. 104 Introdução Olá, aluno(a)! Chegou o momento de aprofundar seus conhecimentos sobre a sin- taxe do shell script por meio de exemplos práticos. Sabemos que o uso desta linguagem pode facilitar a realização de inúmeras tarefas administrativas no Linux. O shell possui estruturas de linguagem de programação como variáveis, estruturas de decisão e repetição, assim como funções comuns em outras linguagens. A construção e utilização de scripts com essa linguagem possibilita a automação de tarefas. Neste contexto, vamos ver alguns descritores e operadores de arquivos; em seguida vamos analisar operadores específicos para redirecionamentos de Entrada e Saída, como por exemplo o stdout e stderr. Traremos, também, alguns exemplos de dutos (pipes), como cat (para concatenar) e sort (para ordená-los). Prosseguindo com os estudos, vamos identificar algu- mas variáveis que são definidas internamente pelo shell, podendo ser utilizadas durante sua execução. Em seguida, operadores para comparação numérica e de strings serão listadas para facilitar na manipulação dos valores que as variáveis possuem durante a sua inserção nos códigos de shell script. E, claro, para facilitar duran- te a construção da codificação, há uma série de atalhos que podem agilizar essa atividade, por exemplo, o Ctrl+L, que vai limpar todo o terminal. Por fim, após a reunião de vários conceitos e sintaxe de shell script, vamos ver o passo a passo de uma aplicação básica para auto- mação de tarefas cotidianas. Preparado(a)? Hora de testar os códigos presentes neste ma- terial para consolidar seus conhecimentos sobre shell script. Bons estudos! 105 Desenvolvimento de aplicações Neste material, apresentaremos os passos necessários para o de- senvolvimento de aplicações utilizando scripts em shell. Portanto, abordaremos conceitos importantes para entendermos como se or- ganizam as operações de entrada, processamento e saída em shell. Depois, faremos uma introdução aos passos de roteirização de um script em tal ambiente, para aplicações básicas com scripts de log-on e para automação de tarefas cotidianas. Descritores de arquivos Arquivos em ambientes com shell apresentam forma livre, consis- tindo apenas em uma sequência de caracteres específicos. Em siste- mas baseados em shell, descritores de arquivos (FD) são indicado- res abstratos (identificadores), usados para acessar um arquivo ou outro recurso de entrada e saída, como um pipe ou soquete de rede. Os descritores de arquivos fazem parte da interface de programa- ção de aplicativos POSIX, sendo inteiros não negativos, geralmente representados como do tipo inteiro em linguagens de programação que o declarem (como o C). Cada processo no sistema deve possuir três descritores de ar- quivos POSIX padrão, correspondentes aos três fluxos padrão apresentados a seguir. Tabela 1 - Descritores de arquivo Fonte: Editorial Digital Pages (2019) 106 O shell define três descritores de arquivos relevantes. Veja cada um deles a seguir. Entrada padrão (stdin) Como sugere o nome, a entrada padrão corresponde ao des- critor de arquivo do qual um dado aplicativo lerá a entrada de da- dos, se não for a ele informado outro descritor de arquivos espe- cífico. A entrada padrão está normalmente associada a um terminal de entrada – usualmente o teclado. Saída padrão (stdout) Corresponde ao descritor ao qual será direcionada a saída de qualquer aplicativo, se outro descritor específico não for informa- do. Está usualmente associada a um terminal de saída – geralmente o vídeo. (Saída de) Erro padrão (stderr) Corresponde ao descritor em que são escritos os erros pro- venientes do processamento. Esse descritor está separado da saída padrão para que eventuais erros ou avisos não venham perturbar os resultados propriamente ditos. Também está associado a um termi- nal de saída, geralmente o vídeo. Todos os programas que fazem interface com o usuário precisam receber por algum meio as informações passadas por ele. O meio mais antigo e até mesmo comum do usuário passar informações a um programa é via teclado. Por isto mesmo, ele é considerado a en- trada padrão, e é daí que vem o nome stdin (STandarD INput, ou Entrada Padrão). É importante ressaltar que a maioria dos comandos do shell funcionam como filtros, possuindo uma única entrada (stdin) e duas saídas (stdout e stderr), em que o fluxo é de um caractere por CURIOSIDADE 107 vez. Em suma, cada comando do shell filtra os dados de entrada, transforma-os após processamento e os escreve na saída padrão, ao passo que eventuais mensagens de erro são direcionadas à saí- da de erros. Na implementação tradicional do Unix, descritores de ar- quivos indexam uma tabela de descritores de arquivos por processo mantida pelo kernel, que por sua vez indexa uma tabela de arqui- vos do sistema aberta por todos os processos. Essa tabela registra o modo com o qual o arquivo (ou outro recurso) foi aberto: para leitura, escrita, anexação e, possivelmente, outros modos. A tabela também indexa uma terceira tabela, chamada tabela de inode, que descreve os arquivos subjacentes reais. Para executar uma operação de entrada ou saída, o processo passa o descritor de arquivo para o kernel por meio de uma chamada de sistema, e o kernel acessará o arquivo em nome do processo. O processo não tem acesso direto às tabelas de arquivos ou inodes. Já em sistemas operacionais baseados em Linux, o conjunto de descritores de arquivos abertos em um processo pode ser aces- sado sob o caminho / proc/PID/fd/, em que PID é o identificador do processo. Em sistemas do tipo Unix, por sua vez, osdescritores de arquivos podem se referir a qualquer tipo de arquivo Unix chamado em um sistema de arquivos. Assim como arquivos regulares – isso inclui diretórios, dispositivos de bloco e caracteres (também cha- mados de “arquivos especiais”), bem como soquetes de domínio Unix e pipes nomeados. Os descritores de arquivo também podem se referir a outros objetos que normalmente não existem no sistema de arquivos, como pipes anônimos e soquetes de rede. A estrutura de dados FILE na biblioteca de E/S padrão geral- mente inclui um descritor de arquivo de baixo nível para o objeto em questão nos sistemas semelhantes ao Unix. A estrutura geral de dados fornece abstração adicional e é conhecida como um identifi- cador de arquivo. 108 Operadores em descritores de arquivos A lista a seguir apresenta operações típicas em descritores de arqui- vos em sistemas modernos semelhantes ao Unix. A maioria dessas funções é declarada no cabeçalho <unistd.h>, mas algumas estão no cabeçalho <fcntl.h>. Descritores de criação de arquivos • open() • create() • socket() • accept() • socketpair() • pipe() • opendir() • open_by_handle_at() (Linux) • signalfd() (Linux) • eventfd() (Linux) • timerfd_create() (Linux) • memfd_create() (Linux) • userfaultfd() (Linux) Descritores de derivação de arquivos • dirfd() • fileno() Operações em um descritor simples de arquivo • read(), write() • readv(), writev() 109 • pread(), pwrite() • recv(), send() • recvmsg(), sendmsg() • sendfile() • lseek() • fstat() • fchmod() • fchown() • fdopen() • ftruncate() • fsync() • fdatasync() • fstatvfs() • dprintf() • vmsplice() (Linux) Operações em descritores múltiplos de arquivo • select(), pselect() • poll() • epoll() (Linux) • kqueue() (para sistemas baseados em BSD). • sendfile() • splice(), tee() (Linux) Operações em tabelas de descritores de arquivos 110 • fcntl() • close() • closefrom() (BSD e Solaris, apenas) • dup() • dup2() Operações que modificam estados de processos • fchdir() • mmap() Travamento de arquivos • flock() • fcntl() • lockf() Soquetes • connect() • bind() • listen() • accept() • getsockname() • getpeername() • getsockopt() • setsockopt() • shutdown() 111 Redirecionamentos Os recursos de redirecionamento de E/S são úteis para redefinir en- tradas e saídas padrão em outros descritores de arquivos defini- dos pelo usuário. Por padrão, stdout e stderr são impressos em um terminal de vídeo, mas podemos redirecionar essa saída para um arquivo usando o operador >: $ echo hello hello $ echo hello > new-file $ cat new-file hello O segundo eco não imprimiu nada no terminal porque redi- recionamos sua saída para um arquivo chamado new-file. Na ver- dade, o novo arquivo faz duas coisas: ele cria um arquivo chamado new-file – se não existir – e substitui o conteúdo do novo arquivo. Portanto, se o arquivo novo já existisse e fizéssemos echo hello > new file, ele teria apenas o hello nele. Se desejarmos anexar ao arquivo, em vez de substituir seu conteúdo, poderíamos usar o operador >>: $ cat new-file hello $ echo hello again >> new-file $ cat new-file hello hello again A tabela a seguir apresenta operadores de redirecionamento para os dois principais tipos de shells. 112 Tabela 2 - Redirecionadores Fonte: Editorial Digital Pages (2019) 113 Dutos (pipes) Os dutos (pipes) são considerados elos de ligação entre a saída pa- drão de um programa e a entrada padrão de outro programa. Considere um exemplo em que se queira concatenar (cat) o conteú- do de dois arquivos (homens e mulheres), ordená-los (sort) e regis- trar a saída em um novo arquivo (grupo). Para tal, faz-se: $ cat homens mulheres $ | vert$ sort $ >$ grupo Como se observa, o comando cat concatena homens e mulheres em uma mesma saída padrão, que por sua vez servirá de entrada padrão ao comando sort, que terá sua saída redirecionada ao arquivo gru- po. Sem o uso de dutos, o comando anterior teria de ser escrito da seguinte forma: $ cat homens mulheres $ >$ homensemulheres $ sort homensemulheres $ >$ grupo $ rm homensemulheres No modo tradicional, a quantidade de comandos se torna maior e é necessário o uso de um arquivo temporário homensemulheres. É também possível o uso de mais de um duto na mesma linha de comando, bem como imprimir diretamente a saída do processo por meio do comando de impressão lpr. $ cat homens mulheres $ | vert$ sort $ | vert$ lpr ACESSE 114 Caracteres especiais e curingas O shell conta também com um conjunto de caracteres especiais que mudam de valor conforme o uso a eles atribuído, chamados de curingas. O uso de curingas reduz o esforço de digitação e incenti- va o uso de convenções ao se nomear de arquivos. Alguns curingas são: * - pode ser substituído por zero ou mais caracteres; ? - pode ser substituído por um caractere; [...] - pode ser substituído por um dos caracteres entre col- chetes. Por exemplo, se tivermos os arquivos casa1, casa2 e casa3, podemos concatená-los usando os curingas apropriados, sem a menção explícita aos seus nomes. Nesse caso, há três modos de fa- zê-lo: • $ cat casa* $ >$ casas • $ cat casa? $ >$ casas • $ cat casa[123] $ >$ casas Tais conceitos podem ser generalizados e superpostos, ou seja, ?ama* poderia coincidir com camada, mas não gramada nem proclamada. Do mesmo modo, par[iar][sra] passaria por paris, pa- rar e parra. Além disso, pode-se especificar um intervalo de carac- teres, de modo que a expressão [a-z] significa qualquer caractere minúsculo e [0-9] indica qualquer algarismo. Há outros caracteres especiais para o shell além dos curingas, como por exemplo o ponto e vírgula (;), que tem por finalidade in- serir comandos múltiplos em uma mesma linha: $ cd cidade; rm carros* ; cd .. Desse modo, excluem-se os veículos do diretório cidade e se retorna ao diretório anterior. A tabela a seguir apresenta os caracteres especiais mais co- mumente utilizados em scripts para shell. 115 Tabela 3 - Caracteres especiais Fonte - Editorial Digital Pages (2019) Do mesmo modo, alguns caracteres especiais podem ser combinados para realizar a expansão de variáveis em scripts. A tabela a seguir fornece exemplos dessa utilização. Tabela 4 - Expansão de variáveis 116 Fonte - Editorial Digital Pages (2019) É possível também a combinação de caracteres para a for- mação de blocos e agrupamentos úteis em scripts. A tabela a seguir apresenta tal configuração de uso de caracteres. Tabela 5 - Blocos e agrupamentos Fonte - Editorial Digital Pages (2019) Resumindo, por fim, os curingas de uso em scripts, a tabela a seguir traz os mais comuns. Tabela 6 - Curingas Fonte - Editorial Digital Pages (2019) 117 Controle de processos Outra característica de operação que possui notável proveito se re- laciona ao caractere &. Por serem muitos dos sistemas operacionais baseados em shell, tanto multiusuário como multitarefa, vários usuários podem utilizar o mesmo computador e executar mais de uma tarefa simultaneamente, com recursos compartilhados. Desse modo, se desejarmos alocar um determinado programa para ser executado em segundo plano, devemos anexar o caractere & após um dado comando. Considere que um programa chamado vento tomará dias de execu- ção e não se deseja esperar que ele termine. Para tal, executa-se o programa como: $ chuva & [1] 1380 Nessa condição, o shell deixará o programa sendo executado em segundo plano, informando a ordem dentre os seus processos ([1]) e a ordem geral do processo em questão (1380). O processamento em segundo plano se mostra como um recurso poderoso se bem empregado, permitindo que se ocupe o tempo ocioso dos computadores, devendo o usuário, no entanto, se lembrar de que se o programa não terminar por si próprio, será exe- cutado até que seu processo seja explicitamente encerrado, seja por meio de uma reinicialização, seja por meio do comando kill. Outra utilidadedesse recurso está baseada na suspensão de um aplicativo, realização de outra tarefa e, depois, na continuação da execução do aplicativo suspenso. EXEMPLO 118 Substituição da saída padrão A substituição de stdin é outra funcionalidade do shell, usada por meio de comandos $ ^\backprime\; ^\backprime$, que têm por fi- nalidade colocar a saída da execução de um programa como argu- mento de outro, de um modo distinto do configurado com pipes. Por exemplo, o comando which (qual) serve para mostrar onde o shell está achando determinado aplicativo. Se fizermos: $ which cat /bin/cat Seremos informados que o shell executa o cat que está em / bin. Se quisermos conhecer as propriedades do arquivo cat, usamos ls em conjunto com os comandos: $ ls $ ^\backprime$which cat $ ^\backprime$ Ao que a saída do which cat servirá de argumento para a exe- cução do comando ls. Portanto, a linha anterior poderia ser escrita como: $ ls /bin/cat Mais uma vez, duas operações são realizadas simultanea- mente: é localizado o cat no sistema de arquivos e são listadas suas propriedades. A importância do shell em tal contexto é a de propor- cionar a comunicação dos aplicativos entre si e com o usuário. Variáveis do shell O shell tem como funcionalidade a capacidade de permitir que se criem variáveis e que a elas sejam atribuídos valores ar- mazenados durante a execução do shell. Essas variáveis podem ser locais ou de ambiente (globais). Nomes de variáveis podem ser constituídos de quaisquer ca- racteres alfanuméricos. Para a criação e atribuição de um valor a uma variável na mesma operação, é utilizado o comando set para variáveis locais ou setenv para as globais. Por exemplo: $ set estado = “Amazonas” 119 $ echo $estado Amazonas Nesse exemplo, echo exibe o conteúdo de $estado na tela. O argumento passado para echo é “Amazonas”, pois o shell já fez a interpolação da variável $estado na cadeia de caracteres correspon- dente. Para se fazer referência ao nome de uma variável sem ambi- guidade, inclui-se seu nome entre chaves { }. $ set arquivos= “/textos/livro” $ cp ${arquivos}/aula5.tex /home/autores O shell procura por uma variável arquivos e concatena o seu valor com o resto da cadeia /aula5.tex, passando o argumento inteiro para o comando cp. O recurso funcional de substituição da saída padrão pode ser também explorado para a definição de variáveis a partir da saída de aplicativos, que podem ser explorados a contento na construção de scripts de shell. $ set sistema=’uname’ $ echo $sistema Unix Algumas variáveis são definidas internamente pelo shell, po- dendo ser utilizadas durante sua execução. A Tabela 7 relaciona al- gumas das variáveis definidas pelo shell na inicialização. EXEMPLO 120 Tabela 7 - Variáveis definidas pelo shell (os nomes em minúsculas são de variáveis locais e os nomes em maiúsculas são de variáveis globais) Fonte - Editorial Digital Pages (2019) Variáveis são, por padrão, cadeias de caracteres (strings). Quanto à interpolação de variáveis, ocorre sempre que seu nome for invocado diretamente ou entre aspas duplas – qualquer texto disposto entre aspas simples será interpretado literalmente. Por exemplo: $ set dia = domingo $ set aviso = “Amanhã será $dia’’ $ echo $aviso 121 Amanhã será domingo $ set aviso = “Ontem foi $dia’’ $ echo $aviso Ontem foi $dia Assim, as aspas simples são um mecanismo para que as in- terpolações de variáveis sejam ignoradas, ao passo que as duplas permitem que as substituições sejam feitas.Para exibir nomes de variáveis do shell, o procedimento é simples, tomando apenas algu- mas linhas de código: printf “$VARIABLE_NAME\n” printf “String %s” $VARIABLE_NAME printf “Número decimal com sinal %d” $VARIABLE_NAME printf “Número decimal em ponto flutuante %f” $VARIABLE_ NAME Para exibir o caminho de busca do programa, usa-se a sin- taxe: printf “$PATH\n” ou printf “O caminho de busca é %s\n” $PATH Na manipulação de variáveis, é importante, ainda, detalhar uma ferramenta bastante funcional: o comando test. Com ele, é possível avaliar uma determinada condição dada a partir do valor da variável testada. Se a condição for verdadeira, a variável $? é retor- nada com o valor 0; se falsa, o valor retornado é 1. No shell, o comando test pode também ser representado por colchetes, para assemelhá-lo mais ao comando test representado em outras linguagens de programação. 122 Usa-se a sintaxe: test 1 = 1; echo $? A saída dessa condição é igual a 0, pelo fato de ela ser verdadeira. Pode também ser escrita da seguinte forma: [ 1 = 1 ]; echo $? O comando test dispõe das seguintes opções, listadas na ta- bela a seguir: Tabela 8 - Opções do comando test EXEMPLO 123 Fonte - Editorial Digital Pages (2019) São válidas para o comando test, assim, as seguintes avalia- ções lógicas: • s1 = s2 - Verdadeiro se a string s1 é igual a s2. • s1 != s2 - Verdadeiro se a string s1 for diferente de s2. • s1 < s2 - Verdadeiro se a string s1 for menor que s2. • s1 > s2 - Verdadeiro se a string s1 for maior que s2. Podem ser definidas, ainda, as seguintes classes de caracte- res para uso com test: [:alnum:] - Alfanumérica [:alpha:] - Alfabética [:ascii:] - Caracteres ASCII 124 [:blank:] - Espaço ou TAB [:cntrl:] - Caracteres de controle [:digit:] - Dígitos decimais [:graph:] - Caracteres gráficos [:lower:] - Caracteres minúsculos [:print:] - Não são caracteres de controle [:punct:] - Caracteres de pontuação [:space:] - Whitespace (espaço em branco) [:upper:] - Caracteres maiúsculos [:xdigit:] - Dígitos hexadecimais História de comandos Quando o shell é iniciado, passa a armazenar todos os comandos di- gitados pelo usuário, na sequência em que são inseridos. Esses co- mandos podem ser então recuperados, editados e novamente pro- cessados por ele, ao que se dá o nome de história do shell. O número de comandos que é gravado pelo shell é definido por uma variável de ambiente chamada history, ao passo que uma variá- vel savehist determina a quantidade de comandos a ser gravada no history ao final da sessão, para uso futuro. Além da história de comandos, o programador em script pode fazer uso de atalhos de linha de comando, úteis ao manipular listas de comandos já inseridos, conforme podemos ver na tabela a seguir: 125 Tabela 9 - Atalhos da linha de comando Fonte - Editorial Digital Pages (2019) É útil, ao programador, aglutinar aos seus conceitos o uso mnemônico de comandos de rápida memorização e de importân- cia frequente, listados na tabela a seguir. Tabela 10 - Comandos de referência rápida 126 Fonte - Editorial Digital Pages (2019) Por fim, é preciso que o programador saiba, por trabalhar com o prompt do shell de forma massiva, conhecer combinações de escape especiais, como as listadas na tabela a seguir. Tabela 11 - Escapes especiais (tomando o bash como referência) Fonte - Editorial Digital Pages (2019) 127 Aplicação básica Para a criação de uma aplicação básica de script de log-on sob shell, é preciso antes entender o que é um script de automação: trata-se de um ponto de ativação que contém variáveis com valores de liga- ção correspondentes a esse ponto e com um código fonte construído com esse propósito. Vamos detalhar melhor esses elementos a se- guir. Ponto de ativação Ponto de ativação é o elemento que define o contexto de exe- cução para um script – como por exemplo, quando um determina- do objeto de negócios é atualizado, ou ainda quando se armazena um certo valor em um campo. Na construção de aplicativos bási- cos, cada ponto de ativação tem reservado para si um aplicativo dito “assistente”, que cria cada tipo de ponto de ativação. Variáveis e valores de ligação É possível especificar as variáveis que determinam como as informações são inseridas ou recebidas de um script nos aplica- tivos de assistente. As variáveis não são consideradas elementos obrigatórios, mas, se usadas, simplificam a quantidade de código utilizado, facilitando suareutilização. Código fonte É possível a gravação de código fonte em um aplicativo ex- terno para futura importação como aplicativo. Como alternativa, é possível a inserção de código diretamente nos aplicativos do as- sistente, devendo tal código ser gravado em linguagens suportadas pelos mecanismos de script em uso. Desenvolvimento de aplicação básica para automação de tarefas cotidianas Neste tópico, vamos apresentar um roteiro específico para a cons- trução de uma aplicação básica executada para automação de tare- fas cotidianas, para que você se familiarize com os primeiros passos no desenvolvimento de tais scripts. Nossa intenção, aqui, é agregar 128 ao seu conhecimento os conceitos de forma rápida, mas aprofun- dada, de modo que você seja capaz de ter uma estratégia rápida de raciocínio ao lidar com problemas de maior relevância prática. Roteiro de aplicação O processo de automação de comandos sempre segue, via de regra, um teste manual. Normalmente, uma ou mais rodadas de testes manuais já seriam suficientes para testar a funcionalidade da auto- mação de código, pois isso implica que casos de teste manuais pre- viamente existentes já foram executados ao menos uma vez. Como exemplo, vamos considerar um caso de teste manual – um simples log-on no Gmail. Figura 1 - Caso de teste manual – log-on no Gmail. Fonte - Print do autor (2019) A pergunta lançada agora é: como transformar isso em um script de automação? A Figura 2 a seguir ilustra o fluxo necessário para tal transformação. Figura 2 - Etapas para elaboração de script de automação. Fonte: Editorial Digital Pages (2019) 129 A seguir, vamos detalhar cada etapa do diagrama anterior. Estado da automação Esse elemento não é nada mais do que um estado particular da apli- cação a ser definida para uma determinada etapa a ser executada. Isso é especialmente importante em dois cenários. Vejamos quais são eles a seguir. Para começar o teste Nesse caso, precisamos que o navegador esteja disponível e seja lançado. Dessa questão vem a nova pergunta: como identificar o passo a passo e escrever isso no mundo da automação? Temos a opção de iniciar o navegador usando instruções programáticas ou podemos usar a caixa de diálogo “gravar e executar configuração” para definir as propriedades. Definir tais propriedades corretamen- te é um fator crucial, e muitas vezes essa é a razão pela qual uma parte específica do código funcionará em uma máquina e não fun- cionará nas outras. Para executar uma determinada etapa Para que uma etapa seja executada, precisamos que a etapa anterior seja concluída. Para fazer isso manualmente, podemos es- perar até que a execução da etapa seja concluída e que a página seja totalmente carregada. Deve-se usar a sincronização ou esperar até que as instruções do script de automação aguardem que o estado de- sejado seja implementado. É importante tomar cuidado com uma situação particular: quando se está executando o mesmo código para vários conjuntos de dados, é preciso se certificar de que se retorna à automação, ao estado em que deve estar antes de se iniciar a próxima iteração. Passos do teste Podemos categorizar as etapas do teste manual em três ca- tegorias: 130 • Entrada de dados: As etapas de entrada de dados são aquelas em que o usuário insere algumas informações como entrada para seu AUT; • Mudanças de etapas do estado de automação: Essas etapas são aquelas que farão com que uma mudança aconteça na au- tomação. Pode-se incluir uma nova página, um determinado campo sendo visível, uma caixa de edição sendo editável etc.; • Combinação: Como o nome indica, esta é a combinação dos tipos anteriores. Podemos tomar como exemplo uma caixa de seleção, que quando ativada pode deixar um certo campo ati- vo. Nesse caso, devemos inserir o valor lógico verdadeiro para o campo de caixa de seleção, o que também resulta em um es- tado de automação. No caso de teste anterior, apenas os passos dos dois primei- ros tipos existem. O pré-requisito para se criar um script de automação usando qualquer ferramenta é gastar algum tempo analisando a ferramen- ta, bem como a automação associada: é preciso ver como ambos in- teragem entre si. Os passos de entrada de dados não são muito diferentes nos métodos de automação e manual. Tudo o que se faz é inserir os da- dos, mas a maneira como se faz referência ao campo é diferente. Como a máquina executará as etapas, basta nos certificarmos de que nos referimos aos campos na automação de uma maneira que a ferramenta entenda. Para a mudança de etapas de automação/combinação em um cenário manual, executa-se a ação – clicando, verificando ou inse- rindo – e verifica-se a alteração de uma só vez. Em um cenário de automação, todavia, isso não é possível. Portanto, é preciso adicio- nar etapas para ação e validação/verificação. 131 Verificação e validação Verificação e validação são tarefas independentes entre si, mas aplicadas em conjunto, cuja finalidade é avaliar se um produto, ser- viço ou sistema cumpre os requisitos e especificações e se atinge sua finalidade. No caso de programação, o conceito se refere a compo- nentes críticos de um sistema computacional. Na maior parte das vezes, os termos verificação e validação são seguidos pelo termo “independente”, o que indica que tais tarefas devem ser executa- das por uma terceira parte que não possui interesse na consecução dessas tarefas. Em termos individuais do contexto da computação, a tarefa de validação se refere à garantia de que o programa concebido aten- da às necessidades dos usuários, envolvendo, em linhas gerais, sua aceitação e adequação. Já a tarefa de verificação atesta se o código desenvolvido se encontra em conformidade com os requisitos e es- pecificações de uso, sendo um processo de verificação interna. Sem verificação e validação, a intenção de testar é perdida. Normalmen- te, você terá que usar um ponto de verificação, com muitas decla- rações condicionais e também comandos de laços para a construção de lógica. Dados de teste Algumas das perguntas que podemos responder como requisitos de dados de teste são: • Onde colocar essa informação? • Preciso codificar ou não? • Tenho de assumir preocupações com segurança? • Preciso me preocupar com reutilização de código? Quando se observa um script de teste manual, ter os dados de teste, o nome de usuário e a senha disponíveis é uma das condições prévias para iniciar o teste. Testes buscam por falhas ou erros, exer- citando o código como um todo, ou partes dele. 132 Resultados Para um caso de teste manual, pode-se inserir o resultado de cada etapa na coluna “resultado real”. O arquivo de resultado de uma ferramenta de automação contém o resultado de cada etapa quando executado. As ferramentas de automação atualmente possuem recursos de relatório muito robustos. No entanto, talvez ainda seja preciso adaptar os resultados do teste. Portanto, devem-se incluir etapas para escrever frequentemente no arquivo de resultado, para que se saiba exatamente o que aconteceu durante a execução. Se a ferra- menta que se está usando não suporta a gravação no arquivo de re- sultado gerado, é recomendável ter, pelo menos, uma planilha ou bloco de notas associado a cada teste para inserir comentários sobre o status da execução. Pós-operações Uma vez que você terminou o teste, ele não precisa ser mencionado explicitamente no caso de teste manual para fechar o navegador ou fechar a automação. Na ocorrência do caso de teste de automação, você pode incluir essas etapas no script. Seguindo cada passo e determinando suas características mais evidentes, podemos, assim, condensar as funções de cada um. • Passo 1: Pré-condição, em que se abre o navegador com a URL do Gmail de forma programada; • Passos 2 e 7: Instrução de sincronização, importante para ga- rantir que a automação atinja o estado desejado antes da exe- cução da próxima etapa; • Passos 3 e 4: Entrada de dados, em que todos os dadossão co- dificados no script – embora não seja aconselhável, é um bom começo; • Passo 5: alteração da etapa de automação, que inclui clicar no botão Entrar; 133 • Passos 6 e 8: Comentários; • Passos 9 e 11: Declaração condicional, em que se tenta verifi- car se o login foi bem-sucedido, examinando se há um link na caixa de entrada na página resultante; • Passo 10: Caixa de mensagens, criada para visibilidade; • Passos 12 e 13: Estas são as atividades de limpeza, em que se sai da conta e fecha-se o navegador. Em conclusão, podemos observar como um script de automa- ção se desdobra facilmente quando se tem um script manual bem escrito e um conjunto de diretrizes básicas a serem seguidas. O conhecimento em shell script é fundamental na área de Redes de computadores por facilitar na automação de tarefas. Nessa unidade, foram apresentados os elementos básicos para que o aluno possa tanto desenvolver uma aplicação básica com scripts de log-on, como se ver capaz de criar aplicações que permitam a ele automatizar ta- refas ditas cotidianas. Foi ressaltada a importância de se perfazer uma tradução robusta de um caso de teste manual para sua versão automatizada, em que cada elemento da automação corresponde a um elemento cuidadosamente traçado no fluxo de se associar cada etapa de automação a um objetivo específico. Esse processo deve reforçar no aluno o interesse pela necessidade de se verificar e validar cada pequeno cenário envolvido na descrição apurada da aplicação que pretende desenvolver. Surge daí a impor- tância de que o aluno tenha absorvido em si a importância de pro- jetar um bom código, ao mesmo tempo em que este tenha sido bem conectado à aplicação que se deseja desenvolver. No caso específico da compreensão de como estruturas de programação devem atuar ou tomar parte nesse campo de conhecimento, o aluno consegue realizar a coesão de suas habilidades de programação com as ne- cessidades que o usuário final tem de ver automatizadas, de forma SINTETIZANDO 134 transparente, as tarefas que deseja seguir ao utilizar uma aplicação. Por isso, é de extrema relevância entendermos as minúcias de cada etapa de um script de automação. 135 Referências Bibliográficas UNIDADE 1 KUROSE, J. F.; ROSS, K. W. Redes de computadores e a internet: uma abordagem top-down. 5. ed. São Paulo: Pearson, 2010. PEARSONHIGHERD. Leituras dos autores James F. Kurose e Keith W. Ross. Disponível em: <www.pearsonhigherd.com/kurose- -ross/>. Acesso em: 30 abr. 2019. PIMENTEL, C. J. L. Comunicação digital. São Paulo: Editora Bras- port, 2007. UNIDADE 2 HAYKIN, S. Sistemas de comunicação analógicos e digitais. 4 ed. Porto Alegre: Editora Bookman, 2007. INTERNET ENGINEERING TASK FORCE. Internet protocol, version 6 (IPv6) specification. Disponível em: <https://www.ietf.org/rfc/ rfc2460.txt>. Acesso em: 16 maio 2019. KUROSE, J. F.; ROSS, K. W. Redes de computadores e a internet: uma abordagem top-down. 5. ed. São Paulo: Pearson, 2010. MARTINS, M. R. A. Integração sistêmica em middleware. Orienta- dor: José Sidnei Colombo Martini. 2010. Dissertação (Mestrado em Engenharia Elétrica) – Escola Politécnica, USP, São Paulo, 2010. PIMENTEL, C. J. L. Comunicação digital. São Paulo: Editora Bras- port, 2007. PROAKIS, J. Digital communications. 5. ed. Nova Iorque: Editora McGraw-Hill Science, 2007. SKLAR, B. Digital communications: fundamentals and applica- tions. 2. ed. Nova Jersey: Editora Prentice Hall, 2008. TANENBAUM, A. S. Redes de computadores. 4. ed. São Paulo: Edi- 136 tora Campus, 2010. UNIDADE 3 MEDINA, M.; FERTIG, C. Algoritmos e programação: teoria e práti- ca. São Paulo: Novatec Editora, 2005. SOUZA, M. A. F. et al. Algoritmos e lógica de programação. São Pau- lo: Thomson Learning, 2006. FORBELLONE, A. L. V.; EBERSPÄCHER, H. F. Lógica de programa- ção. São Paulo: Pearson Prentice Hall, 2005. UNIDADE 4 FORBELLONE, A. L. V; EBERSPÄCHER, H. F. Lógica de programação. São Paulo: Pearson Prentice Hall, 2005. MEDINA, M; FERTING, C. Algoritmos e programação: teoria e prá- tica. São Paulo: Novatec, 2005. SOUZA, M. A. F. de. et al. Algoritmos e lógica de programação. São Paulo: Thomson Learning, 2006.