Executando verificação de segurança...
2

[Repost] - PRUDP: Escrevendo um protocolo de rede do Nintendo 3DS

Nintendo Logo

Sobre o protocolo PRUDP

PRUDP é um protocolo da camada de transporte baseado no UDP cujo objetivo é enviar pacotes UDP de maneira confiável e segura. Existem duas versões deste protocolo (V0 e V1), mas são bastante semelhantes. A principal diferença está na codificação dos pacotes. Todos os valores são codificados em ordem de bytes little endian.

No Nintendo Switch, o NEX usa uma conexão WebSocket em vez de UDP e a codificação 'Lite' é usada.

Sessão PRUDP

Aperto de mão 1 → af a1 40 00 00 00 00 00 00 00 00 00 00 00 00 97

Aperto de mão 1 ← a1 af 10 00 00 00 00 00 00 00 00 5f 22 68 ea 3a

Aperto de mão 2 → af a1 61 00 18 5f 22 68 ea 01 00 d4 d6 91 e8 c9

Aperto de mão 2 ← a1 af 11 00 50 d4 d6 91 e8 01 00 00 00 00 00 de

Enviar dados → af a1 62 00 18 26 b4 01 a1 02 00 00 (25 bytes de carga criptografada) ef

Reconhecer ← a1 de 12 00 50 78 56 34 12 02 00 00 d1

Enviar dados ← a1 af 62 00 50 67 dd f9 c3 01 00 00 (255 bytes de carga criptografada) 03

Reconhecer → af a1 12 00 18 78 56 34 12 01 00 00 97

Enviar dados → af a1 62 00 18 8d 58 91 c0 03 00 00 (21 bytes de carga criptografada) fa

Reconhecer ← a1 de 12 00 50 78 56 34 12 03 00 00 d2

Enviar dados ← a1 af 62 00 50 a9 c5 fa 2e 02 00 00 (130 bytes de carga criptografada) 54

Reconhecer → af a1 12 00 18 78 56 34 12 02 00 00 98

Desligar → af a1 63 00 18 5f 22 68 ea 04 00 aa

Desligar ← a1 af 13 00 50 d4 d6 91 e8 04 00 e2

Estrutura do pacote PRUDP

DeslocamentoDescrição
0x0Fonte
0x1Destino
0x2Tipo e sinalizadores
0x4ID da sessão
0x5Assinatura do pacote
0x9ID de sequência

Sobre udp.h

O arquivo de cabeçalho "udp.h" em sistemas BSD fornece definições e estruturas para trabalhar com o User Datagram Protocol (UDP) na camada de transporte do modelo de rede do Internet Protocol (IP). Ele define a estrutura do cabeçalho UDP e constantes relacionadas, como números de porta e protocolo UDP, bem como protótipos de função para várias operações UDP, como envio e recebimento de datagramas UDP. O arquivo de cabeçalho também inclui macros para lidar com a ordenação de bytes, o que é importante para garantir a interoperabilidade entre diferentes arquiteturas de computador que usam diferentes ordens de bytes.

Esta estrutura pode ser usada para acessar os diferentes campos de um cabeçalho UDP em um programa C

estrutura udphdr {
u_short uh_sport; /* porta de origem */
u_short uh_dport; /* Porto de destino */
u_short uh_ulen; /* comprimento do udp */
u_short uh_sum; /* soma de verificação udp */
};

A estrutura contém quatro campos:

  1. "uh_sport" é um número inteiro não assinado de 16 bits que representa o número da porta de origem do pacote UDP.

2 ."uh_dport" é um número inteiro não assinado de 16 bits que representa o número da porta de destino do pacote UDP.

  1. "uh_ulen" é um número inteiro não assinado de 16 bits que representa o comprimento do pacote UDP (incluindo o cabeçalho e os dados).

  2. "uh_sum" é um número inteiro não assinado de 16 bits que representa a soma de verificação do pacote UDP.

Cabeçalho PRUPD em C

Este código está definindo uma estrutura de linguagem C chamada prudphdr, que representa o cabeçalho do pacote PRUDP (Reliable Datagram Protocol da Nintendo). A estrutura contém o


estrutura prudphdr {

     uint16_t uh_sport; /* reescrita da porta de origem (C 99 ) */
     uint16_t uh_dport; /* Porto de destino */
     uint16_t uh_ulen; /* comprimento do pruudp */
     uint8_t uh_sum; /* soma de verificação prudp reescrita para 8 bits */
     uint8_t uh_type; /* prudp digita mensagem */
     uint16_t uh_seq_num; /* pacote de número seq prudp */
     uint16_t uh_session_id; /* identificação de sessão */
     uint32_t uh_timestamp;
     uint16_t uh_payload_size; /* tamanho da carga útil para prdup */

};

C99

C99 é um padrão para a linguagem de programação C, publicado pela Organização Internacional de Padronização (ISO) em 1999. Ele introduziu vários novos recursos e melhorias na linguagem.
C99 também fez diversas alterações e esclarecimentos na sintaxe e semântica da linguagem. A padronização do C99 ajudou a aumentar a portabilidade e a confiabilidade do código C, pois forneceu uma especificação de linguagem mais consistente e previsível para os desenvolvedores seguirem.

https://www.3dbrew.org/wiki/PRUDP#:~:text=PRUDP%20is%20a%20third%2Dparty,numbers%20and%20acknowledgement%20within%20UDP.
https://github.com/kinnay/NintendoClients/wiki/PRUDP-Protocol
https://svnweb.freebsd.org/base/stable/10/sys/netinet/udp.h?view=log

Carregando publicação patrocinada...