Techniques d'implémentation des applications réseaux,  Philippe.Dax@enst.fr,  © ENST - 1996-2005

Plan

  1. Plan
  2. Couche application
  3. Architectures
  4. Modèle client-serveur
  5. Client centralisé, serveurs répartis
  6. Relais
  7. Passerelles
  8. Coopération de serveurs
  9. Coopération d'applications
  10. Implémentation d'applications classiques sous Unix
  11. Communications inter processus locaux
  12. Communications inter processus distants
  13. Inetd
  14. Protocoles basés ascii
  15. Conventions d'erreurs ascii
  16. Journalisation des messages d'erreur: syslog
  17. Choix d'implémentation d'une application réseau
  18. Choix d'implémentation d'une application réseau (2)
  19. Implémentation d'applications avec le Web
  20. HTTP
  21. Scripts CGI
  22. Applications locales déclenchées par le serveur
  23. Java
  24. 3D
© (Copyright) Philippe Dax - 1996-2005  

Couche application

La couche application dans les modèles OSI et Internet

Modèle OSI en 7 couches

Modèle Internet en 5 couches

Modèle ALF (Application Level Framing)

Interface de programmation avec les couches sous-jacentes

Opérations verticales (interface de services)

Connexion/déconnexion

Entrées/sorties

Boucles d'événements

Timeouts

Protocoles inter applications

Opérations horizontales (interface peer to peer)

Veiller à la bonne synchronisation des entrées/sorties

Automates à états

Architectures

Modèle client-serveur

Client centralisé, serveurs répartis

Relais

Passerelles

Coopération de serveurs

Coopération d'applications

Modèle client-serveur

Serveur centralisé, clients répartis

Manipulation de fichiers - serveur NFS

Lecteur de mail - serveur POP

Lecteur de news - serveur NNTP

Browser WWW - serveur HTTPD

Client centralisé, serveurs répartis

Monitoring réseau

SNMP

Robots et moteurs de recherche

Google

Yahoo

Relais

Store and forward

Mail relais

News feeds

Proxys

déportation de l'opération d'origine sur une machine d'accès global

proxy-cache

firewall

agents proxy-snmp

Passerelles

Tunnels

Encapsulation d'un protocole dans un autre

Réflecteurs

transfert des données par un protocole offrant des spécificités moindre

Translateurs

translation des données de/vers une machine d'accès global (proxy RTP)

Mixeurs

transformation des données par des procédés de codage / compression

Coopération de serveurs

Hiérarchie arborescente de serveurs

DNS (Domain Name System)

DSA X500 (Directory System Agent)

Internet cache (voisins et parents)

Squid

Coopération d'applications

Diffusion de groupe par multicast

Application à la fois client et serveur

Collecticiels

Répartition de ressources et d'informations

Peer to peer (P2P)

Morceaux de musique MP3 (Napster)

Implémentation d'applications classiques sous Unix

Communications inter processus locaux

Communications inter processus distants

Inetd

Protocoles basés ascii

Conventions d'erreurs ascii

Journalisation des messages d'erreur: syslog

Communications inter processus locaux

Nécessite un système multitâche

coopération de processus

Mécanismes de communications internes

pipe

tube de communication limité à une même filiation de processus

pipe nommé

nommage du tube limité à l'arborescence Unix d'une machine

IPC SystemV

mémoire partagée

files de messages

sémaphores

socket de la famille AF_UNIX

streams

interface avec les drivers périphériques (empilements de protocoles)

Communications inter processus distants

Nécessite des protocoles réseaux sous-jacents

adressage unique

adresse numérique unique : IP

adresse par nom : DNS

transport

fiable / connecté : TCP

non fiable / non connecté : UDP

port d'attache

API socket

point de connexion lié à un transport (socket)

attachement de ce point de connexion à une adresse "machine + port" (bind)

mécanisme de rendez-vous (connect/accept)

Mapping des services réseaux

mapping service - port/protocole dans /etc/services (facultatif)

service numero/protocole  alias  # commentaire

getservbyname()

API RPC (Remote Procedure Call)

adressage d'une procédure distante (nom du programme, nom de la procédure, numéro de version)

enregistrement du serveur auprès d'un portmapper (portmap, port 111)

mapping décrit dans /etc/rpc

