Gestion de congestion

10
COURS COURS COURS COURS programmation réseaux programmation réseaux programmation réseaux programmation réseaux Socket Socket Socket Socket TCP TCP TCP TCP UDP UDP UDP UDP Socket Socket Socket Socket TCP TCP TCP TCP UDP UDP UDP UDP Master 1 MSRS Master 1 MSRS Master 1 MSRS Master 1 MSRS – – FSA FSA FSA FSA Agadir Agadir Agadir Agadir a.boulouz a.boulouz a.boulouz a.boulouz Références : Références : Références : Références : 1-cours TCP/IP F.Laissus (poly MSIO) 2-TCP/IP Sockets in Java, L. Cavert , J. Donahoo Master MSRS 1 28/11/2010 Gestion des adresses réseau en Java 28/11/2010 Master MSRS 2 Chaque machine de l'Internet est identifiée par une adresse ou un nom uniques Ces deux entités sont gérées sous Java par la classe InetAddress dont voici quelque méthodes byte [] getAddress() : donne les 4 octets de l'adresse IP de l'instance InetAddress courante Gestion des adresses réseau en Java String getHostAddress() : donne l'adresse IP de l'instance InetAddress courante String getHostName() : donne le nom Internet de l'instance InetAddress courante InetAddress getByName(String Host) : crée l'instance InetAddress de la machine désignée par Host. Génère une exception si Host est inconnu. Host peut être le nom internet d'une machine ou son adresse IP sous la forme I1.I2.I3.I InetAddress getLocalHost() : crée l'instance InetAddress de la machine sur laquelle s'exécute le programme contenant cette instruction. s'exécute le programme contenant cette instruction. 28/11/2010 Master MSRS 3 Identifier la machine locale 28/11/2010 Master MSRS 4

description

chapitre de congestion

Transcript of Gestion de congestion

Page 1: Gestion de congestion

COURSCOURSCOURSCOURS

programmation réseauxprogrammation réseauxprogrammation réseauxprogrammation réseaux

Socket Socket Socket Socket TCP TCP TCP TCP –––– UDPUDPUDPUDPSocket Socket Socket Socket TCP TCP TCP TCP –––– UDPUDPUDPUDP

Master 1 MSRS Master 1 MSRS Master 1 MSRS Master 1 MSRS –––– FSA FSA FSA FSA AgadirAgadirAgadirAgadira.boulouza.boulouza.boulouza.boulouz

Références : Références : Références : Références : 1-cours TCP/IP F.Laissus (poly MSIO)2-TCP/IP Sockets in Java, L. Cavert , J. Donahoo

Master MSRS 128/11/2010

Gestion des adresses réseau en Java

28/11/2010 Master MSRS 2

Chaque machine de l'Internet est identifiée par une adresse ou un nom uniques

Ces deux entités sont gérées sous Java par la classe InetAddress

dont voici quelque méthodes

byte [] getAddress() : donne les 4 octets de l'adresse IP de l'instance InetAddress

courante

Gestion des adresses réseau en Java

String getHostAddress() : donne l'adresse IP de l'instance InetAddress courante

String getHostName() : donne le nom Internet de l'instance InetAddress courante

InetAddress getByName(String Host) : crée l'instance InetAddress de la machine

désignée par Host. Génère une exception si Host est inconnu. Host peut être le nom

internet d'une machine ou son adresse IP sous la forme I1.I2.I3.I

InetAddress getLocalHost() : crée l'instance InetAddress de la machine sur laquelle

s'exécute le programme contenant cette instruction.s'exécute le programme contenant cette instruction.

28/11/2010 Master MSRS 3

Identifier la machine locale

28/11/2010 Master MSRS4

Page 2: Gestion de congestion

Identifier la machine locale

Les résultats de l'exécution sont les suivants :

Résultats à l’exécution (si Pc connecté à un réseau (Internet))

IP=41.250.42.36

adresse=41.250.42.36

nom=pcbureauBoulouz

identité=pcbureauBoulouz/41.250.42.36

si non

IP=127.0.0.1

28/11/2010 Master MSRS 5

IP=127.0.0.1

adresse=127.0.0.1

nom=pcbureauBoulouz

identité=pcbureauBoulouz/127.0.0.1

Identifier la machine locale

Rappel :

Chaque machine a une adresse IP interne qui est 127.0.0.1.

