Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Chose promise

Par defranoux le 29/9/2000 à 10:24:00 (#105284)

Bon, voilà, chose promise, chose due : le cours sur les socket.

Reprenont à la base : Chaque machine, sur le réseau, dispose d'une addresse IP (32 bits, que l'on donne par groupes de 8, codés en décimal : 192.168.4.1 par exemple).

Pour envoyer un paquet sur le réseau, on donne l'addresse de la machine destination, ensuite, les routeurs se débrouillent pour envoyer le paquet à destination. Les paquets disposent d'une addresse de retour pour que l'on puisse y répondre...

Maintenant, sur la machine distante, il peut y avoir plusieurs applications. De la même manière que chaque machine à une addresse, chaque application à un numéro de port.
Du coup, lorsque l'on envoie un paquet, il contient une addresse et un numéro de port destination, mais aussi une addresse et un numéro de port origine.
Les numéros de port sont sur 16 bits, on les donne en décimal (1 à 65536)

Le terme "socket" est assimilable au n° de port.

En fait je simplifie, car une machine peut avoir plusieurs addresses IP (une par connexion réseau) et une application peut avoir plusieurs n° de port.

Mais comment savoir à quel n° de port parler lorsque l'on envoie le premier paquet ?

Eh bien, TCP/IP et UDP/IP (les protocoles les plus courant sur internet) sont basés sur un principe : le client/serveur.
- Le serveur est unique
- Il peut y avoir plein de clients
- Le serveur à une addresse IP connue
- L'application sur le serveur à un n° de port connu
- Le client entamme toujours le dialogue

Ainsi, sur le serveur, l'application serveur se met sur un numéro de port prédéfini à l'avance. On appelle ceci un "bind".
Par exemple : telnet est sur le port 23, ftp sur 20 et 21, http sur 80, ... Ces port s'appellent "Well known ports", "n° de ports bien connus".
Vous trouverez beaucoup de ces numéros dans le fichier windows\services (à ouvrir avec notepad), mais pas tous (pas ceux privés de Blizzard par exemple).
Dernier détail, sur une machine, une seule application peut "binder" sur un n° de port donné.

Et avec un NAT
Prenons un exemple :
2 PC : A et B en réseau local.
Le PC 'A' est celui qui a le modem.

PC A : Addresse = 192.168.0.1
PC B : Addresse = 192.168.0.2

Le PC 'B' lance un Internet explorer et cherche à charger la page www.toto.com
Je passe sur la résolution de nom (DNS) qui apprends au PC 'B' que www.toto.com c'est en fait 134.1.32.214

Du coup, le PC 'B' crée une socket locale (n° de port aléatoire, pour l'exemple : 12345).
De cette socket, il envoie un Paquet à 134.1.32.214, port 80.

Le PC 'A' reçoit le paquet pour www.toto.com et l'intercepte.
Il crée une socket locale (port toujours aléatoire, pour l'exemple 11000).
Il se souvient que 11000 correspond à B:12345
Il envoie alors le paquet initial à toto.com, en mettant son addresse comme addresse de retour, et 11000 comme n° de port de retour.

Le serveur, toto.com croit qu'un Explorer est lancé sur le PC 'A', port 11000 et réponds.

Le PC 'A', lorsqu'il reçoit un paquet de toto.com, le fait suivre au PC 'B' en changeant l'addresse et le numéro de port (replace 11000 par 12345).

Et voilà.

L'autre intérêt du NAT est de sécuriser le PC 'B', qui est invisible de l'extérieur

Oui mais si le PC 'B' lance un serveur, il faut informer le PC 'A' de router les paquets d'un certain n° de port automatiquement vers le PC 'B'.
Par exemple si le PC 'B' dispose d'un serveur HTTP, on configurera manuellement le NAT pour que la socket 80 du PC 'A' renvoie les paquets à la socket 80 du PC 'B'.
Du coup, on ne peut pas avoir un PC 'C' sur le réseau local avec un autre serveur HTTP, et on ne peut pas avoir de serveur HTTP sur le PC 'A'.

Et Diablo dans tout ça ?

Eh bien la question est : est-ce que Diablo bind sur un port spéficique (comme le faisait StarCraft il me semble) ou non.
Si oui, on ne peut pas jouer à deux sur le même modem, sauf manip spéciale (avoir plusieurs addresse publiques, mais je ne connais aucun provider qui proposerait ce service).
Si non, on peut.
La réponse semble NON, je vérifie dimanche soir...

Bon j'espère que vous êtes pas tous endormis :D Si vous avez pas tout compris, posez des question.

Par Koreus le 29/9/2000 à 10:58:00 (#105285)

Ce que tu as oublie de specifie dans ton explication, c'est que le machine B doit
avoir la machine A en passerelle par defaut.
Pour que tous les packets ayant une destination inconnu pour B (hors du reseau local)
soit route par la machine A (la machine ayant acces a internet)
Sinon tout le reste semble bon :)


Oui mais si le PC 'B' lance un serveur,
il faut informer le PC 'A' de router les paquets d'un certain n° de port automatiquement vers le PC 'B'.
Par exemple si le PC 'B' dispose d'un serveur HTTP,
on configurera manuellement le NAT pour que la socket 80 du PC 'A' renvoie les paquets à
la socket 80 du PC 'B'.
Du coup, on ne peut pas avoir un PC 'C' sur le réseau local avec un autre serveur HTTP,
et on ne peut pas avoir de serveur HTTP sur le PC 'A'.


Je vois ou tu veux en venir ;)
Mais qd tu joues a battle.net en mode ferme, tu ne crees pas de serveur
Le serveur est cree sur les serveurs de battle.net
C'est pour ca que ca rame des fois

Effectivement ce systeme pose un probleme qd tu joues en mode ouvert
ou en tcp/ip (a l'exterieur de ton reseau)
Car si tu crees une partie, personne ne pourra te rejoindre
Vu que tu crees le serveur sur ta machine et qu'elle est invisible a l'exterieur de ton reseau
Si tu crees un jeu en mode ouvert seulement ton reseau locale pourra te rejoindre

Par contre tu n'auras aucun probleme pour rejoindre d'autres partie en mode ouvert (battle.net) et en tcp/ip




Et Diablo dans tout ça ?

Eh bien la question est : est-ce que Diablo bind sur un port spéficique
(comme le faisait StarCraft il me semble) ou non.
Si oui, on ne peut pas jouer à deux sur le même modem, sauf manip spéciale
(avoir plusieurs addresse publiques, mais je ne connais aucun provider qui proposerait ce service).
Si non, on peut.
La réponse semble NON, je vérifie dimanche soir...
Bon j'espère que vous êtes pas tous endormis :D Si vous avez pas tout compris, posez des question.


Oui diablo a besoin d'un port specifique qd tu fais le serveur
Tu peux trouver les numeros de ports sur le site de blizzard

Par Enigm le 29/9/2000 à 11:11:00 (#105286)

euh c'est pas un chtit peu hors sujet (en partie?) http://forums.jeuxonline.info/rolleyes.gif

Par Babel le 29/9/2000 à 12:11:00 (#105287)

Bah légèrement, mais c'est très instructif... effectivement j'avais entendu dire qu'on ne pouvait pas jouer en open à Diablo avec 2 pc et un seul modem, maintenant je comprend a peu près pourquoi...

JOL Archives 1.0.1
@ JOL / JeuxOnLine