1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Criar um novo protocolo

Discussão em 'Programação' iniciada por askno, 18 de Abril de 2009. (Respostas: 7; Visualizações: 1082)

  1. askno

    askno Power Member

    Boas então é o seguinte eu queria fazer um melhoramento do protocolo UDP, oriente a conexao, fazer controlo de gestao de erros etc.. Mas agora tão-me a surgir algumas duvidas do tipo
    É susposto usar sockets para isso?
    Crio uma socket datagram e depois faço umas funções extra do tipo connect e assim?

    É que eu repensei o proprio protocolo do tipo adicionei informações ao protocolo e ficou assim

    [​IMG]

    Mas tipo se criar uma datagram socket corre ja sobre udp certo?
    Tou um bocado confuso e os meus conhecimentos em termos de sockets é mais em java (jpcap e as classes Socket e DatagramSocket da sun)

    Se alguem me puder dar umas luzes agradecia! Abraços
     
  2. AdaXi

    AdaXi Power Member

    Se queres um protocolo orientado connexão e com gestão de controlo de erros, porque não escolhes TCP que já faz isso tudo ?
     
  3. askno

    askno Power Member

    Boas, porque é um trabalho practico, o objectivo é mm aprender a fazer um protocolo! Abraço
     
  4. AdaXi

    AdaXi Power Member

  5. nsilvio

    nsilvio Power Member


    O protocolo tem de ser ao nível de transporte de dados?
    Porque não fazer algo de alto nível? Como por exemplo, o protocolo HTTP!

    Tens aqui um site para te entreteres :)

    http://www.eventhelix.com/Realtimemantra/Networking/


    Nuno
     
  6. zbenta

    zbenta Power Member

    Boas,

    Podes sempre optar por confirmar a recepção das mensagens ponto a ponto.
    Utiliza algo do género do tcp.
    Podes juntar um nr de pacote do género nr. 1 á mensagem enviada e aguardas que o outro lado te confirme a recepção desse pacote para poderes enviar outro.
    Isto pode-te tratar o problema da perda de pacotes.
    Agora os erros, podes empre tentar encontrar uma forma de fazer um hash da informação que envias e depois confirmas isso no lado que recebeu o pacote.
    Estou para aqui com muita treta e acho que se calhar estou a complicar.
    Dá uma vista de olhos ao protocolo tcp e tira algumas ideias.
     
  7. askno

    askno Power Member

    Boas obrigado pelas ajudas, o objectivo do trabalho é fazer um udp melhorado, eu sei que posso usar tcp mas ai nao fazia sentido fazer este trabalho, o objectivo é ficar a saber e inventar funções que controlem os erros etc e tal!

    Entretanto perguntei ao meu prof e ele explicou fixe, ja agora deixo aqui a explicação...
    ------------------------------------------------------------------------

    A libpcap é sempre uma opção estável para apanhar e gerar pacotes de qualquer tipo... é a usada na maioria dos sniffers...

    Existe uma alternativa que é usar sockets do tipo RAW (raw sockets). Estes sockets permitem passar totalmente por cima do encapsulamento habitual TCP/IP... dá margem de manobra para a aplicação criar pacotes de qualquer tipo embora de forma mais trabalhosa pois é preciso lidar com todos os cabeçalhos de forma correcta:

    sockd = socket(AF_INET,SOCK_RAW,<protocol>);

    Com isto consegue mandar qualquer pacote... e poderia definir um pacote UDP++ sobre IP (UDP++ -> IP -> ... ) com um tipo especial próprio.

    Os raw sockets são muito dependentes do sistema operativo. Pode haver diferenças entre BSD e Linux... e muitas limitações no Windows (porque é muito usado para Spoofing!).

    Google "Raw_IP_Networking_FAQ" para ter uma
    ideia...
     
    Última edição: 20 de Abril de 2009
  8. napalm

    napalm Power Member

    Yup crias sockets RAW, isto é, tens acesso ao payload completo do pacote IP e podes lá colocar o que bem entenderes.
    Obviamente que terás de ter pelo menos o Source Port e Destination Port que estão no TCP e UDP, mas de qualquer forma podes colocar tudo da forma que quiseres.
     

Partilhar esta Página