utilisation de XDR (Echange de données indépendantes de l'architecture interne des machines)

mise à la disposition de "stubs" pour faciliter la programmation

précompilateur "rpcgen" générateur des stubs et fichiers include

Inetd

Daemon de daemons réseaux

Ecoute simultanément sur tous les ports des daemons réseaux

Fichier de configuration /etc/inetd.conf

service stream|dgram proto [no]wait owner path argv

Fonctions

bind sur tous les ports

Effectue l'accept

fork/exec sur le daemon sollicité

Duplique le descripteur de socket sur stdin et stdout

Mise oeuvre

Lancé à la fin du "boot" par /etc/rc.local

Relit la table /etc/inetd.conf par un kill -HUP pid_inetd

Incidence sur l'écriture d'un serveur

Suppression des appels système (socket, bind, listen, accept, fork, exec)

Descripteur de socket sur <stdin> et <stdout>

getpeername(0, &sin, &len) : permet de retrouver l'adresse de l'appelant

Protocoles basés ascii

Prise en compte de l'hétérogénéité des systèmes

Lignes terminées par <cr><lf> : MsDos, Windows

Lignes terminées par <lf> : UNIX

Lignes terminées par <cr> : MacOS

Lignes terminées par <cr><lf> : Network

Utilisation par telnet host port

Facile à utiliser

Mode de mise au point

Protocoles "ascii-based" biens connus

SMTP : mail

POP : mail

NNTP : news

FTP : ftp

HTTP : www

Conventions d'erreurs ascii

Erreurs sous forme ascii rendues au client

Comptes-rendus d'erreurs visibles par le client et non conservées par le serveur

Compréhensible par le client (Ascii)

Format: numéro: texte explicatif

Classification des erreurs selon les RFC en vigueur

100-199: erreurs système

200-299: informations à l'utilisateur (succès)

300-399: informations de progression

400-499: erreurs de syntaxe dans le protocole

500-599: rapports de terminaison anormale

Journalisation des messages d'erreur: syslog

Les daemons sont déconnectés du terminal

Facilités de syslog

Kernel

Daemon

Mail

Lpd

Auth

User

Local0 à local7

Niveaux de sévérité

Emergency

Critic

Error

Notice

Info

Debug

Fichier de configuration syslog.conf

destination

destination: console, fichier (/var/log/facility.log), mail, @host

Réseau de daemons syslogd

Fonctions

#include <syslog.h>

openlog(facility, flags, err_level)

syslog(err_level, "message")

syslog(err_level, "message %m")

closelog()

Choix d'implémentation d'une application réseau

Choix des critères et objectifs en fonction du type d'application

performance

portabilité

reutilisabilité

sécurité

sureté

demonstrabilité

Choix de l'architecture

OSI vs ALF

client/serveur vs émetteur/récepteur

Choix de la plateforme

serveur Unix / serveur NT

station Unix / PC

NC

multi-plateforme

Choix du système

systèmes: Unix, Windows, MacOS

mono-système

multi-système

Choix du langage

C, C++ : bibliothèques C, nsl, socket, bind, thread, X*

Java : classes

Scripting: Tcl/Tk, Python, Perl, Shell

Choix du transport

contrôle ou non des pertes de paquets

contrôle ou non de l'ordre de délivrance des paquets

contrôle ou non de la duplication des paquets

contrôle ou non de la congestion

Choix d'implémentation d'une application réseau (2)

TCP ou UDP (mode connecté ou non connecté)

contrôle implicite par TCP, contrôle explicite par UDP, pas de contrôle

Dépend de la taille des messages

Dépend des délais induits

Dépend de la capacité de l'application à contrôler le flux des données

Daemon standalone ou inetd

Dépend de la taille de l'espace swap local

Dépend de la vitesse à traiter des requêtes

Dépend de la fréquence des requêtes (évaluation de la sollication du service)

Dépend du maximum de ports écoutables par inetd

Daemon itératif ou concurrentiel

Dépend de la capacité du serveur à servir de manière séquentielle ou parallèle

Dépend de la durée de traitement d'une requête par le serveur

Dépend de la granularité des données

Nombre de processus daemons sur un même port

Daemon multi-threadé

Dépend de la granularité des données et de leurs types

Implémentation d'applications avec le Web

HTTP

Scripts CGI

Applications locales déclenchées par le serveur
(Viewers)

Java

3D

HTTP

Protocole ASCII

accessible par telnet

telnet www.host.la 80 
GET / HTTP/1.1 
<cr><cr>

Opérations

GET

HEAD

POST

PUT

URI/URL

methode://hote[:port]/chemin[/#ancre][?paramétres]

Méthodes

http

ftp

telnet

gopher

wais

file

mailto

news

Racine des pages

différente de celle d'Unix (/), définie dans httpd.conf (/www/pages par ex.)

arborescence accessible en lecture par le serveur httpd

pages individuelles accessibles par http://hote/~user/

page par défaut: index.html (en rw-r--r--)

Scripts CGI

Production dynamique de pages HTML

Protocole ASCII

Méthode GET

Paramètres transmis dans l'URL après le ?

Paramètres récupérés dans la variable QUERY_STRING

Méthode POST

Paramètres transmis séparemment de l'URL

Paramètres récupérés sur l'entrée standard <stdin>

Formulaires

Balises <form action=script.cgi method=...>...</form>

Paramètres transmis dans l'ordre physique où ils apparaissent à l'écran

Format de la chaîne des paramètres