begin process at 2008 07 06 02:22:37
1 205 433 membres
14 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : client/serveur [ Windows / Réseau & Internet ] (tanoura)

client/serveur le 17/10/2007 18:38:03

tanoura
salut
je suis entrain de réaliser un programme de simulation du protocole RIP.il s'agit d'une application client serveur sur la même machine et meme code ;càd le code du client et le code du serveur sont écrit dans le meme code source.mon problème consiste à envoyer un msg pour tt les gateways voisins ,seulement il envoit à un seul gateway . je sais que c'est un problème de port mais je ne sais pas comment le résoudre.

Re : client/serveur le 18/10/2007 09:32:53

DeAtHCrAsH
Salut,
Pourquoi avoir mis le code du client abec celui du serveur ? Par définition le client et le serveur sont des entitées à pat entière.
Pour ce qui est de l'envoie des messages aux gateway, as tu essayé en faisant un broadcast sur le sous réseau ciblé ?
Pourquoi penses tu que cela est due à un problème de port ?

Shell

Re : client/serveur le 18/10/2007 09:40:38

The_Guardian
Bonjour,

Ok si je comprends bien ton programme, tu veux pouvoir lancer pleins de routeurs RIP, chacun émettant et recevant des messages par TCP
_ si tu fais du TCP, tu dois utiliser des liens point à point
- je vois deux possibilités :
(1) soit tu fais un serveur et pleins de clients, le serveur correspondant au réseau et chaque client à un routeur
(2) soit chaque routeur est un client-serveur, mais dans ce cas là il faut que tu dises manuellement au routeur 1 de se connecter au routeur 2 (par exemple)
Il faut que tu triches un peu donc dans le sens ou :
- (dans le cas 1) c'est le réseau qui transforme chaque paquet "broadcast" en plusieurs paquets "unicast"
- (dans le cas 2) le routeur connaît la liste de ses voisins routeurs donc il peut leur envoyer des infos point à point
Et je préfère le cas 1 en fait, ça permet d'avoir un code de routeur propre, sans verrue. Mais par contre il faut que tu encapsules tes paquets RIP dans un type de paquet plus gros contenant le routeur destination par exemple (qui peut être broadcast ou unicast)

===






Une autruche ne se cuit pas aux petits lardons

Re : client/serveur le 18/10/2007 10:13:02

DeAtHCrAsH
Salut The_Guardian,
Je pense que tu as besoin de quelques précison sur les protocoles réseau, car je remarque quelques incohérence dans tes dires (ou alors j'ai pas compris).

1°) Pour commencer pourquoi parles tu de TCP et de connexion P2P  ?
         => Ne pas oublier qu'un message RIP est encapsulé dans un datagramme UDP, et n'attend aucune réponse de la part des autres routeur lors de l'envoie des tables de routages.

2°) Ensuite, tu parles de transformer des paquets broadcast en paquets unicast ....
         => Rien à voir, ca n'a aucune sens, un broadcast est seulement le fait d'envoyer un message sur un réseau sans destinataire précis. Touts les clients receveront se message et le traiteront à leur guise (cf masque de sous réseau).
Je précise, que unicast est le "mode inverse" de multicast", et non broadcast.

Pour le reste jette donc un coup d'oeil sur Google, tu trouveras plein d'articles sur le RIP.

Shell

Re : client/serveur le 18/10/2007 10:23:06

The_Guardian
Bonjour DeathCrash

Non je crois que tu as pas compris :p
Je prépare ma réponse et je reviens, pour que ce soit bien concis.

===

Une autruche ne se cuit pas aux petits lardons

Re : client/serveur le 18/10/2007 10:46:25

The_Guardian


RE

Salut,

En fait, je pense que tu n'as compris ni ma réponse, ni le problème de notre ami. C'est pas très grave, je vais réexpliquer, je suis là pour ça après tout.

(1) TCP, UDP et IP

Le problème est de faire un simulateur du protocole RIP. RIP envoie des trames UDP, d'accord. Là, on fait de la simulation. Qui dit simulation dit répétabilité.

La répétabilité c'est quoi ? C'est le fait de pouvoir rejouer exactement la même simulation et d'obtenir le même résultat. Ça veut dire que ta simulation doit être fiable, et que tu dois pouvoir la contrôler. Si des paquets sont perdus (ce qui peut arriver dans un réseau), tu veux que ça soit le simulateur lui même qui décide, et non pas les conditions de l'ordinateur exécutant la simulation.

Répétabilité et fiabilité, ça veut dire TCP. En gros, je préconise l'utilisation de TCP pour simuler du UDP et du IP (et même de l'ARP ou n'importe quoi d'ailleurs).

(2) Absence d'acquittements

Il n'y a pas de rapport entre le fait que TCP acquitte le flux et le fait que les routeurs RIP n'acquittent pas les paquets RIP. Explication ? Voici un petit schéma :

