Retour Monter un réseau Ethernet avec un Amiga

Bon, ce mois-ci, nous aurions dû commencer à développer notre jeu mais comme je n'ai pas eu le temps je vais ressusciter un vieil article (non publié) que j'avais écrit lorsque j'avais récupéré mon VAX. Ce dernier ayant malheureusement fumé (d'ailleurs, si quelqu'un a des cartes pour microVAX II, je suis preneur), j'ai récemment acquis une station SUN. Le sujet de cet article est donc la création d'un mini-réseau éthernet entre mon 4000 et ma SUN. La fin sera un peu plus technique puisque nous aborderons l'exemple d'un réseau hétérogène contenant plusieurs sous-réseaux ...

Je ne vais pas refaire un historique ou un descriptif technique des différentes normes de l'Ethernet car cela a déjà été maintes et maintes fois fait. Simplement il faut se souvenir qu'il existe :

Présentation des intervenants

Quel médium utiliser

On élimine d'office le 10Base5 réservé aux gros réseaux.

Si les deux machines disposent toutes les deux de prises RJ45 (10BaseT), le plus simple est d'acheter un câble croisé : pour un investissement de moins de 100 Francs, vous aurez un réseau parfaitement fonctionnel ... mais limité à deux machines.

Si on utilise plus de deux machines, les choses se compliquent :
Le 10Base2 sera intéressant si vous pouvez récupérer des câbles coaxiaux et des terminateurs d'occasion : on en trouve assez facilement car beaucoup d'entreprises changent leur réseau vers une technologie 10BaseT beaucoup plus flexible.
Par contre, si vous devez acheter la connectique, il faudra comparer les solutions coax et RJ45 mais cette dernière sera, à mon avis, plus rentable. Les câbles sont moins chers, pas besoin de terminateurs, il faut juste acquérir un HUB. Allez voir chez le taïwanais du coin, on peut trouver des HUB 4 ports aux environs de 200 Francs.

Revenons maintenant à mon cas.
La connexion entre mon 4000 et mon VAX n'a posé aucun problème, ayant récupéré en même temps que ce dernier un segment coaxial, avec les terminateurs associés, connectable sur le Miga et un drop câble + transceiver vers du 10Base2 pour l'AUI du VAX.
Avec la SUN, le problème est tout autre : comment connecter l'AUI ou la BNC du Miga avec le RJ45 de la SUN ?

C'est donc la solution que j'ai choisie.

Nv_Reseau.jpg
Malheureusement, tous les magasins que j'ai fait étaient en rupture de stock sur les HUB 4 ou 5 ports, mais j'ai dégoté un Hub 9 ports ( 8 RJ45 + 1 BNC ) pour 300 Francs ! Evidemment, pour ce prix là, il ne fait que du 10 Mb/s mais bon, comme l'A2065 ne fonctionne qu'à cette vitesse ...
Un seul conseil, si vous le pouvez, faites jouer la concurrence car j'ai fait tous les magasins d'une rue spécialisée de Paris et j'ai gagné plus de 150 Francs par rapport au magasin le plus cher, qui lui-même était encore moins cher de plusieurs centaines de Francs par rapport à une grande surface (Surcouf).

Passons à la configuration.

