
Envoyé par
juve1897
Mon but est justement de detecter les desequencements(en numerotant les trames) et les erreurs(en ajoutant un checksum) en ajoutant ces informations(num+checksum) dans le champs data udp.
Mais ne connaissant pas la taille des trames ni comment elles sont decoupées je ne sais pas comment ajouter ces infos.
Je précise que ce n'est pas par culture personnel mais pour un projet.
Merci.
Si tu veux ajouter un couche de protocole audessu de UDP, (comme TFTP, par exemple), libre à toi, mais les datagrams (paquets de données) seront de toutes façons reçus comme ils ont été émis. Par contre, oui, il peut en manquer un, et dans ce cas, la numérotation peut avoir un sens.
Dans ce cas, prévois une encapsulation dans le genre :
[N° de séquence | taille | données | checksum]
(pas sûr que le checksum soit utile, IP ne peut pas faire d'erreur en principe...)
Mais comme c'est une couche supérieure, c'est à toi de faire ce travail.
Par exemple, tu as un bloc de 2 Mo a transférer en UDP.
Tu décides, pour des raisons de compromis entre sécurité et rapidité, que les blocs font un maximum de 16k.
Tu définis (MSB en tête) :
[0..1] NFRAME : Numéro de trame (16-bit)
[2..3] LDATA : Longueur des données (16-bit)
[4..4 + LDATA] DATA : (Données)
[4 + LDATA+1 .. 4 + LDATA+2] CHKSUM : Checksum (16-bit)
et tu découpes le bloc à émettre en autant de trames numérotées que nécessaire et que tu envoies avec sendto().
Il est peut être intéressant, selon le contexte, de transmettre aussi au début une trame d'info qui contient
- la longueur des données à émettre
- le checksum des données (32-bit)
- le nom du fichier, les droits...
Partager