Lorsqu'un programme utilise cette adresse réseau, il utilise la machine sur laquelle il

fonctionne. L'intérêt de cette adresse est qu'elle ne nécessite pas de carte réseau. On

peut donc tester des programmes réseau sans être connecté à un réseau. Une autre façon

de désigner la machine locale est d'utiliser le nom localhost.

Voir cours SMI5

28/11/2010 Master MSRS 6

Voir cours SMI5

Identifier une machine quelconque

28/11/2010 Master MSRS 7

Identifier une machine quelconque

Avec l'appel java getbyname, on obtient les résultats suivants :

Sans argument : Sans argument :

IP : 127.0.0.1nom : localhostidentité : localhost/127.0.0.1

Exemples de résultat fournit

Avec l'appel java getbyname www.menar.ma on obtient :

Avec argument : www.menara.ma

28/11/2010 Master MSRS 8

Avec argument : www.menara.maIP : 41.248.240.28nom : www.menara.maidentité : www.menara.ma/41.248.240.28Avec argument : www.msn.comIP : 65.55.17.27nom : www.msn.comidentité : www.msn.com/65.55.17.27

Page 3: Gestion de congestion

Communications TCP-IP

28/11/2010 Master MSRS - a.boulouz 9

Lorsque une application AppA d'une machine A veut communiquer avec une application

AppB d'une machine B de l'Internet, elle doit connaître plusieurs choses :

• l'adresse IP ou le nom de la machine B

• le numéro du port avec lequel travaille l'application AppB. En effet la machine B

Communications TCP-IP

•peut supporter de nombreuses applications qui travaillent sur l'Internet. Lorsqu'elle

reçoit des informations provenant du réseau, elle doit savoir à quelle application sont

destinées ces informations. Les applications de la machine B ont accès au réseau via

des guichets appelés également des ports de communication. Cette information est

contenue dans le paquet reçu par la machine B afin qu'il soit délivré à la bonne

application.

• les protocoles de communication compris par la machine B. Dans notre étude, nous

utiliserons uniquement les protocoles TCP/UDP-IP.

28/11/2010 Master MSRS 10

utiliserons uniquement les protocoles TCP/UDP-IP.

• le protocole de dialogue accepté par l'application AppB. En effet, les machines A et B

vont se "parler". Ce qu'elles vont dire va être encapsulé dans les protocoles TCP-IP.( pour les caractéristiques de TCP, voir le cours MSRS réseaux partie 2)

La relation client-serveur

Souvent, la communication sur Internet est dissymétrique : la machine A initie une

connexion pour demander un service à la machine B : il précise qu'il veut ouvrir uneconnexion pour demander un service à la machine B : il précise qu'il veut ouvrir une

connexion avec le service SB1 de la machine B.

Celle-ci accepte ou refuse. Si elle accepte, la machine A peut envoyer ses demandes au

service SB1. Celles-ci doivent se conformer au protocole de dialogue compris par le

service SB1.

Un dialogue demande-réponse s'instaure ainsi entre la machine A qu'on appelle

machine cliente et la machine B qu'on appelle machine serveur.

28/11/2010 Master MSRS 11

L'un des deux partenaires fermera la connexion.

Architecture d'un client

L'architecture d'un programme réseau demandant les services d'une application serveur

sera la suivante :

ouvrir la connexion avec le service SB1 de la machine B

si réussite alors

tant que ce n'est pas fini

préparer une demande

l'émettre vers la machine B

attendre et récupérer la réponse

la traiter

28/11/2010 Master MSRS 12

la traiter

fin tant que

finsi

Page 4: Gestion de congestion

Architecture d'un serveur

L'architecture d'un programme offrant des services sera la suivante :

ouvrir le service sur la machine locale

tant que le service est ouvert

se mettre à l'écoute des demandes de connexion sur un port dit port

d'écoute

lorsqu'il y a une demande, la faire traiter par une autre tâche sur un

autre port dit port de service

28/11/2010 Master MSRS 13

autre port dit port de service

fin tant que

Architecture d'un serveur

Le programme serveur traite différemment la demande de connexion initiale d'unLe programme serveur traite différemment la demande de connexion initiale d'un

client de ses demandes ultérieures visant à obtenir un service. Le programme n'assure

pas le service lui-même. S'il le faisait, pendant la durée du service il ne serait plus à

l'écoute des demandes de connexion et des clients ne seraient alors pas servis. Il