Comme tout logiciel bien foutu, la distribution d'AmiTCP utilise l'Installer de feu Commodore pour s'installer et se configurer.
On clique donc sur l'icône "Install_AmiTCP". Voici les différentes questions qui nous sont posées. Notez que j'ai utilisé l'option "expert" pour que l'on puisse voir toutes les options proposées.

  1. On passera rapidement sur les classiques comme le répertoire dans lequel on souhaite installer le logiciel,
  2. un Nom d'utilisateur : c'est l'utilisateur qui fait fonctionner AmiTCP. Pour définir ses utilisateurs, AmiTcp utilise un fichier qui a le même format que le fameux /etc/passwd cher aux systèmes Unix. Plusieurs utilisateurs peuvent donc cohabiter et auront chacun des droits différents. Je vous laisse le soin d'approfondir la question en lisant la documentation d'AmiTCP.
  3. Nom de la machine : c'est le moment de baptiser votre machine si ce n'est déjà fait. "Miga" est beaucoup plus parlant que 192.168.0.2, non ?
  4. Nom de domaine : nommez maintenant le réseau auquel appartiennent les machines. Pour moi, ça sera "chez.moi".
  5. Vous pouvez ensuite définir plusieurs noms d'alias.
  6. Installer découvrira tout seul la présence de la carte Ethernet et donc que vous souhaitez utiliser ce média. Enfin, chez moi ça marche car l'A2065 existait avant AmiTCP, maintenant, savoir si il détecterait une AdrianeII ?
    De toute façon, toutes les cartes récentes supportant le protocole SanaII, elles sont utilisables avec AmiTCP, mais il faudra les configurer manuellement. Leur documentation doit l'expliquer ...

  7. Vient maintenant le choix de l'adresse IP. Théoriquement, vous pourriez utiliser n'importe laquelle, ce qui serait une très mauvaise idée ! Si un jour vous connectez votre réseau sur l'Internet, boum ! Si votre réseau utilise les adresses d'un serveur ... vous ne pourrez plus y accéder, et si ce sont celles de serveurs DNS, la moitié d'Internet vous sera inaccessible. Bref, à éviter au maximum.
    La solution est donc d'utiliser une plage d'adresses réservée aux réseaux privés (ce qui est notre cas). Si vous ne désirez pas trop rentrer dans les détails, utilisez les mêmes données que moi, sinon, pour les plus téméraires, un explication plus technique se trouve à la fin de cet article.
    Notre réseau est assez petit (pour être précis, il comporte moins de 254 machines) donc une classe C nous suffira. Notre réseau s'étendra donc des adresses 192.168.0.0 à 192.168.0.255 ; la SUN aura l'adresse 192.168.0.1 et le 4000 l'adresse 2. Comme expliqué à la fin de l'article, N'UTILISEZ PAS les adresses 0 ou 255 qui sont réservées.
  8. Le masque de sous-réseau est 255.255.255.0
  9. Installer vous demande ensuite l'adresse de la passerelle par défaut. Il s'agit de l'adresse de la machine qui possède un accès vers l'extérieur, mais pour le moment, laissez ce champ vide.
  10. Vient ensuite l'adresse du serveur de nom DNS ... vide à nouveau.
  11. Il est possible d'indiquer tous les réseaux qui peuvent être cherchés. On le laisse à "chez.moi", mais on pourrait en saisir plusieurs. Ainsi, si vous demandez au DNS l'adresse de "Zeus", il cherchera un "Zeus.chez.moi" puis dans les autres noms de réseaux que vous aurez saisi.
  12. Installer demandera s'il peut modifier la Startup-Sequence pour vous, ce qui permettra à la couche TCP/IP de démarrer automatiquement au lancement du système.
  13. Faut-il lancer automatiquement Inetd ? Inetd est un dispatcher qui lancera automatiquement certains démons lorsqu'une requête arrive au système.
    Par exemple, il lancera ftpd lorsque vous vous connecterez sur votre machine pour faire du FTP.
    Répondre oui

    Voilà, après un reboot, AmiTCP est opérationnel.

    Bon, ça c'était pour une installation automatique, mais étant donné que ma SUN n'est pas forcément allumée en même temps que l'Amiga, j'ai créé un script CSH pour lancer manuellement les connexions. Le voici :
    
    #
    #   StartNet.SH
    #
    #       Par LF
    #
    #   Démarrage du réseau AMITCP
    #
    #   09/04/1996 : Premiere version basée sur le StartNet original
    #   08/10/1996 : Changement des adresses IP
    #   22/02/1999 : Changement pour utiliser les adresses la classe C 
    #                réseau privée
    #
    
    if -n -e APIPE:
            Mount APIPE: from AmiTCP:devs/APipe-Mountlist
    endif
    
    echo "Démarrage du réseau en cours...
    echo "login : laurent"
    
    AmiTCP:bin/login -f laurent
    AmiTCP:bin/umask 022
    AmiTCP:AmiTCP
    WaitForPort AMITCP
    
    # Configure loop-back device
    AmiTCP:bin/ifconfig lo0 localhost
    # Configure a2065
    AmiTCP:bin/ifconfig a2065 inet 192.168.0.2 netmask 255.255.255.0
    
    # Add IP address entry for this host
    rx "address AMITCP; 'ADD HOST 192.168.0.2 Miga.chez.moi '"
    AmiTCP:bin/route add 192.168.0.2 localhost
    setenv HOSTNAME `AmiTCP:bin/hostname`
    
    Assign TCP: Exists > NIL:
    if -r $_lasterr
            Mount TCP: from AmiTCP:devs/Inet-Mountlist
    endif
    
    # Start the internet `super server'
    run AmiTCP:bin/inetd
    
    echo "Montage des rondelles..."
    ch_nfsmount ALL
    

    1. Les premières lignes montent le device APIPE: utilisé par AmiTCP.
    2. Grâce au "login", on définit l'utilisateur qui lance le service.
    3. Suivent 2 ifconfig. Le premier déclare l'interface de loopback 'lo0'. Cette interface permet de communiquer avec les services qui tournent sur notre machine.
      Le second déclare l'interface ethernet A2065 et on y retrouve les données que nous avions saisies dans l'Installer. Pour ceux qui ont une carte qui n'est pas reconnue par AmiTCP, il faudra aussi modifier le fichier AMITCP:db/interfaces.
    4. Les commandes RX et route définissent les chemins qui mènent à notre propre machine !
    5. On monte ensuite TCP: qui permet aux applications Amiga ne possédant pas de gestion réseau de communiquer quand même entre machines.
    6. Enfin on lance le fameux Inetd et on finit par la commande ch_nfsmount qui "mount" toutes les rondelles NFS.

    D'autres options sont sauvegardées dans le répertoire AmiTcp, et principalement dans db. On ne va pas étudier un par un ces fichiers, je vous laisse le soin de lire les documentations, mais nous allons étudier des cas concrets.

    Associer des noms aux adresses IP.

    Il est toujours plus pratique de jongler avec les noms des machines qu'avec leur adresse IP.
    Une première solution serait d'utiliser un DNS, qui est paramètré dans le fichier AmiTCP:db/Resolv.conf. Il contient deux directives :
    • NAMESERVER 192.168.0.1 qui est l'ADRESSE IP du DNS (ici, c'est Zeus)
    • DOMAIN chez.moi le nom du domaine servi.
    Seulement, mettre en route un DNS alors que nous n'avons que 2 ou 3 machines sur notre réseau, c'est peut-être un peu beaucoup. Il y a beaucoup plus simple. En renseignant le simple fichier AmiTCP:db/hosts on peut associer facilement un nom à une adresse.

    Voici le mien :
    127.0.0.1   localhost
    192.168.0.1 Zeus zeus Sun sun
    192.168.0.2 Miga miga amiga4000
    192.168.0.3 Nexus7 nexus7 Vax vax
    

    Le format est le même que le fichier /etc/hosts des stations UNIX.
    En premier, on trouve l'adresse IP de la machine.
    Suit son nom puis d'éventuels alias.

    Maintenant, après avoir démarré AmiTCP (par le script startnet précédent), un ping devrait fonctionner ...

    Certains services de base sont livrés avec AmiTCP : c'est le cas de Ftp.
    Les autres peuvent être trouvés sur Aminet ... Leurs documentations indiquent les fichiers à modifier, mais généralement, il s'agit de rajouter un service dans AmiTcp:db/inetd.conf.

    C'est évident que ces fichiers de configuration sont un peu déroutants lorsqu'on est habitué à avoir des préférences graphiques comme avec les autres logiciels Amiga. Mais vous n'avez qu'à vous payer Génésis ou Miami !
    D'autre part, ces fichiers sont directement inspirés de ceux des serveurs Unix et les connaître vous sera peut-être profitable dans votre vie professionnelle. Même si les versions récentes des Unixes comportent maintenant de plus en plus d'outils de configuration graphique, on est parfois obligé quand même d'aller titiller ces fichiers.

    Pour ceux qui veulent en savoir plus.

    Les informations précédentes sont suffisantes pour mettre en place un mini réseau. Cependant, si vous souhaitez connecter vos machines avec un réseau plus grand, il y a d'autres paramètres à connaître.

    Choisir les adresses IP.

    Les adresses IP, dans leur version actuelle, sont codées sur 4 octets, ce qui donne environ 4,2 Milliards d'adresses ... Evidemment, ces adresses ne sont pas attribuées de manière anarchique et des organismes tels que l'Inria pour l'Europe ou l'Internic pour l'ensemble du monde sont chargés de les distribuer.
    D'abord, il faut savoir que les réseaux dont le premier octet et 127 sont réservés pour les loopback : il s'agit d'un réseau virtuel qu'utilise une machine pour communiquer avec elle-même. Inutile de préciser que si vous utilisez ce réseau ... ça ne marchera pas.
    Notre réseau est un réseau privé : les machines de l'extérieur ne peuvent s'y connecter. Oui, mais ce n'est pas la raison pour prendre n'importe quelle adresse ! Si par la suite, vous souhaitez que vos machines puissent aller sur Internet, il vous sera impossible de vous connecter à tout serveur qui utilise le même réseau que vous.
    Dans le RFC 1597, ont été définies des adresses à utiliser dans le cas d'un réseau privé. Ces adresses sont :

    10.0.0.0 à 10.255.255.255
    172.16.0.0 à 172.16.255.255
    192.168.0.0 à 192.168.255.255
    

    Dans un premier cas, nous avons un réseau de classe A (24 bits donc 16777214 machines maxi).
    Dans le second cas, nous disposons de 16 réseaux consécutifs de classe B (20 bits soit 1048574 machines)
    Dans le troisième cas, c'est 256 réseaux de classe C (8 bits soit 254 machines).

    Dans notre cas, nous avons choisi de prendre une classe C, dont les adresses vont de 192.168.0.0 à 192.168.0.255.

    Masque de sous-réseau et passerelle par défaut (gateway).

    Lorsque la machine A souhaite se connecter à la machine B, A détermine si B est sur le même réseau et donc si elle est accessible directement. C'est le rôle du masque de sous-réseau.
    Le test est très simple : elles sont sur le même réseau si adresse_A & Masque == adresse_B & Masque c'est-à-dire si le ET bit à bit entre l'adresse de A et le masque est strictement égal au ET bit à bit entre l'adresse de B et le même masque de sous-réseau.
    Si c'est le cas, les deux machines peuvent communiquer directement.
    Si ce n'est pas le cas, elle envoie sa requête à sa passerelle par défaut qui est chargée de l'acheminer au bon réseau.

    Prenons le cas de Miga (192.168.0.2) et Zeus (192.168.0.1) avec un masque de sous-réseau de classe C classique, à savoir 255.255.255.0. Peuvent-elles communiquer ensemble ?

    192.168.0.2 & 255.255.255.0 = 192.168.0.0
    192.168.0.1 & 255.255.255.0 = 192.168.0.0
    
    La réponse est OUI.

    Prenons une autre machine dont l'adresse serait toto = 192.168.5.3 Pour Miga, ça ne change pas.

    192.168.0.2 & 255.255.255.0 = 192.168.0.0
    
    alors que pour toto
    192.168.5.3 & 255.255.255.0 = 192.168.5 .0
    
    Non, ça ne correspond pas, les machines ne peuvent se joindre.

    Attention, c'est une erreur qui est fréquemment commise, même par les gens qui gèrent des réseaux à longueur de journée : si "toto" était défini comme passerelle pour "Miga", ce dernier ne pourrait communiquer avec l'extérieur car il ne peut joindre directement toto ; UNE PASSERELLE DOIT SE TROUVER FORCEMENT SUR LE MEME SOUS-RESEAU QUE LES MACHINES QU'ELLE SERT.

    Mais 254 machines, ça fait quand même un peu beaucoup pour un seul et même réseau : il est souvent utile de pouvoir l'éclater en plusieurs sous-réseaux (par exemple si la moitié des machines se trouve sur un site distant). Simple, il suffit de mettre un masque plus restritif, par exemple :

    255.255.255.192
    

    Le nombre de machines sur notre réseau est indiqué par le nombre de bits à zéro dans le masque : les bits 5 4 3 2 1 et 0 donc 2^6 = 62 machines.
    Notez que par convention c'est toujours les bits de poids le plus faible qui sont mis à zéro : je vous déconseille tout non-conformisme à ce niveau car beaucoup de couches IP sont très restrictives à cet égard (bogues !)

    Mais, il est nul, devez-vous vous dire, 2 puissance 6 fait 64 et non 62. Et bien oui ... mais non car les adresses de machines (donc hors bits de réseau) qui sont tout à 0 ou tout à 1 sont réservées : dans le premier cas, cela indique que l'on communique avec le réseau alors que dans le second, c'est un broadcast c'est-à-dire que l'on parle à toutes les machines.

    Petit exercice : Parmi ces adresses, lesquelles ne sont pas valides ?

    adresse                         masque
    192.168.0.24            255.255.255.0
    192.168.0.24            255.255.255.224
    192.168.0.24            255.255.255.240
    192.168.0.24            255.255.255.248
    192.168.0.24            255.255.255.252
    
    Pour faciliter les choses passons au niveau binaire
    bits    7 6 5 4 3 2 1 0
    machine 0 0 0 1 1 0 0 0 = 24
    réseau  0 0 0 0 0 0 0 0 = 0
            1 1 1 0 0 0 0 0 = 224 = 128 + 64 + 32
            1 1 1 1 0 0 0 0 = 240 = 128 + 64 + 32 + 16
            1 1 1 1 1 0 0 0 = 248 = 128 + 64 + 32 + 16 + 8
            1 1 1 1 1 1 1 0 = 254 = 128 + 64 + 32 + 16 + 8 + 4 + 2
    
    
    réponse ...
    • masque à 0 et à 224 -> ça marche,
    • la machine a l'adresse 24 masque à 240 -> ça marche aussi,
    • la machine a l'adresse 8 dans le réseau masque à 248 -> ça ne marche plus car tous les bits machine de l'adresse sont à zéro, ce qui correspond à un reseau et non à une machine,
    • masque à 254 -> idem pour 248 ... mais en pire : en effet, avec un masque à 254, seul reste 1 bit pour la machine => conséquence : tous les bits définissant la machine ont la même valeur (normal avec 1 seul bit).

    Voilà, j'espère que ça vous donnera des idées de communication ...

    Dernier exercice : trouvez les erreurs de ce réseau ...

    exercice.jpg