Il existe tout un ensemble de confusions qui sont faites sur Internet, le Web, HTML, etc... Le but de ce document est donc de tenter d'éclaircir un paysage souvent confus... Bien entendu, il est impossible de ne pas faire certaines simplifications. J'ai cependant essayé de rester aussi proche que possible de la réalité en tentant de ne pas être trop technique. Ce document est un extrait du cours que je fais chaque année à l'ENAC.
Il existe un deuxième type d'adresse, la notation par domaine,
qui est celle que la plupart des gens connaissent à travers les
spots publicitaires à la télévision. Ainsi, si nous
reprenons l'exemple de la machine sur laquelle vous lisez ce
document, son adresse par domaine est www.recherche.enac.fr.
Cette notation pointée doit toujours être lue à l'envers. Ainsi, cette
machine appartient au domaine France(fr), qui contient le domaine de
l'ENAC(enac), qui contient lui même le domaine de la
recherche(recherche), qui contient lui même une machine nommée www.
Les noms des "sur-domaines" (comme fr) sont historiques. Les
américains étant les premiers utilisateurs de l'Internet, ils se sont
historiquement réservés un certain nombre de "sur-domaines" qui
étaient com (pour les entreprises), edu (pour les universités), mil
(pour les institutions militaires), etc... Certains de ces
sur-domaines sont devenus internationaux (il existe des entreprises
françaises dans le domaine com), d'autres sont restés strictement
américains. Les noms de domaines ont longtemps été vendus par une
organisation américaine (Internic). La règle étant "premier arrivé,
premier servi", et le prix de l'achat d'un nom de domaine étant
particulièrement peu élevé (quelques centaines de francs), certains
individus achètent volontairement des domaines dans la zone .com
portant le nom
d'entreprises célèbres qui ont commis l'erreur de ne pas arriver sur le
net en temps et en heure. Ces entreprises n'ont plus alors qu'à
racheter ces noms au prix fort cette fois-ci. En France, l'attribution
d'un nom de domaine dans .fr est plus réglementé.
La traduction de cette notation par domaine dans la notation
classique est faite par des programmes nommés DNS, ou Domain
Name Server. Lorsqu'une machine souhaite en contacter une autre, elle
contacte son DNS local : il y a un DNS par domaine. Ainsi, à l'ENAC, il
y a un DNS pour le
domaine de la recherche, un pour le
domaine enseignement, etc... Ces DNS ne possèdent que les informations
relatives à leur domaine. Ils sont donc incapables de fournir une
information dès qu'on leur demande de contacter une machine qui ne se
trouve pas dans celui-ci. On utilise alors un mécanisme
de transfert de la demande : le DNS local contacte le DNS de niveau
supérieur, qui lui même va contacter le DNS de niveau supérieur
etc...
Si, par exemple, je souhaite contacter depuis la machine
rouge.recherche.enac.fr la machine prep.ai.mit.edu
(machine du domaine universitaire américain, situé au MIT, dans le
département AI, de nom prep), le mécanisme va être le suivant (dans le
principe) :
Il ne faut en aucun cas confondre le protocole IP avec les protocoles "physiques" qui sont destinés à assurer son transport sur les réseaux. Ainsi, si les machines du réseau local sont reliées entre elles par un réseau éthernet ( attention internet <> éthernet ! ), ce qui est le cas de beaucoup de réseaux de PC dans les entreprises, cela signifie que les trames "logiques" IP seront "encapsulées" dans les trames "physiques" éthernet qui vont transiter d'une carte éthernet de PC à une autre carte éthernet de PC (les mots logiques et physiques étant à prendre avec de sérieux guillemets, une définition correcte reviendrait à reprendre la classification du modèle OSI). Mais les trames IP pourraient aussi bien, par exemple, transiter sur un réseau Token Ring, ou plus simplement sur une ligne téléphonique puis à travers votre modem, encapsulées dans le protocole PPP. De la même façon, il ne faut pas confondre les adresses MAC, qui sont les adresses éthernet des cartes éthernet, avec les adresses internet. L'adresse MAC est gravée (en principe) dans la carte par le fabriquant, l'adresse Internet est attribuée logiciellement à la machine. Ethernet est un des protocoles de transport d'internet, il n'a rien d'autre à voir avec lui.
Une transmission de type tcp est une transmission point à point ; un
canal de communication est ouvert entre deux machines qui décident de
discuter entre elles. Mais les machines doivent d'abord décider de quoi
elles vont parler et dans quel langage : c'est la notion de service
et de protocole.
Il existe de nombreux (très nombreux) services/protocoles
disponibles sur internet. Les
deux plus connus des profanes sont ftp (File Transfer
Protocol) et http (HyperText Transfer Protocol).
Supposons par exemple que notre machine
rouge.recherche.enac.fr souhaite récupérer le fichier
toto.txt sur la machine prep.ai.mit.edu par le
protocole ftp. Elle va d'abord utiliser le Domain Name Server comme
décrit au dessus pour obtenir l'adresse de prep.ai.mit.edu
. Elle enverra ensuite un paquet IP à cette machine en indiquant
un numéro de port qui correspond au type du service
demandé. Ainsi, pour ftp, la trame du paquet tcp/ip contiendra
l'adresse de port 21, qui est l'adresse du service ftp.
Sur la machine prep.ai.mit.edu , le paquet va être reçu, la
trame va être décodée par le système d'exploitation, et aiguillée en
fonction du numéro de port. Pour que la machine prep puisse
répondre à la requête, un programme doit être
déjà lancé sur prep et doit être attaché au
port 21 de cette machine. Une autre alternative est parfois employée
: le système d'exploitation lorsqu'un paquet arrive pour le port 21, va
lancer un programme particulier pour le traiter.
Ces programmes spéciaux qui s'attachent aux ports sont appelés en
général des serveurs , puisqu'ils répondent à des requêtes
de service, ou des démons , parce qu'ils jaillissent de
leur boite quand on a besoin d'eux (enfin pas tout à fait... Démons
vient de l'anglais daemons, qui est l'acronyme de Disk And Execution
Monitor, mais l'acronyme n'a pas été choisi au hasard). Le programme
qui fait la requête est quant à lui connu sous le nom de
client.
Il existe une façon de désigner simplement et l'adresse et le service : c'est l'URL (rfc1808) (Uniform Resource Locator). L'URL sera de la forme ftp://prep.ai.mit.edu/toto.txt pour l'exemple précédent (protocole ftp sur la machine prep.ai.mit.edu pour récupérer le fichier toto.txt). Les URL les plus rencontrés sont ceux qui mettent en jeu le protocole http, comme par exemple http://www.dgac.fr qui vous mettra, en rapport avec le serveur http de la DGAC.
Une fois la communication établie, le client et le serveur doivent échanger des informations en utilisant un protocole de communication. Le protocole porte le même nom que le service. Nous ne nous appesantirons pas sur les définitions des protocoles, que l'on peut aisément consulter ( rfc1945 et suivantes). Le protocole http décrit essentiellement le type de document qui est transporté (image, texte), etc... Il permet de faire certaines acrobaties intéressantes, comme le passage d'argument à l'intérieur même de l'URL à des programmes situés sur la machine distante. Il y a ici l'URL http://www.recherche.enac.fr/opti/papers/author.html?todo=author&type=Alliot qui permet d'interroger un programme en lui passant les arguments todo=author et type=Alliot, qui permettront de construire dynamiquement une liste de publications qui sera retournée au client. C'est la technique généralement employée par les grands moteurs de recherche pour récupérer les mots clés fournis par l'utilisateur.
Il faut clairement distinguer la part du travail faite par le client
et le serveur dans une communication http. Les clients (navigateurs)
les plus connus
sont Netscape, ou Internet Explorer ; peu de gens
connaissent les noms des serveurs (Apache par exemple).
Le travail du serveur est "relativement" simple. Il doit retourner au
client les documents que celui-ci lui demande en respectant le
protocole de communication (http). Le travail du client a deux
aspects : d'une part, envoyer les requêtes correctes au serveur,
d'autre part interpréter les documents qui lui sont retournés. Ainsi,
un navigateur doit être capable d'interpréter différents types de
documents, comme des images (en divers formats), du texte, ou des
documents au format HTML, dont nous allons reparler.
L'idée qui se trouve derrière les langages à balisage (c'est ainsi que l'on traduit généralement Markup Language) est une forme de réaction contre le WYSIWYG (What You See Is What You Get). Plutôt que de représenter la forme d'un document directement sur l'écran, on le décrit par des balises, qui vont indiquer les débuts de chapitre, de paragraphe, les énumérations, etc, mais on ne se préoccupe jamais de la façon dont le document lui-même sera représenté. Ainsi, lorsque j'ai tapé le texte que vous êtes en train de lire, je n'avais aucune idée de la façon précise dont votre navigateur va vous le représenter. Celui-ci peut modifier la longueur des lignes, la hauteur du texte, la taille des fontes, etc... La façon dont il interprétera un début de paragraphe, une énumération dépend de lui et de lui seul. Ainsi, le même document lu avec Netscape ou avec Internet Explorer n'aura jamais la même représentation. Soit l'énumération suivante que vous voyez ainsi:
Historiquement, la première référence à la notion d'hypertexte
apparaît chez Vanevar Bush qui décrivit en 1945 une machine
opto-électrique capable de créer et de suivre des liens sur
microfiches (article original
ici).
En 1960, Doug Engelbart développera un prototype nommé
NLS (oNLineSystem), qui contient déjà la plupart des idées pour
l'édition, la lecture d'hypertexte. Il invente d'ailleurs la souris
pour ce système.
En 1980, Tim Berners-Lee écrit le programme
"Enquire-Within-Upon-Everything" alors qu'il est consultant au
CERN. Ce programme permet la création de noeuds et les liens d'un noeud
à l'autre.
En 1989, le document "Information Management: a proposal" écrit par
Tim Berners-Lee (toujours au CERN) pose les fondements de ce qui
allait devenir le World
Wide Web, et qu'il appelait à l'époque le "Mesh". Le premier
navigateur écrit pour un système graphique (X-Windows System, sous
Unix) sera Viola en 1992. En 1993, le premier grand navigateur fait
son apparition : c'est Mosaic, développé par Marc Andreessen (encore
sous UNIX et X). En 1994,
Marc Andreessen monte sa société, "Mosaic Communications Corp",
devenue depuis "Netscape". La même année, le CERN, qui était à
l'origine du développement du Web, abandonne son rôle de principal
développeur pour se reconcentrer sur ses métiers d'origine (les
accélérateurs de particule), et l'INRIA reprend le flambeau avec
l'accord de la commission européenne.
Microsoft a manqué le grand démarrage du Web et a tenté de rattraper son
retard en développant son propre navigateur, en l'installant
automatiquement avec Windows, et en ne livrant
aucun programme permettant de le désinstaller. Ce sera le début des
procès accusant Microsoft de violer la loi anti-trust, procès qui
menacent aujourd'hui de faire exploser le géant américain.
L'influence de SGML est encore plus marqué dans la nouvelle direction prise actuellement par le consortium W3 qui définit les standards HTML (nous en sommes à la version 4.0). Le nouveau futur langage de définition de document Web s'appelle XML et est presque une copie de SGML. Comme SGML, il laisse la définition des balises libres, permettant le développement facile d'extension. Toutes les informations se trouvent sur le site du consortium W3.
Le langage JAVA est différent dans son principe. Il ne s'agit plus
d'inclure dans une page Web quelques lignes de script, mais bien
d'inclure un véritable programme exécutable qui se téléchargera et
s'exécutera sur la machine du client. JAVA est un vrai langage de
programmation, proche de C et C++, basé sur la programmation objet,
développé par SUN Microsystems. Un
programme JAVA placé dans une page Web pour y être téléchargé
s'appelle une applet. Un exemple de page contenant une applet
JAVA se trouve
ici.
Le code téléchargé n'est pas véritablement du code exécutable (il
serait impossible d'exécuter le même code sur des machines possédant
des processeurs et des systèmes d'exploitation différents). JAVA
emploie une technologie (déjà ancienne dans son principe) appelée
pseudo-code. Dans un tel
système, le source du programme est compilé
dans un langage intermédiaire très simple, le pseudo-code JAVA. C'est
ce pseudo-code qui est téléchargé par le navigateur, et est ensuite
exécuté localement par le navigateur grâce à un programme
spécial, généralement appelé machine JAVA. L'inconvénient de
cette méthode est la relative lenteur
(comparé aux langages classiques : C, C++, etc) de JAVA.
Il ne devrait pas y avoir en principe de problème de
compatibilité entre les navigateurs, la machine JAVA étant sous
licence (gratuite) de SUN. Mais hélas, Microsoft a là aussi rajouté
son grain de
sel, en introduisant des extensions propriétaires Microsoft dans le
langage JAVA. C'est le sujet d'un autre procès intenté par SUN à
Microsoft, pour violation de la licence JAVA.
Pour une opinion particulièrement critique, et passablement juste, sur
l'attitude de Microsoft en général, jetez donc un coup d'oeil ici.
Les types d'attaque se subdivisent en fait en plusieurs catégories :
Il ne faut cependant pas se leurrer, le seul moyen d'avoir un système
sûr, est qu'il ne soit relié à aucun réseau. C'est en partant de cette
idée que sont apparus les notions de coupe-feu (firewall) et
de proxy. Pour faire simplement, un coupe-feu est une machine
possédant deux cartes réseau. La première est connectée au
réseau internet mondial, la seconde au réseau internet local de
l'entreprise. Le coupe feu fait alors office de filtre: tout paquet
devant passer de l'extérieur vers l'intérieur (ou inversement) sera
capturé par un programme d'inspection qui, en fonction de certains
critères le laissera où ne le laissera pas passer.
Dans certains cas,
on va même plus loin en interdisant purement et simplement que les
machines du réseau intérieur soient visibles ou puissent communiquer
directement avec l'extérieur. On place alors sur la machine coupe-feu
un programme particulier, appelé serveur proxy. Sur les
machines du réseau local, on paramètre les logiciels de communication
(netscape, internet explorer, ftp, etc) en leur indiquant de ne plus
s'adresser directement à l'extérieur mais de s'adresser
systématiquement au serveur proxy local. Celui ci récupérera la
requête et la retransmettra vers l'extérieur comme si elle venait de la
machine coupe-feu et non plus comme si elle venait de la machine
située à l'intérieur du réseau. Le serveur proxy fera le travail à
l'envers quand la réponse arrivera de l'extérieur.
Il existe des serveurs proxy spécialisés par protocole (un pour http,
un pour ftp, etc) et des serveurs proxy capables d'encoder des
requêtes de presque tous les types de protocole (proxy socks par
exemple).
Ces méthodes sont elles complètement sûres ? Il est clair que non. On a simplement déplacé le problème de la sécurité d'un ensemble de machine à la sécurité d'une seule machine, le coupe-feu. Cependant, si l'administrateur du réseau est compétent, il est probable qu'il administrera au mieux cette seule machine la rendant aussi peu vulnérable que possible aux différentes attaques. Il sera aussi aidé par tout un ensemble de programmes de surveillance et d'inspection. Ceci étant dit, si vous voulez être certain d'être à l'abri, coupez les fils !
Les premiers outils à connaître sur le Web sont les moteurs de recherche. Le moteur préféré de l'auteur de ces lignes est altavista, mais c'est une pure affaire de goût. Un moteur de recherche vous permet de rechercher des sites à partir de mots clés que vous allez lui fournir. Si vous essayez par exemple comme mots-clés "Air Traffic Control", vous allez avoir accès à un ensemble de 90000 liens vers les sites les plus variés (essayez-donc! La requête est toute prête ici.)
En fait le problème est double : d'une part, il est difficile de
préciser les bons mots clés pour restreindre suffisamment la recherche
et trouver ce que l'on souhaite. D'autre part, le processus de
collecte d'informations réalisé par les moteurs de recherche est bien
entendu automatique, et souffre de quelques limitations; le
principe est le suivant : des programmes appelés robots, contactent
les sites les uns après les autres en se promenant de liens en liens,
et analysent les documents qui s'y trouvent pour trouver les mots clés
du site et mettre à jour leur
base de donnée. Pour accélérer le processus, les créateurs de sites
peuvent placer directement sur le site des informations que ces robots
vont d'abord lire et qui leur fournit directement les mots-clés du
site, sans avoir besoin de faire d'analyse.
Mais il y a des petits malins. Il existe sur le Web tout un
ensemble de sites commerciaux dont le seul but est d'apparaître coûte
que coûte. Ces gens peu scrupuleux placent sur leurs sites de fausses
informations destinés aux robots, en indiquant des mots clés qui n'ont
rien à voir avec le site, mais sont souvent recherchés par les
utilisateurs du Web. C'est ainsi qu'en cherchant des informations sur
Boeing, vous risquez d'aboutir sur un site pornographique...
Quelques sites utiles: