Académique Documents
Professionnel Documents
Culture Documents
Unix Programmation Réseau
Unix Programmation Réseau
I.U.T. Amiens
08/12/2003
1 - Introduction et Rappels...................................................................................................................4 1.1 - LE MODELE OSI (Open System Interconnection) ................................................................4 1.2 - TCP/IP .....................................................................................................................................4 1.2.1 - Description........................................................................................................................4 1.2.2 - Les adresses IPs ................................................................................................................5 1.2.3 - Les adresses rserves ......................................................................................................6 1.2.4 - La commande ifconfig (Interface Configuration).............................................................7 1.3 - ICMP .......................................................................................................................................7 1.3.1 - Description........................................................................................................................7 1.3.2 - La commande ping ...........................................................................................................7 1.4 - Les protocoles UDP et TCP.....................................................................................................8 1.4.1 - UDP : Livraison non fiable, sans connexion ....................................................................8 1.4.2 - TCP : Transport de flot fiable...........................................................................................8 1.4.3 - Identification du service : les ports...................................................................................8 1.4.4 - La commande netstat ........................................................................................................9 1.4.5 - Le fichier /etc/services......................................................................................................9 1.5 - Le routage ..............................................................................................................................10 1.5.1 - La commande route ........................................................................................................10 1.6 - Le DNS ..................................................................................................................................11 1.6.1 - La commande hostname .................................................................................................11 1.6.2 - Le fichier /etc/host.conf ..................................................................................................11 1.6.3 - Fichier /etc/hosts.............................................................................................................12 1.6.4 - Le fichier /etc/resolv.conf...............................................................................................12 1.6.5 - Le protocole DNS ...........................................................................................................13 1.6.6 - Hirarchie des DNS ........................................................................................................13 1.6.7 - Bases de donnes whois ............................................................................................14 1.6.8 - Tester un DNS ................................................................................................................17 1.6.9 - Les objets DNS ...............................................................................................................19 1.6.10 - Contrleurs primaire et secondaires .............................................................................20 1.6.11 - Syntaxe dun fichier de zone DNS ...............................................................................20 1.7 - Rappels divers........................................................................................................................21 1.7.1 - Client ..............................................................................................................................21 1.7.2 - Protocoles .......................................................................................................................21 1.7.3 - serveur ............................................................................................................................22 1.7.4 - dmon .............................................................................................................................22 1.7.5 - super dmon....................................................................................................................22 1.7.6 - Connexion distante .........................................................................................................22 1.7.7 - Transfert de fichiers distants par ftp ...............................................................................23 1.7.8 - Communication distante .................................................................................................23 2 - Les sockets : Cration...................................................................................................................24 2.1 - Le principe .............................................................................................................................24 2.2 - Domaine dun socket .............................................................................................................24 2.2.1 - Domaine Unix.................................................................................................................24
C. Drocourt
Page 2 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
2.2.2 - Domaine Internet ............................................................................................................24 2.3 - Type dune socket..................................................................................................................25 2.3.1 - Type datagramme ...........................................................................................................25 2.3.2 - Type flot .........................................................................................................................25 2.4 - Primitives gnrales de manipulation....................................................................................25 2.4.1 - Cration ..........................................................................................................................25 2.4.2 - Suppression.....................................................................................................................26 2.4.3 - Attachement....................................................................................................................26 2.5 - Les problmes lis au domaine Internet ................................................................................28 2.5.1 - La reprsentation des entiers ..........................................................................................28 2.5.2 - Les fonctions de rsolution et les fichiers administratifs................................................28 3 - Les sockets : Communication.......................................................................................................31 3.1 - La communication par datagrammes.....................................................................................31 3.1.1 - Introduction.....................................................................................................................31 3.1.2 - Lenvoi dun message.....................................................................................................31 3.1.3 - La rception dun message .............................................................................................32 3.1.4 - Mode pseudo-connect ...................................................................................................32 3.2 - La communication en mode connect ...................................................................................32 3.2.1 - Introduction.....................................................................................................................32 3.2.2 - Les primitives listen et accept.........................................................................................34 3.2.3 - La primitive connect .......................................................................................................35 3.2.4 - La rception de donnes .................................................................................................35 3.2.5 - Envoi de donnes............................................................................................................35 4 - Les dmons ...................................................................................................................................37 4.1 - Les problmes lis aux serveurs ............................................................................................37 4.1.1 - Les zombies ....................................................................................................................37 4.1.2 - Les descripteurs de fichiers ............................................................................................37 4.1.3 - Le directory.....................................................................................................................37 4.2 - Les obligations dun serveur..................................................................................................37 4.2.1 - Le dtachement ou la naissance dun dmon .................................................................37 4.2.2 - Historique dun dmon ...................................................................................................38 4.2.3 - Le contrle ......................................................................................................................39 5 - Le protocole XDR.........................................................................................................................40 5.1 - Introduction............................................................................................................................40 5.1.1 - Intrt du protocole.........................................................................................................40 5.1.2 - Exemple concret .............................................................................................................41 5.2 - Principe gnral dutilisation.................................................................................................41 5.3 - Oprations de base sur les flots XDR ....................................................................................42 5.3.1 - Les fichiers standard .......................................................................................................42 5.3.2 - Le type XDR...................................................................................................................42 5.3.3 - Cration dun flot............................................................................................................43 5.4 - Oprations de srialisation et de dsrialisation....................................................................44 5.4.1 - Principe gnral ..............................................................................................................44 5.4.2 - Le type void ....................................................................................................................45 5.4.3 - Exemple de type scalaire: le type float ...........................................................................45 5.5 - Solution au problme concret ................................................................................................46
C. Drocourt
Page 3 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Le modle ISO-OSI, de loin le plus rpandu, dcrit des niveaux de transmission mais pas des normes. Il divise lensemble des protocoles en sept couches indpendantes entre lesquelles o sont dfinis deux types de relations ; les relations verticales entre les couches dun mme systme (interfaces) et les relations horizontales relatives au dialogue entre deux couches de mme niveau. 7 6 5 Datagrammes Paquets Trames Bits 4 3 2 1 Application Prsentation Session Transport Rseau Liaison de Donnes Physique
Messages Segments
La couche Liaison de Donnes se dcoupe en deux souscouches : Logical Link Control Medium Access Control Description des couches : 1. Physique -> Brochage, Tensions... 2. Liaison de Donnes -> Structuration, Correction, Accs au medium... 3. Rseau -> Routage, Fragmentation. Communication entre systmes 4. Transport -> Communication entre processus 5. Session -> Connexion, Dconnexion. 6. Prsentation -> Structuration des donnes types. 7. Application -> Communication entre "utilisateurs "
C. Drocourt
Page 4 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Il a t mis au point dans le cadre du projet DARPA au dbut des annes 1980. Il est le prcurseur des modles en couches mais sa structure ne lui permet pas de sintgrer la norme OSI (Open System Interconnexion) de lISO (International Standard Organisation), TCP/IP a t bti sur lexprience, avec le souci permanent de la performance.
C. Drocourt
Page 5 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Ladresse IP est constitue dun champ numro de rseau (1,2 ou 3 octets) et dun champ numro de machine dans le rseau ( 3,2 ou 1 octets) @ip = #rseau + #machine #rseau : attribu par un organisme officiel : le NIC aux US (ou ses reprsentants) #machine : attribu localement par le gestionnaire du rseau (nota: il est possible de dcouper le champ de droite en sous-rseau+machine Les rseaux TCP/IP sont rangs en 3 classes A, B ou C en fonction de la taille du champ numro de rseau: classe A : 1 127 .X.X.X classe B : 128 191 .X.X.X classe C : 192 223 .X.X.X ( les adresses >223 sont rserves dautres usages)
Num Rseau Num machine
Classe A
1 127.X.X.X
Classe B
128 191.X.X.X
Classe C
110x xxxx
192 223.X.X.X
Le nombre de machines dans le rseau dpend donc de la classe du rseau. Chaque octet du champ machine peut prendre des valeurs entre 1 et 254. Les valeurs 0 (tous les bits 0) et 255 (tous les bits 1) sont rserves: un champ machine tout 0 sert dsigner le numro de rseau (notamment pour le routage) un champ tout 1 indique un message de broadcast adress toutes les machines IP du rseau. Sur les fichiers de configuration on a un masque rseau (netmask) qui, associ ladresse IP, indique le champ prendre en compte pour #rseau (bits 1) , et celui prendre en compte pour #machine (bits 0). ex: dans un rseau de classe A sans sous-rseau : netmask=255.0.0.0
C. Drocourt
Page 6 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Certaines adresses peuvent galement tre librement utilises pour monter un rseau priv: A 10.0.0.0 B 172.16.0.0 172.31.0.0 C 192.168.0.0 192.168.255.0 Aucun paquet provenant de ces rseaux ou destination de ces rseaux, ne sera rout sur l'internet.
C. Drocourt
Page 7 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
UDP (User Datagram Protocol) permet une application denvoyer des messages une autre en mode datagramme non connect. Les paquets UDP peuvent arriver dans le dsordre, au mme ne pas arriver : les tats d'arrive dun paquet nest pas gr par ce protocole. Les dmons coutent des numros de port dfinis dans le fichier /etc/services ou d'autre numros, auquel cas les services offerts par ces dmons sont privs.
Page 8 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Elle affiche des informations sur les connections locales et rseaux actuellement ouvertes et/ou utilises (sockets) avec les numros de ports. Exemple :
Etat ESTABLISHED
C. Drocourt
Page 9 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Le routage est le processus permettant un datagramme dtre achemin vers le destinataire lorsque celui-ci nest pas sur le mme rseau physique que lmetteur. Le chemin parcouru est le rsultat du processus de routage qui effectue les choix ncessaires afin dacheminer le datagramme. Les routeurs forment une structure cooprative de telle manire quun datagramme transite de passerelle en passerelle jusqu ce que lune dentre elles le dlivre son destinataire. Un routeur possde deux ou plusieurs connexions rseaux tandis quune machine possde gnralement quune seule connexion. Machines et routeurs participent au routage : Les machines doivent dterminer si le datagramme doit tre dlivr sur le rseau physique sur lequel elles sont connectes grace leur adresse IP et au masque de rseau (routage direct), ou bien si le datagramme doit tre achemin vers une passerelle; dans ce cas (routage indirect), elle doit identifier la passerelle approprie. Les passerelles effectuent le choix de routage vers dautres passerelles afin dacheminer le datagramme vers sa destination finale. Les tables de routage IP, pour des raisons videntes dencombrement, renseignent seulement les adresses rseaux et non pas les adresses machines. Typiquement, une table de routage contient des couples (R, P) o R est ladresse IP dun rseau destination et P est ladresse IP de la passerelle correspondant au prochain saut dans le cheminement vers le rseau destinataire. La passerelle ne connat pas le chemin complet pour atteindre la destination. Pour une table de routage contenant des couples (R, P) et appartenant la machine M, P et M sont connects sur le mme rseau physique dont ladresse de niveau rseau (partie Netid de ladresse IP) est R.
20.0.0.1 30.0.0.5 40.0.0.1
Reseau
10.0.0.0
Reseau
20.0.0.0
Reseau
30.0.0.0
Reseau
40.0.0.0
10.0.0.1
20.0.0.2
30.0.0.1
10.0.0.0
20.0.0.0
30.0.0.0
40.0.0.0
20.0.0.1
direct
direct
30.0.0.1
Table de routage de G
C. Drocourt
Page 10 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
utiliser. Une machine pouvant posseder plusieurs adresses IPs ainsi que plusieurs interfaces rseaux (cas par exemple dun firewall) il peut y avoir plusieurs configuration a ajouter la table de routage. Pour consulter cette table on utilise la mme commande sans arguments. Exemple :
Use 0 0 0 0 0 0 Iface eth1 eth0 eth1 eth0 lo eth1
1.6 - Le DNS
Lorsque les machines communiquent sur un rseau informatique, c'est toujours par l'utilisation d'une adresse (IP ou autre) source ou destination. Mais ces adresses bien que ncessaires, sont difficiles mmoriser et ne permettent pas de souplesse dans les configurations des stations. Pour quelquun de normalement constitu, il est difficile de se souvenir de 155.124.198.56, alors que www.victim.com sera assez ais mmoriser. C'est le but du protocole DNS : fournir une association (adresse IP, nom FQDN ) et inversement. Le service DNS est donc utilis pour la rsolution de noms . Cette opration consiste fournir aux clients DNS qui en font la demande une association adresse IP, un nom symbolique, et viceversa. C'est dire qu'on pourra demander un DNS : Quelle est ou quelles sont les adresses IP de www.yahoo.com . Le serveur DNS ralisera alors diverses oprations afin de vous rpondre, souvent en contactant diffrentes entits sur l'Internet pour trouver la rponse.
C. Drocourt
Page 11 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
obtenu. Si ce nest pas le cas, le nom est rejet et une erreur est retourne. Ce comportement est mis en service en mettant nospoof on. alert : Cette option prend les arguments on ou off. Si elle est en service (on), toute tentative de spoofing sera enregistre dans les fichiers de trace du systme via syslog. trim : Prend en argument un nom de domaine qui sera limin des noms dhotes avant la recherche. Trs utile pour les entres hosts o on ne trouve que des noms de machines sans domaine local.
Cet exemple spcifie que le nom de domaine par dfaut ajouter aux noms non qualifis (c'est-dire sans domaine) est iut.fr, et que si l'hte n'est pas trouv dans ce domaine on peut aussi essayer
C. Drocourt
Page 12 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
le domaine iut-amiens.fr directement. Trois entres de serveurs de noms sont fournies, chacune d'elles pouvant tre appele par le solveur de noms.
Lorsqu'un client DNS (votre station Windows qui possde une entre DNS dans sa configuration IP par exemple, un programme quelconque d'un systme Unix configur pour utiliser le DNS, etc.) met une requte son serveur DNS, les oprations ralises sont les suivantes : t=1 t=2 t=3 t=4 t=5 t=6 t=7 Le client (ST1.FOO.COM) demande au serveur de rsoudre un nom de station WWW.AV.COM Le serveur DNS dtermine (configuration) si ce domaine est gr localement ou par un tiers Le serveur DNS ne connaissant la rponse, demande un serveur (contenu dans la configuration) particulier qui sont les DNS de la zone AV.COM. Ces serveurs connaissant tous les serveurs de noms de chaque domaine sont appels les ROOT SERVERS Le ROOT SERVER rpond notre serveur DNS que les serveurs de noms de la zone AV.COM sont situs sur les adresses IP X.X.X.X, Y.Y.Y.Y, etc... Notre serveur DNS contacte alors le premier serveur de noms renvoy par le ROOT SERVER, et lui pose l'ultime question: Quelle est l'adresse IP de WWW.AV.COM ? Le serveur DNS de la zone AV.COM rpond alors X.X.X.X Notre serveur DNS ayant obtenue la rponse escompte rpond alors la demande initiale du client, en lui fournissant la rponse sa question. La rponse est galement place dans un cache DNS (ct serveur) pour une utilisation ultrieure (rponse plus rapide)
A la question simple de savoir quelle adresse IP est associe quel nom (symbolique), on s'aperoit que les changes de donnes ncessaires sont multiples. Mais les DNS sont galement capables de se redistribuer les informations qu'ils contiennent, par le jeu de serveur primaire et secondaires. Pour chaque zone (par exemple domain.com), un serveur DNS est dsign comme primaire (et sera en priorit interrog par les clients DNS du monde entier), et des serveurs DNS secondaires seront galement prsents, dans le cas d'une dfaillance du primaire. Les serveurs secondaires sont gnralement configurs pour prendre une copie de la zone en question sur un autre serveur DNS (par exemple, les secondaires vont chercher une copie de la zone toutes les 8 heures). Les requtes DNS des clients (demande de rsolution) se font par dessus UDP, alors que les transferts de zone se font via TCP. Dans les deux cas, c'est le port 53 qui est utilis. On trouvera donc dans les dfinitions normalises des ports (/etc/services) les entres 53/tcp et 53/udp associs tous les deux au service DNS.
C. Drocourt
Page 13 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
premier niveau
arpa
com
edu
gov
int
mil
net
org
fr
zw Zimbabwe
lyon
iut
Lorsqu'une requte est soumise par le resolver un serveur DNS, ce dernier contacte un ROOT SERVER prsent dans sa configuration (puis un autre si celui-ci ne rpond pas jusqu' puisement de la liste) et demande quelle est l'autorit sur la zone demande. Il contactera ensuite ce serveur pour poser la question laquelle se dernier doit savoir rpondre, et retournera cette information au resolver. La zone in-addr.arpa est une zone quelque peu spciale, puisquelle permet de rsoudre les adresses IP en noms symboliques (requtes inverses). Les zones sont dclares dans le sens oppos leur utilisation (reverse), on aura donc une dclaration DNS de la classe IP 192.168.16.0/24 qui ressemblera 16.168.192.in-addr.arpa. . Il est important de noter que le caractre . est le dlimiteur de niveau hirarchique. La racine la plus haute de la hirarchie tant ce mme caractre . . Cest la racine non nomme. Les extensions .com. sont donc une sous-hirarchie de la zone . .
Page 14 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
On peut donc connatre les informations fournies lors de lenregistrement de la zone av.com comme suit :
Domain names in the .com, .net, and .org domains can now be registered with many different competing registrars. Go to http://www.internic.net for detailed information. Domain Name: AV.COM Registrar: NETWORK SOLUTIONS, INC. Whois Server: whois.networksolutions.com Referral URL: http://www.networksolutions.com Name Server: NS2.ALTAVISTA.COM Name Server: NS1.ALTAVISTA.COM Name Server: NS3.ALTAVISTA.COM Updated Date: 26-aug-2002 >>> Last update of whois database: Mon, 2 Dec 2002 16:45:10 EST <<< The Registry database contains ONLY .COM, .NET, .ORG, .EDU domains and Registrars. $
Historiquement, lInterNIC tait le seul prestataire habilit grer les zones de premier niveau, mais depuis le dbut de lanne 2000, il existe plusieurs prestataires mondiaux habilits grer les domaines. On peut donc se connecter nouveau sur le serveur whois de lorganisme denregistrement (le registrar), ici NETWORK SOLUTIONS, INC.
% whois av.com@whois.networksolutions.com [whois.networksolutions.com] The Data in the VeriSign Registrar WHOIS database is provided by VeriSign for information purposes only, and to assist persons in obtaining information about or related to a domain name registration record. VeriSign does not guarantee its accuracy. Additionally, the data may not reflect updates to billing contact information. By submitting a WHOIS query, you agree to use this Data only for lawful purposes and that under no circumstances will you use this Data to: (1) allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via e-mail, telephone, or facsimile; or (2) enable high volume, automated, electronic processes that apply to VeriSign (or its computer systems). The compilation, repackaging, dissemination or other use of this Data is expressly prohibited without the prior written consent of VeriSign. VeriSign reserves the right to terminate your access to the VeriSign Registrar WHOIS database in its sole discretion, including without limitation, for excessive querying of the WHOIS database or for failure to otherwise abide by this policy. VeriSign reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. Registrant: Altavista Company (AV22-DOM) 1070 Arastadero Rd. Palo Alto CA,94304 US C. Drocourt
Page 15 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
dns-admin@AV.COM
dns-technical@AV.COM
Record expires on 21-Oct-2003. Record created on 21-Oct-1998. Database last updated on 3-Dec-2002 05:08:37 EST. Domain servers in listed order: NS1.ALTAVISTA.COM NS2.ALTAVISTA.COM NS3.ALTAVISTA.COM 209.73.164.76 209.73.164.7 209.73.176.204
Dans la rponse nos requtes whois, on voit que les informations principales (notamment sur le serveur de lInterNIC) sont les adresses des serveurs de noms de cette zone. Cest eux quil faut sadresser pour toute rsolution dans la zone av.com. On contactera par exemple lun de ces serveurs pour la rsolution de www.av.com. Pour la zone .fr on contactera le serveur whois.nic.fr.
% whois altavista.fr@whois.nic.fr [whois.nic.fr] Tous droits reserves par copyright. Voir http://www.nic.fr/outils/dbcopyright.html Rights restricted by copyright. See http://www.nic.fr/outils/dbcopyright.html domain: descr: descr: descr: admin-c: tech-c: zone-c: nserver: nserver: nserver: mnt-by: mnt-lower: changed: source: role: address: e-mail: admin-c: tech-c: altavista.fr ALTAVISTA 54-56 Avenue Hoche 75008 Paris BC532-FRNIC IN195-FRNIC NFC1-FRNIC ns1.altavista.com ns2.altavista.com ns3.altavista.com FR-NIC-MNT FR-NIC-MNT frnic-dbm-updates@nic.fr 20011130 FRNIC ISDnet NOC Paris noc@isdnet.net CB58-FRNIC DP22-FRNIC
C. Drocourt
Page 16 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
C. Drocourt
Page 17 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Query time: 108 msec SERVER: 198.41.0.4#53(a.root-servers.net) WHEN: Tue Dec 3 14:28:52 2002 MSG SIZE rcvd: 467
$ dig @a.gtld-servers.net www.altavista.com ; <<>> DiG 9.2.0 <<>> @a.gtld-servers.net www.altavista.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61779 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.altavista.com. ;; AUTHORITY SECTION: altavista.com. altavista.com. altavista.com. ;; ADDITIONAL SECTION: ns2.altavista.com. ns1.altavista.com. ns3.altavista.com. ;; ;; ;; ;; 172800 172800 172800 172800 172800 172800 IN IN IN IN IN IN IN A NS NS NS A A A ns2.altavista.com. ns1.altavista.com. ns3.altavista.com. 209.73.164.7 209.73.164.76 209.73.176.204
Query time: 114 msec SERVER: 192.5.6.30#53(a.gtld-servers.net) WHEN: Tue Dec 3 14:29:41 2002 MSG SIZE rcvd: 137
Page 18 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
; <<>> DiG 9.2.0 <<>> @ns1.altavista.com www.altavista.com any ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15051 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;www.altavista.com. ;; ANSWER SECTION: www.altavista.com. ;; AUTHORITY SECTION: altavista.com. altavista.com. altavista.com. ;; ADDITIONAL SECTION: ns1.altavista.com. ns2.altavista.com. ns3.altavista.com. ;; ;; ;; ;; $ 600 IN IN ANY CNAME altavista.com.
IN IN IN IN IN IN
NS NS NS A A A
Query time: 201 msec SERVER: 209.73.164.76#53(ns1.altavista.com) WHEN: Tue Dec 3 14:31:44 2002 MSG SIZE rcvd: 151
La commande host peut galement tre utile pour rapidement vrifier le bon fonctionnement du resolver et du DNS.
% host www.microsoft.com www.microsoft.com is a nickname for www.microsoft.akadns.net www.microsoft.akadns.net has address 207.46.197.113 www.microsoft.akadns.net has address 207.46.230.219 www.microsoft.akadns.net has address 207.46.230.229 www.microsoft.akadns.net has address 207.46.197.101 % host -t ns altavista.com altavista.com name server ns2.alta-vista.net altavista.com name server ns3.alta-vista.net altavista.com name server ns1.alta-vista.net % host -t mx altavista.fr altavista.fr mail is handled (pri=10) by inbound.altavista.fr.criticalpath.net
C. Drocourt
Page 19 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
de la station suivi du nom du systme dexploitation. Dfini le ou les serveurs de courrier pour la zone. Lors dun envoi demail un utilisateur de cette zone, le serveur SMTP metteur contactera le serveur SMTP contenu ici, en se connectant sur le port standardis 25/tcp Dfini quels sont les serveurs de noms pour cette zone Enregistrement de pointeur (PTR). Cet enregistrement permet de dfinir un nom de machine associ une adresse IP.
Page 20 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Les enregistrements ajouts chaque entte de zone DNS sont les serveurs de noms de cette zone, les serveurs de courrier, et toutes les associations et alias entre les noms symboliques et les adresses IP.
internet.com. IN SOA mars.internet.com. hostmaster.mars.internet.com. ( 1999070301 ; Numro de srie 10800 ; dlai de rafrachissement des secondaires 3600 ; dlai avant une nouvelle tentative si chec 604800 ; dlai maximum de validit des donnes 86400 ) ; TTL par dfaut des enregistrements ; dclaration des serveurs de noms de cette zone IN NS lune.internet.com. IN NS remote.backup.com. IN NS another.network.net. ; dclaration des serveurs de courrier de cette zone internet.com. IN MX 10 mx-01.internet.com. internet.com. IN MX 10 mx-02.internet.com. internet.com. IN MX 100 bk1.mail.net. internet.com. IN MX 200 bk2.mail.net. internet.com. IN MX 200 fail.safe.net. ; dclaration des enregistrements concernant les noms w1.internet.com. IN A 10.0.0.1 www IN CNAME w1 www IN HINFO "Linux/1.2.13 AlphaPC 64" lune IN A 10.0.0.10 mail.in IN CNAME mx-01 mx-01 IN A 10.0.0.2 mx-02.internet.com. IN A 10.0.0.2
1.7.2 - Protocoles
Un protocole est un ensemble de rgles prcises dfinissant l'interaction entre clients et serveurs. Commandes reconnues par le serveur. Format des donnes changes. Acquittement. Traitement des erreurs.
C. Drocourt
Page 21 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Un serveur est un programme qui rend une ressource ou un service disponibles au travers du rseau. Il s'excute sur la machine qui possde la ressource. Il attend passivement et acceptent les demandes de connexion des clients.
1.7.4 - dmon
Un dmon dsign un serveur qui fonctionnent en permanence. C'est un processus, dtach de tout terminal, qui est lanc en arrire-plan au dmarrage du systme. Son nom se termine en gnral par un "d" : lpd : dmon d'impression. ftpd : dmon de transfert de fichiers. inetd : super dmon.
C. Drocourt
Page 22 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
La commande ftp sappuie sur le protocole File Transfert Protocol et permet des transferts de fichiers entre machines ayant des systmes d'exploitation diffrents. La commande ftp doit tre invoque avec le nom ou l'adresse IP de la machine distante ; les contrles d'accs sont identiques ceux de telnet.
C. Drocourt
Page 23 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Une socket est un point de communication par lequel un processus peut mettre ou recevoir des informations. La commande UNIX netstat -a affiche les sockets dj installs. Dans un processus, une socket est identifie par un descripteur, comme un fichier, ce qui permet de lui appliquer les primitives telles que read, write... Mise en rseau sans problme des applications standard Hritage des sockets par fork Redirections possibles Les diffrentes constantes ncessaires sont macro-dfinies dans les fichiers <sys/types.h> et <sys/socket.h>.
Pour une socket local on peut mettre indifferemment AF_LOCAL, PF_LOCAL, AF_UNIX, PF_UNIX et mme AF_FILE et PF_FILE.
C. Drocourt
Page 24 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
La structure d'une adresse de socket est dfinie dans le fichier inclure <netinet/in.h> :
/* /* /* /*
domaine Internet: AF_INET le numro de port l'adresse Internet un champ de huit zros
*/ */ */ */
Ici encore, le domaine peut tre AF_INET ou PF_INET. Pour utiliser de lIPv6 on utilisera AF_INET6 ou PF_INET6. Dans ce domaine, lassociation entre deux processus communiquant via un socket sera dfinie par cinq lments : protocole (UDP ou TCP) adresse IP de la machine sur laquelle sexcute le processus A port associ A sur cette machine adresse IP de la machine sur laquelle sexcute le processus B port associ B sur cette machine Par exemple, un utilisateur connect sous windows lance une connexion distante sur tux par telnet : un processus telnet sexcute sous windows avec un numro de port quelconque tandis quun processus telnetd sexcute sur etud avec un numro de port gal 23, le protocole est TCP.
La primitive socket permet de crer une socket en prcisant son domaine (AF_UNIX : IPC local ou AF_INET :IPC distant) , son type (SOCK_STREAM en mode connect ou SOCK_DGRAM en mode datagramme) ainsi que le protocole utilis. Il est souhaitable de laisser ce dernier paramtre 0 de faon laisser le systme choisir lui-mme le bon protocole.
C. Drocourt
Page 25 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
2.4.2 - Suppression
Une socket est effectivement supprime aprs la fermeture par close du dernier descripteur permettant dy accder : il y a alors libration des ressources utilises.
2.4.3 - Attachement
Sans ce mcanisme, la socket ne serait connue que par le processus qui la cre et par sa descendance : exactement comme pour un tube ordinaire ! ! ! 2.4.3.1 - Forme gnrale de la primitive
int bind(int desc, struct sockaddr *ptr_adr , int lg_adr) ;
Un appel cette primitive ralise lattachement de la socket de descripteur desc ladresse *ptr_adr, le paramtre lg_adr doit tre gal la taille en octets de cette adresse. La structure sockaddr est gnrique : elle doit tre remplace par la structure adapte au domaine de la socket. 2.4.3.2 - Attachement dune socket dans le domaine Unix L attachement dune socket du domaine Unix est ralis avec un fichier de type socket qui apparatra dans larborescence globale des fichiers Unix. Il est indispensable que la rfrence correspondante nexiste pas. La suppression de la rfrence associe une socket est ralise par la commande rm ou par la primitive unlink. Voici un exemple de cration et dattachement :
... char *sock_name= "/tmp/chaussette" int sd; struct sockaddr_un socketEcoute; ... sd = socket(AF_UNIX,SOCK_STREAM,0); ... unlink(sock_name); /* Pour etre sur que le fichier nexiste pas */ socketEcoute.sun_family = AF_UNIX; strcpy(socketEcoute.sun_path,sock_name); ... bind(sd,&socketEcoute,sizeof(struct sockaddr_un); ...
C. Drocourt
Page 26 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Cette primitive est utilisable pour les types SOCK_STREAM et SOCK_DGRAM mais seulement dans le domaine Unix. Le paramtre ptr_desc est un tableau de deux entiers dans lequel on rcupre les deux descripteurs permettant laccs aux deux sockets. Exemple :
Ce qui sera crit sur desc[0] pourra tre lu sur desc[1] tandis que ce qui sera crit sur desc[1] pourra tre lu sur desc[0] : il sagit dun IPC bidirectionnel ! ! Les sockets ntant pas nommes , seuls le processus crateur et sa descendance pourront utiliser ces sockets. 2.4.3.4 - Le cas particulier du domaine Internet
#include <netinet/in.h> struct in_addr { u_long s_addr; } ; struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; } ;
/* /* /* /*
domaine Internet: AF_INET le numro de port l'adresse Internet un champ de huit zros
*/ */ */ */
Ecrire la valeur INADDR_ANY dans le champ sin_addr.s_addr de ladresse permet dassocier la socket toutes les adresses IP possibles de la machine :ceci est particulirement utile lorsque cette machine sert de passerelle entre rseaux. Lorsquune autre adresse IP doit tre recherche, on utilise une fonction de rsolution, comme gethostbyname, qui va explorer le fichier /etc/hosts et/ou interroger le DNS pour renvoyer une structure hostent dans laquelle on accde ladresse IP. Ecrire la valeur 0 dans le champ sin_port de ladresse permet de laisser le systme choisir lui-mme le numro de port : ceci pourra tre ralis par un processus client mais pas par un processus serveur qui, lui, doit attacher la socket un numro de port connu de tous. Lorsquun autre numro de port doit tre recherch, par exemple pour accder un service internet spcifique, on utilise une fonction de rsolution, comme getservbyname, qui va explorer le fichier /etc/services et renvoyer une structure servent dans laquelle on accde au numro de port.
C. Drocourt
Page 27 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
2.5 - Les problmes lis au domaine Internet 2.5.1 - La reprsentation des entiers
Les nombres entiers short comme des numros de ports ou long comme des adresses IP ne sont pas toujours reprsents de la mme faon sur les diffrentes machines dun rseau :il est donc prudent de les reprsenter sous leur forme rseau avant de procder des changes entre machines.
Reprsentation locale
Reprsentation locale
Reprsentation rseau
transfert
Reprsentation rseau
C. Drocourt
Page 28 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Cette fonction prend en paramtre le nom dune machine et, si ce nom est valide, renvoie ladresse dune structure hostent cre en zone statique ; cette structure correspond en gros une ligne du fichier /etc/hosts, dune interogation DNS ou de la map NIS correspondante.
La fonction gethostbyaddr ralise le mme genre dopration partir de ladresse IP. Dautres fonctions comme gethostname ou gethostid permettent de rcuprer le nom ou ladresse IP de la machine locale (attention pour les machines qui sont des passerelles).
#include <netdb.h> struct hostent { char *h_name ; char **h_aliases ; int h_addrtype ; int h_length ; char **h_addr_list ; } ; #define
/* /* /* /* /*
nom officiel de la machine */ liste dalias */ type dadresse (AF_INET) longueur de ladresse en octets liste dadresses */
*/ */
/* la premire adresse
*/
Cette fonction prend en paramtre le nom dun service standard et le protocole correspondant. Si ce couple est valide, la fonction renvoie ladresse dune structure servent cre en zone statique ; cette structure correspond en gros une ligne du fichier /etc/services ou de la map NIS correspondante. Si le couple (service, protocole) nest pas connu, retour du pointeur NULL. La fonction getservbyport ralise le mme genre dopration partir du numro de port et du protocole.
#include <netdb.h> struct servent { char *s_name ; char **s_aliases ; int s_port ; char *proto ; } ;
/* /* /* /*
*/ */ */ */
2.5.2.3 - La fonction getsockname La fonction getsockname permet de retrouver ladresse dattachement dune socket (utile si on a laiss le systme choisir le numro de port) .
C. Drocourt
Page 29 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
A lappel *ptr_lg_adresse est la taille de lespace rserv pour rcuprer le rsultat, par exemple sizeof(struct sockaddr_in). Au retour, *ptr_lg_adresse aura comme valeur la longueur effective de cette adressse.
C. Drocourt
Page 30 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Un processus souhaitant communiquer avec le monde extrieur par l'intermdiaire d'une socket du type SOCK_DGRAM doit raliser, selon les circonstances, un certain nombre des oprations suivantes : demander la cration d'une socket dans le domaine adapt aux applications avec lesquelles il souhaite communiquer: il s'agira du domaine AF_UNIX pour une communication locale dans un univers BSD ou par exemple AF_INET pour une communication distante (ou locale) en utilisant le protocole UDP demander ventuellement l'attachement de cette socket sur un port convenu ou un port quelconque selon qu'il joue un rle de serveur attendant des requtes de client ou celui de client prenant l'initiative d'interroger un serveur construire l'adresse de son interlocuteur en mmoire: tout client dsirant s'adresser un serveur doit en connatre l'adresse et donc la prparer en mmoire (il pourra consulter la base de donnes des services et utiliser la fonction standard gethostbyname pour obtenir l'adresse Internet de la machine distante partir de son nom). S'il s'agit d'un serveur, il recevra avec chaque message l'adresse de son metteur qu'il pourra donc utiliser pour expdier la rponse procder des missions et des rceptions de messages. Les sockets de ce type sont utilises en mode non connect : chaque demande d'envoi d'un datagramme s'accompagne de la spcification complte de l'adresse de son destinataire et chaque rception d'un message s'accompagne de celle de son metteur.
La valeur de retour de le primitive est le nombre de caractres effectivement envoys. Remarque : si l'attachement n'est pas effectu avant le premier envoi utilisant cette socket (client) attachement est effectu automatiquement sur un port quelconque de la machine locale.
C. Drocourt
Page 31 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
renvoy par la primitive socket adresse du buffer de rception taille du buffer de rception 0 adresse de lmetteur pointeur sur la longueur de cette adresse
Le message lu dans le tampon de rception correspond exactement au message envoy par un appel sendto. Ladresse de lmetteur du message sera rcupre ladresse ptr_adresse et la taille de cette adresse ladresse ptr_longueur_adresse au retour de la primitive recvfrom condition davoir initialis *ptr_longueur_adresse avant lappel la primitive ! ! !
Page 32 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
systme cre une nouvelle socket ddie cette nouvelle connexion et que nous appellerons socket de service. C'est par ce moyen qu'il est possible de multiplexer sur la mme socket plusieurs connexions. Le processus serveur prend connaissance de l'existence d'une nouvelle connexion par un appel la primitive accept : au retour de cet appel, le processus reoit un descripteur lui permettant d'accder cette socket de service. Il existe un certain dphasage entre l'acceptation des connexions au niveau du protocole TCP et la connaissance de celles-ci par le processus lui-mme. Les connexions acceptes au niveau TCP mais non encore prises en compte par le processus sont dites pendantes. Une fois prise en compte par le serveur (par un appel la primitive accept), une connexion devient effective et est enleve de la liste des connexions pendantes. Aprs avoir accept une connexion, le serveur se dcharge en gnral du dialogue proprement dit sur un processus de service (ou sur une activit thread si le systme supporte cette fonctionnalit). 3.2.1.2 - Schma gnral dun client TCP Un client est lentit active dans le processus dtablissement dune connexion avec le serveur : cest lui qui prend linitiative. Le client commence par crer la socket, lattache ventuellement un numro de port quelconque puis tente de connecter cette socket celle du serveur.
C. Drocourt
Page 33 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Le(s) client(s):
Cration d'une socket
socket
Ouverture du service
listen
La primitive listen permet un processus de dclarer un service ouvert auprs de son systme local :aprs cet appel lentit TCP du systme local commence accepter des connexions. Le paramtre nb_pendantes de la primitive correspond au nombre maximum de connexions pendantes acceptables :ce nombre sera automatiquement modifi en tenant compte de limplmentation du systme Unix.
int accept( int descripteur, struct sockaddr *ptr_adresse; int *ptr_lg_adresse ; ) ;
La primitive accept permet un processus de prendre connaissance dune nouvelle connexion :celle-ci est extraite de la liste des connexions pendantes et un descripteur est renvoy pour une nouvelle socket (de service) ddie cette connexion.
C. Drocourt
Page 34 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Ladresse du client avec lequel on va dialoguer via cette socket de service est rcupre ladresse ptr_adresse pourvu que celle-ci ne soit pas NULL tandis que la longueur de cette adresse est obtenue ladresse ptr_lg_adresse.
Toute connexion entre deux sockets de type SOCK_STREAM dans le domaine AF_INET est initie par cette primitive (pour le domaine AF_UNIX, on peut utiliser galement la primitive socketpair pour crer directement une paire de sockets de type SOCK_STREAM connectes). La primitive connect demande ltablissement dun circuit virtuel entre la socket (locale) dont on donne le descripteur et la socket (distante) dont on passe ladresse et la longueur de ladresse.
Permet de lire les donnes sur un descripteur de socket. Par dfaut, cette primitive est bloquante tant qu'il n'y a rien lire sur le descripteur de la socket. Paramtres : desc : descripteur de la connexion sur laquelle recevoir les donnes pt : pointeur sur une zone mmoire rserve pour recevoir les donnes lues taille : taille de la zone rserve Retour : nombre de caractres lus -1 : en cas d'erreur Remarque : Le message est tronqu si sa taille est suprieure taille La primitive read ne permet pas d'extraire les messages urgents (TCP).
C. Drocourt
Page 35 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Paramtres : desc : descripteur de la connexion (ou pseudo-connexion) sur laquelle envoyer les donnes pt :pointeur sur zone mmoire contenant les donnes envoyer taille : taille en octets des donnes envoyer Retour : nombre de caractres ecrits -1 : en cas d'erreur errno modifie Remarques : La primitive est bloquante si le tampon d'msion est plein. La primitive write ne permet pas d'exploiter compltement les possibilits des sockets TCP.
C. Drocourt
Page 36 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Dans le cas dun serveur UDP, la situation habituelle est plutt celle dun serveur wait , cest dire que le processus serveur traite directement les requtes des clients. Dans le cas dun serveur TCP, la situation habituelle est celle dun serveur no wait , cest dire que le serveur va se cloner et faire traiter les requtes des clients par ses fils. Attention, ds quun serveur se clone, il faut penser llimination des zombies avec lune des primitives sigaction ou signal.
4.1.3 - Le directory
Il vaut mieux se placer la racine du systme par lappel :
chdir ("/");
qui permet les dmontages ventuels du systme de fichiers sans arrter le serveur.
4.2 - Les obligations dun serveur 4.2.1 - Le dtachement ou la naissance dun dmon
Une caractristique essentielle dun serveur est quil est dtach de tout terminal :ceci est ralis dans POSIX avec la primitive setsid qui cre une nouvelle session dont le processus sera le leader. Pour viter des interfrences avec le contrle de jobs qui peut tre actif avec certains shells, on ralise un premier appel fork : le processus initial se termine immdiatement do rveil du shell courant tandis que le processus fils qui est adopt par le processus init, ralise un appel setsid puis excute le code du serveur proprement dit.
main(...) { ... if( fork() != 0) exit(0) ; setsid() ;
C. Drocourt
Page 37 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
4.2.2.3 - Envoyer les messages de trace au dmon syslogd Le dmon syslogd est charg de grer lhistorique du systme en envoyant des messages dans des fichiers, des groupes dutilisateurs ou au dmon syslogd dune autre machine. Le PID du dmon syslogd local est contenu dans le fichier /etc/syslogd.pid tandis que le fichier /etc/syslogd.conf permet de configurer ce dmon. Pour utiliser syslogd pour grer lhistorique dun nouveau dmon, il faut dabord, en tant que root, raliser les trois oprations suivantes : 1. Crer un fichier vide nomm par exemple /var/log/etud 2. Ajouter une ligne au fichier de configuration : local0.info /var/log/etud local0 (champ FACILITY) prcise lorigine du message info (champ LEVEL) prcise le niveau dimportance du message 3. Forcer le processus syslogd relire son fichier de configuration en lui envoyant le signal SIGHUP kill -HUP <pid_syslogd> Les fonctions utiliser sont :
#include <syslog.h> void openlog(char *ident, int option, int facility)
Ouvre une connexion a syslog pour le programme. La chane pointe par ident est ajoute a chaque message, par dfaut (cest a dire si aucun appel a la fonction openlog na t effectu) elle est positionn sur le nom du programme. Lutilisation dopenlog est optionnelle, elle sera
C. Drocourt
Page 38 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
automatiquement appele par syslog() si ncessaire. Les valeurs pour option et facility sont donnes plus loin.
Gnre un message de log, qui sera distribu par syslogd(8), priority est une combinaison de facility et level donnes ci-dessous. Le dernier argument est une chane formate comme printf excepte que la chane %m sera remplace par la chane du message derreur correspondant la valeur actuelle de errno.
#include <syslog.h> void closelog(void)
Ferme le descripteur utilis pour dialoguer avec syslog, lutilisation de closelog est optionnelle Option Largument option pour openlog() est un OU les diffrentes options suivantes : LOG_CONS : Ecrit directement sur la console systme sil y a une erreur pendant lenvoi dun message au syslog LOG_NDELAY : Ouvre la connexion immdiatement (Normalement , la connexion est ouverte quand le premier message est envoy a syslog) LOG_PERROR : Envoie galement le message sur stderr LOG_PID : Inclus le PID avec chaque message Facility et Level Consulter les pages de man. Pour que le nouveau dmon utilise alors les services proposs par syslogd, on inclura dans son code des lignes du style :
char tmp[]="Serveur Personnel"; ... openlog(tmp,LOG_PERROR,LOG_LOCAL0); ... syslog( LOG_LOCAL0|LOG_INFO, "serveur bidule actif PID=%d UID=%d\n", getpid(),getuid()); ...
4.2.3 - Le contrle
Un dmon peut tre programm pour lire un fichier de configuration lors de son lancement mais il peut tre aussi important de lobliger relire ce fichier, sans larrter, surtout quant ce serveur a un rle fondamental dans la bonne marche du systme tout entier. Ceci est ralis par lenvoi du signal SIGHUP et son droutement dans le code du serveur par le biais de la primitive sigaction. En rgle gnrale, le fichier de configuration se termine par lextension ".conf".
C. Drocourt
Page 39 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Lchange dinformations types ou structures entre diffrentes machines de heurte au problme de la non-unicit de la reprsentation interne des objets. Pour les entiers longs cods sur quatre octets, comme les adresses Internet, nous avons dj utilis les fonctions htonl et ntohl qui utilisent une reprsentation rseau de ces entiers. De mme pour les entiers courts cods sur deux octets , comme les numros de port TCP et UDP, nous avons utilis les fonctions htons et ntohs.
Reprsentation locale
Reprsentation locale
Reprsentation rseau
transfert
Reprsentation rseau
Le protocole XDR vise rsoudre les problmes lis toutes les diffrences de reprsentation des objets qui doivent tre changs sur un rseau : la taille des objets typs lordre des octets la reprsentation proprement dite les problmes dalignement
C. Drocourt
Page 40 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
On va tenter ici de faire passer un float et un double dune machine junon une autre machine jupiter partir dune machine pergame (vous ne pouvez pas effectuer cette manipulation tant donn que la commande rsh est dsactive).
$hostname pergame $rsh junon cat ecr.c /* Ecrivain */ main(void) { float f = 12.45; double d = 12.45; write(1,(char *)&f,sizeof(float)); write(1,(char *)&d,sizeof(double)); } $rsh jupiter cat lec.c /* Lecteur */ main(void) { float f; double d; read(0,(char *)&f,sizeof(float)); read(0,(char *)&d,sizeof(double)); printf("f = %f\nd = %lf\n",f,d); } $rsh jupiter ecr | rsh junon lec ... ...
Si les deux machines junon et jupiter ont la mme architecture, il ny aura aucun problme et on obtiendra : f = 12.450000 d = 12.450000 Si ce nest pas le cas, on obtiendra nimporte quoi ! ! !
Page 41 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
srialisation (codage)
dsrialisation (dcodage)
Flot XDR
transfert
Flot XDR
La principale critique qu'on peut formuler relativement ce protocole est que si l'change d'informations a lieu entre deux machines de mme type sur lesquelles la reprsentation des informations est diffrente de la reprsentation standard, on devra nanmoins procder un encodage sur la machine source et un dcodage sur la machine cible, deux oprations priori inutiles puisque la reprsentation sur les deux machines est identique.
5.3 - Oprations de base sur les flots XDR 5.3.1 - Les fichiers standard
Les fichiers <rpc/types.h> et <rpc/xdr.h> doivent tre inclus dans cet ordre dans les programmes utilisant [es fonctions de la biliothque XDR. Ils contiennent la dfinition de diffrents types et constantes de base constituant l'interface des applications avec la bibliothque : le type bool_t les objets de ce type peuvent prendre les valeurs symboliques FALSE et TRUE lnumration enum xdr_op ensemble des valeurs XDR_ENCODE XDR_DECODE XDR_FREE qui correspondent chacune un type de flot le type XDR correspond la structure dun flot XDR (structure opaque) quivalent pour la bibliothque XDR au type FILE utilis par la bibliothque standard des E/S
C. Drocourt
Page 42 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Le type dun flot spcifie si le flot est un flot d'encodage (XDR_ENCODE) ou de dcodage (XDR_DECODE). Il est spcifi la cration de celui-ci et il dtermine la nature des oprations qui pourront lui tre appliques. Un troisime type (XDR_FREE) autorise, au cours de certaines oprations de dcodage, la libration de l'espace mmoire allou automatiquement au cours d'oprations d'encodage antrieures.
Cette fonction permet d'initialiser l'objet *ptr_xdr : la zone d'adresse donne de taille octets va ainsi pouvoir tre utilise comme un flot XDR en mmoire. Le type des oprations (soit d'encodage, soit de dcodage) est dtermin par le dernier paramtre qui, en plus des valeurs XDR_ENCODE et XDR_DECODE, peut galement prendre la valeur XDR_FREE : ce type de flot permet la libration de l'espace allou au cours d'un dcodage antrieur dans un flot de type XDR_DECODE ayant entran l'allocation dynamique de mmoire.
C. Drocourt
Page 43 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
La cration d'un flot d'encodage associ en mmoire un tableau de 1024 caractres pourra par exemple tre ralise par la squence suivante :
Le protocole RPC utilise ce type de flots pour les changes de messages au-dessus des protocoles UDP /IP. Les messages changs sont construits en mmoire avant leur transmission via une socket par un appel la primitive sendto. 5.3.3.3 - Les flots XDR et les fichiers Un fichier manipul au niveau de la bibliothque standard et donc pour lequel un pointeur sur un objet de type FILE est dfini (en particulier stdin et stdout), peut tre associ un flot XDR au moyen de la fonction :
#include <rpc/xdr.h> void xdrstdio_create( XDR *ptr-xdr, const FILE *ptr-file, const enum xdr_op type ) ;
Par exemple, la squence suivante ralise l'association de l'entre standard stdin un flot XDR de dcodage :
#include <stdio.h> #include <rpc/types.h> #include <rpc/xdr.h> XDR xdr_file; xdrstdio_create(&xdr_file, stdin, XDR_DECODE) ;
C. Drocourt
Page 44 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
Pour chaque type d'objet lmentaire xyz une fonction (ou filtre) xdr_xyz est dfinie ; elle admet deux paramtres: un pointeur sur un descripteur de flot de type XDR un pointeur sur un objet du type correspondant Les diffrentes fonctions de base renvoient la valeur TRUE ou FALSE (correspondant aux valeurs du type prdfini bool_t) ) selon que lopration demande s'est ou non bien droule.
Selon le type du flot XDR spcifi, elle va : raliser l'encodage de la valeur contenue l'adresse spcifie en second paramtre interprte selon le type correspondant la fonction et ajoute au flot XDR le rsultat de cet encodage dans le cas o le type du flot est XDR_ENCODE. raliser le dcodage dans le flot XDR dun objet du type donn et crit le rsultat ladresse mmoire donn en second paramtre dans le cas o le type du flot est XDR_DECODE.
C. Drocourt
Page 45 / 46
I.U.T. Amiens
I.U.T. Amiens
08/12/2003
C. Drocourt
Page 46 / 46
I.U.T. Amiens