slides - Tounkan`s home page
Transcription
slides - Tounkan`s home page
PROJET RES Module de M1 de la mention Informatique Spécialité Réseaux, 2e semestre 20042005 Université Pierre et Marie Curie >> Présentation du projet << Conception et réalisation d'un Proxy Realplayer et test de ses performances dans un réseau WiFi présentation composée et présentée par Danjon Florent Diallo Alpha Amadou Tounkan Khaled Noui Ribeiro Alexandre Plan 1 Introduction 2 Objectifs 3 Etude de l'existant 4 Authentification 5 Optimisation de la bande passante 36 Passage à IPv6 7 Conclusion Introduction: Objectif: développement d’un proxy real player à mettre en place dans le cadre du réseau infradio. Problématique: Implémenter l'existant pour y ajouter un processus d’authentification, optimiser la bande passante et le faire fonctionner avec IPv6. Le RTSP proxy kit de RealNetwork: Le répertoire rtspproxy contient les classes principales du proxy: Le thread principal recevant les messages. Les classes traitant ces messages. Les classes contenant les couples de connexions: client<>proxy<>serveur. Architecure: CServerCnx CClientCnx CRtspProxyCnx CRtspProxyApp CRtspSession CRtspDataTunnel L'unique thread recevant les messages: CRtspProxyApp. Contrôle les activitées du cache. Par un booléen. Possède une liste d ’objets CRtspProxyCnx. Ces objets gèrent messages reçu par le proxy. Un objet CRtspProxyCnx est ajouté pour chaque nouveau client. Classes traitant les messages: CRtspProxyCnx, CClientCnx et CServerCnx. Ces classes ont comme principales fonctions de créer des réponses et des requêtes à partir des messages reçus. Chacune des classes représente une partie de la communication: le client, le proxy et le serveur. Ces classes assurent le fonctionnement du protocole. Les informations connectant client et serveur: Celles ci sont contenues dans la classe CRtspProxySession: Segment de cache Serveur et Client ID Liste de CRtspProxyDataTunnel. 4 ports (proxyclient, proxyserveur, client, serveur). Adresses (client et serveur) Une liste de session se trouve rattaché à chaque CrtspProxyCnx. Le mécanisme d'authentification • RTSP utilise les mêmes mécanismes d'authentification que HTTP : Basic, Digest • Le proxy répond à une requête du client par une demande d’authentification • Le client réitère sa demande en fournissant son identifiant et son mot de passe codés en base64 • Exemple : etudiant:motdepasse ZXR1ZGlhbnQ6bW90ZGVwYXNzZQ== Schéma général client proxy serveur requête tification n e h t u a ’ d demande requête + login et MDP fication ti n e th u a ’ demande d requête + login et MDP … client authentifié ? requête réponse … arrivée de la requête oui Processus d’authentification authentifié non déjà venu oui non login + MDP vides oui non décoder login + MDP non login + MDP correct ? oui envoyer la requête d’authentification, déjà venu=1 retourner authentifié authentifié = 1 enregistrer l’accès dans le fichier log Requête du client DESCRIBE rtsp://192.168.0.4:554/secure/test.rm RTSP/1.0 CSeq: 2 UserAgent: RealMedia Player (HelixDNAClient)/10.0.0.0 (win32) Accept: application/sdp Session: 150621 Bandwidth: 10485800 ClientID: WinNT_5.1_6.0.12.1056_RealPlayer_R30FRD_fr_686 GUID: 00000000000000000000000000000000 Language: fr, fr, * RegionData: 0 Require: com.real.retainentityforsetup SupportsMaximumASMBandwidth: 1 Réponse du serveur RTSP/1.0 401 Unauthorized CSeq: 2 Date: Wed, 23 Mar 2005 22:07:30 GMT WWWAuthenticate: Basic realm=" Jussieu.ContentRealm" Nouvelle requête du client DESCRIBE rtsp://192.168.0.4:554/secure/test.rm RTSP/1.0 CSeq: 3 UserAgent: RealMedia Player (HelixDNAClient)/10.0.0.0 (win32) Accept: application/sdp Session: 150621 Authorization: Basic ZXR1ZGlhbnQ6bW90ZGVwYXNzZQ== Bandwidth: 10485800 ClientID: WinNT_5.1_6.0.12.1056_RealPlayer_R30FRD_fr_686 GUID: 00000000000000000000000000000000 Language: fr, fr, * RegionData: 0 Require: com.real.retainentityforsetup SupportsMaximumASMBandwidth: 1 Exemple Optimisation EQUEST: • Première solution envisagée SET_PARAMETER rtsp://a1234.l663344176.c6633.e.lr.aka maistream.net:554/live/D/1234/6633/6 66/reflector:44176 RTSP/1.0 CSeq: 7 SetDeliveryBandwidth: Bandwidth=22119;BackOff=0 Liste des clients Session: 20495959233 Via: RTSP/1.0 293cb936 RESPONSE: Problème: Réponses du serveur varient suivant les requêtes RTSP/1.0 200 OK CSeq: 7 Date: Tue, 21 Jun 2005 11:39:09 GMT Session: 204959592330 Via: RTSP/1.0 293cb936 Optimisation • Deuxième solution Liste des réponses Problème: Réponses aux requêtes varient suivant les paramètres des clients Optimisation • Troisième solution Problème: Conception du proxy ( diapo suivante) •Architecture actuelle CServerCnx CClientCnx CRtspProxyCnx CRtspProxyApp – CRtspSession Solution possible CRtspProxyCnx CRtspProxyApp CRtspSession Passage d'IPv4 à IPv6 • InfRadio • Pourquoi IPv6? – Une solution pour les problèmes de croissance • épuisement des adresses IP • explosion de la taille des tables de routage • Les caractéristiques d’IPv6 – Adresse plus longue : 128 bits (16 octets) – 3 types d'adresses : Unicast/Anycast/Multicast – Taille fixe de l'en-tête: 40 octets • Les nouvelles fonctionnalités d’IPv6 – Autoconfiguration/Multicast/Sécurité/Mobilité Passage d'IPv4 à IPv6 • L'API socket IPv6: – programmes peuvent fonctionner autant en IPv4 qu'en IPv6 sans recompilation. – pas spécifique à 1 OS. • Modifications effectuées: – fonctions du noyau de l'API socket. – structures de données dédiées à l'adressage. – fonctions de conversion des noms vers les adresses. – fonctions de formatage des adresses. Passage d'IPv4 à IPv6 Etape1: Fonctions du noyau de l'API socket. • Changement des noms des fonctions/variables/macros • • Recherche de Remplacer par AF_INET AF_INET6 PF_INET PF_INET6 INADDDR_ANY in6addr_any IPPROTO_IP IPPROTO_IPV6 • Création d’une socket • s= socket(PF_INET, SOCK_STREAM, 0) ; • s= socket(PF_INET6, SOCK_STREAM, 0) ; • s=socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); • s=socket(PF_INET6, SOCK_DGRAM, IPPROTO_IPV6); //IPv6/UDP //pour 1 socket IPv4/TCP //pour 1 socket Ipv6/TCP // IPv4/UDP Passage d'IPv4 à IPv6 Etape2: Structures de données dédiées à l'adressage Structure IPv4 Structure IPv6 struct in_addr{ unsigned int s_addr; }; struct in6_addr{ uint8_t s6_addr [16]; /*IPv6 address*/ }; struct sockaddr struct sockaddr_in6 struct sockaddr_in{ sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; struct sockaddr_in6{ sa_family_t sin6_family; /*AF_INET6*/ int_port_t sin6_port; uint32_t sin6_flowinfo; /* IPv6 flow label */ struct in6_addr sin6_addr; /* IPv6 address*/ uint32_t sin6_scope_id; }; }; Passage d'IPv4 à IPv6 Etape3: Fonctions de conversion des noms vers les adresses. • Fonction de résolution de nom: gethostbyname() – Subsiste – La structure hostent reste inchangée Struct hostent *gethostbyname(const char*name) ; • Nouvelle fonction: gethostbyname2() – Prise en compte des anciennes et nouvelles adresses. Struct hostent *gethostbyname2(const char *name, int af); • La fonction gethostbyaddr() – inchangée • struct hostent *gethostbyaddr(const char *addr, int len, int type); Passage d'IPv4 à IPv6 Etape4: Fonctions de formatage des adresses. • Conversion des adresses entre les formes binaires et texte imprimable. • in_addr_t inet_aton(const char *cp); • devient • int inet_pton (int af, const char *src, void *dst) • char *inet_ntoa(struct in_addr in); • devient • const char *inet_ntop(int af, const void *src, char *dst, size_t size) Conclusion • Difficultés – Utilisation du code d'autrui – Code non documenté • – Architecture complexe Enseignements tirés – Prévision difficile – Compréhension du code – Aptitude à mettre en place une architecture complète d'un projet en C++ • – Transition en IPv6 non complexe Perspectives – Authentification digest – Architecture plus sophistiquée pour optimisation – HTTP • – IPv4/IPv6 http://pres.ibreizh.com