IFT3820/IFT6833
Gestion de Réseaux et Protocoles

Département d'informatique
et de recherche opérationnelle

Été 2002


Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Sessions antérieures
(A01, H02)

IFT3820/IFT6833 ; Démonstration #8


Buts:

  • Sockets ...

    virelangues:
    "Les chaussettes de l'archi-duchesse, sont-elles sèches ou archi-sèches?"


- Exercice -1- (Solution)

Ecrire un programme qui ouvre :

  • 1. une socket de la famille UNIX, de type SOCK STREAM avec le protocole TCP.
  • 2. une socket de la famille UNIX, de type SOCK DGRAM avec le protocole UDP.
  • 3. une socket de la famille UNIX, de type SOCK DGRAM avec le protocole par d´efaut (désigné par 0).
  • 4. une socket de la famille UNIX, de type SOCK STREAM avec le protocole par d´efaut (désigné par 0).
  • 5. une socket de la famille INTERNET, de type SOCK DGRAM avec le protocole UDP.
  • 6. une socket de la famille INTERNET, de type SOCK STREAM avec le protocole TCP.
  • 7. une socket de la famille INTERNET, de type SOCK DGRAM avec le protocole TCP.
  • 8. une socket de la famille INTERNET, de type SOCK STREAM avec le protocole UDP.
  • 9. et une dernière de la famille INTERNET, de type SOCK RAW avec le protocole IP.

Est-ce que ces ouvertures ont effectivement eu lieu? Lesquelles? Lorsqu'une ouverture échoue, comment pourrait-on en connaître la raison (protocoles non disponibles, droits d'accès etc.)?

- Exercice -2- (Solution Q1) (Solution Q2)

  • 1. Ecrire un programme qui ouvre une socket UNIX quelconque. Avant, pendant et après l'exécution de ce programme, lancer la commande (sous Red Hat Linux release 7.1 (Seawolf)) netstat -a -x (ou netstat -a -p -A unix). Pouvez-vous situer la socket que vous avez ouverte?
  • 2. Ecrire un nouveau programme qui ouvre une socket INTERNET quelconque. Avant, pendant et après l'exécution de ce programme, lancer la commande netstat -a -p -A inet. Pouvez-vous situer la socket que vous avez ouverte ?

- Exercice -3- (Solution)

Ecrire un programme qui crée une socket UNIX quelconque et lie cette socket à un port donné avec la primitive bind.

Mêmes questions qu'auparavant : lancer avant, pendant et après l'exécution du programme, les commandes netstat -a -p -A unix et aussi la commande ls.

(Il y aura un positionnement des bits SET_UID et SET_GID et il se peut que vous ne puissiez pas positionner ces bits pour des raisons de privilèges, à vérifier!)

- Exercice -4- (Solution)

Donner l'adresse IP de la machine www2.iro.umontreal.ca ainsi que le nom et l'adresse IP du serveur de nom. Donner aussi l'adresse IP de la machine www.lemonde.fr du journal français Le Monde.

- Exercice -5- (Solution)

  • 1. Ecrire un programme qui, étant donné un numéro de port nb port passé en argument, crée une socket INTERNET quelconque (à vous de choisir le type) et la lie au port numéro nb port de la machine locale.
  • 2. Mêmes questions habituelles : En lançant les commandes ls et netstat -a -A inet avant, pendant et après l'exécution, vérifier si ces commandes ont pris votre socket en compte.
  • 3. Essayez divers numéros de port. Est-ce que le numéro de port indiqué correspond effectivement au numéro de port que vous avez spécifié ?
  • 4. Que se passe-t-il lorsque vous spécifiez un numéro de port déjà utilisé par ailleurs ?
  • 5. Que se passe-t-il lorsque le port demandé est le port 0 ? Est-ce que la socket a été attachée ? Est-ce que le numéro de port est 0 ?

- Exercice -6- (Solution)

  • 1. Réaliser le programme d'un serveur TCP qui prend en argument un numéro de port. Ce serveur crée une socket et l'attache à ce numéro de port. Ensuite, il doit commencer par écouter le réseau en attente des demandes de connexions, et accepter jusqu'à deux connexions avant de fermer la socket. Pour chaque connexion acceptée, il doit afficher l'adresse du client et le descripteur de la nouvelle socket de service. Après avoir accepté deux connexions, il doit attendre la frappe d'une touche pour fermer toutes les sockets.
  • 2. Réaliser le programme d'un client TCP qui prend en argument l'adresse (adresse IP + numéro de port) d'un serveur TCP. Ce client doit créer une socket et l'attacher à un port libre, et afficher le numéro de ce port libre. Ensuite, il doit essayer de se connecter au serveur et l'afficher lorsqu'il a réussi. Enfin, il doit attendre la frappe d'une touche pour fermer sa socket.
  • 3. Identifier ces connexions avec la commande netstat -a -p -A inet alors que la connexion est toujours ouverte.
  • 4. Que se passe-t-il lorsque que le processus client ou serveur se termine sans que la socket ait été fermée ? Est-ce que la socket subsiste ou non ?
  • 5. Est-ce que la connexion est bloquante ou non ? Autrement dit, que se passe-t-il dans le processus client lorsqu'une connexion a été demandée et que de l'autre côté, pour une raison quelconque, le serveur n'accepte pas la connexion immédiatement ?
  • 6. Est-ce que l'acceptation est bloquante ? Autrement dit, que se passe-t-il dans le processus serveur lorsque la primitive accept a été appelée et qu'aucune connexion n'a été demandée?
[top]


Dernière mise à jour : Sat Jul 27 19:50:05 EDT 2002
dift3820@iro.umontreal.ca
dift6833@iro.umontreal.ca