Forum

Se sentir libre de partager....

Vous n'êtes pas identifié(e).

#1 22-11-2009 21:58:42

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 011
Site Web

HTTP et "port forwarding"

J'ai récement fait un post par là :
http://www.revolutionsoundrecords.org/p … hp?id=2270
où je détaille un peu les manips qui m'ont permis de faire un streaming video OGG en utilisant VLC sur un serveur relais.

Ici, je détaille un peu plus le problème du "port-forwarding" dans le cas d'une diffusion HTTP, évoqué dans le thread ci-dessus.

Le but de ce post n'est pas de dire comment faire (chaque routeur - freebox, livebox... - a sa propre procédure et aussi des howtos en pagaille un peu partout sur le web). Le but, là, c'est de raconter pourquoi des fois c'est nécessaire.

Avant de commencer

adresse IP / port de communication

Pour que deux ordinateurs puissent communiquer sur le réseau, ils doivent commencer par se trouver. Il existe différents type de communications entre ordinateurs, mais de nos jours, la plupart de ces communications, du moins sur le réseau, se basent sur le protocol IP (Internet Protocol), qui localise chaque "communiquants" à l'aide de deux informations : une adresse IP et un port de communication.

Une adresse IP identifie une machine (par exemple votre PC). Ensuite, une même machine peut faire tourner plusieurs programmes qui accèdent en même temps au réseau (par exemple VLC, Emule, etc...). Si tous ces programmes utilisaient le même "canal" pour communiquer, ce serait le bronx intégral. Donc pour s'y retrouver, chaque programme, sur la machine, va utiliser un port de communication différent.

TCP / UDP

Une fois que les programmes sont capables de se localiser sur le réseau, reste à se mettre d'accord sur la façon dont ils vont communiquer. et là encore, il existe plusieurs protocols de communications, qui se basent sur le protocol IP, mais qui l'utilisent de façon différente. Les plus connus sont TPC et UDP. On peut voir ça un peu comme l'écriture. Le protocole IP propose un alphabet. TCP et UDP utilisent cet alphabet et definissent chacun des langages (bon cette analogie est un peu bancale, mais donne une idée de base...). A noter que d'autres protocols sont à leur tour construits sur TCP ou UDP. Par exemple le protocole HTTP (qui permet de naviguer sur Internet) se base sur TCP.

Pour illustrer la différence entre TCP et UDP, je prendrais l'exemple d'un flux vidéo wink

Si vous envoyez votre flux en UDP, vous ne vous souciez pas de savoir si les infos arrivent ou pas à destination. Vous vous contentez d'envoyer. Dans ce cas, tout ce dont vous avez besoin, c'est de connaitre l'adresse IP et le port du destinataire que vous visez. Ensuite, peut importe que le destinataire reçoive ou non ces données. UDP ne s'occupe pas de ça. UDP envoi. point barre. Donc dans VLC, si vous décidez d'envoyer en UDP, l'adresse IP à préciser est celle du destinataire (par exemple, donc, l'IP du relais). Idem pour le port : si vous envoyez en UDP, vous précisez le port sur lequel vous voulez que le destinataire reçoive les données.

Si maintenant vous envoyez votre flux en HTTP (qui se base sur TCP), là, vous êtes dans ce qu'on appelle un "mode connecté". C'est une façon d'envisager l'échange d'infos qui atteste (entre autres) que l'expediteur et le destinataire se sont bien trouvées. En HTTP, vous commencez par établir une connexion, ensuite vous envoyez les données. ce qui donnera quelquechose comme :

une machine sur le reseau : t'es là ?
              la source du flux : oui oui, 'suis là
  la machine sur le reseau : ok, je voudrais que tu me communique le flux
              la source du flux : ok j'envois
  la machine sur le reseau : ok je reçois

tandis qu'en udp ça ressemblera plus à :

la source du flux : j'envois à une machine sur le reseau
et la machine sur le réseau reçois... ou pas.

Vous noterez donc une différence importante ici, dans la façon dont la communication est initiée :

- en udp, c'est la source qui contacte le destinataire (et le destinataire doit donc être accessible)
- en http, c'est le destinataire qui contacte la source (et là c'est donc la source qui doit être accessible)

plus précisément, si vous proposez votre flux en HTTP, vous n'allez pas tout de suite envoyer un flux (contrairement à UDP).
Vous allez vous mettre en attente de demande de flux.
Ici, l'adresse IP et le port à préciser dans VLC sont les votre !
c'est à cette adresse et sur ce port que ceux qui voudront le flux viendront le demander.

Et on en arrive au problème qui nous préocupe ici : si vous envoyez en UDP, peut importe que votre machine soit ou non accessible à partir d'Internet, puisqu'elle se contente d'envoyer. Mais si vous proposez votre flux en HTTP, alors une machine sur Internet qui veut pouvoir lire votre flux doit pouvoir trouver votre machine.

