IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Comment identifier les clients avec UDP


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut Comment identifier les clients avec UDP
    Bonjour, je développe une application de vidéo conférence en c++.
    La communication entre le client et le serveur se fait en utilisant UDP.
    J'aimerais savoir comment est il possible pour un serveur d'identifier un client avec le protocol UDP vus qu'en UDP il n'y a pas d'établissement de connection?
    Car la tache du serveur c'est d'envoyer un flux aux clients via la socket en utilisant UDP, alors le serveur doit savoir à qui envoyer les données, genre addresse ip et port des clients.
    Quelqu'un a t-il une idée comment faire cela en utilisant le protocole UDP?

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    - Le serveur est censé toujours être à l'écoute des clients.
    - Chaque client est censé connaître l'adresse du serveur
    - Un client peut envoyer un message tel que "Bonjour" (à adapter selon ton protocole) au serveur pour informer celui-ci de sa présence.
    - La communication peut démarrer

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut
    Un client peut envoyer un message tel que "Bonjour" (à adapter selon ton protocole) au serveur pour informer celui-ci de sa présence.
    Après avoir eu le Bonjour d'un client, j'aurai l'addresse IP et le PORT de ce client, mais le hic est que l'addresse et le port en question pourraient être aussi celui d'un pare feu qui a traduit l'addresse et le port d'origine du client(translation NAT). Alors je me demande si le client ne sera pas obligé d'envoyer un "Bonjour" au serveur à chaque fois qu'il veut recevoir des données, ce qui dans mon cas sera quand même dramatique coté performance.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Ton serveur recoit les information d'adresse IP et de port qui proviennent de la pile IP de ta machine. Cette adresse et ce port sont éventuellement modifié par un firewall/NAT.

    Ton serveur parlera à l'adresse publique de ton client et le firewall/NAT fera l'inverse et remettra l'adresse et le port privé, pas de problème, c'est comme cela que ca marche.

    Par contre, il ne faut ABSOLUMENT pas que tu inscrive dans ton protocole applicatif (au dessus de UDP donc) des information d'adresse Ip ou de numéro de port. Car si tu fais cela, le dispositif de translation ne connaissant pas ton protocole ne fera pas de translation applicative.

    regarde le chapitre 5 de Introduction aux réseaux TCP IP, j'en parle un peu.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    En dehors de l'adresse IP elle-même, tu peux aussi identifier les clients via leur port source (le port destination étant bien entendu fixe et imposé par le serveur) : lors de la réception d'une trame de "connexion" (le "bonjour", si tu préfères), le serveur mémorise le port et l'adresse IP pour alimenter le client, et lui retourne si besoin les informations nécessaire à la réception des données.

    Une autre solution, mais qui n'est utilisable que sur un LAN, est de passer tes trames UDP en diffusion (broadcast ou multicast) : dans un tel cas, le serveur diffuse les informations et ce sont les clients qui sont à l'écoute sur un port donné. Toutefois, ça peut éventuellement plomber sévèrement le réseau d'entreprise, et tu te doutes bien qu'on ne peut pas faire un broadcast UDP sur Internet...

    Ma solution préférée est hybride : on établit deux connexions parallèles. La première, en TCP/IP, ne sert qu'à connecter un client, servir de keep-alive et éventuellement de circuit de contrôle. C'est par cette connexion que tu vas transmettre les informations nécessaires à la communication UDP, et tu maintiendras la connexion active en envoyant régulièrement une trame bidon juste pour dire que t'es vivant. Pour ma part, j'aime bien envoyer des stats en guise de keep-alive, cela permet aussi de détecter les stalls de communication et de vérifier la qualité des transmissions. De plus, suivant la complexité du protocole (ou la tolérance aux pannes) que tu veux implémenter, tu peux également te servir de la connexion TCP/IP pour modifier à la volée la configuration de la connexion, comme par exemple le codec utilisé ou des indicateurs de présence / absence des divers participants.

    Le flux "lourd" est alors bien sûr transmis par UDP tel que tu l'as déjà prévu.

    Avantage : on sait directement quand un client se connecte, et surtout, quand il se déconnecte (évite de laisser le serveur envoyer des données pour rien).
    Inconvénient : il faut maintenir deux sockets par client et les synchroniser. Je ne saurais trop te conseiller d'encapsuler tout ça dans une structure de communication dédiée, qui ouvrira directement les sockets nécessaires et ne retournera à l'appelant (côté serveur comme côté client) qu'une fois les DEUX connexions établies et vérifiées.

    En gros, pour prendre une analogie avec un driver, les read / write sont faits via UDP, tandis que les ioctl et le open/close sont faits via TCP/IP.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Nouveau candidat au Club
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Par défaut
    dans ton cas le ieux est d'utiliser un serveur STUN et un NAT (non symetrique)
    ca devrai marché tu aura tjrs les infos sur le serveur et le client enregistré

Discussions similaires

  1. Comment identifier les pages identiques avec une url différente ?
    Par Gorzyne dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/06/2015, 12h10
  2. Comment identifier les paires de mur avec Ruby
    Par bayari dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 05/07/2010, 11h58
  3. Réponses: 1
    Dernier message: 17/06/2005, 10h35
  4. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 14h24
  5. Comment saisir les racines avec OpenOffice ?
    Par poxtra_102 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 08/10/2004, 19h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo