Mudanças entre as edições de "PTC29008: Projeto 1: um protocolo de comunicação"
Linha 93: | Linha 93: | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | <!-- | ||
== Configuração no VirtualBox == | == Configuração no VirtualBox == | ||
Linha 123: | Linha 124: | ||
For a host port number higher than 9, the naming \\.\comX where X is the port number, is required. This can also be used for a one digit port number. | For a host port number higher than 9, the naming \\.\comX where X is the port number, is required. This can also be used for a one digit port number. | ||
{{collapse bottom}} | {{collapse bottom}} | ||
+ | --> | ||
= TAREFA: início do protocolo de enlace = | = TAREFA: início do protocolo de enlace = |
Edição das 18h24min de 1 de agosto de 2018
Um protocolo de comunicação está relacionado aos mecanismos necessários para a entrega de mensagens entre duas aplicações quaisquer. Considerando uma arquitetura de redes em camadas como TCP/IP, protocolos de comunicação correspondem às camadas de enlace até transporte. Questões como garantia de entrega, controle de sequência, tratamento de erros, sincronização, estabelecimento e término de sessão, multiplexação e delimitação de mensagens, entre possivelmente outras, fazem parte do projeto de tais protocolos. Para introduzir o projeto de um protocolo de comunicação, o primeiro projeto da disciplina envolve um protocolo para estabelecimento de enlace sem-fio ponto-a-ponto.
Considere o caso de uma nova interface de rede sem-fio composta por um transceiver RF capaz de transmitir a distâncias de até 1 km. No caso de distâncias como essa, a taxa de transmissão possível de ser obtida é de 2400 bps, porém distâncias menores possibilitam taxas maiores, até um máximo de 19200 bps. Esse transceiver pode ser usado como uma interface serial do tipo UART. Portanto, com ele podem-se criar enlaces de média distância e baixas taxas de transmissão.
O transceiver RF usado como UART proporciona uma camada física, cuja interface de acesso a serviço oferece operações de envio e recepção de bytes. Nenhuma facilidade para delimitação de mensagens, endereçamento, sincronização e tratamento de erros é fornecida. De fato, tais serviços devem ser implementados em um protocolo de enlace que use esse transceiver como camada física.
O projeto 1 envolve o desenvolvimento de um protocolo de comunicação usando esse transceiver RF, de forma a oferecer um serviço de comunicação com essas características.
O transceiver RF APC 220
O transceiver RF a ser utilizado se chama APC 220. Alguns documentos podem ser úteis:
Um primeiro experimento
O primeiro contato com o transceiver RF envolve escrever um programa que transmita a mensagem Hello world! de um computador a outro usando um enlace sem-fio. Para isso, deve-se:
- Configurar dois transceivers RF
- Conectá-los a dois computadores diferentes usando adaptadores USB
- Testar a comunicação usando programa para comunicação serial (ex: gtkterm, picocom, minicom). OBS: ver esta observação sobre um detalhe quanto ao uso do transceiver via USB.
- Escrever um programa que se comunique por meio dos transceivers. Para isso podem ser úteis:
A serial modelada como uma classe C++ |
---|
#ifndef SERIAL_H
#define SERIAL_H
#include <termios.h>
class Serial {
public:
Serial();
Serial(const char * path, int rate);
Serial(const Serial& orig);
virtual ~Serial();
int get() { return tty_fd;}
bool cca();
int write(const char * buffer, int len);
int read(char * buffer, int len);
int read(char * buffer, int len, bool block);
char read_byte();
private:
int tty_fd;
};
#endif /* SERIAL_H */
#include <iostream>
#include "Serial.h"
using namespace std;
int main() {
Serial rf("/dev/ttyUSB0", B9600);
string msg = "um teste ...\r\n";
char buffer[32];
int n = rf.write(msg.c_str(), msg.size());
cout << "Enviou " << n << " bytes" << endl;
n = rf.read(buffer, 32);
cout << "Recebeu " << n << " bytes: ";
cout.write(buffer, n);
cout << endl;
}
|
TAREFA: início do protocolo de enlace
- DICA: Ver capítulo 11 do livro "Comunicação de Dados e Redes de Computadores", de Behrouz Forouzan, ou capítulo 5 do livro "Redes de Computadores" de Andrew Tanenbaum.
Implemente a delimitação de mensagens do seu protocolo de enlace, de forma que mensagens de tamanho variável possam ser transmitidas e corretamente recebidas. Essas mensagens podem ter até 1024 bytes. Em seguida, use-as para transmitir um pequeno arquivo através do enlace sem-fio.
Para testar o protocolo será usado um programa que emula um link serial. O transceiver RF será usado quando cada funcionalidade do protocolo estiver funcionando nesse emulador. Isso facilita o desenvolvimento do protocolo, pois é mais simples e ágil testar comunicações em um mesmo computador.
Emulador de link serial
O programa serialemu emula um link serial com determinada taxa de bits, BER e atraso de propagação. Para usá-lo deve-se fazer o seguinte:
- Obtenha o código-fonte do serialemu
- Descompacte o arquivo Serialemu.zip, e entre no subdiretório Serialemu.
- Compile-o com este comando:
aluno@M2:~/Serialemu$ make
- Copie o programa compilado para algum subdiretório mais conveniente ... por exemplo, /home/aluno, e depois mude para esse subdiretório:
aluno@M2:~/Serialemu$ cp -a dist/Debug/GNU-Linux/serialemu /home/aluno/ aluno@M2:~/Serialemu$ cd /home/aluno aluno@M2:~/$
- Execute-o de forma que ele apresente suas opções de execução:
aluno@M2:~$ ./serialemu -h Uso: ./serialemu [-b BER][-a atraso][-f][-B taxa_bits] | -h BER: taxa de erro de bit, que deve estar no intervalo [0,1] atraso: atraso de propagação, em milissegundos. taxa_bits: taxa de bits em bits/segundo -f: executa em primeiro plano (nao faz fork)
- Execute-o então da forma desejada, selecionando a taxa de bits (default: ilimitada), BER (default: 0) e atraso de propagação (default: 0). O serialemu automaticamente vai para segundo plano (daemonize), liberando o terminal. Ex: ... e anote os dois caminhos informados pelo serialemu: eles são as duas portas seriais que correspondem às pontas do link serial emulado.
aluno@M2:~$ ./serialemu -B 9600 /dev/pts/17 /dev/pts/2 aluno@M2:~$
- Execute seu protocolo usando essas portas seriais virtuais.
Mesma que se opte pelo uso do emulador de serial, deve-se notar que, ao final, o protocolo deve ser demonstrado na plataforma Linux com o transceiver RF. Assim, o uso do emulador de serial tem por finalidade somente facilitar o desenvolvimento dos mecanismos básicos do protocolo.