Protocolo de Ligação Lógica



Documentos relacionados
Protocolo de Ligação de Dados

Protocolo de Ligação Lógica

Transmissão Serial DTE e DCE CSU/DSU

NTP-001. Acessando o Master ou Master Expander com Cabos Serial-Serial ou Cabos Serial-Serial e USB-Serial PATCHVIEW V2.0

Pretende-se neste trabalho familiarizar o aluno com a interface RS-232 e a sua aplicação em aquisição de dados num ambiente laboratorial

COMUNICAÇÃO SERIAL. Prof. Clayrton Henrique Microprocessadores Aula 30 Rev.02

Entrada e Saída Transmissão Serial e Paralela

Nome Endereço IRQ COM1 3F8 4 COM2 2F8 3 COM3 3E8 4 COM4 2E UART - Universal Asynchronous Receiver/Transmitter. descrição

EIA232. Introdução. Comunicação de Dados 3º EEA 2004/2005

Índice. 1. Descrição Geral do Módulo. Módulo Processador CPU209-R1 V /07/05

Sistemas Distribuídos Capítulo 4 - Aula 5

Conexão de um Terminal à Porta de Console dos Switches Catalyst

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Modelo de Comunicação

Arquitetura e Organização de Computadores

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

Comunicação Serial. Comunicação Serial RS232

Comunicação RS232 e RS485 Vitor Amadeu Souza vitor@cerne-tec.com.br

Eng.º Domingos Salvador dos Santos.

- Campus Salto. Disciplina: Sistemas de Arquivos Docente: Fernando Santorsula

FILAS DE ESPERA 256 kbit/s 75% 4000 bits kbit/s 512 kbit/s 384 kbit/s 256 octetos 384 kbit/s 512 kbit/s 2048 kbit/s

CONTROLE DE FLUXO. Redes de Computadores

3 Camada de ligação de dados

ecos - Gestores de dispositivos

Rede Digital com Integração de Serviços RDIS

Programação em FORTRAN V. João Manuel R. S. Tavares

Exemplo de configuração do cabo do console ASR5000

Porta Série SÉRIE x PARALELO PORTA SÉRIE. Comunicação série SÉRIE PARALELA

SISTEMAS DE TELECOMUNICAÇÕES I

Programação de CPLDs no ambiente ISE 4.2i da Xilinx

Tecnologias de Redes Informáticas (6620)

Linguagem de Programação C. Fluxo de Saída Padrão. Linguagem de Programação C. printf. Fluxo de Saída Padrão. Algoritmos e Lógica de Programação

A camada de Enlace. Serviços e Protocolos

Arquitetura de Computadores - Módulos de E/S. por Helcio Wagner da Silva

Aula 2. Modos de Transmissão; Protocolos de Comunicação; Interfaces; Modelo de Referência OSI; Dispositivos de Rede; Camada Física: Introdução.

INTERFACE PARALELA. Área: Eletrônica Nível de conhecimento necessário: básico. Autor:

Direto. ao Ponto. Comunicação Ethernet tipo TCP/IP com robô (CR-750/751D) N o. DAP-RBT-01. Rev. A

2 Conceitos de transmissão de dados

Arquiteturas para Sistemas Distribuídos I

Direto. ao Ponto. Comunicação Inverter Protocol entre PLC FX e Inversor Série 700 N o. DAP-PLCFX-05. Rev. A

Sistemas Operacionais. Entrada e Saída. Edeyson Andrade Gomes.

Tópicos. Introdução. Padrões de Interfaceamento

Comunicação Serial. Comunicação Serial

SISTEMAS DIGITAIS MEMÓRIAS E CIRCUITOS DE LÓGICA PROGRAMÁVEL

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

CAPÍTULO 3 Interfaces Seriais RS-232 e RS-485

Nível de Enlace. Nível de Enlace. Serviços. Serviços oferecidos os nível de rede

COMUNICAÇÃO SERIAL ENTRE EQUIPAMENTOS

