Baixe o app para aproveitar ainda mais
Prévia do material em texto
IF Sudeste MG – Barbacena Sistemas para Internet Tendo escolhido um meio de transmissão, seja ele um telégrafo de tocha ou uma fibra óptica, temos que escrever um conjunto de regras para o uso adequado do meio, definindo como por exemplo: ◦ As mensagens a serem codificadas; ◦ Quando uma transmissão é iniciada e terminada; ... Dois tipos de erros são difíceis de evitar: ◦ a concepção de um conjunto incompleto de regras; ou ◦ elaboração de regras que sejam contraditórias. Veremos maneiras de certificar-nos: ◦ que o conjunto de regras é completo e consistente. ◦ a precisão em especificar os detalhes relevantes de um protocolo. ◦ olhar para os tipos gerais de serviços que um protocolo de comunicação de computador deve ser capaz de proporcionar. Suponha que temos dois computadores, A e B. A está conectado a um armazenamento de arquivos e B conectado a uma impressora. Queremos enviar um arquivo texto a partir do armazenamento de arquivos em A para a impressora em B Para que A e B se comuniquem, as duas máquinas devem usar os mesmos meios físicos, usar codificação de caracteres compatíveis, transmitir e digitalizar os sinais no canal, mais ou menos à mesma velocidade. Além dessas questões resolvidas, a máquina ainda deve ser capaz de ◦ verificar se a impressora está ou não disponível. ◦ adaptar a velocidade que pode enviar os caracteres de acordo com a taxa em que a impressora pode lidar com eles. ◦ suspender o envio quando a impressora ficar sem papel ou estiver desligada; É importante notar que, embora o fluxo de dados reais seja em apenas uma direção, A → B, precisamos de um canal bidirecional para as informações de controle. ◦ As duas máquinas deve ter alcançado um acordo prévio sobre o significado de informações de controle e sobre os procedimentos usados para iniciar, suspender, retomar e concluir as transmissões. Todas as normas, formatos e procedimentos que foram acordados entre A e B é chamado de protocolo. O protocolo formaliza a interação por padronizar a utilização de um canal de comunicação. O protocolo, então, pode conter acordos sobre os métodos utilizados para: ◦ Início e término de troca de dados ◦ Sincronização de remetentes e destinatários ◦ Detecção e correção de erros de transmissão ◦ Formatação e codificação de dados A maioria desses problemas pode ser definido em mais de um nível de abstração: ◦ Para a sincronização pode-se aplicar a sincronização de relógio do remetente e do receptor; ◦ Em um nível mais alto de abstração, preocupa-se com a sincronização das transferências de mensagens (por exemplo, no controle de fluxo e controle de taxa), ◦ Um nível ainda mais alto lida com a sincronização e coordenação as principais fases do protocolo. No nível mais baixo pode consistir num método para codificar os bits em sinais analógicos e em sinais elétricos. Um nível acima, pode consistir no método de codificação de caracteres individuais de um alfabeto na transmissão de bits. Em seguida, os códigos podem ser agrupados em campos de mensagem, e de campos de mensagens em quadros ou pacotes, cada um com um significado e uma estrutura específica. A especificação do protocolo consiste em cinco partes distintas. Para ser completa, cada especificação deve incluir explicitamente: 1. O serviço a ser fornecido pelo protocolo; 2. As suposições sobre o ambiente em que o protocolo será executado; 3. O vocabulário de mensagens utilizadas para implementar o protocolo; 4. A Codificação (formato) de cada mensagem no vocabulário; 5. As regras que garantem a consistência de trocas de mensagens; o O design e validação de um conjunto inequívoco de regras e procedimentos. Cada item da especificação do protocolo pode definir uma hierarquia de outros elementos. ◦ O protocolo de vocabulário, por exemplo, pode consistir de uma hierarquia de classes de mensagem. Segue um exemplo informal da definição dos cinco elementos do protocolo, e os tipos de erros que podem permanecer em um projeto. O seguinte protocolo foi descrito por W. C. Lynch [1968] como ◦ “... De razoável aparência, mas esquema inadequado publicado por uma das principais fabricantes de computadores em um manual de informações do sistema.” Podemos identificar os blocos básicos de construção em uma especificação citado acima. Serviço de especificações ◦ O objetivo do protocolo é a transferência de arquivos de texto como sequências de caracteres através de uma linha telefônica enquanto protege contra erros de transmissão, assumindo que todos erros de transmissão pode de fato ser detectado. ◦ O protocolo é definido como transferência de arquivos full- duplex, isto é, ele deve permitir uma transferência em duas direções ao mesmo tempo. ◦ Confirmações positivas e negativas no tráfego de A para B enviado no canal de B para A, e vice-versa. Cada mensagem contém duas partes: uma parte da mensagem, e uma parte de controle que se aplica ao tráfego no canal reverso Suposições sobre o MEIO AMBIENTE ◦ O ambiente em que o protocolo deve ser executado consiste em pelo menos dois usuários do serviço de transferência de arquivos e um canal de transmissão. ◦ Os usuários podem assumir simplesmente um pedido de transferência de arquivos e aguardar a sua conclusão. ◦ No canal de transmissão é assumido que pode causar distorções em mensagens arbitrárias, mas não para perder, duplicar, inserir ou reordenar as mensagens. ◦ Vamos supor aqui que uma camada de nível inferior será usada para capturar todas as distorções e transformá-las em mensagens sem distorções de erro. Vocabulário de protocolos ◦ O vocabulário de protocolo define três tipos distintos de mensagens: Ack para uma mensagem combinada com um reconhecimento positivo; Nak apara uma mensagem combinada com uma confirmação negativa; e Err para uma mensagem com erro de transmissão. ◦ O vocabulário pode ser sucintamente expressa como um conjunto: V = {ack, err, nak}. ◦ Cada tipo de mensagem pode ser ainda mais refinado para uma classe de mensagens de nível inferior, constituído por exemplo de um subtipo para cada código de caractere a ser transmitido. Formato de mensagem ◦ Cada mensagem é constituída por um campo de controle que identifica: o tipo de mensagem e um campo de dados com o código de caracteres. Para o exemplo, assumimos que os dados e os campos de controle são de um tamanho fixo. ◦ A forma geral de cada mensagem pode agora ser representada simbolicamente como uma simples estrutura de dois campos: { control tag, data } enum control { ack, nak, err }; struct message { enum control tag; unsigned char data; }; ◦ A linha que começa com a palavra-chave enum declara um tipo de enumeração chamado control com três valores possíveis; ◦ Um tipo usado para a declaração da mensagem; ◦ E a estrutura da própria mensagem contém dois campos: uma tag do tipo control e um campo de dados. Regras do protocolo ◦ As regras para o protocolo foram informalmente descrito como se segue: Se a chegada da última mensagem for livre dos erros do canal, a mensagem de retorno vai levar uma confirmação positiva; caso contrário vai levar um confirmação negativa. Se a mensagem anterior teve uma confirmação negativa, ou não houve recebimento de confirmação alguma, retransmitir a mensagem antiga; caso contrário, buscar uma nova mensagem para transmissão. Regras do protocolo ◦ Para formalizar essas regras, podemos usar os diagramas de transição de estado, fluxogramas, expressões algébricas ou descrições do formato de programas. Receive: simboliza a espera da chegada de uma nova mensagem no canal. Nack, ack ou err: representa a confirmação de acordo com a mensagem recebida. Next:o : Operação interna que indica o próximo item de dado a ser enviado.O item de dado é armazenado na variável o. Os dados transferidos em uma direção apenas podem continuar se os dados foram transferidos na outra direção. Como definir quando uma transmissão de dados será iniciada ou concluída. ◦ As regras de transmissão só trata a transferência de dados normais. ◦ Quando quer iniciar a transmissão, um dos dois lados enviam uma mensagem falsa de erro, sendo os dois lados autorizados a iniciar a transmissão. Não diz se o receptor deve aceitar ou não um item de dado que foi recebido corretamente e armazenada temporariamente em i. ◦ Conduz a aceitação de uma mensagem duplicada Suponha a tentativa de enviar a sequência de caracteres de A à Z . ◦ As linhas pontilhadas representam comunicação de sucesso e as linhas tracejadas representam mensagens distorcidas pelo canal. ◦ ACK – reconhecimento positivo, enviado para confirmar o recebimento correto do segmento e NAK – reconhecimento negativo, enviado para informar que o segmento foi recebido com erros; A inicia a transmissão enviando uma mensagem de erro falsa para B. B responde pela transmissão dos caracteres na ordem inversa: de Z para A A erroneamente aceita a mensagem. Para realizar uma tarefa como transferência de arquivos, um protocolo deve realizar uma série de funções de nível baixo, tais como sincronização e recuperação de erros. ◦ A realização de tais serviços, depende do pressuposto estabelecido em relação ao meio ambiente onde o protocolo será executado. Para resolver problemas maiores, usa-se o senso de dividi-lo em subproblemas menores, mais fáceis de serem resolvidos. ◦ Princípio da Modularidade / Camadas Exemplo: Suponha que precisamos implementar um protocolo de transmissão que fornece codificação para cada sequência de 7 bits e proteger contra erros de transmissão, por exemplo com a adição de 1 bit de paridade para sequência codificada. ◦ Podemos separar cada um desses serviços em dois submódulos funcionais: um codificador e um de paridade e invocá-los sequencialmente. ◦ Na outra extremidade haverá um decodificador e um verificador de paridade. ◦ P1 é o conjunto de adicionar paridade e o verificador; ◦ P2 é o conjunto codificador/decodificador. A figura do slide anterior ilustra o princípio de funcionamento em camadas. Cada camada oferece um serviço diferente para cada protocolo ◦ P1 é um protocolo de 8 bits Proporciona um canal virtual para P2 de forma transparente Qualquer formato imposto pelo P2 é transparente. ◦ P2 é um protocolo de 7 bits Qualquer formato imposto por camadas superiores também é transparente. Como mostrado na imagem acima, cada camada pode incluir os dados a serem transmitidos de outra camada, como um envelope. Os formatos de dados usados nas camadas superiores não precisam ser mantidos pelas camadas inferiores. Os dados podem ser divididos em novos formatos e tamanhos, desde que o formato original possa ser recuperado na camada correspondente do receptor. O princípio da modularidade garante que a alteração no formato de uma camada não altere o funcionamento das demais. Em 1980 a ISO reconheceu as vantagens de padronizar a hierarquia de serviços de um protocolo com um modelo de referência para os projetistas de protocolos. A recomendação ISO define 7 camadas: 1. Camada física: a transmissão de bits através de um circuito físico 2. Camada de enlace: detecção de erros e recuperação 3. Camada de rede: transferência transparente de dados e roteamento 4. Camada de transporte: transferência de dados para um usuário de nível superior 5. Camada de Sessão: coordenação de interações em sessões de usuário 6. Camada de apresentação: interpretação da sintaxe em nível de usuário por exemplo, para a criptografia ou compressão de dados 7. Camada de aplicação: ponto de entrada dos daos para os processos de aplicações, tais como correio eletrônico ou de arquivo de transferência de dados. Camada Física ◦ A camada 1 contém as funções específicas que se aplicam à transmissão real dos bits. ◦ Ela especifica se a ligação é um fio de cobre, canal de rádio ou fibra óptica. ◦ Define a codificação dos dados em, por exemplo, bits, elétrico, óptico ou sinal de rádio. ◦ Padroniza as exigências dos cabos, interruptores, conectores, incluindo a atribuição de pinos. ◦ Ela vai esconder estes detalhes da camada de enlace. Os quadrados representam os nós ou hosts na rede. Os círculos representam os processos no cliente à nível de aplicação. As linhas representam as conexões lógicas Camada de enlace ◦ utiliza o serviço prestado pela camada de física ◦ transforma os dados brutos em dados confiáveis, adicionando tratamento de erros. ◦ está conectado a cada par de hosts. ◦ Transmite dados em blocos (frames) ◦ Pode fornecer controle de fluxo de dados ◦ Pode ser orientado à conexão com confirmação de entrega Camada de rede ◦ Se encarrega com funções típicas da rede Endereçamento Roteamento Escolher melhor caminho, evitar gargalos e congestionamentos entre o host inicial e final. Fornece meio para estabelecer e orientar conexões Camada de Transporte ◦ Conecta processos à nível de usuário ◦ Os protocolos de rede e transporte podem ser chamados de protocolos ponto-a-ponto ◦ Pode fornecer serviço de controle de fluxo A camada define um nível de abstração no protocolo. Cada camada na hierarquia define um serviço distinto e implementa um protocolo diferente. O formato usado em cada camada é independente do formato usado nas demais. ◦ A camada de redes envia pacote de dados, a camada de ligação cria os quadros e a camada física converte em fluxos de bits ou bytes. ◦ O formato imposto pelas camadas inferiores é transparente para as camadas superiores. Interface ◦ A interface é quem separa os níveis de abstração das camadas. ◦ Deve ser bem projetada e definida Na figura, as funções dos protocolos na camada N formam uma entidade lógica. No modelo são referidos como pares de entidades O limite vertical entre duas camadas é o que chamamos de interface. O limite horizontal é o que chamamos de par de protocolos. Os detalhes de implementação das interfaces são ocultadas do meio ambiente. A interface entre duas camadas é definido como uma coleção de acesso a serviços implementados pela camada inferior e usadas pela camada superior. As informações a serem trocadas são formatadas de modo incremental pelas várias camadas como “envelope de dados”. São usados três métodos para codificar a mensagem do protocolo em um determinado vocabulário: ◦ Orientada a bit ◦ Orientada a caractere ◦ Orientada a contagem de byte Orientada a bit ◦ Um protocolo orientado a bits transmite seus dados como fluxo de bits. ◦ Para reconhecer quando inicia ou termina uma mensagem (quadro), são usados alguns padrões como: modificação de um pequeno padrão de bits ou flags. Deve ser garantido que esses bits serão interpretados de maneira diferente dos bits da mensagem. ◦ Se o flag de um frame for uma sequência de 6 bits “1” entre 2 “0” 01111110, esta série poderia seria interceptada se existisse nos dados do usuário. ◦ Poderia ser feito a inserção de um bit “0” extra depois de cada série cinco “1” nos dados do usuário. Orientada a bit ◦ O receptor poderá detectar corretamente a estrutura imposta pelos flags no fluxo de bits através do controle do primeiro bit após cada série de 5 deles, sendo encontrado um zero, este deve ser excluído. ◦ Esta técnica é usada no protocolo da camada de enlace do modelo OSI. Orientado à caractere ◦ Uma estrutura mínima é aplicado sobre o fluxo de bits ◦ Se o número de bits por caractere é fixado em tamanhos fixos (7 ou 8 bits), toda a comunicação ocorre em múltiplos desses n bits. ◦ Estas unidades sãousadas para codificar dados e para códigos de controle. Ex.: ASCII ◦ Um exemplo para delimitadores dos dados dos usuário em ASCII é iniciar com delimitador STX e terminar com ETX ◦ Para que os delimitadores não ocorram nos dados do usuário, são usados códigos de escape DLE ◦ Técnica conhecida como Caractere Stuffing Orientada a contagem de byte ◦ Os flags de um protocolo orientado a bit e orientado a caractere são usados para estruturar um fluxo de dados em fragmentos maiores. ◦ O motivo de usar tal estrutura é para indicar ao receptor onde o fluxo de dados inicia e termina. ◦ Após o código de controle STX, o receptor conhece a quantidade de bytes contém a mensagem. ◦ O código para indicar o fim, ETX, agora é desnecessário. ◦ A maioria dos protocolos são desse tipo. Nos métodos de estruturação da mensagem, caso haja uma distorção ou uma DLE é perdida, essas técnicas podem falhar. Fazer a detecção de erros requer a transmissão de informações redundantes, como um checksum. Fazer o controle de fluxo requer que um campo seja adicionado na mensagem. Detectar a perda ou reordenar pacotes, requer que um campo de número sequencial seja adicionado. Se mais de um tipo de mensagem pode ser enviado, deve existir um campo para sinalizar o tipo da mensagem. Todos esses dados agrupados de maneira adequada, formam uma estrutura de cabeçalho e a soma de verificação são colocadas no rodapé. O formato de uma mensagem pode ser ordenada por três elementos: formato = { header, data, trailer }. Cada um desses elementos são formado por um subconjunto de outros itens: header = {type, destino, número de ordem, a contagem}, rodapé= {checksum, endereço de retorno}. Muito se pensa na semelhança do projeto de protocolos com a de um software. As diferenças fundamentais são: ◦ As regras do protocolo são interpretadas simultaneamente por inúmeros processos que interagem entre si. ◦ As ferramentas para ver o protocolo funcionando de maneira simultânea por vários processos são escassas. A mais popular par ao raciocínio de protocolos é o diagrama de sequência, para conhecer sua sequência temporal. Mas é inadequada. Máquinas de estados finitos são mais adequadas, pois podemos perceber o comportamento do protocolo para cada evento envolvido. Projeto de protocolo é um problema de engenharia que pode ser tratado por meio de técnicas conhecidas. Já existem diversos padrões consolidados na área de engenharia, como: ◦ várias técnicas quem podem ser usadas para codificar os dados binários ou sinais analógicos. ◦ Sincronizar os transmissores e receptores. ◦ Etc.. Os principais problemas estão relacionados aos projetos de redes: ◦ Roteamento ◦ Dimensionamento das estruturas envolvidas ◦ Interconexão de várias redes ◦ Controles de congestionamento e fluxo Os desafios hoje estão relacionados a criação de um protocolos com regras consistentes e erros a ser evitados para a troca de informações em sistemas distribuídos. Diante dos novos desafios, busca-se criar ferramentas para explorar os novos ambientes e descobrir suas possibilidades. ◦ A ideia é remover restrições em vez de impô-las. ◦ Vai aprendendo com a “experiência” (erros). Principais desafios: ◦ Simplicidade Protocolo bem estruturado por um conjunto de “camadas” bem elaboradas. Cada camada executa bem, e apenas, a sua função Ter interfaces bem definidas Protocolos concebidos desta forma, são mais fáceis de entender, implementar e identificar erros. Modularidade ◦ Um protocolo que executa um função complexa, pode ser construído a partir de módulos menores que interagem entre si de forma bem definida e simples. ◦ Cada módulo menor fica mais simples de ser definido, verificado, implementado e mantido. Protocolos bem projetados ◦ Um protocolo bem elaborado não contém nenhuma parte de seu código inacessível ou inexequível. Ex.: A chegada de uma mensagem que o receptor não esperava receber, ou não respondê-la. ◦ Um protocolo bem formado é limitado, não pode se referir a outras partes do sistema. ◦ Auto-estabilizador: se ocorre um erro transitório que faz o protocolo alterar seu estado, ele tem capacidade de retornar por si só ao seu estado normal. ◦ O protocolo sempre deverá atingir um dos estados destinados em um tempo finito. Robusto ◦ O protocolo deve estar preparado para lidar de forma adequada em cada evento possível, sob todas as condições possíveis. ◦ O protocolo deve fazer suposições mínimas apenas do seu ambiente para não criar muitas características de dependência. Consistente ◦ Existem algumas formas padronizadas em que um protocolo pode falhar: Deadlocks: Estado em que nenhuma execução do protocolo é possível, pois todos os processos do protocolo estão á espera de condições que nunca serão cumpridas. Livelocks: Processos que são executados infinitas vezes, sem nenhum tipo de progresso. Terminações impróprias: Términos da execução do protocolo sem satisfazer as tarefas necessárias. 1. O problema deve estar bem-definido. 2. Defina o serviço antes das estruturas (O quê vem antes de Como). 3. Projete funcionalidades externas antes das internas (caixa-preta) 4. Faça-o Simples (KISS) [6]. Fácil de implementar, validar e mais eficiente. 5. Não conecte o que é independente. Separe interesses ortogonais. 6. Não introduza o que é imaterial. Um bom projeto é “open-ended ”. 7. Antes de implementar, construa um protótipo e verifique sua corretude. 8. Implemente o projeto, meça sua performance, e se necessário, otimize-o. 9. Teste sua implementação final, se é equivalente ao projeto validado. 10. Não pule as regras de 1 a 7. A regra mais violada é a regra 10
Compartilhar