Projeto de Redes AJUDA !

Olá pessoal , então , é o seguinte, minha professora maluca , passou um projeto pra gente e o projeto consiste em :

  1. implementar usando java , um emulador das camadas de rede (aplicação , transporte, redes, enlace, fisica) para enviar um arquivo de um cliente para um servidor e vice-versa.

cada classe seria uma camada e o arquivo teria que passar por cada uma delas e receber o cabeçalho de cada classe etc , até ser enviado pro cliente.

A gente não faz a menor idéia de como fazer isso ou sequer começar, algum de vocês ja fizeram ou tem algum projeto parecido com isso ? se tiverem poderiam me ajudar? pfv isso vale 40% da minha nota

O enunciado é só esse? Não tem mais nada?

foi basicamente esse o enunciado que ela deu pra gente…o programa vai simular o trajeto do arquivo desde a camada de aplicação até a camada fisica, e vai receber todos os tratamentos/funções principais de cada camada

E qual o cabeçalho de cada camada? E o etc?

Os nomes das classes vocês já têm, ao menos isso poderiam ter feito.

o nome a gente ja fez , so que o resto.,.

vamos la

aplicação vai ser vc emulando um programa. como vc mandaria o arquivo X de um sistema para o outro? pode ser um protocolo extremamente simples como:

ARQUIVO: nome.do.arquivo
TAMANHO: 10

ola mundo

ai vc le a primeira linha e procura o cabeçalho “ARQUIVO” e ja sabe o nome da parada.
vc le a segunda linha e sabe o tamanho em bytes
uma linha em branco separa o cabeçalho do conteudo do arquivo em si

a responsa pode ser

STATUS: OK

recebido com sucesso. qq coisa diferente disso vc manda um erro

STATUS: NOK
MOTIVO: arquivo continua palavras de baixo calão e isso não presta

isso é a coisa mais basica. vc pode implementar outros headers mas isso é fundamentalmente textual.

vc pode optar por um formato binario também. boa sorte.

agora vamos pra camada de transporte. digamos q vc vai usar TCP. pra isso vc vai conectar o cliente no servidor. TCP é um protocolo complexo q envolve um three-way handshake com SYN / SYN-ACK / ACK. vc pode simplificar usando UDP ou outro protocolo mais simples. Aqui tem um exemplo de um pacote TCP

e um UDP:

vai aprender a escovar bits.

vc vai ter q pegar o seu protocolo de aplicação e enviar em TCP ou UDP ou qq outra coisa. provavelmente vc vai ter q cortar o seu dado original em varios se for muito grande ( no caso de vc mandar aquele video blue ray dos vingadores ).

não acabou ai. digamos q vc vai mandar por rede IP. se for IPv4

quando vc envia, vc vai agregando os dados, IP vai transportar os bytes de um pacote TCP/UDP que vai ter um pedaço do seu protocolo de aplicação que vai ter um pedaço do seu arquivo original.

o ip vai enviar de uma maquina pra outra. o protocolo de transporte vai casar a comunicação, portas, etc. a aplicação fala com a sua aplicação que envia e recebe arquivos.

enlace e fisico. ai tem q estudar. enlace eu acho q vc pode dar uma olhada no Ethernet / MAC porem eles podem ser muito complexos. é um trabalho bem interessante esse!

enlace vai garantir q os dados fisicos não foram corrompidos ( por exemplo vc usa wifi e teve uma interferencia ) ai precisa pedir uma retransmissão.

o que é estranho é: como vc vai simular as condições fora do “caminho feliz”? vc precisa simular algum problema em alguma camada? tipo o servidor ser desconectado, pacote recusado, etc?

se não precisa nada disso, manda bala, estuda um pouco mais e implemente sem medo de ser feliz.

não tenha medo de redes. meta as caras

1 curtida

um detalhe

se vc for implantar a rede fisica, cabe ai discutir com o seu professor uns detalhes.

a forma mais simples q eu consigo imaginar é uma rede serial, onde vc define uma taxa de envio de bits por segundo entre as partes.

digamos q seja um bit por segundo. grosso modo vc tem que ler o valor de um bit com a frequencia definida.

se for 1 bit por segundo, vc vai fazer

segundo 0: li 0
segundo 1: li 0
segundo 2: li 1
segundo 3: li 0