INTERNET GROUP MANAGEMENT PROTOCOL - IGMP

Curso Técnico de Informática de Sistemas

Reader e Writer para streams de caracteres (texto).

TUTORIAL MATLAB Victor Breder 2016

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo 6 - Threads

Ficheiros binários 1. Ficheiros binários

Prof. Adilson Gonzaga. Interface com Displays

FATORES QUE INFLUENCIAM A VELOCIDADE DA INTERNET

CONFIGURANDO SERVIDOR SAT SS-1000

TOKEN RING & TOKEN BUS

Organização e Arquitetura de Computadores I

Gerência de Dispositivos. Adão de Melo Neto

Capítulo 13: Sistemas de E/S. Operating System Concepts with Java 7th Edition, Nov 15, 2006

Interface com Displays de 7 Segmentos. Interface com Displays

Universidade Federal de Minas Gerais. Sistemas Operacionais. Aula 19. Sistema de Entrada/Saída

BARRAMENTOS DE MICROCOMPUTADORES

Plano de Aula. 1 o semestre. Aula número 012 Periféricos Comunicação Serial. Conhecer os princípios de comunicação serial

Gerência de Dispositivos. Adão de Melo Neto

Introdução. Hardware (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação. joseana@computacao.ufcg.edu.

Versão Portuguesa. Introdução. Instalação de Hardware. Adaptador Ethernet Powerline LC202 da Sweex de 200 Mbps

Interfaces: blindagem, ligação à terra e linhas de transmissão. Revisões. Interfaces: blindagem, ligação à terra e linhas de transmissão

7. Redes Locais Introdução. Redes de Comunicações/Computadores I Secção de Redes de Comunicação de Dados

Nível de Enlace. Nível de Enlace. Serviços. Serviços. Serviços. Serviços. Serviços oferecidos os nível de rede

TRANSDUTOR DE ENERGIA ELÉTRICA

Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I

Interface Serial. Prof. Adilson Gonzaga

Conexão de um Terminal à Porta de Console dos Switches Catalyst

Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída

Guia de Instalação do "AirPrint"

Do alto-nível ao assembly

DESVENDADO O TCP/IP. Prof. Me. Hélio Esperidião

PCS-2529 Introdução aos Processadores. Prof. Dr. Paulo Sérgio Cugnasca

Detecção de erros de comunicação de dados CRC

Transcrição:

S 1 Ligação Lógica (1º Trabalho Laboratorial) FEUP/DEEC RC / CDRC I 2005/06 MPR/JAR S 2 Descrição do Trabalho Objectivos» Implementar um protocolo (ou ligação dados)» Testar o protocolo com uma aplicação transferência ficheiros Ambiente senvolvimento» PC com Unix (LINUX)» Linguagem programação C» Portas série RS-232 (comunicação assíncrona) Avaliação» Contínua» Demonstração» Relatório

S 3 Configuração Teste PC PC Ligação Lógica Ligação Lógica Driver porta série (ttys1) Porta série assíncrona (RS-232) Driver porta série (ttys1) Porta série assíncrona (RS-232) S 4 Transmissão Série Assíncrona» Cada caracter é limitado por Start bit Stop bit (tipicamente 1 ou 2)» Cada caracter é constituído por 8 bits (D0 D7)» Parida Par número par 1s Ímpar número ímpar 1s Nenhuma (bit D7 usado para dados)» Taxa transmissão: 300 a 115200 bit/s

S 5 Sinais RS-232 nível físico entre computador ou terminal (DTE) e mom (DCE)» DTE (Data Terminal Equipment)» DCE (Data Circuit-Terminating Equipment) Conectores DB25 e DB9 sinal activo: sinais controlo (> + 3 V) sinais dados (< - 3 V) DTR (Data Terminal Ready) Computador ligado DSR (Data Set Ready) Mom ligado DCD (Data Carrier Detected) Mom tecta portadora na linha telefónica RI (Ring Indicator) Mom tecta ring RTS (Request to Send) Computador pronto a comunicar CTS (Clear To Send) Mom pronto a comunicar TD (Transmit data) Transmissão dados RD (Receive data) Recepção dados S 6 Ligações entre Equipamentos RD 2 2 RD TD 3 3 TD GND 5 5 GND Null Mom (9 pinos)

S 7 Drivers Unix» Características Software que gere um controlador hardware Conjunto rotinas baixo nível com execução privilegiada Resintes em memória (fazem parte do kernel) Interrupção hardware associada» Método acesso Mapeados no sistema ficheiros Unix (/v/hda1, /v/ttys0) Serviços oferecidos são semelhantes aos dos ficheiros (open, close, read, write)» Tipos drivers Caracter leitura e escrita no controlador feita em múltiplos caracteres acesso directo (dados não são guardados em buffers) Bloco leitura/escrita em múltiplos um bloco (bloco = 512 ou 1024 octetos) dados guardados em buffers e acesso aleatório Re leitura e escrita pacotes dados comprimento variável interface sockets S 8 Driver da Porta Série API API - Application Programming Interface API tcgetattr() tcsetattr() open() read() write() close()... /v/ttysx (x = 0, 1, 2, 3) Algumas funções da API Porta série int open (DEVICE, O_RDWR); /*retorna um scritor para ficheiro*/ int read (int scritorficheiro, char * buffer, int numchars); /*retorna o número caracteres lidos*/ int write (int scritorficheiro, char * buffer, int numchars); /*retorna o número caracteres escritos*/ int close (int scritorficheiro); int tcgetattr (int scritorficheiro, struct termios *termios_p); int tcflush (int scritorficheiro, int selectorfila); /*TCIFLUSH, TCOFLUSH ou TCIOFLUSH*/ int tcsetattr (int scritorficheiro, int modo, struct termios *termios_p);

S 9 Driver da Porta Série API Estrutura dados termios - permite configurar e guardar todos os parâmetros configuração da porta série struct termios { tcflag_t c_iflag; /*flags configuração da recepção*/ tcflag_t c_oflag; /*flags configuração da transmissão*/ tcflag_t c_cflag; /*flags controlo*/ tcflag_t c_lflag; /*flags configuração local*/ cc_t c_line; /*não usado */ cc_t c_cc[nccs] /*caracteres controlo; NCCS = 19*/ ; Exemplo: #fine BAUDRATE B38400 struct termios newtio; /* CS8: 8n1 (8 bits, sem bit parida,1 stopbit)*/ /* CLOCAL: ligação local, sem mom*/ /* CREAD: activa a recepção caracteres*/ newtio.c_cflag = BAUDRATE CS8 CLOCAL CREAD; /* IGNPAR: Ignora erros parida*/ /* ICRNL: Converte CR para NL*/ newtio.c_iflag = IGNPAR ICRNL; newtio.c_oflag = 0; /*Saída não processada*/ /* ICANON: activa modo entrada canónico, sactiva o eco e não envia sinais ao programa*/ newtio.c_lflag = ICANON; Tipos Recepção na Porta Série Canónica» read( ) retorna apenas linhas completas (terminadas por ASCII LF, EOF, EOL)» utilizada nos terminais S 10 Não canónica» read( ) retorna até um número máximo caracteres» permite configurar o tempo máximo entre caracteres» aquada para leitura grupos caracteres Assíncrona» read( ) retorna imediatamente e envia um sinal à aplicação quando termina» utilização um signal handler

S 11 Exemplos programas main() { Recepção canónica int fd,c, res; struct termios oldtio,newtio; char buf[255]; fd = open(/v/ttys1,o_rdonly O_NOCTTY); tcgetattr(fd,&oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B38400 CS8 CLOCAL CREAD; newtio.c_iflag = IGNPAR ICRNL; newtio.c_oflag = 0; newtio.c_lflag = ICANON; tcflush(fd, TCIFLUSH); tcsetattr(fd,tcsanow,&newtio); res = read(fd,buf,255); tcsetattr(fd,tcsanow,&oldtio); close(fd); main() { Recepção não canónica int fd,c, res; struct termios oldtio,newtio; char buf[255]; fd = open(argv[1], O_RDWR O_NOCTTY ); tcgetattr(fd,&oldtio); bzero(&newtio, sizeof(newtio)); newtio.c_cflag = B38400 CS8 CLOCAL CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; newtio.c_cc[vtime] = 0; /* temporizador entre caracteres*/ newtio.c_cc[vmin] = 5; /* bloqueia até ler 5 caracteres */ tcflush(fd, TCIFLUSH); tcsetattr(fd,tcsanow,&newtio); res = read(fd,buf,255); /*pelo menos 5 caracteres*/ tcsetattr(fd,tcsanow,&oldtio); close(fd); S 12 Exemplos programas Recepção assíncrona void signal_handler_io (int status); /*finição signal handler */ main() { /* claração variáveis e abertura do dispositivo série...*/ saio.sa_handler = signal_handler_io; saio.sa_flags = 0; saio.sa_restorer = NULL; /*obsoleto*/ sigaction(sigio,&saio,null); fcntl(fd, F_SETOWN, getpid()); fcntl(fd, F_SETFL, FASYNC); /* configuração da porta através da estrutura termios...*/ while (loop) { write(1, ".", 1);usleep(100000); /* após o sinal SIGIO, wait_flag = FALSE, existem dados na entrada para o read */ if (wait_flag==false) { read(fd,buf,255); wait_flag = TRUE; /*aguardar novos dados*/ /* configurar a porta com os valores iniciais e fechar...*/ void signal_handler_io (int status) { wait_flag = FALSE; Recepção múltipla main(){ int fd1, fd2; /* input sources 1 and 2 */ fd_set readfs; /* file scriptor set */ int maxfd, loop = 1; int loop=true; /* open_input_source opens a vice, sets the port correctly, and returns a file scriptor */ fd1 = open_input_source("/v/ttys1"); /* COM2 */ fd2 = open_input_source("/v/ttys2"); /* COM3 */ maxfd = MAX (fd1, fd2)+1; /*max bit entry (fd) to test*/ while (loop) { /* loop for input */ FD_SET(fd1, &readfs); /* set testing for source 1 */ FD_SET(fd2, &readfs); /* set testing for source 2 */ /* block until input becomes available */ select(maxfd, &readfs, NULL, NULL, NULL); if (FD_ISSET(fd1)) /* input from source 1 available */ handle_input_from_source1(); if (FD_ISSET(fd2)) /* input from source 2 available */ handle_input_from_source2();

S 13 Ligação Lógica Objectivo» Fornecer serviços à camada protocolar superior Exemplo: serviço confirmado (fiável) orientado às ligações Funções» Sincronismo trama dados organizados em tramas (framing) Alternativas: caracteres / flags início e fim Tamanho dos dados implícito ou indicado explicitamente» Estabelecimento / terminação da ligação» Confirmação recepção» Controlo erro Confirmação negativa / pedido retransmissão Temporizadores Números sequência permitem tectar omissões e duplicados Caso mais simples números sequência 0 e 1» Controlo fluxo (exemplos: Stop-and-Wait, Janela Deslizante) S 14 Formato e tipos tramas» Tramas Informação (I) F A C BCC D1 Dados DN BCC F F Flag A Campo Enreço BCC Campo Protecção C Campo Controlo 0 0 0 0 0 0 S 0 S = N(s)» Restantes tramas Supervisão (S) e Não Numeradas (U) F A C BCC F F A BCC C Flag Campo Enreço Campo Protecção Campo Controlo SET (set up) 0 0 0 0 0 0 1 1 DISC (disconnect) 0 0 0 0 1 0 1 1 UA (unnumbered acknowledgment) 0 0 0 0 0 1 1 1 RR (receiver ready / positive ACK) 0 0 R 0 0 0 0 1 REJ (reject / negative ACK) 0 0 R 0 0 1 0 1 R = N(r)

S 15 Pacotes e Tramas» O ficheiro a transmitir é fragmentado em pacotes que são transportados no campo dados tramas I Para além Pacotes Dados (que contêm fragmentos do ficheiro), o protocolo usa Pacotes Controlo O formato dos Pacotes ( Dados e Controlo) é finido adiante» Designa-se por Emissor a máquina que transmite o ficheiro e por Receptor a máquina que recebe o ficheiro Apenas o Emissor transmite Pacotes ( Dados ou Controlo) e portanto apenas o Emissor transmite tramas I» Quer o Emissor quer o Receptor enviam e recebem tramas Tramas limitação e cabeçalho» Todas as tramas são limitadas por flags (01111110)» Uma trama po ser iniciada com uma ou mais flags, o que ve ser tido em conta pelo mecanismo recepção tramas em cada máquina» Tramas I, SET e DISC são signadas Comandos e as restantes Respostas» Todas as tramas têm um cabeçalho com formato comum A (Campo Enreço) S 16 00000011 (0x03) em Comandos enviados pelo Emissor e respostas enviadas pelo Receptor 00000001 (0x01) em Comandos enviados pelo Receptor e respostas enviadas pelo Emissor C (Campo Controlo) fine o tipo trama e transporta números sequência N(s) em tramas I e N(r) em tramas Supervisão (RR, REJ) BCC (Block Check Character) tecção erros baseada em parida par sobre cada um dos bits dos campos do cabeçalho (incluindo BCC)

S 17 Tramas comandos» As tramas I têm um campo dados protegido por um BCC próprio (parida par sobre cada um dos bits dos octetos dados e do BCC)» Tramas com cabeçalho errado são ignoradas, sem qualquer acção» Tramas I com cabeçalho correcto mas com erros nos dados são scartadas e confirmadas negativamente (pedido retransmissão por meio REJ, antes time-out)» Tramas I, SET e DISC são protegidas por um temporizador em caso time-out, vem ser efectuadas duas tentativas retransmissão Transparência» Para evitar o falso reconhecimento uma flag no interior uma trama, é necessário um mecanismo que garanta transparência em HDLC é usado um mecanismo bit stuffing no protocolo PPP é o adoptado o formato da trama HDLC (limitação por flags), mas é usado um mecanismo character stuffing» No protocolo a implementar adopta-se o mecanismo usado em PPP, que recorre ao caracter escape 01111101 (0x7d) se no interior da trama ocorrer o caracter 01111110 (0x7e), isto é, o padrão que correspon a uma flag, o caracter é substituído pela sequência 0x7d 0x5e (caracter escape seguido do resultado do ou exclusivo do caracter substituído com o caracter 0x20) se no interior da trama ocorrer o caracter 01111101 (0x7d), isto é, o padrão que correspon ao caracter escape, o caracter é substituído pela sequência 0x7d 0x5d (caracter escape seguido do resultado do ou exclusivo do caracter substituído com o caracter 0x20) na geração do BCC são consirados apenas os caracteres originais, mesmo que algum (incluindo o próprio BCC) seja substituído por uma sequência escape a verificação do BCC é feita em relação aos caracteres originais, isto é, pois realizada a operação inversa (stuffing), caso tenha ocorrido a substituição qualquer caracter por uma sequência escape S 18

S 19 Fases do Ligação Lógica» Exemplo uma sequência típica tramas (sem erros) Emissor Receptor Estabelecimento UA SET Transferência Dados RR (Nr = 1) RR (Nr = 0) I (Ns = 0) I (Ns = 1) Terminação DISC DISC UA S 20 Transferência Dados Controlo fluxo» Stop-and-Wait Temporizador» Activado após o envio uma trama I, SET ou DISC» Desactivado após recepção uma resposta sem erro» Se excedido (time-out), obriga a retransmissão Retransmissão» Recepção confirmação negativa (REJ)» Temporizador excedido perda da trama enviada ou da sua confirmação» Duas (ou mais) tentativas retransmissão Protecção do cabeçalho e dados» Geração e verificação dos campos protecção (BCC) timeout timeout Emissor I, Ns = 0 RR, Nr = 1 I, Ns = 0 I, Ns = 0 RR, Nr = 1 Receptor

S 21 Interface - llopen() llread() llwrite() llclose() Interface protocolo-aplicação API /v/ttysx (x = 0, 1, 2, 3) Porta série S 22 Interface - Exemplos estruturas dados» struct applicationlayer { int filedescriptor; int status;» /*Descritor corresponnte à porta série*/ /*TRANSMITTER RECEIVER*/ struct linklayer { char port[20]; /*Dispositivo /v/ttysx, x = 0, 1, 2, 3*/ int baudrate; /*Velocida transmissão*/ unsigned int sequencenumber; /*Número sequência da trama: 0, 1*/ unsigned int timeout; /*Valor do temporizador: 1 s*/ unsigned int numtransmissions; /*Número tentativas em caso falha*/ char frame[max_size]; /*Trama*/

S 23 Interface - int llopen(int porta, TRANSMITTER RECEIVER) argumentos porta: COM1, COM2,... flag: TRANSMITTER ou RECEIVER retorno intificador valor negativo em caso erro Receptor Emissor Receptor llopen() llopen() (I) SET UA (II) Interface - int llwrite(int fd, char * buffer, int length) argumentos - fd: intificador da - buffer: array caracteres a transmitir - length: comprimento do array caracteres retorno - número caracteres escritos - valor negativo em caso erro S 24 int llread(int fd, char * buffer) argumentos - fd: intificador da - buffer: array caracteres recebidos retorno - comprimento do array (número caracteres lidos) - valor negativo em caso erro Emissor Receptor llwrite() write() read() I (Ns = 0, 1) RR (Nr = 0, 1) llread() read() write()

S 25 Interface - int llclose(int fd) argumentos - fd: intificador da retorno - valor positivo em caso sucesso - valor negativo em caso erro Emissor Receptor Receptor llclose() llclose() DISC DISC UA S 26 Teste PC1 Ficheiro imagem PC2 Ficheiro iamgem ligação ligação Driver porta série Driver porta série Porta série assíncrona Porta série assíncrona

Teste S 27 Preten-se senvolver um protocolo aplicação muito simples para transferência um ficheiro, usando o serviço fíável oferecido pelo protocolo ligação dados, e que permita evitar situações potencialmente ambíguas no receptor após conclusão da transferência do ficheiro e subsequente terminação da ligação dados Para o efeito a aplicação teste ve suportar dois tipos Pacotes» Pacotes Controlo (enviados pelo Emissor) para sinalizar o início e o fim da transferência do ficheiro» Pacotes Dados (enviados pelo Emissor) contendo fragmentos do ficheiro a transmitir O Pacote Controlo que sinaliza o início da transmissão (start) verá ter obrigatoriamente um campo com o tamanho do ficheiro e opcionalmente campos com o nome do ficheiro, permissões, etc. O Pacote Controlo que sinaliza o fim da transmissão (end) porá repetir a informação contida no pacote início transmissão Os Pacotes Dados contêm obrigatoriamente um campo (dois octetos) indicando o tamanho do respectivo campo dados (o tamanho máximo é fixado previamente), o que permite verificação adicional Pacotes do Nível Pacote Dados S 28 C L2 L1 P1 PK» C campo controlo (0)» P 1,... P K campo dados Pacote Controlo (K = 256 * L 2 + L 1 ) C T1 L1 V1 T2 L2 V2» C campo controlo (1 start; 2 end)» Cada parâmetro (tamanho, nome, permissões do ficheiro, etc.) é codificado na forma TLV (Type, Length, Value) T (um octeto) indica qual o parâmetro (0 tamanho, 1 nome, 2 permissões) L (um octeto) indica o tamanho em octetos do campo V V (número octetos igual ao valor L) valor do parâmetro