procède donc autrement : dès qu'une demande de connexion est reçue sur le port

d'écoute puis acceptée, le serveur crée une tâche chargée de rendre le service

demandé par le client.

Ce service est rendu sur un autre port de la machine serveur appelé port de service.

28/11/2010 Master MSRS 14

Ce service est rendu sur un autre port de la machine serveur appelé port de service.

On peut ainsi servir plusieurs clients en même temps.

Architecture d'un serveur

Une tâche de service aura la structure suivante :

tant que le service n'a pas été rendu totalement

attendre une demande sur le port de service

lorsqu'il y en a une, élaborer la réponse

transmettre la réponse via le port de service

28/11/2010 Master MSRS 15

fin tant que

libérer le port de service

Présentation de L’API Socket

Master MSRS 1628/11/2010

Page 5: Gestion de congestion

TCP/IP et les principaux services

Master MSRS 1728/11/2010

La notion de « socket »

Master MSRS 1828/11/2010

Processus de Sockets

Master MSRS 1928/11/2010

Processus de Sockets

Master MSRS 2028/11/2010

Page 6: Gestion de congestion

Processus de Sockets - 1

Master MSRS 2128/11/2010

Processus de Sockets - 2

Master MSRS 2228/11/2010

Processus de Sockets - 3

Master MSRS 2328/11/2010

Processus de Sockets - 4

Master MSRS 2428/11/2010

Page 7: Gestion de congestion

Processus de Sockets - 5

Master MSRS 2528/11/2010

Processus de Sockets - 6

Master MSRS 2628/11/2010

Processus de Sockets – mode non connecté UDP

Master MSRS 2728/11/2010

Dans l’Internet le protocole UDP (User Datagram Protocol) assure cette

fonctionnalité.

Processus de Sockets – mode non connecté UDP

Le paquetage java.net fourni deux classes pour faciliter la programmation réseau en

mode datagramme :

DatagramPacket

et

DatagramSocket.

Les données sont mises dans un objet de type DatagramPacket qui est envoyé sur le

réseau par le biais d’un objet de type DatagramSocket.

Note :Un datagramme peut être définit comme étant un message qu’on envoie sur

le réseau et dont l’arrivée, le temps d’arrivée et le contenu ne sont pas garantis

Master MSRS 2828/11/2010

Page 8: Gestion de congestion

Pour envoyer des datagrammes en Java nous devons suivre les étapes suivantes :

• Obtenir l’adresse du destinataire et la mettre dans une instance de la classe

InetAddress.

• Mettre les données et l’adresse dans une instance de la classe DatagramPacket

• Créer une instance de la classe DatagramSocket et lui confier l’envoi du

datagramme

Pour recevoir des datagrammes en Java nous devons suivre les étapes suivantes :

• Créer une instance de la classe de la classe DatagramSocket qui devra attendre

l’arrivée de données à travers le réseau.l’arrivée de données à travers le réseau.

• Créer une instance de la classe DatagramPacket qui recevra données qui lui

seront passées par l’instance de DatagramSocket.

Master MSRS 2928/11/2010

import java.net.*;

import java.io.*;

public class CoteEnvoi

{

static int port=5000;

// Le port UDP de destination

static InetAddress adr=null;

static DatagramSocket sock=null;

static String message="Salut!, mode datagramme en illustration";

static byte[] tampon=new byte[message.length()];

public static void main(String[] args) public static void main(String[] args)

throws SocketException, IOException {

if(args.length!=1)

{ System.out.println("Donnez comme argumentle nom du destinataire");

System.exit(1);

}

Master MSRS 3028/11/2010

try

{ adr=InetAddress.getByName(args[0]);

}

catch(UnknownHostException e)

{ System.out.println("resolution impossible");

System.exit(2);System.exit(2);

}

tampon=message.getBytes();

DatagramPacket paquet=new DatagramPacket(tampon,tampon.length,adr,port);

sock=new DatagramSocket();

sock.send(paquet);sock.send(paquet);

}

}

Master MSRS 3128/11/2010

La première chose que nous faisons est de résoudre le nom de la

machine destinatrice en adresse réseau. Cette adresse sera placée

dans un objet de type InetAddress.

Ensuite nous transformons notre chaîne de caractères en une suiteEnsuite nous transformons notre chaîne de caractères en une suite

d’octets afin de les transmettre sur le réseau. N’oublions pas que le

