M1 MIAGE - Réseaux et Protocoles - TCP/UDP - DNS

Auteur(s):
Sébastien CHOPLIN

Exercice 1: TCP - UDP

  1. En quoi TCP n'est pas adapté au transfert de données qui ont des contraintes temps réél (contrainte de latence bornée par exemple) ?
  2. 4 stations A,B,C,D partagent un même réseau physique, A envoie de paquets UDP à B et sature le réseau alors que C envoyait des paquets TCP à D, le débit entre C et D chutte pour laisser la place au trafic UDP, pourquoi ?

Exercice 2: Echange TCP

Voici un échange TCP entre un navigateur web et un serveur web:

echange TCP

  1. Complétez les numéros de séquences manquant dans le schéma.
  2. Quelle semble être la taille de la fenêtre glissante TCP ?
  3. Représenter le scénario avec une fenêtre de taille 2
  4. Représentez le scénario avec une fenêtre de taille 2 et une perte de paquet au milieu de la transmission

Exercice 3: Trafic TCP

  1. Lancez ethereal pour analyser le trafic commencer l'analyse du trafic.
  2. Consultez la page web http://www.google.fr/.
    1. Observez le trafic TCP dans ethereal et décrivez les échanges TCP en utilisant un schéma comme dans le TD précédent.
    2. Quelle est la taille de la fenêtre TCP ?
  3. Recommencez en téléchargeant ce fichier http://ftp.freenet.de/pub/ftp.uni-kl.de/pub/linux/knoppix/KNOPPIX_V3.7-2004-12-08-EN.iso (c'est l'image ISO du dernier CD de Knoppix donc ça fait environ 700Mo) , comment évolue la taille de la fenêtre TCP au cours de l'échange ?

    NB: vous ne devriez pas pouvoir charger plus de qq secondes car le seul espace où vous pouvez écrire est la mémoire qui sera vite saturée par ce téléchargement.

Exercice 4: DNS - Domain Name Server

emprunté à http://www.commentcamarche.net/

Chaque station connectée sur Internet possède une (ou plusieurs) adresse IP propre. Cependant, les utilisateurs ne veulent pas travailler avec des adresses numériques du genre 193.49.184.6 mais avec des noms de stations ou des adresses plus explicites (appelées adresses FQDN - Fully Qualified Domain Name) du style www.u-picardie.fr .

Le protocole DNS (couche Application) assure la correspondance entre le nom d'une machine et son adresse IP.

