  The Unix and Internet Fundamentals HOWTO
  by Eric S. Raymond
  v1.1, 3 Dcembre 1998

  Ce document dcrit les principes fondamentaux des ordinateurs de type
  PC, des systmes d'exploitation de type UNIX et d'Internet dans un
  langage non technique. (Traduction franaise Philippe Malinge
  pmal@easynet.fr)
  ______________________________________________________________________

  Table des matires


  1. Introduction

     1.1 Sujet de ce document
     1.2 Ressources rattaches
     1.3 Nouvelles versions de ce document
     1.4 Ractions et corrections

  2. Anatomie de base de votre ordinateur

  3. Que se passe-t-il lorsque vous allumez votre ordinateur ?

  4. Que se passe-t-il lorsque vous excutez des programmes  partir du shell?

  5. Comment marchent les priphriques d'entre et les interruptions ?

  6. Comment mon ordinateur fait-il plusieurs choses en mme temps ?

  7. Comment mon ordinateur vite aux processus d'empiter les uns sur les autres ?

  8. Comment mon ordinateur stocke des choses sur le disque ?

     8.1 Bas niveau du disque et structure du systme de fichiers
     8.2 Noms de fichiers et rpertoires
     8.3 Points de montage
     8.4 Comment un fichier est retrouv ?
     8.5 Comment les choses peuvent dgnrer ?

  9. Comment fonctionnent les langages d'ordinateur ?

     9.1 Langages compils
     9.2 Langages interprts
     9.3 Langages P-code

  10. Comment Internet fonctionne ?

     10.1 Noms et localisations
     10.2 Paquets et routeurs
     10.3 TCP et IP
     10.4 HTTP, un protocole d'application


  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn



  11..11..  SSuujjeett ddee ccee ddooccuummeenntt

  Ce document est conu pour aider les utilisateurs de Linux et
  d'Internet qui dsirent apprendre en faisant. Bien que ce soit un bon
  moyen d'acqurir des comptences, quelquefois cela laisse de
  singulires lacunes dans la connaissance des bases -- lacunes qui
  peuvent rendre difficile la rflexion crative ou perturber fortement,
  par manque d'un modle mental clair sur ce qu'il devrait se passer.

  J'essaierai de dcrire clairement, dans un langage simple, comment
  tout marche. La prsentation sera adapte aux personnes qui utilisent
  Unix ou Linux sur du matriel de type PC. Cependant, je ferai ici
  couramment rfrence  'Unix' : ce que je dcrirai se retrouvera sur
  toutes les plates-formes et sur toutes les variantes d'Unix.

  Je suppose que vous utilisez un PC avec un processeur de type Intel.
  Les dtails diffrent quelque peu si vous utilisez un processeur Alpha
  ou PowerPC ou une autre machine Unix, mais les concepts de base
  restent les mmes.

  Je ne voudrais pas rpter les choses, alors vous allez devoir faire
  attention, mais cela veut dire que vous retiendrez chaque mot que vous
  lirez. C'est une bonne ide que de tout parcourir rapidement la
  premire fois ; vous devrez y revenir et relire un certain nombre de
  fois afin de digrer ce que vous avez appris.

  C'est un document en permanente volution. Je prvois d'ajouter des
  chapitres en rponse aux feedbacks, ainsi vous pourrez priodiquement
  le passer en revue.


  11..22..  RReessssoouurrcceess rraattttaacchheess

  Si vous lisez dans l'espoir d'apprendre comment 'hacker', vous devrez
  lire How To Become A Hacker FAQ
  <http://www.tuxedo.org/~esr/faqs/hacker-howto.html>. Il y a beaucoup
  de liens vers d'autres ressources utiles.



  11..33..  NNoouuvveelllleess vveerrssiioonnss ddee ccee ddooccuummeenntt


  Les nouvelles versions de 'Unix and Internet Fundamentals HOWTO'
  seront postes priodiquement dans comp.os.linux.help et  et
  news.answers <news:answers>. Elles pourront tre tlcharges  partir
  de divers sites Linux WWW ou FTP, y compris la page d'accueil du LDP.

  Vous pouvez accder  la dernire version (en anglais) de ce document
  sur le World Wide Web via l'URL
  <http://sunsite.unc.edu/LDP/HOWTO/Unix-Internet-Fundamentals-
  HOWTO.html>.


  11..44..  RRaaccttiioonnss eett ccoorrrreeccttiioonnss


  Si vous avez des questions ou des commentaires  propos de ce
  document, vous pouvez envoyer vos courriers lectroniques  Eric S.
  Raymond,  esr@thyrsus.com. Toutes suggestions ou critiques seront les
  bienvenues. Seront spcialement apprcis les liens hypertexte vers
  des explications plus dtailles ou vers des concepts propres. Si vous
  trouvez des erreurs dans ce document, faites-le moi savoir afin que je
  puisse les corriger dans la nouvelle version. Merci.


  22..  AAnnaattoommiiee ddee bbaassee ddee vvoottrree oorrddiinnaatteeuurr

  Votre ordinateur possde un processeur  l'intrieur duquel se font
  rellement les calculs. Il possde une mmoire interne (ce que les
  gens DOS/Windows dsignent par ``RAM'' et que les gens UNIX dsignent
  souvent par ``core''). Le processeur et la mmoire rsident sur la
  _c_a_r_t_e _m__r_e qui est le coeur de votre ordinateur.

  Votre ordinateur possde un cran et un clavier. Il a un (ou des)
  disque(s) dur(s) et un lecteur de disquettes. L'cran et vos disques
  ont des _c_a_r_t_e_s _c_o_n_t_r__l_e_u_r que l'on connecte sur la carte mre et qui
  aident l'ordinateur  piloter ces priphriques externes. Votre
  clavier est trop simple pour ncessiter une carte spare ; le
  contrleur est intgr dans le chssis du clavier.)

  Nous dcrirons plus tard en dtails comment fonctionnent ces
  priphriques. Pour l'instant, quelques notions de base afin de garder
   l'esprit comment ils fonctionnent ensemble :

  Tous les lments internes de votre ordinateur sont connects par un
  _b_u_s. Physiquement, le bus est ce sur quoi vous connectez vos cartes
  contrleur (carte vido, contrleur disque, carte son si vous en avez
  une). Le bus est l'autoroute emprunte par les donnes entre votre
  processeur, votre cran, votre disque et le reste.



  Le processeur, qui fait tout marcher, ne peut rellement voir tous les
  lments directement ; il doit communiquer avec eux via le bus, le
  seul sous-systme qui soit effectivement trs rapide, qui accde
  directement  la mmoire (le core). Afin que les programmes puissent
  s'excuter, ils doivent tre en mmoire _c_o_r_e.

  Lorsque votre ordinateur lit un programme ou une donne sur le disque,
  il se passe rellement les choses suivantes : le processeur utilise le
  bus pour envoyer une requte de lecture du disque  votre contrleur
  de disque. Quelques instants aprs, le contrleur de disque utilise le
  bus pour signaler  l'ordinateur qu'il a lu la donne et qu'il l'a
  mise  un certain endroit de la mmoire. Le processeur peut utiliser
  le bus pour aller chercher ce qu'il y a  cet endroit de la mmoire.

  Votre clavier et votre cran communiquent galement avec le processeur
  via le bus mais d'une manire plus simple. Nous exposerons cela plus
  loin. Pour l'instant vous en savez suffisamment pour comprendre ce
  qu'il se passe lorsque vous allumez votre ordinateur.


  33..  QQuuee ssee ppaassssee--tt--iill lloorrssqquuee vvoouuss aalllluummeezz vvoottrree oorrddiinnaatteeuurr ??

  Un ordinateur sans programme qui s'excute est juste un tas inerte
  d'lectronique. La premire chose que doit faire un ordinateur
  lorsqu'il est allum est de dmarrer un programme spcial appel
  _s_y_s_t__m_e _d_'_e_x_p_l_o_i_t_a_t_i_o_n. Le travail du systme d'exploitation est
  d'aider les autres programmes de l'ordinateur  travailler, en
  traitant les dtails mprisables du contrle du matriel de
  l'ordinateur.

  Le processus de dmarrage du systme d'exploitation est appel
  _b_o_o_t_i_n_g (originalement c'tait _b_o_o_t_s_t_r_a_p_p_i_n_g _(_l_a__a_g_e _d_e_s _c_h_a_u_s_s_u_r_e_s_),
  allusion  la difficult d'enfiler soi mme ses chaussures `par les
  lacets'. Votre ordinateur sait comment booter car les instructions de
  boot sont stockes dans un de ses composants, le composant BIOS (ou
  Basic Input/Output System).

  Le composant BIOS dit o aller chercher,  une place fixe sur le
  disque dur de plus basse adresse (le _d_i_s_q_u_e _d_e _b_o_o_t), un programme
  spcial appel  _c_h_a_r_g_e_u_r _d_e _b_o_o_t _(_b_o_o_t _l_o_a_d_e_r_) (sous Linux le chargeur
  de boot est appel LILO). Le chargeur de boot est charg en mmoire
  puis lanc. Le travail du chargeur de boot est de dmarrer le systme
  d'exploitation rel.


  Le chargeur fait cela en allant chercher un _n_o_y_a_u, en le chargeant en
  mmoire et en le dmarrant. Lorsque vous bootez Linux et voyez "LILO"
  sur l'cran suivi par une succession de points, c'est qu'il charge le
  noyau. (Chaque point signifie qu'il vient de charger un autre _b_l_o_c _d_u
  _d_i_s_q_u_e du code du noyau.)

  (Vous pouvez vous demander pourquoi le BIOS ne charge pas le noyau
  directement -- pourquoi ces deux tapes du processus avec le chargeur
  de boot ? C'est que le BIOS n'est pas vraiment intelligent. En fait il
  est carrment stupide, et Linux ne l'utilise jamais aprs avoir boot.
  A l'origine, j'ai programm sur des PC 8-bits primitifs avec de petits
  disques : littralement ils ne pouvaient accder  suffisamment de
  disque pour charger le noyau directement. L'tape du chargeur de boot
  vous permet de dmarrer plusieurs systmes d'exploitation  partir de
  diffrents emplacements de votre disque, dans le cas o Unix n'est pas
  assez bon pour vous.)

  Une fois que le noyau dmarre, il doit chercher autour de lui, trouver
  le reste du matriel et tre prt pour excuter des programmes. Il
  fait cela en non pas en fouillant  des adresses mmoire ordinaires
  mais plutt  des _p_o_r_t_s _d_'_E_n_t_r__e_/_S_o_r_t_i_e -- des adresses spciales du
  bus, senses avoir une carte contrleur de priphriques en attente de
  commandes  cet endroit. Le noyau ne fouille pas au hasard ; il a un
  ensemble de connaissances qui lui permet de savoir ce qu'il est sens
  trouver ici, et comment les contrleurs rpondraient s'ils taient
  prsents. Ce processus est appel _E_x_p_l_o_r_a_t_i_o_n _a_u_t_o_m_a_t_i_q_u_e.


  La plupart des messages que vous voyez au moment du boot sont
  l'exploration de votre matriel par le noyau  travers les ports
  d'Entre/Sortie, le chiffrage de ce qui est disponible et l'adaptation
   votre machine. Le noyau Linux est extrmement bon pour cela,
  meilleur que la plupart des autres Unix et _t_e_l_l_e_m_e_n_t meilleur que DOS
  ou Windows. En fait, beaucoup de vieux adeptes de Linux pensent que
  l'ingniosit des explorations de Linux lors du boot (qui lui
  permettent de s'installer relativement simplement) ont t une raison
  de s'panouir dans le monde des expriences des Unix libres pour
  attirer une masse critique d'utilisateurs.


  Mais rendre le noyau compltement charg et s'excutant n'est pas la
  fin du processus de boot ; c'est juste la premire tape (quelquefois
  appele _n_i_v_e_a_u _d_'_e_x__c_u_t_i_o_n _1 _(_r_u_n _l_e_v_e_l _1_)).

  L'tape suivante du noyau est de s'assurer que vos disques sont OK.
  Les systmes de fichiers sur disques sont des choses fragiles ; s'ils
  ont t endommags par une panne matrielle ou par une coupure
  soudaine d'alimentation lectrique, il y a de bonnes raisons de
  rtablir l'intgrit avant que votre Unix ne puisse aller plus loin.
  Nous parlerons plus tard de ce que l'on dit  propos de ``comment les
  systmes de fichiers peuvent devenir mauvais''.


  L'tape suivante du noyau est de lancer plusieurs _d__m_o_n_s. Un dmon est
  un programme comme un spouleur d'imprimante, un serveur de mail ou un
  serveur WWW qui se cache en arrire-plan en attendant d'avoir des
  choses  faire. Ces programmes spciaux doivent coordonner plusieurs
  requtes qui peuvent entrer en conflit. Il y a des dmons car il est
  souvent plus facile d'crire un programme qui s'excute constamment et
  qui sait tout des requtes, plutt que d'essayer de s'assurer qu'un
  troupeau de copies (chacune traitant une requte et toutes s'excutant
  en mme temps) ne se gneraient pas mutuellement. La collection
  particulire de dmons que le systme dmarre peut varier, mais
  inclura presque toujours un spouleur d'imprimante (un dmon garde-
  barrire de votre imprimante).

  Une fois que tous les dmons ont dmarr, nous sommes dans le _n_i_v_e_a_u
  _d_'_e_x__c_u_t_i_o_n _2 _(_r_u_n _l_e_v_e_l _2_). L'tape suivante est la prparation pour
  les utilisateurs. Le noyau dmarre une copie d'un programme appel
  getty pour surveiller votre console (et peut tre d'autres copies pour
  surveiller des ports-srie entrants) Ce programme est celui duquel
  jaillit le prompt login sur votre console. Nous sommes maintenant dans
  le _n_i_v_e_a_u _d_'_e_x__c_u_t_i_o_n _3 _(_r_u_n _l_e_v_e_l _3_) et prts pour votre connexion et
  l'excution de vos programmes.


  Quand vous vous connectez (en donnant un nom et un mot de passe), vous
  vous identifiez auprs de getty et de l'ordinateur. Il excute
  maintenant un programme appel (assez naturellement) login, qui
  ralise des tches ancillaires et dmarre un interprteur de
  commandes, le _s_h_e_l_l. (Oui getty et login pourraient tre un seul et
  mme programme. Ils sont spars pour des raisons historiques que nous
  n'expliciterons pas ici.)


  Dans la section suivante, nous parlerons de ce qui se passe lorsque
  vous excutez des programmes  partir du shell.


  44..  QQuuee ssee ppaassssee--tt--iill lloorrssqquuee vvoouuss eexxccuutteezz ddeess pprrooggrraammmmeess  ppaarrttiirr dduu
  sshheellll??

  Le shell normal vous donne le prompt '$' que vous voyez aprs vous
  tre connect (cependant vous pouvez le modifier et mettre autre
  chose). Nous ne parlerons pas de la syntaxe du shell et des choses
  faciles que vous pouvez voir sur votre cran ici ; alors que nous
  l'ordinateur.

  Aprs la phase de boot et avant que vous n'excutiez un programme,
  vous pouvez penser  votre ordinateur comme tant un zoo de processus
  qui attendent qu'il se passe quelque chose. Ils attendent des
  __v__n_e_m_e_n_t_s. Un vnement, ce peut tre l'enfoncement d'une touche ou
  un dplacement de la souris. Ou, si votre machine est connecte  un
  rseau, un vnement peut tre un paquet de donnes venant de ce
  rseau.

  Le noyau est un de ces processus. C'en est un spcial, car il contrle
  le moment o les autres processus _u_t_i_l_i_s_a_t_e_u_r peuvent s'excuter, et
  c'est normalement le seul processus qui accde directement au matriel
  de la machine. En fait, les processus utilisateurs font des requtes
  au noyau lorsqu'ils veulent obtenir une entre clavier, crire sur
  votre cran, lire ou crire sur votre disque ou juste autre chose que
  consommer quelques bits en mmoire. Ces requtes sont appeles _a_p_p_e_l_s
  _s_y_s_t__m_e.

  Normalement toute Entre/Sortie passe par le noyau de manire  ce
  qu'il puisse ordonnancer les oprations et viter ainsi aux processus
  de se marcher les uns sur les autres. Quelques processus utilisateur
  sont autoriss  contourner le noyau, habituellement en ayant accs
  directement aux ports d'Entre/Sortie. Les serveurs X (les programmes
  qui traitent les requtes graphiques des autres programmes sur la
  plupart des machines Unix) sont des exemples classiques. Mais nous
  n'avons pas vu de serveur X pour l'instant ; vous tes au prompt du
  shell sur une console en mode caractres.

  Le shell est juste un processus utilisateur, et non un processus
  particulirement spcial. Il attend vos frappes sur les touches du
  clavier, coutant ( travers le noyau) le port d'E/S du clavier. Comme
  le noyau les voit, il les affiche sur votre cran et les passe au
  shell. Le shell essaie de les interprter comme tant des commandes.


  Tapez `ls' suivi de `Enter' afin de lister le contenu d'un rpertoire.
  Le shell applique ses rgles internes pour valuer la commande que
  vous voulez excuter dans le fichier `/bin/ls'. Il fait un appel
  systme en demandant au noyau de lancer `/bin/ls' comme un processus
  _f_i_l_s et donne son accs  l'cran et au clavier  travers le noyau. Le
  shell se rendort en attendant que 'ls' se termine.

  Lorsque /bin/ls est termin, il dit au noyau qu'il a termin en
  effectuant un appel systme _e_x_i_t. Le noyau rveille le shell et lui
  dit qu'il peut continuer  s'excuter. Le shell affiche un autre
  prompt et attend une autre ligne en entre.

  D'autres choses peuvent tre faites pendant l'excution de `ls',
  cependant (nous supposerons que la liste du rpertoire est trs
  longue). Vous pourriez basculer sur une autre console virtuelle, vous
  connecter, et lancer une jeu de Quake par exemple. Ou bien, supposez
  que vous tes connect  Internet : votre machine peut envoyer ou
  recevoir des mails pendant que `/bin/ls' s'excute.



  55..  CCoommmmeenntt mmaarrcchheenntt lleess pprriipphhrriiqquueess dd''eennttrree eett lleess iinntteerrrruuppttiioonnss ??

  Votre clavier est un priphrique trs simple ; simple car il gnre
  un petit flux de donnes trs lentement (sur un ordinateur standard).
  Lorsque vous relchez une touche, cet vnement est signal par le
  cble du clavier qui va provoquer une _i_n_t_e_r_r_u_p_t_i_o_n _m_a_t__r_i_e_l.

  C'est au systme d'exploitation de surveiller de telles interruptions.
  Pour chaque type possible d'interruption, il y a un _h_a_n_d_l_e_r
  _d_'_i_n_t_e_r_r_u_p_t_i_o_n, une partie du systme d'exploitation dissimule toutes
  les donnes associes (comme la valeur touche enfonce/touche
  relche) tant qu'elle ne peut tre traite.

  Ce que le fait le handler d'interruption disque pour votre clavier est
  de dposer la valeur de la touche dans une zone en bas de la mmoire
  (core). Ainsi elle sera disponible pour l'inspection lorsque le
  systme d'exploitation passera le contrle  n'importe quel programme
  suppos attendre prsentement une entre clavier.


  Des priphriques d'entre plus complexes comme les disques
  travaillent de manire similaire. Prcdemment nous faisions rfrence
   un contrleur de disques utilisant le bus pour signaler qu'une
  requte disque a bien t excute. Que se passe-t-il si ce disque
  reoit une interruption ? Le handler de l'interruption disque copie
  alors la donne trouve dans la mmoire, pour une utilisation future
  par le programme qui en avait fait la demande.

  Chaque type d'interruption est associ  un _n_i_v_e_a_u _d_e _p_r_i_o_r_i_t_. Les
  interruptions de plus basse priorit (comme les vnements clavier)
  sont traites aprs celles de priorit suprieures (comme les tops
  d'horloge ou les vnements disque). Unix a t conu pour traiter
  prioritairement les types d'vnements qui doivent tre traits
  rapidement afin de conserver une machine sur laquelle les temps de
  rponse sont sont sans -coup.

  Les messages que vous voyez pendant la phase de boot font rfrence 
  des numros d'_I_R_Q. Vous devez tre prvenus qu'une des causes les plus
  courantes de mauvaise configuration de votre matriel est d'avoir deux
  priphriques qui essaient d'utiliser la mme IRQ, sans savoir ce que
  c'est rellement.

  La rponse est ici. IRQ est l'abbrviation de "Interrupt ReQuest". Le
  systme d'exploitation a besoin de savoir au dmarrage quel numro
  d'interruption sera utilis par chaque priphrique, ainsi il peut
  associer le handler adquat pour chacun. Si deux priphriques
  diffrents essaient d'utiliser la mme IRQ, les interruptions seraient
  quelquefois distribues au mauvais handler. Cela est classique au
  moins au verrouillage du priphrique, et peut parfois dstabiliser le
  systme d'exploitation, qu'il se "dsintgre" ou qu'il se crashe.


  66..  CCoommmmeenntt mmoonn oorrddiinnaatteeuurr ffaaiitt--iill pplluussiieeuurrss cchhoosseess eenn mmmmee tteemmppss ??

  En fait, il ne le fait pas. Les ordinateurs ne peuvent traiter qu'une
  seule tche (ou _p_r_o_c_e_s_s_u_s)  la fois. Mais un ordinateur peut changer
  de tche trs rapidement, et duper l'esprit humain en lui faisant
  croire qu'il fait plusieurs choses en mme temps. C'est ce que l'on
  appelle le _t_e_m_p_s _p_a_r_t_a_g_.

  Une des tches du noyau est de grer le temps partag. C'est une
  partie ddie  l'_o_r_d_o_n_n_a_n_c_e_u_r qui conserve chez lui toutes les
  informations sur les autres processus (non noyau) de votre
  environnement. Chaque 1/60 me de seconde, une horloge avertit le
  noyau, gnrant une interruption horloge. L'ordonnanceur arrte le
  processus qui s'excute, le suspend dans l'tat, et donne le contrle
   un autre processus.

  1/60 me de seconde peut paratre peu de temps. Mais sur les
  microprocesseurs actuels c'est assez pour excuter des dizaines de
  milliers d'instructions machine, ce qui permet d'effectuer beaucoup de
  choses. Mme si vous avez plusieurs processus, chacun peut accomplir
  un petit peu sa tche pendant ses tranches de temps.

  En pratique, un programme ne dispose pas de sa tranche de temps
  entire. Si une interruption arrive d'un priphrique d'E/S, le noyau
  arrtera en ralit la tche courante, excutera le handler
  d'interruption et retournera  la tche courante. Une tempte
  d'interruption de haute priorit peut interdire tout traitement
  normal ; ce mauvais comportement est appel _d__f_a_i_t_e _(_t_h_r_a_s_h_i_n_g_) et est
  difficile  provoquer sur les Unix modernes.

  En fait, la vitesse des programmes est trs rarement limite par le
  temps machine qu'ils peuvent obtenir (il y a quelques exceptions 
  cette rgle, comme la gnration de son ou de graphiques en 3-D. Le
  plus souvent, les dlais sont dus  l'attente, par le programme, des
  donnes d'un disque ou d'une connexion rseau.

  Un systme d'exploitation qui peut supporter de manire routinire
  plusieurs processus est appel "multitche". Les systmes
  d'exploitation de la famille Unix ont t conus ds le dbut pour le
  multitche et sont vraiment bons pour a -- beaucoup plus efficaces
  que celui de Windows et MAC OS, pour lesquels le multitche a t
  introduit a posteriori et qui le traitent plutt pauvrement. Efficace,
  multitche, fiable sont quelques-unes des raisons qui rendent Linux
  suprieur pour le rseau, les communications et les services WEB.


  77..  CCoommmmeenntt mmoonn oorrddiinnaatteeuurr vviittee aauuxx pprroocceessssuuss dd''eemmppiitteerr lleess uunnss ssuurr
  lleess aauuttrreess ??

  L'ordonnanceur du noyau fait attention  sparer les processus dans le
  temps. Votre systme d'exploitation les divise aussi dans l'espace, de
  telle manire que ces processus n'empitent pas sur la mmoire de
  travail des autres. Ces choses que votre systme d'exploitation
  ralise sont appeles _g_e_s_t_i_o_n _d_e _l_a _m__m_o_i_r_e.

  Chaque processus de votre 'troupeau' a besoin de son propre espace
  mmoire afin de mettre son code et de garder des variables et leur
  rsultat. Vous pouvez imaginer cet ensemble constitu d'un _s_e_g_m_e_n_t _d_e
  _c_o_d_e accessible en lecture uniquement (contenant les instrucions du
  processus) et un _s_e_g_m_e_n_t _d_e _d_o_n_n__e_s accessible en criture (contenant
  toutes les variables du processus). Le segment de donnes est
  vritablement propre  chaque processus, mais si deux processus
  excutent le mme code, Unix s'arrange automatiquement pour qu'ils
  partagent le mme segment de code dans un soucis d'efficacit.

  L'efficacit est importante car la mmoire est chre. Quelquefois,
  vous ne disposez pas de suffisamment de mmoire pour faire tenir tous
  les programmes, spcialement si vous utilisez un gros programme comme
  un serveur X-WINDOW. Pour contourner cela, Unix utilise une stratgie
  appele  _m__m_o_i_r_e _v_i_r_t_u_e_l_l_e. Cela n'essaie pas de faire tenir tout le
  code et les donnes d'un processus en mmoire. Cependant, il garde
  seulement un espace de travail ; le reste de l'tat du processus est
  laiss dans un endroit spcial sur votre disque : _l_'_e_s_p_a_c_e _d_'__c_h_a_n_g_e
  _(_s_w_a_p _s_p_a_c_e_).

  Lorsque le processus s'excute, Unix essaie d'anticiper comment l'
  espace de travail changera, et ne chargera en mmoire que les morceaux
  dont il a besoin. Faire cela efficacement est compliqu et dlicat, je
  n'essaierai pas de le dcrire ici -- mais cela dpend du fait que le
  code et les rfrences aux donnes peuvent arriver en blocs, avec
  chaque nouveau rfrenant vraisemblablement un proche ou un ancien.
  Ainsi, si Unix garde le code ou les donnes frquemment (ou rcemment)
  utiliss, vous gagnerez du temps.

  Notez que dans le pass, le "quelquefois" que nous employons deux
  paragraphes plus haut tait "souvent" voire "toujours", -- la taille
  de la mmoire tait habituellement petite par rapport  la taille des
  programmes en cours d'excution, de telle manire que les changes
  entre le disque et la mmoire ("swapping") taient frquents. La
  mmoire est beaucoup moins chre de nos jours et mme les machines bas
  de gamme en sont bien dotes. Sur les machines mono-utilisateur avec
  64Mo de mmoire, il est possible de faire tourner X-WINDOW et un
  mlange de programmes sans jamais swapper.

  Mme dans cette situation joyeuse, la part du systme d'exploitation
  appele le _g_e_s_t_i_o_n_n_a_i_r_e _d_e _m__m_o_i_r_e a un important travail  faire. Il
  doit tre sr que les programmes ne peuvent modifier que leurs
  segments de mmoire -- ce qui empche un code erron ou malicieux dans
  un programme de ramasser les donnes dans un autre. Pour faire cela,
  il conserve une table des segments de donnes et de code. La table est
  mise  jour chaque fois qu'un processus demande de la mmoire ou en
  libre (habituellement plus tard lorsqu'il se termine).

  Cette table est utilise pour passer des commandes  une partie
  spcialise du matriel sous-jacent appele un _U_G_M _(_M_M_U_) ou _u_n_i_t_ _d_e
  _g_e_s_t_i_o_n _m__m_o_i_r_e _(_m_e_m_o_r_y _m_a_n_a_g_e_m_e_n_t _u_n_i_t_). Les processeurs modernes
  disposent de MMUs intgrs. Le MMU a la facult de mettre des
  barrires autour de zones mmoire, ainsi une rfrence en "dehors des
  clous" sera refuse et gnrera une interruption spciale pour tre
  traite.

  Si vous avez dj vu le message Unix qui dit "Segmentation fault",
  "core dumped" ou quelque chose de similaire, c'est exactement ce qu'il
  se passe ; un programme en cours d'excution a tent d'accder  de la
  mmoire en dehors de son segment et a provoqu une interruption
  fatale. Cela indique un bug dans le code du programme ; le _c_o_r_e _d_u_m_p
  laisse une information en vue d'un diagnostic  l'attention du
  programmeur afin qu'il puisse trouver la trace de son erreur.


  88..  CCoommmmeenntt mmoonn oorrddiinnaatteeuurr ssttoocckkee ddeess cchhoosseess ssuurr llee ddiissqquuee ??

  Sur votre disque dur sous Unix, vous voyez un arbre de rpertoires
  nomms et des fichiers. Normalement vous ne devriez pas  chercher 
  en savoir plus, mais cela peut s'avrer utile de savoir ce qu'il y a
  dessous si vous avez un crash disque et besoin d'essayer de nettoyer
  des fichiers. Malheureusement il n'y a pas de bon moyen de dcrire
  l'organisation du disque en partant du niveau fichier et en
  descendant, c'est pour cela que je le dcrirai en remontant  partir
  du niveau matriel.


  88..11..  BBaass nniivveeaauu dduu ddiissqquuee eett ssttrruuccttuurree dduu ssyyssttmmee ddee ffiicchhiieerrss

  La surface de votre disque , sur laquelle il stocke les donnes est
  divise comme une cible de jeu de flchettes -- en pistes circulaires
  qui sont partages en secteurs. Parce que les pistes de l'extrieur
  contiennent plus de surface que celles prs de l'axe de rotation, au
  centre du disque, les pistes externes ont plus de secteurs que celles
  de l'intrieur. Chaque secteur (ou _b_l_o_c _d_i_s_q_u_e) a la mme taille, qui
  est gnralement de 1Ko (1024 mots de 8 bits). Chaque bloc disque a
  une adresse unique ou un  _n_u_m__r_o _d_e _b_l_o_c _d_i_s_q_u_e.


  Unix divise le disque en _p_a_r_t_i_t_i_o_n_s _d_i_s_q_u_e. Chaque partition est une
  succession de blocs qui est utilise indpendamment des autres
  partitions, comme un systme de fichiers ou un espace d'change (swap
  space). La partition ayant le plus petit numro est souvent traite
  spcialement, telle la _p_a_r_t_i_t_i_o_n _d_e _b_o_o_t dans laquelle vous pouvez
  mettre un noyau pour booter.


  Chaque partition est soit un _e_s_p_a_c_e _d_e _s_w_a_p (utilis pour implmenter
  la ``mmoire virtuelle'') soit un _s_y_s_t__m_e _d_e _f_i_c_h_i_e_r_s pour stocker des
  fichiers. Les partitions de swap sont traites comme une squence
  linaire de blocs. Les systmes de fichiers d'un autre cot, ont
  besoin de relier les noms de fichiers  des squences de blocs disque.
  Parce que les fichiers grossissent, diminuent, et changent tout le
  temps, les blocs de donnes d'un fichier ne seront pas une squence
  linaire mais pourront tre disperss sur toute la partition (tant que
  le systme d'exploitation pourra trouver un bloc libre).



  88..22..  NNoommss ddee ffiicchhiieerrss eett rrppeerrttooiirreess

  Dans chaque systme de fichiers, la liaison entre les noms et les
  blocs est ralise grce  une structure appele _i_-_n_o_d_e _(_n_o_e_u_d
  _d_'_i_n_d_e_x_). Il y en a tout un tas proche de la "base" (numro de bloc
  les plus faibles) du systme de fichiers (les tout premiers sont
  utiliss pour des besoins d'intgrit et de label que nous ne
  dcrirons pas ici). Chaque i-node dcrit un fichier. Les blocs de
  donnes des fichiers sont au dessus des i-nodes (conceptuellement).

  Chaque i-node contient la liste des numros des blocs du fichier
  (rellement c'est une demi-vrit, c'est seulement valable pour les
  petits fichiers, mais le reste de ces dtails ne sont pas importants
  ici). Notez que l'i-node _n_e _c_o_n_t_i_e_n_t _p_a_s le nom du fichier.

  Les noms des fichiers rsident dans les _s_t_r_u_c_t_u_r_e_s _d_e _r__p_e_r_t_o_i_r_e_s. Une
  structure de rpertoire contient juste une table des noms et des
  numros d'i-node associs. C'est la raison pour laquelle, sous Unix,
  un fichier peut avoir plusieurs noms rels (ou _l_i_e_n_s _f_o_r_t_s _(_h_a_r_d
  _l_i_n_k_s_)) ; Il y a juste plusieurs entres dans un rpertoire qui
  pointent vers le mme i-node.


  88..33..  PPooiinnttss ddee mmoonnttaaggee

  Dans le cas le plus simple, votre systme de fichiers Unix tient sur
  une seule partition disque. Cependant vous verrez que cette
  disposition sur des petits systmes Unix n'est pas pratique.
  Typiquement il est rparti sur plusieurs partitions disque voire  sur
  plusieurs disques physiques. Ainsi par exemple, votre systme peut
  avoir une petite partition o le noyau rside, une un peu plus grande
  pour les utilitaires du systme et une beaucoup plus grosse pour les
  rpertoires des utilisateurs.

  La seule partition  laquelle vous aurez accs immdiatement aprs le
  boot est votre _p_a_r_t_i_t_i_o_n _r_a_c_i_n_e _(_r_o_o_t _p_a_r_t_i_t_i_o_n_), qui est (presque
  toujours) celle   partir de laquelle vous avez boot. Elle contient
  le rpertoire racine du systme de fichiers, le noeud le plus haut 
  partir duquel tout est raccroch.

  Les autres partitions du systme doivent tre attaches  cette racine
  afin que votre systme de fichiers unique ou multi-partition soit
  accessible. Au milieu du processus de boot, votre Unix rendra ces
  partitions 'non root' accessibles. Il devra _m_o_n_t_e_r chacune d'elles sur
  un rpertoire de la partition racine.

  Par exemple, si votre Unix a un rpertoire appel '/usr', c'est
  probablement un point de montage d'une partition qui contient un tas
  de programmes installs avec votre Unix mais qui ne sont pas
  ncessaires durant la phase initiale de boot.


  88..44..  CCoommmmeenntt uunn ffiicchhiieerr eesstt rreettrroouuvv ??

  Maintenant nous pouvons considrer le systme de fichiers dans une
  dmarche descendante. Lorsque vous ouvrez un fichier (tel que
  /home/esr/WWW/ldp/fundamentals.sgml) voici ce qu'il arrive :

  Votre noyau dmarre de la racine de votre systme de fichiers Unix
  (dans la partition root). Il cherche un rpertoire appel `home'.
  Habituellement `home' est un point de montage d'une grande partition
  pour les utilisateurs, il descend  l'intrieur. Au sommet de la
  structure du rpertoire de cette partition utilisateur, il va chercher
  une entre nomme `esr' et en extraire le numro d'i-node. Il ira 
  cette i-node, notez que c'est une structure de rpertoire, et
  retrouvera `WWW'. En exploitant _c_e_t i-node, il ira au sous rpertoire
  correspondant et retrouvera `ldp'. Ce qui lui donnera encore un autre
  i-node rpertoire. En ouvrant ce dernier, il trouvera un numro d'i-
  node pour `fundamentals.sgml'. Cet i-node n'est pas un rpertoire mais
  fournit la liste des blocs associs au fichier.




  88..55..  CCoommmmeenntt lleess cchhoosseess ppeeuuvveenntt ddggnnrreerr ??

  Plus haut, nous avons laiss entendre que les systmes de fichiers
  taient fragiles.  Maintenant nous savons que pour accder  un
  fichier vous devez parcourir une longue chane arbitraire de
  rfrences  des rpertoires et  des inodes. A prsent, supposons que
  votre disque dur possde une zone dfectueuse.

  Si vous tes chanceux, il dtruira quelques donnes d'un fichier. Si
  vous tes malchanceux, il va corrompre une structure de rpertoire ou
  un numro d'inode et laissera un sous arbre entier de votre systme
  dans l'oubli -- ou, pire, cela a donn une structure corrompue qui
  pointe par plusieurs chemins au mme bloc disque ou inode. Une telle
  corruption peut s'tendre par des oprations courantes sur les
  fichiers qui ne se trouvent pas au point d'origine.

  Heureusement, ce genre de d'imprvu devient de plus en plus rare car
  les disques sont de plus en plus fiables. Malgr tout, cela veut dire
  que votre Unix voudra vrifier priodiquement l'intgrit du systme
  de fichiers afin de s'assurer que rien ne cloche. Les Unix modernes
  font une vrification rapide sur chaque partition au moment du boot,
  juste avant de les monter. Au bout d'un certain nombre de redmarrages
  (reboot), la vrification sera plus approfondie et durera quelques
  minutes.

  Si tout cela vous parait, comme Unix, terriblement complexe et
  prdispos aux dfaillances, au contraire, c'est rassurant de savoir
  que ces vrifications faites au dmarrage de la machine, dtectent et
  corrigent les problmes courants _a_v_a_n_t qu'ils ne deviennent rellement
  dsastreux. D'autres systmes d'exploitation ne disposent pas de ces
  fonctionnalits, qui acclrent  un petit peu le dmarrage, mais
  peuvent vous laisser tout 'bousiller' en essayant de rcuprer  la
  main (et en supposant que vous ayez une copie des Utilitaires Norton
  ou autre  porte de main...).



  99..  CCoommmmeenntt ffoonnccttiioonnnneenntt lleess llaannggaaggeess dd''oorrddiinnaatteeuurr ??

  Nous avons dj voqu ``comment les programmes sont      excuts''.
  Chaque programme en fin de compte doit excuter une succession
  d'octets qui sont les instructions dans le _l_a_n_g_a_g_e _m_a_c_h_i_n_e de votre
  ordinateur. Les humains ne pratiquent pas trs bien le langage
  machine ; cela est devenu rare, art obscur mme parmi les hackers.

  La plupart du code du noyau d'Unix except une petite partie de
  l'interface avec le matriel est de nos jours crite dans un _l_a_n_g_a_g_e
  _d_e _h_a_u_t _n_i_v_e_a_u. (Le terme 'haut niveau' est un hritage du pass afin
  de le distinguer du 'bas-niveau' des _l_a_n_g_a_g_e_s _a_s_s_e_m_b_l_e_u_r, qui sont de
  maigres "couches" autour du code machine.


  Il y plusieurs types diffrents de langages de haut niveau. Afin de
  parler d'eux, vous trouverez utile que j'attire votre attention sur le
  fait que le _c_o_d_e _s_o_u_r_c_e d'un programme (la cration humaine, la
  version ditable) est pass  travers plusieurs types de traductions
  pour arriver en code machine, que la machine peut effectivement
  excuter.


  99..11..  LLaannggaaggeess ccoommppiillss

  Le type le plus classique de langage est un _l_a_n_g_a_g_e _c_o_m_p_i_l_. Les
  langages compils sont traduits en fichiers excutables de code
  machine binaire par un programme spcial appel (assez logiquement) un
  _c_o_m_p_i_l_a_t_e_u_r. Lorsque le binaire est gnr, vous pouvez l'excuter
  directement sans regarder  nouveau dans le code source. (La plupart
  des logiciels dlivrs sous forme de binaires compils sont faits 
  partir d'un source auquel vous n'avez pas accs.)

  Les langages compils tendent  fournir une excellente performance et
  ont un accs le plus complet au systme d'exploitation, mais il
  difficile de programmer avec.

  Le langage C, langage dans lequel chaque Unix est lui-mme crit, est
  de tous le plus important (avec sa variante C++). FORTRAN est un autre
  langage compil qui reste utilis par de nombreux ingnieurs et
  scientifiques mais plus vieux et plus primitif. Dans le monde Unix
  aucun autre langage compil n'est autant utilis. En dehors de lui,
  COBOL est trs largement utilis pour les logiciels de finance et
  comptabilit.

  Il y a bien d'autres compilateurs de langages, mais la plupart sont en
  voie d'extinction ou sont strictement des outils de recherche. Si vous
  tes un nouveau dveloppeur Unix qui utilise un langage compil, il
  est incontournable que ce soit C ou C++.



  99..22..  LLaannggaaggeess iinntteerrpprrttss

  Un _l_a_n_g_a_g_e _i_n_t_e_r_p_r__t_ dpend d'un programme interprteur qui lit le
  code source et traduit  la vole en calculs et appels systme. Le
  source doit tre r-interprt (et l'interprteur prsent)  chaque
  fois que le programme est excut.

  Les langages interprts tendent  tre plus lents que les langages
  compils, et limitent souvent les accs au systme d'exploitation ou
  au matriel sous-jacent. D'un autre ct, il est plus facile de
  programmer et ils tolrent plus d'erreurs de codage que les langages
  compils.


  Quelques utilitaires Unix, incluant le shell et bc(1) et sed(1) et
  awk(1), sont effectivement des petits langages interprts. Les BASICs
  sont gnralement interprts. Ainsi est Tcl. Historiquement, le
  langage le plus interprt tait LISP (une amlioration norme sur la
  plupart de ses successeurs). Aujourd'hui, Perl est trs largement
  utilis et devient rsolument plus populaire.



  99..33..  LLaannggaaggeess PP--ccooddee

  Depuis 1990 un type de langage hybride qui utilise la compilation et
  l'interprtation est devenu incroyablement important. Les langages P-
  code sont comme des langages compils dans le sens o le code est
  traduit dans une forme binaire compacte qui est celle que vous
  excutez, mais cette forme n'est pas du code machine. Au lieu de cela,
  c'est du _p_s_e_u_d_o_-_c_o_d_e (ou _p_-_c_o_d_e), qui est gnralement un peu plus
  simple mais plus puissant qu'un langage machine rel. Lorsque vous
  excutez le programme, vous interprtez du p-code.


  Le p-code peut s'excuter pratiquement aussi rapidement que du binaire
  compil (les interprteurs de p-code peuvent tre relativement
  simples, petits et rapides). Mais les langages p-code peuvent garder
  la flexibilit et la puissance d'un bon interprteur.

  D'importants langages p-code sont Python et Java.


  1100..  CCoommmmeenntt IInntteerrnneett ffoonnccttiioonnnnee ??

  Afin de vous aider  comprendre comment Internet fonctionne, nous
  verrons ce qui se passe lorsque vous effectuez une opration classique
  -- pointer dans un navigateur ce document  partir du site Web de
  rfrence du Projet de Documentation de Linux (Linux Documentation
  Project). Ce document est :


  http://sunsite.unc.edu/LDP/HOWTO/Fundamentals.html



  ce qui veut dire qu'il rside dans le fichier
  LDP/HOWTO/Fundamentals.html, sous le rpertoire export World Wide Web
  de la machine sunsite.unc.edu.



  1100..11..  NNoommss eett llooccaalliissaattiioonnss

  La premire chose que votre navigateur doit faire est d'tablir une
  connexion rseau avec la machine sur laquelle se trouve le document.
  Pour faire cela, il doit tout d'abord trouver la localisation rseau
  de _l_'_h__t_e sunsite.unc.edu (hte est un raccourci pour `machine hte'
  ou `hte rseau' ; sunsite.unc.edu est un _n_o_m _d_'_h__t_e _(_h_o_s_t_n_a_m_e_)
  typique). La localisation correspondante est en fait un nombre appel
  _a_d_r_e_s_s_e _I_P (nous expliquerons la partie `IP' de ce terme plus tard).

  Pour faire cela, votre navigateur sollicite un programme nomm _s_e_r_v_e_u_r
  _d_e _n_o_m_s. Le serveur de noms peut rsider sur votre machine, mais il
  est plus probable qu'il soit sur une machine de service avec laquelle
  vous pouvez dialoguer. Lorsque vous abonnez chez un Fournisseur
  d'Accs  Internet (FAI), une partie de la procdure d'installation
  dcrit certainement la manire d'indiquer  votre logiciel Internet
  l'adresse IP du serveur de noms du rseau du FAI.

  Les serveurs de noms sur diffrentes machines communiquent avec les
  autres en changeant et en gardant  jour toutes les informations
  ncessaires  la rsolution de noms d'hte (en les associant  des
  adresses IP). Votre serveur de noms doit demander  trois ou quatre
  sites  travers le rseau afin de rsoudre sunsite.unc.edu, mais cela
  se droule vraiment rapidement (en moins d'une seconde).

  Le serveur de noms dira  votre navigateur que l'adresse IP de Sunsite
  est 152.2.22.81 ; sachant cela, votre machine sera capable d'changer
  des bits avec Sunsite directement.



  1100..22..  PPaaqquueettss eett rroouutteeuurrss

  Ce que le navigateur veut faire est d'envoyer une commande au serveur
  Web sur Sunsite qui a la forme suivante :


  GET /LDP/HOWTO/Fundamentals.html HTTP/1.0



  Que se passe-t-il alors ? La commande est faite de _p_a_q_u_e_t_s ; un bloc
  de bits comme un tlgramme est dcoup en trois choses importantes :
  _l_'_a_d_r_e_s_s_e _s_o_u_r_c_e (l'IP de votre machine), _l_'_a_d_r_e_s_s_e _d_e_s_t_i_n_a_t_i_o_n
  (152.2.22.81), et le _n_u_m__r_o _d_e _s_e_r_v_i_c_e ou _n_u_m__r_o _d_e _p_o_r_t (80, dans ce
  cas) qui indique que c'est une requte World Wide Web.

  Alors votre machine envoie le paquet par le fil (de la connexion modem
  avec votre FAI, ou le rseau local) jusqu' ce qu'il rencontre une
  machine spcialise appele _r_o_u_t_e_u_r. Le routeur possde une carte de
  l'Internet dans sa mmoire -- pas une complte mais une qui dcrit
  votre voisinage rseau et sait comment aller aux routeurs pour les
  autres voisinages sur l'Internet.

  Votre paquet peut passer  travers plusieurs routeurs sur le chemin de
  sa destination. Les routeurs sont adroits. Ils regardent combien de
  temps prend un accus rception pour recevoir un paquet. Ils utilisent
  cette information pour aiguiller le trafic sur les liens rapides. Ils
  l'utilisent pour s'apercevoir que d'autres routeurs (ou un cble) sont
  dconnects du rseau et modifier le chemin si possible en trouvant
  une autre route.

  Il existe une lgende urbaine qui dit qu'Internet a t conu pour
  survivre a une guerre nuclaire. Ce n'est pas vrai, mais la conception
  d'Internet est extrmement bonne en ayant une performance fiable bas
  sur des couches matrielles d'un monde incertain... C'est directement
  du au fait que son intelligence est distribue  travers des milliers
  de routeurs plutt qu' quelques auto-commutateurs massifs (comme le
  rseau tlphonique). Cela veut dire que les dfaillances tendent 
  tre bien localises et le rseau peut les contourner.

  Une fois que le paquet est arriv  destination, la machine utilise le
  numro de service pour le fournir au serveur Web. Le serveur Web peut
  savoir  qui rpondre en regardant l'adresse source du paquet. Quand
  le serveur Web renvoie ce document, il sera coup en plusieurs
  paquets. La taille des paquets varie en fonction du mdia de
  transmission du rseau et du type de service.



  1100..33..  TTCCPP eett IIPP

  Pour comprendre comment des transmissions de multiples paquets sont
  ralises, vous devez savoir que l'Internet utilise actuellement deux
  protocoles empils l'un sur l'autre.

  Le plus bas niveau, _I_P (Internet Protocol), sait comment recevoir des
  paquets individuels d'une adresse source vers une adresse destination
  (c'est pourquoi elles sont appeles adresses IP). Cependant, IP n'est
  pas fiable ; si un paquet est perdu ou jet, les machines source et
  destination ne le sauront jamais. Dans le jargon rseau, IP est un
  protocole _s_a_n_s _c_o_n_n_e_x_i_o_n _(_o_u _m_o_d_e _n_o_n _c_o_n_n_e_c_t__) ; l'expditeur envoie
  juste un paquet au destinataire et n'attend jamais un accus de
  rception.

  Cependant, IP est rapide et peu coteux. Quelquefois, rapide, peu
  coteux et non fiable c'est OK. Lorsque vous jouez en rseau  Doom ou
  Quake, chaque balle est reprsente par un paquet IP. Si quelques-unes
  sont perdues, c'est OK.

  Le niveau suprieur, _T_C_P (Transmission Control Protocol), fournit la
  fiabilit. Quand deux machine ngocient une connexion TCP (ce qu'elles
  font en utilisant IP), le destinataire doit envoyer des accuss de
  rception des paquets qu'il reoit  l'expditeur. Si l'expditeur ne
  reoit pas un accus de rception pour un paquet aprs un certain
  temps, il renvoie ce paquet. De plus, l'expditeur donne  chaque
  paquet TCP un numro de squence, que le destinataire peut utiliser
  pour r-assembler les paquets dans le cas o il sont arrivs dans le
  dsordre. (Cela peut arriver si les liens rseau se rtablissent ou
  cassent pendant une connexion.)

  Les paquets TCP/IP contiennent galement un checksum pour permettre la
  dtection de donnes altres par de mauvais liens. Ainsi, du point de
  vue de quelqu'un utilisant TCP/IP et des serveurs de noms, il
  ressemble  une voie fiable pour faire passer des flux d'octets entre
  des paires hte/numro de services. Les gens qui crivent des
  protocoles rseau ne doivent pas se soucier la plupart du temps de la
  taille des paquets, du r-assemblage des paquets, de la vrification
  d'erreurs, le calcul du checksum et la retransmission qui sont au
  niveau infrieurs.



  1100..44..  HHTTTTPP,, uunn pprroottooccoollee dd''aapppplliiccaattiioonn

  Maintenant revenons  notre exemple. Les navigateurs et les serveurs
  Web parlent un _p_r_o_t_o_c_o_l_e _d_'_a_p_p_l_i_c_a_t_i_o_n qui est au dessus de TCP/IP, en
  l'utilisant simplement comme une manire de passer des chanes
  d'octets dans les deux sens. Ce protocole est appel _H_T_T_P (Hyper-Text
  Transfer Protocol) et nous en avons dj vu une commande -- la
  commande GET utilise ci-dessus.

  Lorsque la commande GET arrive au serveur Web de sunsite.unc.edu avec
  comme numro de service 80, elle sera expdie  un _d__m_o_n _s_e_r_v_e_u_r qui
  coute le port 80. La plupart des services Internet sont implments
  par des dmons serveurs qui ne font rien d'autre qu'attendre sur des
  numros de port, rcolter et excuter les commandes entrantes.


  Cette conception de l'Internet a une rgle qui prime sur les autres,
  c'est que toutes les parties sont le plus simple possible et
  humainement accessible. HTTP, et ses compres (comme le Simple Mail
  Transfer Protocol, _S_M_T_P, qui est utilis pour transporter du courrier
  lectronique entre des machines) utilisent de simples commandes de
  texte qui se terminent par un retour chariot.


  C'est rarement inefficace ; dans certaines circonstances vous pouvez
  obtenir plus de rapidit en employant un protocole binaire fortement
  cod. Mais l'exprience a montr que le bnfice d'avoir des commandes
  qui sont faciles  dcrire et  comprendre l'emportent sur le gain
  marginal de l'efficacit que l'on peut esprer au prix de choses
  compliques et compactes.

  Par consquent, ce que le dmon serveur vous renvoie via TCP/IP est
  aussi du texte. Le dbut de la rponse ressemblera  quelque chose
  comme (quelques en-ttes ont t supprims) :


  HTTP/1.1 200 OK
  Date: Sat, 10 Oct 1998 18:43:35 GMT
  Server: Apache/1.2.6 Red Hat
  Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT
  Content-Length: 2982
  Content-Type: text/html



  Ces en-ttes seront suivis d'une ligne vide et du texte de la page Web
  (aprs que la connexion sera rompue). Votre navigateur affichera
  simplement cette page. Les en-ttes indiquent -- en particulier, l'en-
  tte Type de Contenu (Content-Type) -- comment les donnes reues sont
  vraiment du HTML).

