L'interêt du port-forwarding

Pourquoi mon PC n'est pas visible sur Internet ?

La plupart des FAI, de nos jours, proposent des box. Freebox, Livebox, Dartybox (si si, ça existe smile ). Et une particularité de ces box, c'est qu'elles vous permettent de connecter plusieurs ordinateurs à Internet. Seulement, il s'agit d'une connection via un réseau local. C'est à dire que vos ordinateurs ne sont pas directement connectés à Internet. Ils sont tous connectés à votre box et c'est la box qui se connecte à Internet. Ce que ça implique, en terme de localisation, c'est que chacun de vos ordinateurs se retrouve avec une adresse IP dite locale. Autrement dit, une adresse IP qui leur permet de se localiser entre eux (dans votre réseau local), mais qui ne les rend pas accessibles sur Internet. Seul votre box a une adresse IP qui est visible sur Internet (pour être plus précis, votre box a en fait deux adresses IP : une adresse locale, pour échanger avec vos ordis, et une adresse publique, pour communiquer sur Internet).

Imaginez maintenant que vous proposez un flux en HTTP.
Comme raconté plus haut, ça signifie donc que les demandes de connection viendront d'Internet.
Imaginez donc qu'une machine sur Internet veuille ouvrir une connection sur votre PC pour lire le flux.
Cette machine doit contacter votre PC, mais seul la box a une adresse IP publique.
Donc seul la box peut être contactée

Port-forwarding = faire suivre les connections sur un port

Une solution consiste donc à faire du port-forwarding. On dit aussi des fois "ouvrir un port", mais litterallement, le premier terme est plus proche de ce qui se passe en réalité (on parle aussi de NAT pour Network Address Translation).

C'est une configuration qu'on va pouvoir préciser sur la box pour lui dire : si tu reçois une demande de connection sur tel port, alors fais suivre cette demande de connection sur tel port de telle machine dans le réseau local. Donc selon le matériel (freebox, livebox, etc) les façons d'accéder à cette configuration seront différentes, mais vous retrouverez toujours à peu près les mêmes informations à préciser pour faire du NAT :
- le port à surveiller sur la box
- l'adresse IP (locale) et le port de la machine sur laquelle vous voulez faire suivre les demandes de connection.
- le protocol utilisé pour la connection (TCP ou UDP : vous pouvez par exemple ne faire suivre que les connections TCP)

Pour conclure : le cas d'un flux diffusé en HTTP

Comme indiqué dans le thread sur la diffusion Ogg (voir lien au debut de ce post), VLC ne sait envoyer du Ogg qu'en HTTP. Aucun problème pour les internautes qui veulent lire le flux sur le relais (puisque le relais a une adresse IP publique), mais pour que le relais puisse lire le flux en provenance de votre PC, vous devez donc faire du NAT.

En pratique :

Pour connaitre votre adresse IP locale (celle sur laquelle vous demanderez à VLC de diffuser en HTTP, et celle que vous préciserez dans la config NAT) :

sous Windows
- menu Démarrer > executer
- taper cmd puis cliquer sur ok
- taper ipconfig puis [Entr]

sous linux
dans un terminal, utilisez la commande ifconfig

Votre adresse IP locale sera probablement de la forme 192.168.xxx.xxx

Une fois munis de votre adresse IP locale, choisissez le port que vous voudrez utiliser (au choix entre 1024 et 65535) et configurez votre box pour faire suivre ce port sur l'IP locale de votre machine

Lancez ensuite VLC et diffusez en HTTP sur votre IP locale et sur le port choisi

Rendez-vous ensuite par exemple ici:
http://www.adresseip.com

pour connaitre l'adresse IP publique de votre box

Rendez-vous enfin sur le relais pour lancer la diffusion pour le public, sachant que le relais doit aller chercher le flux sur l'adresse IP publique de votre box et sur le port que vous avez choisi.

voilou...
bon stream !


dead ?

Hors ligne

#2 22-11-2009 23:34:14

Alphonse
Team RSR
Inscription : 15-05-2006
Messages : 1 365
Site Web

Re : HTTP et "port forwarding"

je dis pas que je vais m'y mettre mais merci !!!


Allons voir si les autres rêvent encore...
http://www.troisptitspoints.net

Hors ligne

#3 22-11-2009 23:54:16

dj3c1t
Team RSR
Inscription : 27-08-2006
Messages : 2 011
Site Web

Re : HTTP et "port forwarding"

avec plaisir Alphonse smile


dead ?

Hors ligne

Pied de page des forums

Propulsé par FluxBB 1.5.3