Relatório - Redes
Por: Evien Oliveira • 28/9/2016 • Relatório de pesquisa • 2.651 Palavras (11 Páginas) • 323 Visualizações
1. Introdução
Dentre as camadas do modelo OSI que regem o estudo de redes de computadores, a camada de transporte é a responsável por transferir dados de um ponto a outro de uma rede de internet por meio de pacotes. Dentre os protocolos de tal camada, efetuou-se a análise do funcionamento de dois deles: o UDP e o TCP. Estes se distinguem na sua estrutura e a utilização de um ou de outro depende de sua aplicação e seu objetivo principal. O protocolo UDP (User Datagram Protocol) funciona de maneira simples se comparado ao TCP, contudo o envio de pacotes não é confiável, pois ao utiliza-lo, não há garantia que os pacotes serão entregues ao destinatário, apesar de existir a possibilidade de implementar aplicações que o deixe confiável. Esse protocolo não é orientado a conexão. Já o TCP (Transmission Control Protocol) tem uma transmissão confiável, pois nele há controle de fluxo de dados, confirmação de conexão e confirmação de entrega de pacotes, ou seja, para aplicações que necessitam que todo o pacote seja entregue ao destinatário, essa pode ser a opção melhor.
2. Desenvolvimento
3. User Datagram Protocol (UDP)
A partir de um socket UDP em aplicação Java, foram efetuados testes de funcionamento, tanto no servidor como no Cliente.
3.1 Execuções do cliente e servidor
O servidor cria uma variável do tipo datagrama para poder receber os dados do cliente que se conectar. A partir disso, inicia-se um loop infinito para que ele fique sempre esperando algum cliente. Quando um cliente se comunica com o servidor, ele executa a aplicação e retorna para o servidor a resposta. Não há qualquer conexão, e, portanto, não há confirmação de entrega de nenhuma das partes.
Já o Cliente cria uma variável tipo datagrama para enviar uma mensagem. No programa, é descrito o IP do servidor e a porta na qual a mensagem será entregue. Por fim, o cliente recebe a resposta e finaliza o programa.
3.2 Execuções do cliente antes do servidor
Quando se executava apenas o cliente, a aplicação rodava sem problemas, porém não se obtinha resposta de um servidor. Ao executar o servidor, o mesmo passava a aguardar conexão, mas o cliente continuava rodando, sem alteração, pois não havia uma conexão entre as aplicações. Apenas quando o cliente enviava uma mensagem, o servidor respondia. Quando um cliente UDP envia pacotes ao servidor, este recebe e executa sua aplicação. Não há uma conexão estabelecida e no fim da aplicação cliente, a conexão é fechada.
3.3 Execuções com portas distintas
Se a porta declarada no servidor for diferente da porta do cliente, ambos executam normalmente, mas não estabelecem conexão, mesmo após o envio de dados, o cliente não recebe retorno do servidor, pois direcionou os dados a outra porta.
3.4 Testes de comunicação entre máquinas diferentes
Para estabelecer conexão com outras máquinas, bastou que os usuários envolvidos conhecessem o IP da máquina de destino e alterasse no programa. Os testes ocorreram como na própria máquina e não houve congestionamento de dados ao enviar várias mensagens de máquinas diferentes ao mesmo tempo.
3.6 Modificações: enviar mais de uma mensagem ao servidor
Para que seja possível enviar mais de uma mensagem ao servidor pelo Protocolo UDP, basta modificar o cliente, para que ele não finalize após a primeira mensagem e adeque a aplicação Java da melhor forma possível. Como não há estabelecimento de conexão previa entre servidor e cliente, o servidor não necessita ser alterado. Neste caso, bastou adicionar o laço “while (true)” no código do programa:
package socketudp;
// created on 29/09/2010 at 22:30import java.io.*;
import java.io.*;
import java.net.*;
class UDPClient
{
public static void main(String args[]) throws Exception
{
while (true)
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("127.0.0.1");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("Do servidor:" + modifiedSentence);
clientSocket.close();
}
}
}
3.7 Modificações: bloquear resposta do servidor a um usuário indesejado
Para que o servidor não receba pacotes de um ou mais clientes específicos, é possível alterar o programa para que isso não aconteça, através do IP. A aplicação Java foi alterada para que isso fosse possível, com o exemplo de IP “/172.17.13.249”.
if (!"/172.17.13.249".equals(IPSTRING)){
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
...