Routeur 1 <=UDP=> Routeur 2
Routeur 1 et Routeur 2 communiquent en UDP. Il n'y a pas d'acquittement et des paquets peuvent être perdus. Ok.

Routeur 1 <=TCP=> Réseau <=TCP=> Routeur 2
Routeur 1 et Réseau communiquent en TCP. Il y a des acquittements et pas de paquets perdus. Réseau et Routeur 2 communiquent en TCP. Idem. Par contre, les pertes (éventuelles) sont gérées au niveau du programme Réseau. Pour Routeur 1 et Routeur 2, c'est transparent et ça se passe comme dans le cas du dessus.

(3) Broadcast, multicast et unicast

Unicast : one-to-one (point à point)
Broadcast : one-to-all (diffusion)
Multicast : one-to-many (point à multipoint)
Je ne comprends pas ta terminologie de "mode inverse", mais je suppose que c'est juste ta façon de voir les choses. Ok.

Bon mais le problème de compréhension là c'est la différence entre "comportement logique" et "comportement effectif".

Comportement logique : on est au niveau fonctionnel là. Un paquet broadcasté sur un réseau est reçu par toutes les stations du réseau ("réseau" peut être remplacé par lien, sous-réseau, etc).
Comportement effectif : là on parle d'implémentation. C'est quoi le réseau ? C'est quoi le lien ? Si j'ai trois "programmes routeurs" qui tournent sur ma machine, on va dire A, B et C, comment je fais pour savoir à qui A est connecté ? A est forcément connecté à B et C ? Non.

Vu que l'information de la topologie du réseau ne peut pas être déduite, il faut qu'elle soit quelque part. Soit elle est stockée à part (dans le "serveur réseau" que je proposais (cas 1) ou bien chaque "programme routeur" maintient une table de ses liens (cas 2)).

(3.1) Si les connexions entre "programmes routeurs" sont faites en UDP (même si c'est mal)

Ok, donc on va dire qu'on a des clients-serveurs UDP. Donc j'ai toujours mes trois programmes A, B et C et quand A broadcaste, je veux que seulement B reçoive (parce que la topologie est comme ça, admettons). Comment je fais un broadcast UDP vers un sous-ensemble de ports ? Euh... Ah ben c'est pas facile en fait. Problème.

(3.2) Si les connexions entre "programmes routeurs" sont faites en TCP

Même problème ici, on peut pas faire de broadcast TCP vers un sous-ensemble des ports. Hmmm... Mais que faire ?

(3.3) Solution : transformer du broadcast en du multi-unicast

Bon ben voilà une solution. Je sais que A veut envoyer un broadcast. Je regarde quelles sont les machines qui vont être atteintes. Je trouve B (et D allez). J'envoie un paquet unicast à B (et un autre à D). L'intérêt d'avoir du unicast c'est que je passe par mes liens TCP déjà établis.

(4) Google et RIP

En fait, je pense que ta dernière remarque est un peu hors sujet. Deux réponses possibles :
- ce n'est pas à moi de lire la doc de RIP mais à celui qui pose la question initiale, non ?
- jette un coup d'oeil sur Google, tu trouveras pleins d'articles sur la simulation de protocoles réseau :)

(5) Conclusion

C'est plus clair à présent ? Ça m'embête un peu d'avoir à me justifier quand même, surtout quand c'est pas la personne posant la question.

===

Une autruche ne se cuit pas aux petits lardons


Re : client/serveur le 18/10/2007 11:37:24

DeAtHCrAsH
Interressant ce que tu dis, mais ca n'en reste pas moins dénué de sens quant à la question posé par tanoura.
Tu mélanges beaucoup de notion réseaux sans forcément connaitres les spécificités de chacune d'entre elles.

Renseignes toi avant de déblatérrer des inepties. On est pas au pièces ici, on ne répond pas aux questions dans le seul but de faire grimper sa côte dans le top des membres (et j'espere que ce n'est pas le cas)!

Bref pour en revenir a ce que tu dis....

Quant on crée un simulteur, on reproduit toutes les conditions à l'identique de l'équipement.
Donc quand tu parles d'utiliser du TCP pour faire du RIP, tu es déjà hors sujet et tu ne fais que compliquer la compréhension du problème d'ou ma reflexion concernant google :) 
On ne résoud pas un problème par un autre problème!

Quote :
" je préconise l'utilisation de TCP pour simuler du UDP et du IP "
   => va vraiment falloir que tu révises te cours de réseau (si tu en as déjà eu ^_^ )

TCP = Connexion persistente (donc une seule connexion possible par couple Port/IP)
UDP = Connexion sans controle de données (donc multiple conenxion par couple Port/IP)

TCP & UDP sont deux protocoles different qui sont encapsulés dans IP.

