PTC29008: Projeto 1: um protocolo de comunicação
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;
}
|
Configuração no VirtualBox
O transceiver deve ser conectado a porta USB do computador. O Linux o reconhece e cria o arquivo de dispositivo /dev/ttyUSB0 a ele associado. Com isso a máquina virtual VirtualBox deve ser configurada da seguinte forma:
- Habilitar a primeira porta serial (COM1)
- O modo dessa serial deve ser Dispositivo no hospedeiro
- O caminho do dispositivo deve ser /dev/ttyUSB0
TAREFA: início do protocolo de enlace
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 pode ter entre 8 e 512 bytes. Em seguida, use-as para transmitir um pequeno arquivo através do enlace sem-fio.
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.