Criar um novo protocolo

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

udp.png


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
 
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 ?
 
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.
 
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:
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...
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.
 
Back
Topo