Developpez une aplplication VOIP.
sympaval
Messages postés
21
Statut
Membre
-
CLoucheça_angelo -
CLoucheça_angelo -
Bonjour,
Je dois developper un une application voip base une sur protocol que je vais moi meme concevoir. J'ai base mon architechtuire sur le protocole SIP et sur son fonctionnement (i.e on aura en grosse partie un User Agent, un REGISTER(Base de donnes), un proxy SIP.
La que j'ai une question question que je comprends et qui me preoccupe.
En effet je me suis davantage bien penche sur l'architecture du système que je vais mettre en place. Et les choses sont de plus en plus clair en théorie.
Toutefois cote réseau, il y a une question que je ne m'étais jamais réellement posée jusqu'à ce jour, et malgré mes compétences en réseau je n'ai pas pu répondre a ma question.
En effet je me demande comment les communications sont gerees sur internet, en envoie et en reception. Pour ma part j'ai jusqu'ici configure des routeurs pour rediriger des connexion sortantes, faire du NAT... Pour les connexions entrante j'ai souvent fait des redirection sur le routeur en lui indiquant explicitement vers quelle adresse locale rediriger une requete arrivant sur tel ou tel autre port.
Alors la question que je me pose est celle-ci: Comment un paquet/message parvient a transiter sur internet jusqu'à une application spécifique d'un ordinateur spécifique d'un réseau prive distant, sans qu'aucune redirection soit faite sur le routeur d'entrer? Je prends un exemple sur les applications de messagerie instantanée, chat.
Quand le développeur crée son application, il la met a la disposition des utilisateurs qui la téléchargent et peuvent l'installer sur leur machine pour l'utilise sur n'importe quel réseau du monde connecte a internet et communiquer.
A priori un client ne sait pas exactement quelle adresse ip un autre utilise sur internent, il ne connait que son login sur le système qu'ils utilisent, par contre il est évident qu'il y a un serveur de cette application localiser quelque part dans le monde et possédant une adresse publique ou un nom (yahoo par exemple) .
Le serveur possède surement la liste de tous les clients connectés, qui se seraient au préalable enregistrés ou authentifiés auprès de lui. Mais seulement, les clients eux sont sur des réseaux ou ils n'ont forcement pas autorité, ou l'utilisateur a par exemple juste connecté un cable rj45 a un switch et obtenu une adresse par DHCP. et une passerelle par défaut bien sur.
Comment ce dernier (le client) une fois connecte a internet, via le routeur du réseau ou il se trouve, parvient a recevoir des message des autres, alors que administrateur du reseau ou il se trouve n'a fait aucune redirection pour lui sur son routeur (puisqu'il est simple utilisateur du réseau comme tout le reste et n'offre aucun service externe pour ce réseau, il utilise juste la connexion internet)? Comment un message part depuis une application précise de l'hôte source situe sur un réseau prive, jusqu'à une application spécifique sur un hôte de destination?
Qu'est ce qui permet exactement aux routeurs internet, dans les en entête des paquets de déterminer que ce paquet va un hote parmi tant d'autres sur un réseau privé, et vers une application spécifique parmi tant d'autres application tournant en même temps sur l'hote. J'espere que vous ne m'enverrai pas vers les couche OSI, car on passe tous par la a la base, mais la j'ai un problème plus profond qui est de savoir, ce qui rassure un programmeur que lorsqu'il aura bien concu son application, elle marchera sur internet de n'importe quel réseau connecte sur internet, et ce de maniere generique sans contrainte sur la localisation des utilisateurs?
C'est a ce niveau que je cherche le déclic, je veux comprendre comment ca se fait cette communication instantanée entre des clients sur internet (Je parle de clients car pour les serveurs ca se comprend, on peut faire des redirections vu qu'ils offrent des services qui sont connus de l'administrateur, et des fois possèdent des ip publiques ou des enregistrements dns). Je tiens tellement a comprendre le mécanisme client-client a travers internet, je me suis rendu compte depuis quelques jours que je dois moi même permettre a deux personnes de communiquer sur internet sans se connaitre en termes d'adresse, que c'est un cote du réseau qui n'est pas encore bien claire a mon niveau.
J'espère que cette fois ma question est une plus concise et ne mélange pas les domaines, car la je suis vraiment au niveau de la communication sur le réseau internet, et je pense que la bonne compréhension de ce point m'aidera pour les choix que je ferai dans la réalisation de mon projet.
J'espère pouvoir compter sur votre collaboration, et je vous remercie pour votre attention.
Merci et a très bientôt.
Je dois developper un une application voip base une sur protocol que je vais moi meme concevoir. J'ai base mon architechtuire sur le protocole SIP et sur son fonctionnement (i.e on aura en grosse partie un User Agent, un REGISTER(Base de donnes), un proxy SIP.
La que j'ai une question question que je comprends et qui me preoccupe.
En effet je me suis davantage bien penche sur l'architecture du système que je vais mettre en place. Et les choses sont de plus en plus clair en théorie.
Toutefois cote réseau, il y a une question que je ne m'étais jamais réellement posée jusqu'à ce jour, et malgré mes compétences en réseau je n'ai pas pu répondre a ma question.
En effet je me demande comment les communications sont gerees sur internet, en envoie et en reception. Pour ma part j'ai jusqu'ici configure des routeurs pour rediriger des connexion sortantes, faire du NAT... Pour les connexions entrante j'ai souvent fait des redirection sur le routeur en lui indiquant explicitement vers quelle adresse locale rediriger une requete arrivant sur tel ou tel autre port.
Alors la question que je me pose est celle-ci: Comment un paquet/message parvient a transiter sur internet jusqu'à une application spécifique d'un ordinateur spécifique d'un réseau prive distant, sans qu'aucune redirection soit faite sur le routeur d'entrer? Je prends un exemple sur les applications de messagerie instantanée, chat.
Quand le développeur crée son application, il la met a la disposition des utilisateurs qui la téléchargent et peuvent l'installer sur leur machine pour l'utilise sur n'importe quel réseau du monde connecte a internet et communiquer.
A priori un client ne sait pas exactement quelle adresse ip un autre utilise sur internent, il ne connait que son login sur le système qu'ils utilisent, par contre il est évident qu'il y a un serveur de cette application localiser quelque part dans le monde et possédant une adresse publique ou un nom (yahoo par exemple) .
Le serveur possède surement la liste de tous les clients connectés, qui se seraient au préalable enregistrés ou authentifiés auprès de lui. Mais seulement, les clients eux sont sur des réseaux ou ils n'ont forcement pas autorité, ou l'utilisateur a par exemple juste connecté un cable rj45 a un switch et obtenu une adresse par DHCP. et une passerelle par défaut bien sur.
Comment ce dernier (le client) une fois connecte a internet, via le routeur du réseau ou il se trouve, parvient a recevoir des message des autres, alors que administrateur du reseau ou il se trouve n'a fait aucune redirection pour lui sur son routeur (puisqu'il est simple utilisateur du réseau comme tout le reste et n'offre aucun service externe pour ce réseau, il utilise juste la connexion internet)? Comment un message part depuis une application précise de l'hôte source situe sur un réseau prive, jusqu'à une application spécifique sur un hôte de destination?
Qu'est ce qui permet exactement aux routeurs internet, dans les en entête des paquets de déterminer que ce paquet va un hote parmi tant d'autres sur un réseau privé, et vers une application spécifique parmi tant d'autres application tournant en même temps sur l'hote. J'espere que vous ne m'enverrai pas vers les couche OSI, car on passe tous par la a la base, mais la j'ai un problème plus profond qui est de savoir, ce qui rassure un programmeur que lorsqu'il aura bien concu son application, elle marchera sur internet de n'importe quel réseau connecte sur internet, et ce de maniere generique sans contrainte sur la localisation des utilisateurs?
C'est a ce niveau que je cherche le déclic, je veux comprendre comment ca se fait cette communication instantanée entre des clients sur internet (Je parle de clients car pour les serveurs ca se comprend, on peut faire des redirections vu qu'ils offrent des services qui sont connus de l'administrateur, et des fois possèdent des ip publiques ou des enregistrements dns). Je tiens tellement a comprendre le mécanisme client-client a travers internet, je me suis rendu compte depuis quelques jours que je dois moi même permettre a deux personnes de communiquer sur internet sans se connaitre en termes d'adresse, que c'est un cote du réseau qui n'est pas encore bien claire a mon niveau.
J'espère que cette fois ma question est une plus concise et ne mélange pas les domaines, car la je suis vraiment au niveau de la communication sur le réseau internet, et je pense que la bonne compréhension de ce point m'aidera pour les choix que je ferai dans la réalisation de mon projet.
J'espère pouvoir compter sur votre collaboration, et je vous remercie pour votre attention.
Merci et a très bientôt.
A voir également:
- Developpez une aplplication VOIP.
- Voip buster - Télécharger - Téléphonie & Visio
- Mobile voip - Télécharger - Téléphonie & Visio
- X-lite voip - Télécharger - Connexion à distance
- 3cx voip client - Télécharger - Téléphonie & Visio
- Beronet (Passerelle SIP) VOIP - Forum Livebox
3 réponses
Bonjour!
Merci de me prêter ton attention. Alors voici exactement mon problème:
Je dois mettre sur pied un petit logiciel de VOIP permettant d'échanger de la voix, des données textes, et la vidéo entre utilisateurs. Je dois réaliser pour cela un protocole binaire, et je n'ai droit à aucune librairie SIP existant, je dois moi même implémenter mon protocole.
Alors je me suis inspirer de l'architecture SIP pour la partie communication. Je vais gérer mes compressions audio avec Port Audio et Speex sur lesquels je bosse déjà. Le projet sera fait en c++ et doit fonctionner sous windows et linux, et j'ai déjà prévu un bon nombre d'abstraction réseau(sockets), threads, etc. J'ai également séparé mes modules pour répartir les tâches sur l'ensemble du système que je vais construire.
Et mon architecture sans surprise est la suivante: Des Users Agents(clients), un proxy et un registrer. Le proxy et le registrer seront utilisés par mon serveur pour gérer les session entre user agents clients. Alors je désire concevoir un patern pour la communication entre les clients, et entre les clients et le serveur, et c'est là où je ne m'en sort pas pour l'instant.
J'ai donc besoin d'un coup de main sur la façon dont je pourrai concevoir mon système pourqu'une fois mes compressions et sérialisations bien faites, je puisse gérer convenablement les communication un à un et un à plusieurs. D'où me question:
Comment faire communiquer les clients se trouvant sur derrière un routeur et possédant une adresse privée? Mon proxy doit pouvoir chaque fois qu'un client veut établir une connexion avec un autre, initier et établir la connexion.
Mon serveur lui, possèdera une adresse IP public (ou une redirection) permettant de s'y connecter via une socket TCP, et la communication entre mes clients est en UDP. Comment un client parvient il à se connecter à un autre sur une adresse IP et un port?
Au niveau réseau je comprends bien que les routeurs savent faire leur travail depuis la nuit des temps, mais au niveau applicatif, comment chaque client se trouvant sur un réseau connecté à internet, pourra envoyer des données et en recevoir d'un autre en utilisant mon application?
J'ai lu beaucoup de documents pour davantage cerner le principe de SIP et autres, théoriquement j'ai bien compris, mais au niveau implémentation je n'arrive pas encore à me décider de ce que je pourrai encapsuler dans mes classes pour rendre mon système fonctionnel.
Je n'ai pas pas de réel problème avec les sockets, je sors d'ailleurs de la réalisation de deux projets client/serveur IRC, FTP complets et fonctionnant parfaitement. Mais dans ces deux cas le serveur joue le role de tour de controle, accepte les connexions et relaie les messages (IRC), or pour le cas présent les communications entre clients ne doivent pas être relayés, et je me demande comment je vais gérer les connexions distantes entre clients avec les sockets, sans savoir quelle est l'adresse ip réelle de chaque client.
Je sais que ce message n'est pas plus court que le dernier et je m'en excuse d'avance. Je sortirai de celui-ci en demandant s'il vous plait de me proposer la meilleure solution pour gérer les communication de un à un et les conférences. Un petit tuto ou guide traitant d'une telle problématique serait toujours le bien venue.
Merci infiniment pour votre générosité.
Merci de me prêter ton attention. Alors voici exactement mon problème:
Je dois mettre sur pied un petit logiciel de VOIP permettant d'échanger de la voix, des données textes, et la vidéo entre utilisateurs. Je dois réaliser pour cela un protocole binaire, et je n'ai droit à aucune librairie SIP existant, je dois moi même implémenter mon protocole.
Alors je me suis inspirer de l'architecture SIP pour la partie communication. Je vais gérer mes compressions audio avec Port Audio et Speex sur lesquels je bosse déjà. Le projet sera fait en c++ et doit fonctionner sous windows et linux, et j'ai déjà prévu un bon nombre d'abstraction réseau(sockets), threads, etc. J'ai également séparé mes modules pour répartir les tâches sur l'ensemble du système que je vais construire.
Et mon architecture sans surprise est la suivante: Des Users Agents(clients), un proxy et un registrer. Le proxy et le registrer seront utilisés par mon serveur pour gérer les session entre user agents clients. Alors je désire concevoir un patern pour la communication entre les clients, et entre les clients et le serveur, et c'est là où je ne m'en sort pas pour l'instant.
J'ai donc besoin d'un coup de main sur la façon dont je pourrai concevoir mon système pourqu'une fois mes compressions et sérialisations bien faites, je puisse gérer convenablement les communication un à un et un à plusieurs. D'où me question:
Comment faire communiquer les clients se trouvant sur derrière un routeur et possédant une adresse privée? Mon proxy doit pouvoir chaque fois qu'un client veut établir une connexion avec un autre, initier et établir la connexion.
Mon serveur lui, possèdera une adresse IP public (ou une redirection) permettant de s'y connecter via une socket TCP, et la communication entre mes clients est en UDP. Comment un client parvient il à se connecter à un autre sur une adresse IP et un port?
Au niveau réseau je comprends bien que les routeurs savent faire leur travail depuis la nuit des temps, mais au niveau applicatif, comment chaque client se trouvant sur un réseau connecté à internet, pourra envoyer des données et en recevoir d'un autre en utilisant mon application?
J'ai lu beaucoup de documents pour davantage cerner le principe de SIP et autres, théoriquement j'ai bien compris, mais au niveau implémentation je n'arrive pas encore à me décider de ce que je pourrai encapsuler dans mes classes pour rendre mon système fonctionnel.
Je n'ai pas pas de réel problème avec les sockets, je sors d'ailleurs de la réalisation de deux projets client/serveur IRC, FTP complets et fonctionnant parfaitement. Mais dans ces deux cas le serveur joue le role de tour de controle, accepte les connexions et relaie les messages (IRC), or pour le cas présent les communications entre clients ne doivent pas être relayés, et je me demande comment je vais gérer les connexions distantes entre clients avec les sockets, sans savoir quelle est l'adresse ip réelle de chaque client.
Je sais que ce message n'est pas plus court que le dernier et je m'en excuse d'avance. Je sortirai de celui-ci en demandant s'il vous plait de me proposer la meilleure solution pour gérer les communication de un à un et les conférences. Un petit tuto ou guide traitant d'une telle problématique serait toujours le bien venue.
Merci infiniment pour votre générosité.
Salut!
Je veux juste dire que j'ai fini par trouver les bonne reponses aux questions que je me posais. je ne sais pas si c'est la flemme qui m'a pousser a rester un peu con pendant tant d'heures.
Je m'excuse d'avoir un peu perturbe le forum avec ma question. En fait c'est simple je pense, on pourra tout faire en applicatif, mais pour acceder a un ordinateur en privee derriere un routreur et n'ayant pas autorite sur le reseau ou il se trouve, il faudrait soit que l'on n'ait fait une redirection specifique sur cet ordinateur au niveau du routeur, soit faire du VPN, IP fixe ou autre manip de ce genre, ce qui n'est pas trop le but de mon projet, qui est surtout de pouvoir faire circuler differents types de donnees sur un reseau, et non interconnecter les reseaux a priori.
Pour ceux qui ne sont pas tres experimentes en reseau et que mon post a failli derouter, ce n'etait vraiment pas une question a poser en reseau, ou si oui pas de cette facon.
Je souhaiterai donc qu'on remette le compteur a zero pour ce post, je m'arrangerai a faire marcher les choses d'abord en local, et apres pour l'extension ce sera autre chose, car ca releve exclusivement du reseau dans ce cas et je reviendrai vers vous s'il faut.
Merci pour votre patience et une fois de plus pardon d'avoir perturbe le forum.
Je veux juste dire que j'ai fini par trouver les bonne reponses aux questions que je me posais. je ne sais pas si c'est la flemme qui m'a pousser a rester un peu con pendant tant d'heures.
Je m'excuse d'avoir un peu perturbe le forum avec ma question. En fait c'est simple je pense, on pourra tout faire en applicatif, mais pour acceder a un ordinateur en privee derriere un routreur et n'ayant pas autorite sur le reseau ou il se trouve, il faudrait soit que l'on n'ait fait une redirection specifique sur cet ordinateur au niveau du routeur, soit faire du VPN, IP fixe ou autre manip de ce genre, ce qui n'est pas trop le but de mon projet, qui est surtout de pouvoir faire circuler differents types de donnees sur un reseau, et non interconnecter les reseaux a priori.
Pour ceux qui ne sont pas tres experimentes en reseau et que mon post a failli derouter, ce n'etait vraiment pas une question a poser en reseau, ou si oui pas de cette facon.
Je souhaiterai donc qu'on remette le compteur a zero pour ce post, je m'arrangerai a faire marcher les choses d'abord en local, et apres pour l'extension ce sera autre chose, car ca releve exclusivement du reseau dans ce cas et je reviendrai vers vous s'il faut.
Merci pour votre patience et une fois de plus pardon d'avoir perturbe le forum.