ÉCOLE DE TECHNOLOGIE SUPÉRIEURE DÉPARTEMENT DE GÉNIE DE LA PRODUCTION AUTOMATISÉE GPA-785 Automne 2007 Professeur : Mohamed Chériet Chargé de Laboratoire : Ludovic Felten Laboratoire #2 TÉLÉINFORMATIQUE ET RÉSEAUX APPLICATION DE PARTAGE DE PHOTOS OBJECTIFS : Vous devez réaliser un protocole de communication permettant d effectuer le transfert de photos entre 2 ordinateurs, de manière fiable et sécurisée. Une architecture client/serveur sera encore privilégiée. Sur demande du client, le serveur envoie le contenu d un ou plusieurs fichiers de données (de taille quelconque) au format d images standard (bmp, jpg, gif). Le client recevant les données du serveur, doit reconstituer les données, les conserver dans le ou les fichiers correspondants et les afficher. Votre serveur agira comme une banque de données centrale de laquelle on vient télécharger des images. Les routines d'interfaces en C développées dans le laboratoire #1 vous seront utiles, car elles permettent l'initialisation d un lien entre deux processus, puis l envoi et la réception de données. Une modification des fonctions d envoi et de réception permettra de rendre les transferts inconsistants. Les trames seront susceptibles, soit de retards à la réception, soit de pertes ou d erreurs de retransmission détectables. C est pour cette raison que les transferts doivent être fiabilisés. 1
DESCRIPTION DU PROTOCOLE : SERVEUR CLIENT Application Lecture du fichier Application Écriture du fichier Présentation Recomposition de l image Session Encryptage Session Décryptage Transport Calcul du checksum Transport Vérification du checksum Réseau Création du paquet IP Réseau Ouverture du paquet IP Envoi couches 1 & 2 Réception couches 1 & 2 Le protocole à utiliser permettra de transférer plusieurs fichiers à la fois et les trames seront de longueurs variables. Il faudra vérifier le checksum à la réception de chaque paquet afin d en assurer l intégrité. Le choix du mécanisme de cryptage/décryptage vous est laissé, mais il devra permettre à l application d être performante tout en garantissant la confidentialité des transferts (vous pouvez utiliser une application comme Ethereal pour observer le contenu des paquets échangés). 2
Chacune des trames devra respecter le format suivant : IP UDP SEQ ENC CMD Données CRC IP : En-tête IP (adresse). Utiliser la fonction du laboratoire #1. UDP : En-tête UDP (port). Utiliser la fonction du laboratoire #1. SEQ : Le n de séquence de la trame (sur un octet) et le complément à 255 de ce n de séquence (sur un 2 e octet). ENC : Un bit indiquant si les données sont cryptées. CMD : Octet indiquant la commande à effectuer (envoyer, recevoir, début/fin de fichier, etc.) Données : Les données elles-mêmes. Attention, dans ce laboratoire les données sont de type binaire alors que dans le laboratoire #1 il s agissait de chaînes de caractères. Vous devrez donc prendre les précautions nécessaires lors de leur traitement. CRC : Code de contrôle (Checksum) calculé sur les champs ENC+CMD+Données. Utiliser la fonction du laboratoire #1. Tout comme dans le cas du laboratoire #1, on inclura les en-têtes IP et UDP à l intérieur des blocs de données envoyés, même si ces informations sont redondantes par rapport à l encapsulation ajoutée par la fonction sendto(). La taille totale de la trame doit être inférieure à 1024 octets (Taille maximale permise sur un segment Ethernet). Il ne faudra pas oublier de soustraire les encapsulations rajoutées par la fonction sendto() et par l interface réseau. 3
La figure suivante décrit les séquences d opérations standard pour le transfert d un fichier : CLIENT SERVEUR Vous devrez respecter les caractéristiques suivantes : Les "Time out" seront fixés à 5 secondes. Le nombre maximum de retransmissions (même trame, mêmes données) est limité à 5. Seules les trames contenant des données seront cryptées. OPTIONS (pour points boni) : 1. Pour augmenter l efficacité des transferts, on pourra mettre en place l approche Go-Back-N avec une fenêtre d anticipation de largeur = 4, ce qui permet d envoyer plusieurs paquets avant de recevoir les accusés de réception de chacun. 2. Au lieu de se limiter à une architecture client-serveur, on pourra imaginer une architecture peer-to-peer. Dans ce cas, chacun des ordinateurs peut transmettre et recevoir des images. 4
EXEMPLE D UNE DEMANDE DE CONNEXION : 1. Envoi de la commande CONNECT_REQUEST par le client. 2. Réception de la commande par le serveur qui initie son processus. 3. Réponse positive du serveur via la primitive CONNECT_RESPONSE. 4. Réception de la primitive par le client qui sera ainsi connecté. EXEMPLE D UNE DEMANDE DE DÉCONNEXION : 1. Envoi de la commande DISCONNECT_REQUEST par le client. 2. Réception de la commande par le serveur qui termine le processus client. 3. Réponse positive du serveur via la primitive DISCONNECT_RESPONSE. 4. Réception de la commande par le client qui quitte l application. EXEMPLE D UNE TRANSMISSION DE DONNÉES : 1. Envoi de la primitive DATA_REQUEST par le client. 2. Réception de la commande par le serveur, qui ouvre le fichier. 3. Réponse positive (START_TRANSFER) ou négative (NACK) de la part du serveur. 4. Réception de la commande et des données par le client. 5. Réponse positive (ACK) ou négative (NACK) de la part du client. 6. Réception de la commande par le serveur, poursuite du transfert. 7. Suite de l envoi (CONTINUE_TRANSFER) de la part du serveur 8. Réception de la commande et des données par le client. 9. Réponse positive (ACK) ou négative (NACK) de la part du client. 10. Fin de l envoi (END_TRANSFER) de la part du serveur 11. Réception de la commande et des données par le client. 12. Réponse positive (ACK) ou négative (NACK) de la part du client. 5
CONTENU DU RAPPORT : - Page titre - Introduction - Objectifs et buts - Méthodologie de conception - Analyse, description du programme - Croquis, Organigrammes ou algorithmes - Structures de données - Discussion - Conclusion - Code source (imprimé et sur CD) - Les textes des deux fichiers résultats transmis par votre programme - Mode d emploi BARÈME DE CORRECTION Rapport (12 points) Forme, Présentation, Cohérence, /1 Introduction, /1 Méthodologie (conception), Analyse /3 Organigrammes /2 Structures de données /2 Discussion (problèmes rencontrés) /2 Conclusion /1 Programme (13 points) Fonctionnement /10 Commentaires et forme du code /3 (lisibilité, structure) /25 Points Boni (Options) /5 Date de remise : Démonstration pendant le laboratoire le 3 décembre 2007 Remise du rapport et du code source à la fin du laboratoire 6