réseau ne comprend pas les caractères Unicode (ni toute autre forme

d’objet ou de variable).

En effet tout ce qu’un réseau comprend est une suite d’octets qui

transitent. Cette transformation se fait par la méthode getBytes() de

la classe String.

Il nous faut ensuite construire un datagramme en indiquant

l’emplacement des données à transmettre, leur longueur et enfinl’emplacement des données à transmettre, leur longueur et enfin

l’adresse et le port de destination.

Enfin nous ouvrons une DatagramSocket et utilisons sa méthode

send() pour envoyer notre datagramme.

Master MSRS 3228/11/2010

Page 9: Gestion de congestion

Côté réception les choses sont plus faciles.

Nous préparons une zone mémoire tampon pour recevoir les données. Nous préparons une zone mémoire tampon pour recevoir les données.

Ensuite nous créons un DatagramSocket pour écouter sur le port de

destination en attente de données. L’ordre d’attente se fait par la

méthode receive().

Cette méthode se charge de placer les données dans un

DatagramPacket gérant lui

même notre tampon.

Enfin les données sont extraites du tampon sous forme de chaîne de

caractères et imprimées à l’écran.

Master MSRS 3328/11/2010

import java.net.*;

import java.io.*;

public class CoteReception

{

static int port=5000;static int port=5000;

public static void main(String[] args) throws IOException,

SocketException

{

byte[] tampon=new byte[200];

String message;

DatagramSocket sock=new DatagramSocket(port);

DatagramPacket paquet=new DatagramPacket(tampon,tampon.length);

sock.receive(paquet);

message=new String(tampon);message=new String(tampon);

System.out.println(message);

}

}

Master MSRS 3428/11/2010

Processus de Sockets – mode connecté TCP

Contrairement au mode datagramme, le mode connecté garanti l’arrivée en

séquence des données émises en plus de la fiabilité. Dans l’Internet ce mode est

assuré au niveau de la couche de transport selon le modèle OSI par le protocole TCP

(Transmission Control Protocol).

Un tel mode est utile lors d’un transfert de fichiers par exemple.

Le paquetage java.net fourni les classes Socket et ServerSocket pour travailler avec

le mode connecté.

Nous allons dans la suite illustrer par un exemple l’utilisation du mode connecté en

Java.

Mais avant d’aborder l’exemple expliquons les étapes que doit effectuer un serveur et

un client pour assurer une communication en mode connecté.

Master MSRS 3528/11/2010

Le serveur doit :

• Instancier la classe ServerSocket et l’instruire à écouter sur un certain port.

• Accepter les connexions par la méthode accept() et créer un objet Socket pour faire

Processus de Sockets – mode connecté TCP

• Accepter les connexions par la méthode accept() et créer un objet Socket pour faire

référence à cette nouvelle connexion.

• Faire passer cette nouvelle connexion au programme approprié.

• Lorsque le traitement est fini fermer la connexion par la méthode close().

Le client doit :Le client doit :

• Se connecter au service approprié en instanciant la classe Socket et en lui passant

comme paramètres l’adresse du serveur et le port.

• Lorsque l’échange est terminé , il ferme la connexion par la méthode close().

Master MSRS 3628/11/2010

Page 10: Gestion de congestion

Le constructeur de la classe ClientConnecte se charge d’ouvrir une connexion vers le

serveur dont le nom et le numéro de port sont passés en paramètre. Pour pouvoir

envoyer des données sur le réseau nous devons disposer d’un objet de type

OutputStream. Cela se fait alors par la fonction getOutputStream() de la classe

Socket. Lorsque les données sont envoyées la connexion est fermée par la méthode

close().

Il est important de noter qu’il est impératif de traiter les exceptions qui peuvent

survenir.

Du côté du serveur les choses se compliquent un peu plus.

Tout d’abord nous devons expliquer la théorie du travail d’un serveur pour pouvoir

comprendre notre programme.

En général un programme serveur se charge d’écouter sur un port spécifique les En général un programme serveur se charge d’écouter sur un port spécifique les

demandes de connexion effectuées par les clients. A chaque nouvelle connexion il

crée alors un nouveau processus (ou processus léger) qui se charge alors de cette

connexion.

Le programme principal quant à lui retourne à l’écoute de nouvelles connexions.

Master MSRS 3728/11/2010

Exemple : voir TPs et exemples (cours)

Master MSRS 3828/11/2010