se o cara enviar mais rapido que vc lê, vai perder dados.
se ele envia mais lento do que vc lê, vc vai adicionar bits.

é por isso que vc tem outros mecanismos de controle para assegurar a correta transferencia de dados. um cabo serial não é um fio: são varios ( veja aqui https://www.lammertbies.nl/comm/cable/RS-232.html )

fibra otica se não me engano pode enviar 3 bits pra representar um bit. se um bit flipar no caminho, vc pode detectar e corrigir.

se 2 bits fliparem os checksum não vão bater e tem q pedir pra retransmitir.

eu conversaria com esse professor pq dependendo do nivel de detalhe isso é BEM complexo.

Talvez vc possa assumir q os dados simples passam de um lado pro outro.

Bom dia!

Cara eu fiz um na faculdade tem um tempo já… era parecido…

Na época fizemos com socket… da uma pesquisada em “conexão cliente-servidor via socket”.

Não sei te falar se hoje em dia é assim, mas na época da facul deu certo.

Olha aqui…

Abraço

valeu cara , a gente mostrou um exemplo desse jeito pra ela ai, so que ela disse que nao tinha camada nenhuma, e que a gente tava proibido de usar socket pra fazer conexão … $%%¨¨###
:face_with_symbols_over_mouth::face_with_symbols_over_mouth:

ai é que ta , ela é cheia dos detalhes, ela nao quer todos mas as principais ela quer ou seja , as mais complicadas, 3 semestres antes do nosso tentaram e falharam, ela deu isso ai com 1 mês de praso pra gente fazer, problema é que ela nao tira a merda do tempo das aulas pra deixar a gente focar no projeto, fica entupindo a gente de conteudo, prova e trabalho.

Se não aguenta, pede leite, cara!
Acha que no mundo corporativo vai ser diferente? Acha que vão te passar um projeto e falar “fica de boa aí, quando vocês terminarem, entrega, sem pressa”?
É muito comum esse tipo de coisa. Especificações totalmente fora de contexto e prazos muito apertados. Ela não é louca, ela está fazendo com 100% de assertividade o papel de usuário/cliente.

Eu insisto que você precisa passar mais detalhes sobre isso. Se não pode usar socket, ela quer qual protocolo? SOAP? Rest? Ou vocês nem perguntaram isso a ela?
Passar de camada em camada, ok, simples e fácil. O problema são os detalhes que estão muito rasos, para não dizer, inexistentes.
Todas estas informações são imprescindíveis para fazer a coisa funcionar.

eu conversaria com esse professor pq dependendo do nivel de detalhe isso é BEM complexo.

cara entenda, a gente ta na matéria introdutória de redes, a gente nao ta na matéria avançada nao, isso ai ainda é redes I, a gente ta aprendendo como as coisas funcionam o que é cada coisa, esse projeto ai é nivel de materia final .
E quanto aos detalhes ela não disse nada alem do que eu passei pra vocês cara , ela até começou a inventar de querer que a gente mandasse os arquivos através de ondas sonoras O 0 O.

Eu sei muito bem que no mundo corporativo é uma selva porém o teu cliente na maioria das vezes, não entende merda de nada de programação , ela é uma professora, e se ela passa um projeto em um nivel completamente diferente da materia que ela ta dando , deveria ter pelo menos a decencia de auxiliar ja que ela esta fazendo isso mais por ela do que pela gente.

Camada OSI é o básico do básico para redes.

Para todo e qualquer questionamento sobre isso, sugiro falar com a coordenação do curso, questionar se o conteúdo é compatível com o que vocês deveriam estar estudando e etc.

Agora, sem esses detalhes, impossível fazer qualquer coisa, ainda mais que não se pode usar sockets.

Sim , concordo plenamente , mas as funções de encapsulamento, calculos de detecção de erros como verificação de paridade ou crc alem de outras coisas nao sao, e é essas outras coisas que ela quer em cada camada de acordo com suas funções

pois é , foi assim que todo mundo ficou, ela diz o que a gente deve fazer , mas não diz como , igual no socket, disse que nao queria socket , mas nao falou o que queria, e a mulher é doutora em redes pô , isso é sacanagem. falta 1 semana pra acabar o semestre…

Como que ela não passou detalhes e era basicamente isso, se você sequer citou metade do que escreveu agora em nenhum momento anterior?

Você disse que recebeu o tema/enunciado com um mês de prazo. Poderia ter ido atrás antes.

Cara, eu achei uma biblioteca chamada jpcap. Ela é capaz de capturar pacotes de rede e é construída em java.
Eu nunca utilizei (sendo bem sincero, nunca precisei nem desenvolver um socket profissionalmente), mas, creio que deve ser uma opção.

por que a gente tinha mostrado uma versão basica pra ela como exemplo pra ver como ela iria reagir , e ela nao quis , e eu meio que disse isso quando falei “funções principais” ,

verdade cara eu deveria ter ido atrás antes, na verdade eu fui e tentei com o pessoal aqui so que nao deu certo ja que ela queria que a gente enviasse o arquivo atraves das ondas de som , e também nao estavamos conseguindo fazer a “divisão” do arquivo em pacotes menores e aplicar as outras funções de cada camada.

sem contar que a gente esta com outros 4 projetos (banco de dados, web, engenharia de software e estatistica) então nao dava pra dedicar tempo exclusivo pra esse projeto

Cara, não sei como isso aconteceu, porém, todas as vezes que eu recebi qualquer tipo de avaliação, prova ou trabalho, isso vinha por escrito, impresso ou email. Nunca recebi instruções orais para qualquer coisa nesse sentido. Ah, e sempre tinha recomendação de bibliografia.
Assim sendo, creio que ela foi irônica nessa declaração.

Usando um ByteArrayOutputStream e enviando partes do arquivo como array de bytes não funcionou? Estranho isso.

De novo, volto a afirmar que, uma vez fora da graduação e atuando como profissional, você vai encarar este tipo de circunstância praticamente todos os dias.

Além disso, todo mundo aqui (que fez graduação, obviamente) passou por coisas semelhantes, talvez, até num tempo em que não havia google ou internet, então, isso não comove.

Estranho que nenhum outro tópico semelhante foi apresentado aqui, ao menos, nos últimos meses. Dada a suposta dificuldade e as restrições, não seria difícil recordar.

eu tinha um medo ANIMAL de redes ate receber um desafio interessante: escrever um driver para um banco de dados chamado Riak

o resultado foi um projetinho em Perl bem bacanudo e rapido. no processo eu aprendi muita coisa do sistema operacional (precisava de um timeout de I/O e normalmente vc encontra exposto um timeout para conectar)

tipo de cara eu penso em como um projeto desses seria maneirissimo. por outro eu levei um bom tempo e eu lidei com apenas uma camada.

infelizmente hoje é dificil encontrar informações sobre coisas do passado mas nos anos 70 e 80 era possivel enviar arquivos entre paises usando computadores com recursos hoje considerados ridiculos. armazenar arquivo em fita k7 era algo trivial nos anos 80 com os primeiros computadores e o processo de transformar bits em som ele esta ligado a armazenamento, a comunicação (modem) e ate mesmo para entender coisas como o mp3

o nosso trabalho eh gerenciar complexidade. se eu deixar o meu chefe vai pedir tudo o que precisa e o que não precisa nos projetos, então vale conseguir priorizar algumas coisas. eu tentaria implementar camada por camada ate não conseguir avançar e ai compra um presente bem bacana pro professor.

pois é , foi tudo oral acho que isso que deixou tudo complicado, e considerando que ela ja passou isso pra 3 turmas anteriores ela deveria ter pelo menos um embolso do que ela queria e como ela queria

A gente até conseguiu dividir mas na hora de juntar depois que passava por um ou outro tratamento bugava

não tô tentando comover , só tô expondo os fatos, eu sei que no mundo profissional vou encarar circustancias assim , mas na teoria eu ja vou estar formado e o cara que me contratar espera que eu atenda suas necessidade por que eu seria formado. Só que aqui na faculdade o cara ta pra aprender e se capacitar . A gente ja chegou até a fazer programações em assembly e outras coisas de um certo nivel de complexidade , mas o professor dava uma direção , um contexto e ao longo do caminho o cara tava la. mas não foi assim com essa professora e esse projeto

kkk valeu pelo incentivo, mas acredite em mim, nenhum presente convence aquela mulher