Introduction à l'IPC et Réseaux IP
Introduction à l'IPC et Réseaux IP
INTRODUCTION
à
la communication
IPC Internet
Eric Gressier-Soudan
CNAM-CEDRIC
3 Mars 1994 1
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
REFERENCES BIBLIOGRAPHIQUES
Open Networking with OSI. Adrian Tang, Sophia Scoggins. Prentice Hall 1992.
3 Mars 1994 2
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
PLAN
1. INTRODUCTION
2. RAPPELS
3. INTERCONNEXION DE RESEAUX : IP
5. API SOCKET
6. API TLI
7. MODELE Client/Serveur
3 Mars 1994 3
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
1. INTRODUCTION
3 Mars 1994 4
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 5
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
NFS
/
etc bin usr
passwd spool
Serveur felix
felix : /user
user
gerard
texte
3 Mars 1994 6
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
2. Rappels
3 Mars 1994 7
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Applications Réseaux
6. Présentation XDR
5. Session RPC
3. Réseau IP
3 Mars 1994 8
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Méthodes d'accès :
3 Mars 1994 9
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Hôtes connectés
Répéteur
Segment
Répéteurs Eloignés
1000m max
Charge résistive
50ohms
Points de raccordement :
transceivers
3 Mars 1994 10
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Type (Ethernet)
Longueur des données (norme 802.3)
=>Un champ type : 2 octets, qui peut aussi contenir la longueur des
données de la trame
3 Mars 1994 11
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Anneau
Jeton
Pont Pont
802.3 -FDDI 802.5 -FDDI
Backbone :
FDDI
Bus Jeton
Pont
802.4 -FDDI
Les Adresses Physiques sur les réseaux locaux (48 bits) sont
homogènes :
Les différents types de LAN peuvent être reliés par des Ponts.
3 Mars 1994 12
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3. INTERCONNEXION DE
RESEAUX : IP
3 Mars 1994 13
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Couche Réseau IP
Internet Protocol
IGMP ICMP
ARP RARP
3 Mars 1994 14
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
* Adressage Internet
* Fragmentation/Réassemblage, Adaptation de la
taille des messages soumis par la couche
Transport suivant les possibilités offertes par la
couche Liaison.
3 Mars 1994 15
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
0 4 8 16 19 24 31
No Longueur Façon dont doit
Version de l'entête être géré le Longueur du Datagram (nb d'octets)
(nb de mots
de l'IP(4) datagram
de 32 bits)
No Id -> unique pour tous les flags (2bits): Offset du fragment p/r au
.fragmenté Datagram Original
fragments d'un même Datagram
.dernier (unit en nb de blk de 8 o)
Adresse Emetteur IP
Adresse de Destination IP
Padding: Octets
Options : pour tests ou debug à 0 pour que
l'entête *32 bits
DONNEES
...
3 Mars 1994 16
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
T.U.V.W
(N°Réseau, N°station)
[Link]
3 Mars 1994 17
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Classe A :
0 1 8 16 24 31
0 N°Réseau N°Station
Classe B :
0 1 8 16 24 31
1 0 N°Réseau N°Station
3 Mars 1994 18
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Classe C :
3 Mars 1994 19
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#
[Link] boulder [Link]
[Link] boulder-gw [Link]
[Link] tigger [Link]
#
#
loopback-net 127.0.0 Software loopback net
cu-netmask 255.255.255 Netmask
#
colorado 128.138 University of Colorado
cu-engineer 128.138.240 Engineering Center Backbone
cu-boulder 128.138.238 Campus Backbone
#
3 Mars 1994 20
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
01 02 03 04
A A+1 A+2 A+3
01 02 03 04
A+3 A+2 A+1 A
3 Mars 1994 21
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Big Endian
01 02 03 04 01 02 03 04
A+3 A+2 A+1 A A A+1 A+2 A+3
htonl ntohl htonl ntohl
04 02 0103 01 02 03 04
A+3 A+2 A+1 A A A+1 A+2 A+3
Format Réseau
3 Mars 1994 22
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 23
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <sys/types.h>
#include <netinet/in.h>
struct in_addr {
ulong s_addr
};
3 Mars 1994 24
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
gethostbyname
struct hostent
*gethostbyname
(char *hostname)
#include <netdb.h>
struct hostent {
char *h_name
char ** h_aliases
int h_addrtype/* AF_INET */
int h_length/*long. adresse*/
char **h_addr_list
};
le dernier champ est une liste d'adresses IP au
format in_addr terminée par NULL :
3 Mars 1994 25
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <stdio.h>
#include <sys/types.h>
#include <netdb.h> /* for struct hostent */
#include <sys/socket.h> /* for AF_INET */
#include <netinet/in.h> /* for struct in_addr */
#include <arpa/inet.h> /* for inet_ntoa() */
main(argc, argv)
int argc;
char **argv;
{
register char *ptr;
register struct hostent *hostptr;
switch (hostptr->h_addrtype) {
case AF_INET:
pr_inet(hostptr->h_addr_list, hostptr->h_length);
break;
default:
printf("unknown address type");
break;
}
}
}
3 Mars 1994 26
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
ICMP IGMP
IP ARP RARP
Démultiplexage
fondé sur le
type de la trame
Arrivées de
Trames
3 Mars 1994 27
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
=> 2 techniques :
=> ARP
3 Mars 1994 28
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Fonctionnement :
A (@IA, PA) doit dialoguer avec B (@IB , PB )
Améliorations :
3 Mars 1994 29
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 30
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
0 8 16 31
Type de l'interface Physique
pour laquelle l'adresse
Liaison est recherchée Protocole considéré
(ex: 1 pour Ethernet)
3 Mars 1994 31
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 32
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 33
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Couche Transport
TCP UDP
1 En fait, la désignation d'un processus unix qui réalise le service distant se fait à l'aide
de la notion d'extrêmité. Hors, une extrêmité est un N° de port + une adresse IP.
3 Mars 1994 34
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
getservbyname
struct servtent
*getservbyname
(char *servtname,
char *protname)
#include <netdb.h>
struct servent {
char *s_name
char ** s_aliases
int s_port /*entier 16 bit*/
char *s_proto
};
voir /etc/services pour les n°Ports déjà affectés (fichier [Link] uniquement)
3 Mars 1994 35
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Protocole de Transport :
- sans connexion,
- sans acquits,
- ne conserve pas l'ordre des messages,
- sans contrôle de flux,
-multiplexage/démultiplexage p/r aux ≠ N°Port
- préserve la notion d'enregistrement.
=> possibilités de :
- pertes de messages,
- duplication des messages,
- déséquencement,
- émetteur trop rapide p/r au récepteur
Protocole rapide,
Fiabilité suffisante sur un réseau local
avec des sites
pas trop chargé.
3 Mars 1994 36
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Démultiplexage UDP
Démultiplexage UDP
fondé sur le N° Port
Couche IP
3 Mars 1994 37
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
IGMP ICMP
3 Mars 1994 38
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
- Controle d'Erreurs,
- Assemblage/Déassemblage,
- Multiplexage/Démultiplexage.
3 Mars 1994 39
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 40
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 41
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Options
(optionnel -> longueur variable de l'entête Padding
d'où le champ HLEN)
Données
...
3 Mars 1994 42
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
5. API SOCKET
3 Mars 1994 43
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Processus A Processus B
ex locale a ex locale b
mode d'échange
IPC
N°Port A,@IP A N°Port B,@IP B Réseau
Transport
@IP A @IP B
IP
#Eth A #Eth B
LAN
Pour un participant donné, une association peut
n'être que partiellement renseignée, c'est à dire
toutes les informations liées à l'association ne sont
pas encore définies à un instant donné.
!?! A tout moment, chaque processus a une vue locale de
l'association en cours d'utilisation ... cette vue peut donc être
partielle.
Pas d'état global en univers réparti !
3 Mars 1994 44
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Client Serveur
création de socket :
primitive socket
ouverture de dialogue :
primitive bind
primitive accept
transfert de données :
primitives :
read , write , send , recv , sendto ,
recvfrom , sendmsg , recvmsg
fermeture du dialogue :
3 Mars 1994 45
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Serveur
socket()
bind()
listen()
accept()
attente d'une connexion Client
(serveur bloqué) socket()
établissement de connect()
connexion
demande de service + write()
read() données
servir
la demande
write()
réponse+résultats read()
3 Mars 1994 46
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Serveur
socket()
bind()
Client
recvfrom()
attendre les socket()
demandes
(Serveur bloqué) [bind()]
demande de service + sendto()
données
servir
la demande
sendto()
réponse+résultats
recvfrom()
3 Mars 1994 47
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Descripteur
de socket
tampons
pour 1
message
File des
messages
en
réception
File des
messages
en
émission
3 Mars 1994 48
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <sys/types.h>
#include <sys/socket.h>
#inclide <netinet/in.h>
int
socket
(int family,
int type,
int protocol);
crée la boite aux lettres, et retourne un n° de
descripteur (comparer au résultat de l'appel
système open() sur fichier)
Famille :
locale
AF_UNIX : communication locale (i-node)
réseau
AF_INET : communication Internet
AF_ISO : communication ISO
....
3 Mars 1994 49
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 50
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Types de protocoles :
IPPROTO_UDP
IPPROTO_TCP
IPPROTO_ICMP
IPPROTO_RAW
3 Mars 1994 51
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 52
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <sys/socket.h>
struct sockaddr_in {
short sin_family;/*AF_INET*/
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
3 Mars 1994 53
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
struct sockaddr
socket N°Port
@IP
Processus
socket N°Port
@IP
Processus
3 Mars 1994 55
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <sys/types.h>
#include <sys/socket.h>
int bind
(int sd,
struct sockaddr *myaddr,
int addrlen)
Serveur - listen()
3 Mars 1994 57
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
#include <sys/types.h>
#include <sys/socket.h>
int accept
(int sd,
struct sockaddr *clientaddr,
int clientaddrlen)
3 Mars 1994 58
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Avant accept :
sd socket N°Port
accept()
@IP
Processus
Identification socket Identification socket
serveur client ?
Après accept :
sd socket N°Port
accept()
nsd @IP
Processus
newsocket
Identification socket Identification socket
serveur client
3 Mars 1994 59
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Client - connect()
#include <sys/types.h>
#include <sys/socket.h>
int connect
4
(int sd,
struct sockaddr *servaddr,
int addrlen)
Etablissement de l'association avec le
processus serveur visé.
send(), recv()
#include <sys/types.h>
#include <sys/socket.h>
int 5 send
(int sd,char *buff,int nbytes,int flags)
int recv
(int sd,char *buff,int nbytes,int flags)
close()
3 Mars 1994 62
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
sendto(), recvfrom()
#include <sys/types.h>
#include <sys/socket.h>
int 7 sendto
(int sd,char *buff,int nbytes,int flags,
struct sockaddr *to,int addrlen)
int recvfrom
(int sd,char *buff,int nbytes,int flags,
struct sockaddr *from,int *addrlen)
#ifdef __STDC__
extern void exit( int );
extern void perror( char * );
extern int printf( char *, ... );
extern int bind( int, struct sockaddr *, int );
extern int socket( int, int, int );
extern int read( int, char *, unsigned );
extern char * strcpy( char *, char *b );
extern int fcntl( int, int, int );
extern int accept( int, struct sockaddr *, int * );
extern int listen( int, int );
extern int unlink( char * );
extern int getsockname( int, struct sockaddr *, int * );
{
int sock; /* fd for the listening socket */
int ear; /* fd for the working socket */
struct sockaddr_in sockaddr; /* sytem's location of the socket */
struct sockaddr_in caller; /* id of foreign calling process */
int sockaddr_in_length = sizeof(struct sockaddr_in);
char buf[BUFSIZ];
int read_ret;
int fromlen = sizeof(struct sockaddr_in);
char acknowledgement[BUFSIZ];
3 Mars 1994 64
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
/*
* open a net socket, using stream (file-style i/o) mode, with protocol irrelevant ( == 0 )
*/
if ( (sock = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: can't assign fd for socket", argv[0] );
perror(s);
exit(__LINE__);
}
/*
* register the socket
*/
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = INADDR_ANY; /* not choosy about who calls */
sockaddr.sin_port = 0;
/*
* get port number
*/
if ( getsockname( sock, (struct sockaddr *) &sockaddr, (int *)&sockaddr_in_length ) < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: can't get port number of socket (%d)",
argv[0], sock );
perror(s);
exit(__LINE__);
}
printf("opened socket as fd (%d) on port (%d) for stream i/o\n", sock, ntohs(sockaddr.sin_port));
printf("struct sockaddr_in {\n\
sin_family = %d\n sin_addr.s_addr = %d\n sin_port = %d\n\
} sockaddr;\n"
, sockaddr.sin_family
, sockaddr.sin_addr.s_addr
, ntohs(sockaddr.sin_port)
);
3 Mars 1994 65
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 66
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
if ( read_ret < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: error reading socket", argv[0] );
perror(s);
exit(__LINE__);
}
3 Mars 1994 67
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
char *line[] = {
"Mary had a little lamb;\n",
"Its fleece was white as snow;\n",
"And everywhere that Mary went,\n",
"She told everyone that Edison invented\nthe telephone before Bell did.\n"
};
int n_line = 4;
/*
* arg 0 is program name; arg 1 is remote host; arg 2 is port number of listener on remote host
*/
#ifdef __STDC__
void main( int argc, char *argv[] )
#else
main(argc,argv)
int argc; char *argv[];
#endif
{
int plug; /* socket to "plug" into the socket */
struct sockaddr_in socketname; /* mode, addr, and port data for the socket */
struct hostent *remote_host; /* internet numbers, names */
extern int n_line;
extern char *line[];
char buf[BUFSIZ];
int i;
3 Mars 1994 68
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 69
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
struct sockaddr_in {
sin_family =2
sin_addr.s_addr = 0
sin_port = 4192
} sockaddr;
struct sockaddr_in {
sin_family =2
sin_addr.s_addr = [Link]
sin_port (!!!) = 4230
} caller;
isockl: read from socket as follows:
(Mary had a little lamb;
)
isockl: read from socket as follows:
(Its fleece was white as snow;
)
isockl: read from socket as follows:
(And everywhere that Mary went,
)
isockl: read from socket as follows:
(She told everyone that Edison invented
the telephone before Bell did.
)
^C
[1] Done isockl
% ^D
script done on Wed Feb 23 12:53:48 1994
3 Mars 1994 70
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
% ^D
script done on Wed Feb 23 12:53:38 1994
3 Mars 1994 71
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 72
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
/*
* open a net socket, using dgram (packetized, nonconnected)
* mode, with protocol irrelevant ( == 0 )
*/
if ( (sock = socket( AF_INET, SOCK_DGRAM, 0 )) < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: can't assign fd for socket", argv[0] );
perror(s);
exit(__LINE__);
}
/*
* register the socket
*/
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = INADDR_ANY; /* not choosy about who calls */
sockaddr.sin_port = 0; /* ??? why 0? */
if ( bind( sock, (struct sockaddr *) &sockaddr, sizeof sockaddr ) < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: can't bind socket (%d)", argv[0], sock );
perror(s);
exit(__LINE__);
}
/*
* get port number
*/
if ( getsockname(sock, (struct sockaddr *) &sockaddr, (int *)&sockaddr_in_length)
<0){
char s[BUFSIZ];
sprintf( s, "%s: can't get port number of socket (%d)",
argv[0], sock );
perror(s);
exit(__LINE__);
}
printf("opened socket as fd (%d) on port (%d) for dgram i/o\n", sock, ntohs(sockaddr.sin_port) );
printf("struct sockaddr_in {\n\
sin_family = %d\n sin_addr.s_addr = %d\n sin_port = %d\n\
} sockaddr;\n"
, sockaddr.sin_family
, sockaddr.sin_addr.s_addr
, ntohs(sockaddr.sin_port)
);
fflush(stdout);
3 Mars 1994 73
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
if ( read_ret < 0 ) {
char s[BUFSIZ];
sprintf( s, "%s: error reading socket", argv[0] );
perror(s);
exit(__LINE__);
}
3 Mars 1994 74
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 75
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 76
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
struct sockaddr_in {
sin_family =2
sin_addr.s_addr = 0
sin_port = 1143
} sockaddr;
disockl: read (from caller ([Link], 1441)) socket as follows:
(Mary had a little lamb;
)
disockl: read (from caller ([Link], 1441)) socket as follows:
(Its fleece was white as snow;
)
disockl: read (from caller ([Link], 1441)) socket as follows:
(And everywhere that Mary went,
)
disockl: read (from caller ([Link], 1441)) socket as follows:
3 Mars 1994 77
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
struct sockaddr_in {
sin_family =2
sin_addr.s_addr = [Link]
sin_port = 1143
} socketname;
% ^D
script done on Wed Feb 23 13:16:43 1994
3 Mars 1994 78
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
select() (1)
#include <sys/types.h>
#include <sys/time.h>
int select
(int maxfdl,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
struct timeval *timeout)
struct timeval {
long tv_sec; /*secondes*/
long tv_usec;/*microsecondes*/
};
3 Mars 1994 79
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
select() (2)
8 sleep a une granularité de l'ordre de la seconde, ce n'est parfois pas assez fin
3 Mars 1994 80
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
select() (3)
9 Zéro si aucun prêt dans le cas d'une fin de timer, -1 en cas d'erreur
3 Mars 1994 81
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
getpeername (),
getsockname ()
3 Mars 1994 82
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Fonctions diverses
Conversions d'adresses :
3 Mars 1994 83
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
DATA DATA
NOYAU
Socket Socket
Interruption
Logicielle
Interruption
Coprocesseur
ETHERNET
3 Mars 1994 84
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Machine1, Machine2,
Processus1 Protocole UDP Processus2
sd = socket() sd = socket()
recv(sd)
sendto(sd,
receive() (@IP1,n°port1))
send()
"message"
3 Mars 1994 85
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Machine1, Machine2,
Processus1 Protocole TCP Processus2
Service Service
(@IP1, n°port1) TCP TCP (@IP2, n°port2)
sd = socket() sd = socket()
connect(sd,
bind(sd, (@IP1,n°port1))
(@IP1,n°port1))
ouverture
listen de connexion
sd1 = accept(sd) active
ouverture open
de connexion
passive
open
recv(sd1)
send(sd,"message")
deliver
send()
"message"
ACK
"message" shutdown
fermeture
fermer
fermé
3 Mars 1994 86
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
6. API TLI
3 Mars 1994 87
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Librairie
de fonctions
TLI
Streams Sockets
Ethernet
3 Mars 1994 88
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
La version normalisée par le groupe X/Open est : XTI. TLI est donc
très marqué par la logique ISO :
Processus Utilisateur
Extrêmité de Transport
Interface d'Accès aux services de (Transport Endpoint)
Transport (bibliothèque TLI)
+
streams
fournisseur de services
de Transport
(Transport provider)
3 Mars 1994 89
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Client Serveur
t_open t_open
t_bind t_bind
t_listen
t_connect [Link]
[Link]
[Link] t_accept
[Link]
t_send t_rcv
[Link]
[Link]
[Link] t_snddis
t_look [Link]
t_rcvdis
3 Mars 1994 90
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
STREAMS
Modèle abstrait :
Espace Noyau
Pilote Périphérique
3 Mars 1994 91
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
IP X25
3 Mars 1994 93
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
TCP UDP
Modules
IP de
IXE traitement
X25
3 Mars 1994 94
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 95
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
3 Mars 1994 96
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Serveur
t_open() Client
t_open()
t_bind()
t_bind()
t_alloc()
t_alloc()
t_rcvudata()
attente datagramme t_sndudata()
requête(données)
traitement
de la requête
t_sndudata()
t_rcvudata()
réponse (résultats)
3 Mars 1994 97
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
t_close
t_open
t_bind
T_UNINIT T_UNBND T_IDLE
t_close
t_unbind
t_sndudata
t_rcvudata
t_rcvuderr
Serveur
t_open() Client
t_open()
t_bind()
t_bind()
t_alloc()
t_alloc()
t_listen()
attente passive t_connect()
établissement de
connexion
t_accept()
requête(données) t_snd()
t_rcv()
traitement
de la requête
t_snd()
3 Mars 1994 99
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
t_close t_snddis
t_open t_bind t_listen
T_UNINIT T_UNBND T_IDLE T_INCON
t_close t_unbind
t_accept
t_snddis
t_rcvdis
T_DATA t_rcv
XFER t_snd
t_rcvrel t_sndrel
Extrêmité d'écoute :
t_close t_snddis
t_open t_bind t_listen
T_UNINIT T_UNBND T_IDLE T_INCON
t_close t_unbind
t_accept
Extrêmité de dialogue préalablement initialisée :
t_close
t_open t_bind
T_UNINIT T_UNBND T_IDLE
t_close t_unbind
t_snddis
t_rcvdis
T_DATA t_rcv
XFER t_snd
t_rcvrel t_sndrel
t_close t_rcvdis
t_connect
t_open t_bind asynchrone
T_UNINIT T_UNBND T_IDLE T_OUTCON
t_close t_unbind t_connect
synchrone
t_snddis t_rcvconnect
t_rcvdis
T_DATA t_rcv
XFER t_snd
t_rcvrel t_sndrel
t_alloc() et t_free()
struct netbuf :
maxlen
len
buff
zone mémoire de format spécifique
au paramètre et à la fonction TLI
impliqués dans l'appel t_alloc
t_alloc() (1)
#include <tiuser.h>
char *t_alloc(int fd, int structtype, int fields);
t_alloc() (2)
int fd;
struct t_err *ptr;
résultat :
[Link]
7. MODELE Client/Serveur
Principe du Client/Serveur
Client Serveur
Requête Arrivée de la
Requête
Traitement de
la Requête
Arrivée de la
Réponse
Panne de Serveur
Requête Arrivée de la
Requête Arrivée de la Requête
Requête
Traitement de
Normal Traitement de la Requête
la Requête Panne après
Traitement
Panne
Arrivée de la
Réponse
Exception ?
Requête
Arrivée de la
Requête
Panne à
Panne
l'arrivée de la requête
14 Une requête peut être dupliquée soit à cause des réémissions du client
3 Mars 1994 109
TP Informatique Programmation B Eric Gressier CNAM - CEDRIC
Panne du Réseau
Pertes de Messages :
Extermination :
Réincarnation :
Reincarnation douce :
Expiration :
Une requête dispose d'un certain délai pour s'exécuter. Si ce délai est
insuffisant, le serveur doit redemander un nouveau quantum.
Trouver la valeur du délai qui est très différente en fonction des
requêtes.
Edition de liens
Pb : un serveur de fichiers
Quelle performance ?
sd = socket ( ...)
listen (sd,5)
while (1) {
nsd = accept (sd, ...);
serv_request (nsd);
close(nsd);
}
Serveur concurrent
sd = socket ( ...)
listen (sd,5)
while (1) {
nsd = accept (sd, ...);
if fork() == 0 {
close (sd);/*processus fils*/
serv_request(nsd);
exit(0);
}
close(nsd); /*processus pere*/
}
Processus père
sd N°Port
socket
accept()
fork()
@IP
newsocket
nsd
Processus fils
sd = socket ( ...)
while (1) {
recvfrom (sd, ...);
if fork() == 0 {
/*processus fils*/
serv_request(sd);
sendto (sd, ...)
exit(0);
}
}
Configurations possibles
Système
Avantages :
- Les problèmes de communication sont gérés
automatiquement par le protocole grace à la gestion de la connexion
Désavantages :
- Le mode connecté implique plus d'opérations, par exemple la
fermeture de connexion s'effectue en 3 messages (three way
handshake).
Avantages :
- Permet la diffusion
Désavantage :
signal(SIGCHLD, achever);
int achever()
{
union wait status;
1. inetd crée toutes les sockets pour chaque service qu'il offre à
travers le réseau (décrit dans /etc/[Link])
Maîtrise de la concurrence
->
. Un processus pour chaque fonction en cours.
mise en commun de données :
mémoire partagée, sémaphores, files de messages, ...
difficile
Processus
Client
Système