Cours 4
Cours 4
134.59.9.96:45321
✦ contrôle total du coté applicatif
✦ très peu de contrôle du coté de la couche de
transport; seuls choix:
✦ Applis client-serveur utilisent des sockets
✦ fournissent interface entre applis et réseau (TCP ou UDP)
✦ désignent l’extrémité d’une connexion coté émetteur ou
1.protocole de transport (tcp/udp)
récepteur en l'associant à un port
✦ Quand la cnx (bidirectionnelle) est établie via des sockets, client
2.paramètres (taille buffers et segments)
et serveur peuvent communiquer par lectures/écritures
3 5
L’API “java.net” getByName
✦ public static InetAdress getByName (String nom_hote)
✦ utilise DNS pour construire une instance de InetAdress
✦ après importation de java.net.InetAddress:
✦ InetAddress adr = InetAddress.getByName(“www.unice.fr”)
✦ si échec req. DNS, levée de l’exception UnknownHostException
getAllByName
✦ public static InetAdress [] getAllByName (String nom_hote)
✦ renvoie toutes les IP@ de la machine “nom_hote”
✦ Vous connaissez des machines avec plusieurs IP@?
✦ getAllByName
✦ équivaut à getByName (“localhost”)
✦ getLocalHost
8 10
Mode “Stream” Mode “Stream”
Classes Classe Socket: opérations principales
§ 2 classes:
§ ServerSocket (pour le serveur)
§ Socket dit “de service”
sur lequel le serveur attend des demandes de connexions client
13
ss = new ServerSocket ()
ss.bind ()
client
sc = ss.accept ()
s = new Socket ()
requête
read () write ()
traitement
de la requête
réponse
write () read ()
sc.close () close ()
ss.close ()
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.out.println("Usage: java Server port");
System.exit(0);
}
int port;
port = Integer.parseInt(args[0]);
ServerSocket ss = new ServerSocket(port); // socket de service
Socket cs = ss.accept(); // Socket client
new InputStreamReader(cs.getInputStream())
Mode datagramme
);
while (true) {
String str = br.readLine(); // lecture du message
if (str.equals("END")) break;
System.out.println("ECHO = " + str); // trace locale
pw.println("ECHO " +str); // renvoi d'un echo
}
br.close();
pw.close();
ss.close();
cs.close();
}
}
15
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
Mode “Datagram”
Classes
if (args.length != 2) {
System.out.println("Usage: java Client serverAddress serverPort");
System.exit(0);
}
int port;
port = Integer.parseInt(args[1]);
Socket socket = new Socket(args[0], port);
§ 2 classes:
System.out.println("SOCKET = " + socket);
16
L’API “java.net” Mode “Datagram”
sockets UDP Séquence d’opérations
§ Socket serveur client
DatagramSocket socket = new DatagramSocket();
DatagramSocket socket = new DatagramSocket(4445); s = new DatagramSocket () s = new DatagramSocket ()
s.receive (PR)
Mode “Datagram”
Principales opérations
import java.net.*;
import java.io.*;
class SendData
{
public static void main(String argv[])
throws SocketException, IOException,
UnknownHostException
{
Emetteur
String message = "Bonjour le monde!";
byte[] tampon = message.getBytes();
InetAddress adresse = null;
DatagramSocket socket;
// recupère l’adresse IP de la machine
adresse = InetAddress.getByName("localhost");
// crée l’objet contenant les données du datagramme à envoyer
DatagramPacket envoi=
new DatagramPacket(tampon,tampon.length,adresse,50000);
// crée un socket UDP (le port est choisi par le système)
socket=new DatagramSocket();
// envoie le datagramme UDP
socket.send(envoi);
}
}
java SendData
22
import java.net.*;
Vocabulaire
import java.io.*;
class RcvData
{
public static void main(String argv[])
Terme Description
throws SocketException, IOException
{ famille de protocoles utilisés par le mécanisme de
byte[] tampon = new byte[1000]; domain
Récepteur
java RcvData sockaddr regroupe dans un tuple (hostname, port) les informations
Réception de la machine localhost sur le port 49290
Bonjour le monde!
23
http://docs.python.org/3.2/library/socket.html
Méthodes
('inari.unice.fr') retourne
API Python
✦
socket.gethostbyname
Serveur
s.listen(5) # Now wait for client connection.
✦ socket.bind(): liaison à un port while True:
c, addr = s.accept() # Establish connection with client.
print ('Got connection from', addr) Il faut recoder le
✦ socket.connect(): se connecte sur une sockaddr c.send(bytes('Thank you for connecting','UTF-8'))
c.close() # Close the connection texte en flux
✦ socket.listen(): mise en écoute #!/usr/local/bin/python3 # This is client.py file
Client
✦ socket.recvfrom(): réception host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
✦ socket.close(): fermeture connextion
s.connect((host, port))
print (s.recv(1024).decode('UTF-8'))
s.close # Close the socket when done
client
sock.bind()
s.listen( 5 )
s = socket.socket()
c.recv()
s.recv()
c.close() c.close()
#!/usr/local/bin/python3 # This is server.py file
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print("received message:", data.decode('utf-8'))
sock.sendto(bytes(data.decode(‘utf-8’).upper(),'utf-8'),addr)
✦ Ensemble de rx IP sous le contrôle d’une seule et
# il faut decoder le message recu sous la forme d'un flux d'octets
même entité (eg FAI)
#!/usr/local/bin/python3 # This is server.py file
33
Systèmes routeur
zone
routeur
autonomes interne fédérateur
routeur
interzones
même IGP
exécuté
dans un AS IGP=interior gateway proto
routeur
34
inter AS
Inter AS Routage par DV
✦ BGP: Border Gateway Protocol
✦ structure de données minimale: destination/next hop/ distance
✦ standard de facto ✦ Exemple de mise à jour: routeur transmet couples (dest,dist)
✦ protocole à vecteur de distances
35 37
36 38
Bellman-Ford
✦ Cherche PCC d’origine A
✦ donne arbre couvrant AB 10
1 AE 5
B C
RIP 10
Bellman_Ford( G, s)
BC 1
3 6
initialisation ( G, s) // poids des sommets mis à +infini
// poids du sommet initial à 0 ;
BE 2
9
pour i=1 à Nombre de sommets -1 faire
|
|
pour chaque arc (u, v) de G faire
| paux = poids(u) + poids(arc(u, v)); A CD 4
|
|
| si paux <poids(v) alors
| | pred(v) = u DC 6
5
| | | poids(v) = paux
pour chaque arc (u, v) de G faire 2 4 DA 7
| si poids(u) + poids(arc(u, v)) < poids(v) alors
2 EB 3
| retourner faux
retourner vrai
7 E D EC 9
ED 2
41
RIP Bellman_Ford( G, s)
Bellman-Ford
initialisation ( G, s) // poids des sommets mis à +infini
// poids du sommet initial à 0 ;
pour i=1 à Nombre de sommets -1 faire
| pour chaque arc (u, v) de G faire
| | paux = poids(u) + poids(arc(u, v));
| | si paux <poids(v) alors
9
A CD 4
0 ∞ ∞ ∞ ∞ DC 6
limité à 15 hops
5
✦
2 4 DA 7
0 10A 11B 15C 5A 2 EB 3
✦ échange DV avec voisins toutes les 30s 7 E D EC 9
ED 2
d’au plus 25 destinations 0 8E 9B 7E 5A
0 poids(A)+poids(AE)= 5
40 poids(B)+poids(BE)=10
49
Fonctionnement Limitations
Routeur D
SR dest rout. svt # hops
w A 1 prend seulement en compte
w AX x DX B
10
✦
ps
y B 1 X le nombre de hops
kb
M
z B 7
bp
y
56
C ne considère pas l’état de
s
✦
x - 0 X liaison pour améliorer la 10 Mbps
Routeur A bande passante
z
SR dest rout. svt # hops notification X
✦ corrigé dans OSPF
w - 0
z C 4
x - 0 50 52
Fonctionnement OSPF
Routeur D
SR dest rout. svt # hops
mise à jour
8E 14E 7E
✦ TOS: association de métriques fonction TOS
8E 13D 5 7
✦ Xcast avec MOPSF 9B
E D
✦ hiérarchique: décompose grands AS en zones
55 62
64 66
Modes d’utilisation
✦ Organisé autour du principe de modes d’utilisation
✦ non privilégié vs privilégié
IOS ✦
✦ hostname of router>
✦ ?
✦ version
67
Mode privilégié Configuration interfaces
✦ permet de configurer le routeur
✦ passage au mode privilégié par enable ✦ interfaces référencées par la convention
✦ changement du prompt
✦ Router>
✦ media type slot#/port#
✦ Router#
✦ media type est p.e. ethernet, fast ethernet, fddi, serial,...
✦ sous-modes du mode privilégié accessibles
✦ changent le prompt en Router(argument)# ✦ slot# disponible seulement sur routeurs avec slots qui
✦ augmente la fonctionnalité des commandes, p.e. permettent insertion modules; pour accéder à interface
✦ Router#show interfaces slot6 port2: ethernet 6/2
✦ Router#ip protocols ✦ MonRouteur# show interface ethernet 6/2
✦ Router#ip route
✦ Router#ip arp ✦ MonRouteur# show interface serial 0
✦ affichent les informations essentielles de la configuration du routeur
68 70
69 71
Retirer une commande Routage statique
✦ il suffit de la faire précéder d’un no ✦ Routage statique est limité aux réseaux simples
✦ no shutdown ✦ défini par la commande ip route
✦ MonRouteur(config)#interface serial 1/1 ✦ MonRouteur#config
MonRouteur(config-if)#no ip address 192.168.155.2 255.255.255.0 MonRouteur(config)#ip route 172.16.0.0 255.255.255.0 192.168.150.1
MonRouteur(config-if)ctrl-Z MonRouteur(config)#ctrl-z
MonRouteur#show interface serial 1/1 MonRouteur#show ip route
réseau routeur
suivant
72 74
73 75