On appelle résolution de noms de domaines (ou résolution d'adresses) la corrélation entre les adresses IP et le nom de domaine associé.

Noms d'hôtes

Aux origines de TCP/IP, étant donné que les réseaux étaient très peu étendus, c'est-à-dire que le nombre d'ordinateurs connectés à un même réseau était faible, les administrateurs réseau créaient des fichiers appelés tables de conversion manuelle (fichiers généralement nommés hosts ou hosts.txt), associant sur une ligne, grâce à des caractères ASCII, l'adresse IP de la machine et le nom littéral associé, appelé nom d'hôte.

Vous pouvez voir le contenu de ce fichier sous Knoppix ainsi:
cat /etc/hosts
Le Domain Name System

Le système précédent a l'inconvénient majeur de nécessiter la mise à jour des tables de tous les ordinateurs en cas d'ajout ou modification d'un nom de machine.

Ainsi, avec l'explosion de la taille des réseaux, et de leur interconnexion, il a fallu mettre en place un système plus centralisé de gestion des noms. Ce système est nommé Domain Name System, traduisez Système de nom de domaine.

Ce système consiste en une hiérarchie de noms permettant de garantir l'unicité d'un nom dans une structure arborescente.

arborescence du
domain name system

On appelle nom de domaine, le nom à deux composantes, dont la première est un nom correspondant au nom de l'organisation ou de l'entreprise, le second à la classification de domaine (.fr, .com, ...). Chaque machine d'un domaine est appelée hôte. Le nom d'hôte qui lui est attribué doit être unique dans le domaine considéré (le serveur web d'un domaine porte généralement le nom www mais ça n'a rien d'obligatoire, par exemple: iupmiage.sc.u-picardie.fr).

L'ensemble constitué du nom d'hôte, d'un point, puis du nom de domaine est appelé adresse FQDN (Fully Qualified Domain Name, soit Nom de Domaine Totalement Qualifié). Cette adresse permet de repérer de façon unique une machine. Ainsi www.commentcamarche.net représente une adresse FQDN.

Les machines appelées serveurs de nom de domaine permettent d'établir la correspondance entre le nom de domaine et l'adresse IP sur les machines d'un réseau. Chaque domaine possède ainsi, un serveur de noms de domaines, relié à un serveur de nom de domaine de plus haut niveau.

Ainsi, le système de nom est une architecture distribuée, c'est-à-dire qu'il n'existe pas d'organisme ayant à charge l'ensemble des noms de domaines. Par contre, il existe un organisme (l'InterNIC pour les noms de domaine en .com,.net,.org et .edu par exemple).

Le système de noms de domaine est transparent pour l'utilisateur, néanmoins il ne faut pas oublier les points suivants:

Codes des domaines internet

La classification du domaine, parfois appelées TLD (Top Level Domain, soit domaines de plus haut niveau), correspond généralement a une répartition géographique. Toutefois, il existe des noms, créés pour les Etats-Unis à la base, permettant de classifier le domaine selon le secteur d'activité, par exemple:

Codes par pays:
CodePays
AC Ile de l'Ascencion
ADAndorre
AEEmirats Arabes Unis
AFAfghanistan
AGAntigua et Barbuda
AIAnguilla
ALAlbanie
AMArménie
ANAntilles Néerlandaises
AOAngola
AQAntarctique
ARArgentine
ASSamoa Américaines
ATAutriche
AUAustralie
AWAruba
AZAzerbaïdjan
......
Pour effectuer cette conversion, chaque station doit être en mesure de contacter un serveur DNS pour qu'il effectue la conversion et renvoie l'adresse correspondant au nom envoyé par votre station.

Sous Knoppix, l'adresse du serveur DNS doit être mise dans le fichier /etc/resolv.conf.

Exemple de fichier /etc/resolv.conf:
 domain u-picardie.fr
 nameserver 193.49.184.6
 nameserver 193.49.184.17
 nameserver 193.49.184.5
domain indique le domaine par défaut qui sera utilisé si le nom de domaine n'est pas précisé (c'est optionnel).
nameserver IP indique l'adresse d'un serveur DNS, on peut en mettre plusieurs pour pallier à l'indisponibilité des autres serveurs.

  1. Quelles sont les machines pourlesquelles la conversion est faite sans contacter un DNS (à partir de la table de conversion située dans le fichier /etc/hosts)
  2. Pourquoi met-on l'adresse IP et non le nom FQDN du serveur DNS dans /etc/resolv.conf ?
  3. L'appel au serveur DNS pour convertir l'adresse d'une station se fait sous Knoppix avec la commande
    host IP_station
    Quelle est l'adresse IP de www.free.fr ?
  4. A l'aide d'ethereal, obtenez les informations suivantes:
    1. Quel protocole de transport est utilisé entre les protocoles IP et DNS ?
    2. Sur quel port votre station contacte les serveurs DNS pour effectuer ses requêtes ?
    3. Dans l'entête du protocole DNS, un bit est reservé pour signaler s'il s'agit d'une réponse ou d'une question, quel est la position de ce bit (par rapport au premier bit du protocole DNS) ?













Exercice 5: Programmation Java Réseau

Voici un exemple de client et serveur Java en mode connecté: (emprunté à Arnaud Pêcher)
Client: ExempleClient.java:

import java.net.*;
import java.io.*;

public class ExempleClient
{
    public static void main( String p[])
    {
        try
            {
                Socket serveur = new Socket("10.145.134.1",1245);

                InputStream entree = serveur.getInputStream();
                OutputStream sortie = serveur.getOutputStream();
                PrintStream psortie = new PrintStream( sortie );
                DataInputStream dentree = new DataInputStream( entree );
                
                psortie.println("Hello serveur");
                System.out.println("Client: message recu="+dentree.readLine());
            }
        catch ( UnknownHostException e ) 
         { System.out.println("Impossible de trouver le destinataire");}
        catch ( IOException e ) 
         { System.out.println("Impossible de se connecter à la machine"); }
    }
}
Serveur:ExempleServeur.java:
import java.net.*;
import java.io.*;

public class ExempleServeur
{
    public static void main( String p[])
    {
        try
            {
                ServerSocket oreille = new ServerSocket( 1245);
                System.out.println("Ready to accept connections");
                
                Socket client = oreille.accept();

                InputStream entree = client.getInputStream();
                OutputStream sortie = client.getOutputStream();
                PrintStream psortie = new PrintStream( sortie );
                DataInputStream dentree = new DataInputStream( entree );

                System.out.println("Serveur: message recu ="+ dentree.readLine());
                psortie.println("Hello you!");
                oreille.close();
            }
        catch ( IOException e ) 
         { System.out.println("Impossible de se connecter à la machine"); }
    }
}
NB: pour compiler du java sous Knoppix:
javac maclasse.java

  1. Adaptez le code precedent et lancez votre serveur.
  2. Testez votre client avec les serveurs de vos voisins.
  3. Vérifier le protcole utilisé avec ethereal