On en fait pas de la programmation avec des a priori et des connaissance non abouties surtout dans le domaine du réseaux.

Sinon tanoura, je viens de penser à un truc. Netgear met à disposition les codes sources de tout ces firmwares intégré dans les routeurs grand public, tu peux  donc essayer de voir sur cette piste pour récuperer ce qui t'interresse concernant le protocle RIP.

Bon courage pour ton projet.

Shell

Re : client/serveur le 18/10/2007 11:54:29

The_Guardian

Je ne comprend pas ton agressivité DeathCrash, et de me dire que je deblate des inepties, c'est assez méchant de dire cela. Je sais de quoi je parle, tant pis si tu as envie de me casser ici, l'important pour moi est d'aider mon prochain avec mes connaissances, et d'évoluer dans ce sens. Le tout est que notre jeune ami au final arrive à se trouver dans son problème.

Et non qu'on se chamaille inutilement. Ce n'est certainement pas le but recherché ici, et ni le mien.

Bonne journée :p

 



Une autruche ne se cuit pas aux petits lardons


Re : client/serveur le 18/10/2007 12:21:02

DeAtHCrAsH
Yop,
Ne prend pas ca comme un affront.
Désolé si je t'ai paru agressif, ce n'était pas mon but. Si j'ai pris la peine de répondre c'est uniquement dans le but de faire avancer la discussion. Je suis surement maladroit dans ma manière de dire les choses, mais pas agressif.

Si tu as des doutes sur certaines de tes connaissances, pose plutot la question plutot que d'affirmer sans être sure.
Cela profitera à toutle monde à commencer par toi et moi ;-)

Bref j'espère au moins t'avoir aidé à y voir plus clair sur ce sujet, tout comme à tanoura.

Merci et passe une bonne journée aussi :)

Shell

P.S : J'espère ne pas t'avoir vexé ?

Re : client/serveur le 19/10/2007 17:38:18

rt15
Membre Club
Salut les gens.

Mais c'est qu'il y a du sang partout ici !

A ce que je comprend, The_Guardian voit ça comme ça :

+----------------------
couche application : Simulation de UDP/RIP.
+----------------------
couche transport TCP
+----------------------
couche réseau : IP
+----------------------
couche liaison de données : ethernet, token ring...
+----------------------
couche physique : cable, fibre...
+----------------------


Solution lourde mais qui permet certe un plus grand contrôle sur ce qui est échangé entre les différents composants du réseau (Pas de pertes de paquets).

De son côté DeAtHCrAsH voit ça "normalement" :

+----------------------
couche application : RIP (De préférence compatible avec le vrai RIP)
+----------------------
couche transport UDP
+----------------------
couche réseau : IP
+----------------------
couche liaison de données : ethernet, token ring...
+----------------------
couche physique : cable, fibre...
+----------------------


Cette solution a l'avantage d'espérer permettre un jour au PC de dialoguer avec un routeur CISCO ou autre. Et même si on cherche pas à recréer le RIP à l'identique, cette solution est plus simple.

Maintenant, je vais essayer déblatérer des ineptie, de manière à faire augmenter mon rank sur CS.

tanoura utilise certainement des sockets. Supposons que ce soient des sockets standarts. Supposons que tanoura ai souhaité utiliser la solution numéro 2.

Il a donc créer des socket en utilsant la constante et SOCK_DGRAM (UDP), et non SOCK_STREAM (TCP).

Pour la config, il faut remplir une structure sockaddr_in. AF_INET, le numéro de port... jusque là tout va bien.

Reste l'adresse IP. Bin là, en théorie pour faire du broadcast, comme cité plus haut, de manière à joindre tous les hôtes d'un réseau, il faut utiliser l'adresse de broadcast du réseau en question (Petite remarque : RIP v2 permet le broadcast, mais aussi le multicast sur 224.0.0.9, c'est à dire que tous les routeurs utilisant RIP v2 considère cette IP comme là leurs).

Déterminer cette adresse de broadcast est pas super trivial si il y a des sous réseaux. Mais tanoura fait certainement ses tests sur un réseau privé avec un masque en puissance de 2. On va dire qu'il a des privés de classe C :

PC1 : 192.168.0.1
PC2 : 192.168.0.2
PC3 : 192.168.0.3
...

Le réseau s'appelle donc : 192.168.0.0, avec un masque 255.255.255.0.

Pour avoir l'adresse de broadcast, il faut faire un... disons un not binaire du masque, enchaîné avec un or avec le réseau. Dans ce cas : 192.168.0.255.

Voilà. On sait comment configurer la socket en émission. Reste plus qu'à faire du send.
Côté client, je sais encore moins ce qu'il faut faire. Peut être la même chose...


3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08


[Page 1 Page 2]
Classé sous : problème, code, serveur, client

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS