web-dev-qa-db-fra.com

Comment fonctionne le sous-réseau IPv4?

Il s'agit d'une Question canonique sur les sous-réseaux IPv4.

En relation:

Comment fonctionne le sous-réseau et comment le faites-vous à la main ou dans votre tête? Quelqu'un peut-il expliquer les deux conceptuellement et avec plusieurs exemples? Server Fault reçoit de nombreuses questions sur les devoirs de sous-réseau, nous pourrions donc utiliser une réponse pour les pointer sur Server Fault lui-même.

  • Si j'ai un réseau, comment puis-je savoir comment le diviser?
  • Si on me donne un masque de réseau, comment puis-je savoir quelle est la portée du réseau pour cela?
  • Parfois, il y a une barre oblique suivie d'un nombre, quel est ce nombre?
  • Parfois, il y a un masque de sous-réseau, mais aussi un masque générique, ils semblent être la même chose mais ils sont différents?
  • Quelqu'un a mentionné quelque chose sur la connaissance du binaire pour cela?
442
Kyle Brandt

Les sous-réseaux IP existent pour permettre aux routeurs de choisir les destinations appropriées pour les paquets. Vous pouvez utiliser des sous-réseaux IP pour briser des réseaux plus importants pour des raisons logiques (pare-feu, etc.) ou pour des besoins physiques (domaines de diffusion plus petits, etc.).

En termes simples, cependant, les routeurs IP utilisent vos sous-réseaux IP pour prendre des décisions de routage. Comprenez comment ces décisions fonctionnent et vous pouvez comprendre comment planifier des sous-réseaux IP.

Compter jusqu'à 1

Si vous maîtrisez déjà la notation binaire (base 2), vous pouvez ignorer cette section.

Pour ceux d'entre vous qui restent: Honte à vous de ne pas parler couramment la notation binaire!

Ouais, ça peut être un peu dur. Il est vraiment très facile d'apprendre à compter en binaire et d'apprendre des raccourcis pour convertir le binaire en décimal et inversement. Vous devez vraiment savoir comment le faire.

Compter en binaire est si simple car il suffit de savoir compter jusqu'à 1!

Pensez au "compteur kilométrique" d'une voiture, sauf que contrairement à un compteur kilométrique traditionnel, chaque chiffre ne peut compter que jusqu'à 1 à partir de 0. Lorsque la voiture est sortie d'usine, le compteur kilométrique indique "00000000".

Lorsque vous avez parcouru votre premier kilomètre, le compteur kilométrique indique "00000001". Jusqu'ici tout va bien.

Lorsque vous avez parcouru votre deuxième kilomètre, le premier chiffre du compteur kilométrique revient à "0" (car sa valeur maximale est "1") et le deuxième chiffre du compteur kilométrique passe à "1", ce qui fait lire le compteur kilométrique " 00000010 ". Cela ressemble au nombre 10 en notation décimale, mais il s'agit en fait de 2 (le nombre de kilomètres parcourus jusqu'à présent) en notation binaire.

Lorsque vous avez parcouru le troisième kilomètre, l'odomètre indique "00000011", car le premier chiffre de l'odomètre tourne à nouveau. Le nombre "11", en notation binaire, est le même que le nombre décimal 3.

Enfin, lorsque vous avez parcouru votre quatrième mile, les deux chiffres (qui indiquaient "1" à la fin du troisième mile) reviennent à la position zéro et le troisième chiffre revient à la position "1", ce qui nous donne " 00000100 ". C'est la représentation binaire du nombre décimal 4.

Vous pouvez mémoriser tout cela si vous le souhaitez, mais vous n'avez vraiment besoin que de comprendre comment le petit compteur kilométrique "roule" à mesure que le nombre qu'il compte augmente . C'est exactement la même chose que le fonctionnement d'un odomètre décimal traditionnel, sauf que chaque chiffre ne peut être que "0" ou "1" sur notre "odomètre binaire" fictif.

Pour convertir un nombre décimal en binaire, vous pouvez faire avancer l'odomètre, tick par tick, en comptant à haute voix jusqu'à ce que vous l'ayez roulé un nombre de fois égal au nombre décimal que vous souhaitez convertir en binaire. Tout ce qui est affiché sur l'odomètre après tout ce calcul et ce roulement serait la représentation binaire du nombre décimal que vous avez compté.

Puisque vous comprenez comment l'odomètre roule vers l'avant, vous comprendrez également comment il roule vers l'arrière également. Pour reconvertir un nombre binaire affiché sur l'odomètre en décimal, vous pouvez faire reculer l'odomètre une tique à la fois, en comptant à haute voix jusqu'à ce que l'odomètre indique "00000000". Lorsque tout ce comptage et ce roulement sont terminés, le dernier nombre que vous dites à haute voix serait la représentation décimale du nombre binaire avec lequel l'odomètre a commencé.

Convertir des valeurs entre binaire et décimal de cette façon serait très fastidieux. Vous pourriez le faire, mais ce ne serait pas très efficace. Il est plus facile d'apprendre un petit algorithme pour le faire plus rapidement.

Un petit aparté: Chaque chiffre d'un nombre binaire est appelé "bit". C'est "b" de "binaire" et "il" de "chiffre". Un bit est un chiffre binaire.

La conversion d'un nombre binaire comme, par exemple, "1101011" en décimal est un processus simple avec un petit algorithme pratique.

Commencez par compter le nombre de bits dans le nombre binaire. Dans ce cas, il y en a 7. Faites 7 divisions sur une feuille de papier (dans votre esprit, dans un fichier texte, etc.) et commencez à les remplir de droite à gauche. Dans l'emplacement le plus à droite, entrez le chiffre "1", car nous commencerons toujours par "1". Dans la fente suivante à gauche, entrez le double de la valeur dans la fente à droite (donc "2" dans la suivante, "4" dans la suivante) et continuez jusqu'à ce que toutes les fentes soient pleines. (Vous finirez par mémoriser ces nombres, qui sont les puissances de 2, car vous le faites de plus en plus. Je vais bien jusqu'à 131 072 dans ma tête, mais j'ai généralement besoin d'une calculatrice ou d'un papier après cela).

Donc, vous devriez avoir ce qui suit sur votre papier dans vos petites fentes.

 64    |    32    |    16    |    8    |    4    |    2    |    1    |

Transcrivez les bits du nombre binaire sous les emplacements, comme ceci:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
  1          1          0         1         0         1         1

Maintenant, ajoutez quelques symboles et calculez la réponse au problème:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
       +          +          +         +         +         +         =

En faisant tout le calcul, vous devriez trouver:

 64    |    32    |    16    |    8    |    4    |    2    |    1    |
x 1        x 1        x 0       x 1       x 0       x 1       x 1
---        ---        ---       ---       ---       ---       ---
 64    +    32    +     0    +    8    +    0    +    2    +    1    =   107

Ça y est. "1101011" en décimal est 107. Ce sont juste des étapes simples et des calculs faciles.

La conversion de décimal en binaire est tout aussi simple et est le même algorithme de base, exécuté en sens inverse.

Disons que nous voulons convertir le nombre 218 en binaire. En commençant à droite d'une feuille de papier, écrivez le chiffre "1". À gauche, doublez cette valeur (donc "2") et continuez de vous déplacer vers la gauche du papier en doublant la dernière valeur. Si le nombre que vous êtes sur le point d'écrire est supérieur au nombre en cours de conversion, arrêtez d'écrire. sinon, continuez à doubler le nombre précédent et à écrire. (La conversion d'un grand nombre, comme 34,157,216,092, en binaire en utilisant cet algorithme peut être un peu fastidieuse mais c'est certainement possible.)

Donc, vous devriez avoir sur votre papier:

 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |

Vous avez arrêté d'écrire des nombres à 128 car doubler 128, ce qui vous donnerait 256, serait plus important que le nombre en cours de conversion (218).

En commençant par le nombre le plus à gauche, écrivez "218" au-dessus (128) et demandez-vous: "218 est-il supérieur ou égal à 128?" Si la réponse est oui, grattez un "1" sous "128". Au-dessus de "64", écrivez le résultat de 218 moins 128 (90).

En regardant "64", demandez-vous: "Est-ce que 90 est supérieur ou égal à 64?" En effet, vous écririez un "1" en dessous de "64", puis vous soustraireiez 64 de 90 et l'écririez au-dessus de "32" (26).

Lorsque vous arrivez à "32", cependant, vous constatez que 32 n'est pas supérieur ou égal à 26. Dans ce cas, écrivez un "0" en dessous de "32", copiez le nombre (26) d'en haut 32 "en haut" 16 ", puis continuez à vous poser la même question avec les autres numéros.

Lorsque vous avez terminé, vous devriez avoir:

 218         90         26         26        10         2         2         0
 128    |    64    |    32    |    16    |    8    |    4    |    2    |    1    |
   1          1          0          1         1         0         1         0

Les chiffres en haut ne sont que des notes utilisées dans le calcul et ne signifient pas grand-chose pour nous. En bas, cependant, vous voyez un nombre binaire "11011010". Effectivement, 218, converti en binaire, est "11011010".

En suivant ces procédures très simples, vous pouvez convertir le binaire en décimal et inversement sans calculatrice. Le calcul est très simple et les règles peuvent être mémorisées avec juste un peu de pratique.

Division des adresses

Pensez au routage IP comme à la livraison de pizza.

Lorsque l'on vous demande de livrer une pizza au "123, rue Main", il est très clair pour vous, en tant qu'humain, que vous souhaitez vous rendre au bâtiment numéroté "123" dans la rue nommée "Main Street". Il est facile de savoir que vous devez vous rendre au bloc 100 de la rue Main, car le numéro de bâtiment est compris entre 100 et 199 et la plupart des blocs de la ville sont numérotés en centaines. Vous "savez juste" comment diviser l'adresse.

Les routeurs livrent des paquets, pas de pizza. Leur travail est le même que celui d'un chauffeur de pizza: amener la cargaison (paquets) le plus près possible de la destination. Un routeur est connecté à deux sous-réseaux IP ou plus (pour être utile). Un routeur doit examiner les adresses IP de destination des paquets et décomposer ces adresses de destination en leurs composants "nom de rue" et "numéro de bâtiment", tout comme le chauffeur de pizza, pour prendre des décisions concernant la livraison.

Chaque ordinateur (ou "hôte") sur un réseau IP est configuré avec une adresse IP unique et un masque de sous-réseau. Cette adresse IP peut être divisée en un composant "numéro de bâtiment" (comme "123" dans l'exemple ci-dessus) appelé "Host ID" et un composant "street name" (comme "Main Street" dans l'exemple ci-dessus) appelé "ID réseau". Pour nos yeux humains, il est facile de voir où se trouvent le numéro du bâtiment et le nom de la rue dans "123 Main Street", mais plus difficile de voir cette division dans "10.13.216.41 avec un masque de sous-réseau de 255.255.192.0".

Les routeurs IP "savent juste" comment diviser les adresses IP en ces composants pour prendre des décisions de routage. Étant donné que la compréhension de la façon dont les paquets IP sont acheminés dépend de la compréhension de ce processus, nous devons également savoir comment diviser les adresses IP. Heureusement, extraire l'ID d'hôte et l'ID réseau d'une adresse IP et d'un masque de sous-réseau est en fait assez facile.

Commencez par écrire l'adresse IP en binaire (utilisez une calculatrice si vous n'avez pas encore appris à le faire dans votre tête, mais notez comment le faire - c'est vraiment, vraiment facile et impressionne le sexe opposé à des soirées):

      10.      13.     216.      41
00001010.00001101.11011000.00101001

Écrivez également le masque de sous-réseau en binaire:

     255.     255.     192.       0
11111111.11111111.11000000.00000000

Écrit côte à côte, vous pouvez voir que le point dans le masque de sous-réseau où les "1" s'arrêtent "s'aligne" sur un point de l'adresse IP. C'est le point que l'ID réseau et l'ID hôte se séparent. Donc, dans ce cas:

      10.      13.     216.      41
00001010.00001101.11011000.00101001 - IP address
11111111.11111111.11000000.00000000 - subnet mask
00001010.00001101.11000000.00000000 - Portion of IP address covered by 1's in subnet mask, remaining bits set to 0
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Les routeurs utilisent le masque de sous-réseau pour "masquer" les bits couverts par des 1 dans l'adresse IP (en remplaçant les bits qui ne sont pas "masqués" par des 0) pour extraire l'ID réseau:

      10.      13.     192.       0
00001010.00001101.11000000.00000000 - Network ID

De même, en utilisant le masque de sous-réseau pour "masquer" les bits couverts par des 0 dans l'adresse IP (en remplaçant à nouveau les bits qui ne sont pas "masqués" par des 0), un routeur peut extraire l'ID d'hôte:

       0.       0.      24.      41
00000000.00000000.00011000.00101001 - Portion of IP address covered by 0's in subnet mask, remaining bits set to 0

Il n'est pas aussi facile pour nos yeux humains de voir la "rupture" entre l'ID réseau et l'ID hôte que entre le "numéro de bâtiment" et le "nom de rue" dans les adresses physiques lors de la livraison de pizza, mais l'effet ultime est le même.

Maintenant que vous pouvez diviser les adresses IP et les masques de sous-réseau en ID d'hôte et ID réseau, vous pouvez acheminer IP comme le fait un routeur.

Plus de terminologie

Vous verrez des masques de sous-réseau écrits sur Internet et dans le reste de cette réponse sous la forme (IP/numéro). Cette notation est connue sous le nom de notation "Classless Inter-Domain Routing" (CIDR). "255.255.255.0" est composé de 24 bits de 1 au début, et il est plus rapide d'écrire cela en "/ 24" qu'en "255.255.255.0". Pour convertir un nombre CIDR (comme "/ 16") en un masque de sous-réseau décimal en pointillés, il suffit d'écrire ce nombre de 1, de le diviser en groupes de 8 bits et de le convertir en décimal. (Un "/ 16" est par exemple "255.255.0.0".)

Dans le "vieux temps", les masques de sous-réseau n'étaient pas spécifiés, mais étaient plutôt dérivés en regardant certains bits de l'adresse IP. Une adresse IP commençant par 0 - 127, par exemple, avait un masque de sous-réseau implicite de 255.0.0.0 (appelé une adresse IP de "classe A").

Ces masques de sous-réseau implicites ne sont pas utilisés aujourd'hui et je ne recommande plus de les connaître, sauf si vous avez le malheur de gérer de très vieux équipements ou de vieux protocoles (comme RIPv1) qui ne prennent pas en charge l'adressage IP sans classe. Je ne vais pas mentionner davantage ces "classes" d'adresses car elles ne s'appliquent pas aujourd'hui et peuvent prêter à confusion.

Certains appareils utilisent une notation appelée "masques génériques". Un "masque générique" n'est rien de plus qu'un masque de sous-réseau avec tous les 0 où il y aurait des 1 et les 1 où il y aurait des 0. Le "masque générique" d'un a/26 est:

 11111111.11111111.11111111.11000000 - /26 subnet mask
 00000000.00000000.00000000.00111111 - /26 "wildcard mask"

En général, vous voyez des "masques génériques" utilisés pour faire correspondre les ID d'hôte dans les listes de contrôle d'accès ou les règles de pare-feu. Nous n'en discuterons plus ici.

Comment fonctionne un routeur

Comme je l'ai déjà dit, les routeurs IP ont un travail similaire à un chauffeur-livreur de pizza en ce sens qu'ils doivent acheminer leur cargaison (paquets) à destination. Lorsqu'il est présenté avec un paquet lié à l'adresse 192.168.10.2, un routeur IP doit déterminer laquelle de ses interfaces réseau rapprochera le mieux ce paquet de sa destination.

Disons que vous êtes un routeur IP, et que vous avez des interfaces connectées à vous numérotées:

  • Ethernet0 - 192.168.20.1, masque de sous-réseau/24
  • Ethernet1 - 192.168.10.1, masque de sous-réseau/24

Si vous recevez un paquet à livrer avec une adresse de destination "192.168.10.2", il est assez facile de dire (avec vos yeux humains) que le paquet doit être envoyé via l'interface Ethernet1, car l'adresse d'interface Ethernet1 correspond à la destination du paquet adresse. Tous les ordinateurs connectés à l'interface Ethernet1 auront des adresses IP commençant par "192.168.10.", Car l'ID réseau de l'adresse IP attribuée à votre interface Ethernet1 est "192.168.10.0".

Pour un routeur, ce processus de sélection d'itinéraire se fait en construisant une table de routage et en consultant la table chaque fois qu'un paquet doit être livré. Une table de routage contient l'ID réseau et les noms d'interface de destination. Vous savez déjà comment obtenir un ID réseau à partir d'une adresse IP et d'un masque de sous-réseau, vous êtes donc en train de créer une table de routage. Voici notre table de routage pour ce routeur:

  • ID réseau: 192.168.20.0 (11000000.10101000.00010100.00000000) - Masque de sous-réseau 24 bits - Interface Ethernet0
  • ID réseau: 192.168.10.0 (11000000.10101000.00001010.00000000) - Masque de sous-réseau 24 bits - Interface Ethernet1

Pour notre paquet entrant lié à "192.168.10.2", nous avons seulement besoin de convertir l'adresse de ce paquet en binaire (en tant qu'humain - le routeur l'obtient en tant que binaire du fil pour commencer) et essayons de le faire correspondre à chaque adresse de notre routage table (jusqu'au nombre de bits dans le masque de sous-réseau) jusqu'à ce que nous correspondions à une entrée.

  • Destination du paquet entrant: 11000000.10101000.00001010.00000010

En comparant cela aux entrées de notre table de routage:

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00010100.00000000 - Interface Ethernet0
!!!!!!!!.!!!!!!!!.!!!????!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

11000000.10101000.00001010.00000010 - Destination address for packet
11000000.10101000.00001010.00000000 - Interface Ethernet1, 24 bit subnet mask
!!!!!!!!.!!!!!!!!.!!!!!!!!.xxxxxxxx - ! indicates matched digits, ? indicates no match, x indicates not checked (beyond subnet mask)

L'entrée pour Ethernet0 correspond parfaitement aux 19 premiers bits, mais arrête ensuite la correspondance. Cela signifie que ce n'est pas la bonne interface de destination. Vous pouvez voir que l'interface Ethernet1 correspond à 24 bits de l'adresse de destination. Ah, ha! Le paquet est lié à l'interface Ethernet1.

Dans un routeur réel, la table de routage est triée de manière à ce que les masques de sous-réseau les plus longs soient d'abord vérifiés pour les correspondances (c'est-à-dire les itinéraires les plus spécifiques), et numériquement afin que dès qu'une correspondance soit trouvée, le paquet puisse être routé et aucune autre tentative de correspondance n'est nécessaire (ce qui signifie que 192.168.10.0 serait répertorié en premier et 192.168.20.0 n'aurait jamais été vérifié). Ici, nous simplifions un peu cela. Des structures de données et des algorithmes sophistiqués rendent les routeurs IP plus rapides, mais des algorithmes simples produiront les mêmes résultats.

Itinéraires statiques

Jusqu'à présent, nous avons parlé de notre routeur hypothétique comme ayant des réseaux directement connectés. Ce n'est évidemment pas ainsi que le monde fonctionne. Dans l'analogie avec la pizza, le conducteur n'est parfois pas autorisé à pénétrer plus loin dans le bâtiment que la réception et doit remettre la pizza à quelqu'un d'autre pour la livraison au destinataire final (suspendez votre incrédulité et supportez-moi pendant que J'étire mon analogie, s'il vous plaît).

Commençons par appeler notre routeur à partir des exemples précédents "Router A". Vous connaissez déjà la table de routage de RouterA comme:

  • ID réseau: 192.168.20.0 (11000000.10101000.00010100.00000000) - masque de sous-réseau/24 - Interface RouterA-Ethernet0
  • ID réseau: 192.168.10.0 (11000000.10101000.00001010.00000000) - masque de sous-réseau/24 - Interface RouterA-Ethernet1

Supposons qu'il existe un autre routeur, "Router B", avec les adresses IP 192.168.10.254/24 et 192.168.30.1/24 attribuées à ses interfaces Ethernet0 et Ethernet1. Il a la table de routage suivante:

  • ID réseau: 192.168.10.0 (11000000.10101000.00001010.00000000) - masque de sous-réseau/24 - Routeur d'interface B-Ethernet0
  • ID réseau: 192.168.30.0 (11000000.10101000.00011110.00000000) - masque de sous-réseau/24 - Interface RouterB-Ethernet1

Dans le joli ASCII art, le réseau ressemble à ceci:

               Interface                      Interface
               Ethernet1                      Ethernet1
               192.168.10.1/24                192.168.30.254/24
     __________  V                  __________  V
    |          | V                 |          | V
----| ROUTER A |------- /// -------| ROUTER B |----
  ^ |__________|                 ^ |__________|
  ^                              ^
Interface                      Interface
Ethernet0                      Ethernet0
192.168.20.1/24                192.168.10.254/24

Vous pouvez voir que le routeur B sait comment "accéder" à un réseau, 192.168.30.0/24, dont le routeur A ne sait rien.

Supposons qu'un PC dont l'adresse IP 192.168.20.13 soit connectée au réseau connecté à l'interface Ethernet0 du routeur A envoie un paquet au routeur A pour livraison. Notre paquet hypothétique est destiné à l'adresse IP 192.168.30.46, qui est un périphérique connecté au réseau connecté à l'interface Ethernet1 du routeur B.

Avec la table de routage illustrée ci-dessus, aucune entrée dans la table de routage du routeur A ne correspond à la destination 192.168.30.46, donc le routeur A renverra le paquet au PC expéditeur avec le message "Réseau de destination inaccessible".

Pour informer le routeur A de l'existence du réseau 192.168.30.0/24, nous ajoutons l'entrée suivante à la table de routage du routeur A:

  • ID réseau: 192.168.30.0 (11000000.10101000.00011110.00000000) - masque de sous-réseau/24 - accessible via 192.168.10.254

De cette façon, le routeur A a une entrée de table de routage qui correspond à la destination 192.168.30.46 de notre exemple de paquet. Cette entrée de table de routage dit effectivement "Si vous obtenez un paquet lié à 192.168.30.0/24, envoyez-le à 192.168.10.254 car il sait comment le gérer". Il s'agit de l'action analogue de "remettre la pizza à la réception" que j'ai mentionnée plus tôt - passer le paquet à quelqu'un d'autre qui sait comment le rapprocher de sa destination.

L'ajout d'une entrée à une table de routage "à la main" est appelé ajout d'une "route statique".

Si le routeur B souhaite livrer des paquets au réseau de masque de sous-réseau 192.168.20.0 255.255.255.0, il aura également besoin d'une entrée dans sa table de routage:

  • ID réseau: 192.168.20.0 (11000000.10101000.00010100.00000000) - masque de sous-réseau/24 - accessible via: 192.168.10.1 (adresse IP du routeur A dans le réseau 192.168.10.0)

Cela créerait un chemin de livraison entre le réseau 192.168.30.0/24 et le réseau 192.168.20.0/24 à travers le réseau 192.168.10.0/24 entre ces routeurs.

Vous voulez toujours être sûr que les routeurs des deux côtés d'un tel "réseau interstitiel" ont une entrée de table de routage pour le réseau "distant". Si le routeur B dans notre exemple n'avait pas d'entrée de table de routage pour le réseau "distant" 192.168.20.0/24 attaché au routeur A, notre paquet hypothétique provenant du PC à 192.168.20.13 le ferait accédez au périphérique de destination au 192.168.30.46, mais toute réponse que 192.168.30.46 a tenté de renvoyer serait renvoyée par le routeur B comme "Réseau de destination inaccessible". La communication à sens unique n'est généralement pas souhaitable. Assurez-vous toujours de penser au trafic circulant dans les deux lorsque vous pensez à la communication dans les réseaux informatiques.

Vous pouvez obtenir beaucoup de kilométrage sur les routes statiques. Les protocoles de routage dynamique comme EIGRP, RIP, etc., ne sont en réalité rien de plus qu'un moyen pour les routeurs d'échanger entre eux des informations de routage qui pourraient, en fait, être configurées avec des routes statiques. Un grand avantage de l'utilisation de protocoles de routage dynamiques sur des routes statiques, cependant, est que les protocoles de routage dynamiques peuvent dynamiquement changer la table de routage en fonction des conditions du réseau (utilisation de la bande passante , une interface "en panne", etc.) et, à ce titre, l'utilisation d'un protocole de routage dynamique peut entraîner une configuration qui "contourne" les défaillances ou les goulots d'étranglement dans l'infrastructure réseau. (Cependant, les protocoles de routage dynamique sont [~ # ~] [~ # ~] hors de la portée de cette réponse.)

Vous ne pouvez pas y arriver d'ici

Dans le cas de notre exemple de routeur A, que se passe-t-il lorsqu'un paquet lié à "172.16.31.92" arrive?

En regardant la table de routage du routeur A, ni l'interface de destination ni la route statique ne correspondent aux 24 premiers bits de 172.18.31.92 (qui est 10101100.00010000.00011111.01011100, BTW).

Comme nous le savons déjà, le routeur A retournerait le paquet à l'expéditeur via un message "Réseau de destination inaccessible".

Disons qu'il y a un autre routeur (routeur C) à l'adresse "192.168.20.254". Le routeur C est connecté à Internet!

                              Interface                      Interface                      Interface
                              Ethernet1                      Ethernet1                      Ethernet1
                              192.168.20.254/24              192.168.10.1/24                192.168.30.254/24
                    __________  V                  __________  V                  __________  V
((  heap o  ))     |          | V                 |          | V                 |          | V
(( internet )) ----| ROUTER C |------- /// -------| ROUTER A |------- /// -------| ROUTER B |----
((   w00t!  ))   ^ |__________|                 ^ |__________|                 ^ |__________|
                 ^                              ^                              ^
               Interface                      Interface                      Interface
               Ethernet0                      Ethernet0                      Ethernet0
               10.35.1.1/30                   192.168.20.1/24                192.168.10.254/24

Ce serait bien si le routeur A pouvait acheminer des paquets qui ne correspondent à aucune interface locale jusqu'au routeur C de telle sorte que le routeur C puisse les envoyer sur Internet. Entrez l'itinéraire "passerelle par défaut".

Ajoutez une entrée à la fin de notre table de routage comme ceci:

  • ID réseau: 0.0.0.0 (00000000.00000000.00000000.00000000) - masque de sous-réseau/0 - routeur de destination: 192.168.20.254

Lorsque nous essayons de faire correspondre "172.16.31.92" à chaque entrée de la table de routage, nous finissons par atteindre cette nouvelle entrée. C'est un peu déroutant, au début. Nous cherchons à faire correspondre zéro bit de l'adresse de destination avec ... attendez ... quoi? Correspond à zéro bits? Donc, nous ne cherchons pas du tout un match. Cette entrée de table de routage dit, fondamentalement, "Si vous arrivez ici, plutôt que d'abandonner la livraison, envoyez le paquet au routeur au 192.168.20.254 et laissez-le le gérer".

192.168.20.254 est une destination à laquelle nous [~ # ~] [~ # ~] savons comment livrer un paquet. Lorsqu'elle est confrontée à un paquet lié à une destination pour laquelle nous n'avons pas d'entrée de table de routage spécifique, cette entrée de "passerelle par défaut" correspondra toujours (car elle correspond à zéro bit de l'adresse de destination) et nous donne un endroit de "dernier recours" que nous pouvons envoyer des paquets pour livraison. Vous entendrez parfois la passerelle par défaut appelée "passerelle de dernier recours".

Pour qu'un itinéraire de passerelle par défaut soit efficace, il doit faire référence à un routeur accessible à l'aide des autres entrées de la table de routage. Si vous essayez de spécifier une passerelle par défaut 192.168.50.254 dans le routeur A, par exemple, la livraison à une telle passerelle par défaut échouera. 192.168.50.254 n'est pas une adresse que le routeur A sait comment livrer des paquets à l'aide des autres routes de sa table de routage, donc une telle adresse serait inefficace comme passerelle par défaut. Cela peut être déclaré de manière concise: la passerelle par défaut doit être définie sur une adresse déjà accessible en utilisant une autre route dans la table de routage.

Les routeurs réels stockent généralement la passerelle par défaut en tant que dernier itinéraire dans leur table de routage de telle sorte qu'elle corresponde aux paquets après avoir échoué à faire correspondre toutes les autres entrées de la table.

Urbanisme et routage IP

Décomposer un sous-réseau IP en sous-réseaux IP plus petits est une question d'urbanisme. Dans l'urbanisme, le zonage est utilisé pour s'adapter aux caractéristiques naturelles du paysage (rivières, lacs, etc.), pour influencer les flux de trafic entre les différentes parties de la ville et pour séparer les différents types d'utilisation des sols (industriel, résidentiel, etc.) . Le sous-réseau IP est vraiment la même chose.

Il y a trois raisons principales pour lesquelles vous souhaitez mettre en réseau un réseau:

  • Vous souhaiterez peut-être communiquer sur différents supports de communication. Si vous avez une connexion T1 WAN entre deux bâtiments, des routeurs IP peuvent être placés aux extrémités de ces connexions pour faciliter la communication à travers le T1. Les réseaux à chaque extrémité (et éventuellement le réseau "interstitiel") sur le T1 lui-même) serait attribué à des sous-réseaux IP uniques afin que les routeurs puissent prendre des décisions sur le trafic à envoyer sur la ligne T1.

  • Dans un réseau Ethernet, vous pouvez utiliser des sous-réseaux pour limiter la quantité de trafic de diffusion dans une partie donnée du réseau. Les protocoles de couche application utilisent la capacité de diffusion d'Ethernet à des fins très utiles. Cependant, à mesure que de plus en plus d'hôtes sont regroupés dans le même réseau Ethernet, le pourcentage de trafic de diffusion sur le câble (ou l'air, dans Ethernet sans fil) peut augmenter au point de créer des problèmes de livraison de trafic non diffusé. (Autrefois, le trafic de diffusion pouvait submerger le processeur des hôtes en les forçant à examiner chaque paquet de diffusion. C'est moins probable aujourd'hui.) Un trafic excessif sur Ethernet commuté peut également prendre la forme d'une "inondation de trames vers des destinations inconnues". Cette condition est provoquée par un commutateur Ethernet incapable de garder une trace de chaque destination sur le réseau et est la raison pour laquelle les réseaux Ethernet commutés ne peuvent pas évoluer vers un nombre infini d'hôtes. L'effet de l'inondation de trames vers des destinations inconnues est similaire à l'effet de l'excès de trafic de diffusion, aux fins du sous-réseau.

  • Vous pouvez vouloir "contrôler" les types de trafic circulant entre différents groupes d'hôtes. Vous disposez peut-être de périphériques de serveur d'impression et vous souhaitez uniquement que les ordinateurs du serveur de file d'attente d'impression autorisés leur envoient des travaux. En limitant le trafic autorisé à circuler vers le sous-réseau des périphériques du serveur d'impression, les utilisateurs ne peuvent pas configurer leurs PC pour communiquer directement avec les périphériques du serveur d'impression afin de contourner la comptabilité d'impression. Vous pouvez mettre les périphériques du serveur d'impression dans un sous-réseau pour eux-mêmes et créer une règle dans le routeur ou le pare-feu attaché à ce sous-réseau pour contrôler la liste des hôtes autorisés à envoyer du trafic vers les périphériques du serveur d'impression. (Les routeurs et les pare-feu peuvent généralement prendre des décisions sur la manière de livrer ou non un paquet en fonction des adresses source et de destination du paquet. Les pare-feu sont généralement une sous-espèce de routeur avec une personnalité obsessionnelle. Ils peuvent être très, très préoccupés par la charge utile des paquets, alors que les routeurs ignorent généralement les charges utiles et ne font que livrer les paquets.)

Lors de la planification d'une ville, vous pouvez planifier la façon dont les rues se croisent et utiliser des rues tournantes uniquement, à sens unique et sans issue pour influencer les flux de trafic. Vous voudrez peut-être que la rue Main fasse 30 pâtés de maisons, chaque pâté de maisons ayant jusqu'à 99 bâtiments chacun. Il est assez facile de planifier votre numérotation des rues de telle sorte que chaque bloc de la rue principale ait une plage de numéros de rue augmentant de 100 pour chaque bloc. Il est très facile de savoir quel doit être le "numéro de départ" dans chaque bloc suivant.

Lors de la planification des sous-réseaux IP, vous devez créer le bon nombre de sous-réseaux (rues) avec le bon nombre d'ID d'hôte disponibles (numéros de bâtiment) et utiliser des routeurs pour connecter les sous-réseaux les uns aux autres (intersections). Les règles concernant les adresses source et de destination autorisées spécifiées dans les routeurs peuvent contrôler davantage le flux de trafic. Les pare-feu peuvent agir comme des flics de trafic obsessionnels.

Aux fins de cette réponse, la construction de nos sous-réseaux est notre seule préoccupation majeure. Au lieu de travailler en décimal, comme vous le feriez avec l'urbanisme, vous travaillez en binaire pour décrire les limites de chaque sous-réseau.

Suite: Comment fonctionne le sous-réseau IPv4?

(Oui ... nous avons atteint la taille maximale d'une réponse (30000 caractères).)

655
Evan Anderson

Suite de: Comment fonctionne le sous-réseau IPv4?

Votre FAI vous donne la plage de l'ID réseau 192.168.40.0/24 (11000000.10101000.00101000.00000000). Vous savez que vous souhaitez utiliser un pare-feu/routeur pour limiter la communication entre les différentes parties de votre réseau (serveurs, ordinateurs clients, équipements réseau) et, à ce titre, vous souhaitez rompre ces différentes parties de votre réseau dans des sous-réseaux IP (que le périphérique pare-feu/routeur peut ensuite acheminer).

Vous avez:

  • 12 ordinateurs serveurs, mais vous pourriez obtenir jusqu'à 50% de plus
  • 9 interrupteurs
  • 97 ordinateurs clients, mais vous pourriez en avoir plus

Quelle est une bonne façon de diviser 192.168.40.0/24 en ces morceaux?

En pensant en deux puissances égales et en travaillant avec le plus grand nombre d'appareils possibles, vous pouvez trouver:

  • 18 ordinateurs serveurs - La deuxième puissance en importance sur deux est de 32
  • 9 commutateurs - La deuxième puissance la plus importante de deux est 16
  • 97 ordinateurs clients - La deuxième puissance la plus élevée de deux est 128

Dans un sous-réseau IP donné, il y a deux adresses réservées qui ne peuvent pas être utilisées comme adresses IP de périphérique valides: l'adresse avec tous les zéros dans la partie ID hôte et l'adresse avec toutes celles dans la partie ID hôte. En tant que tel, pour un sous-réseau IP donné, le nombre d'adresses d'hôte disponibles est de deux à la puissance de la quantité de 32 moins le nombre de bits dans le masque de sous-réseau, moins 2. Ainsi, dans le cas de 192.168.40.0/24, nous peut voir que le masque de sous-réseau a 24 bits. Cela laisse 8 bits disponibles pour les ID d'hôte. Nous savons que la puissance de 2 à la 8 est de 256-- ce qui signifie que 256 combinaisons possibles de bits s'inscrivent dans un slot de 8 bits de large. Étant donné que les combinaisons "11111111" et "00000000" de ces 8 bits ne sont pas autorisées pour les ID d'hôte, cela nous laisse 254 hôtes possibles qui peuvent être attribués dans le réseau 192.168.40.0/24.

De ces 254 hôtes, il semble que nous pouvons adapter les ordinateurs clients, les commutateurs et les ordinateurs serveurs dans cet espace, non? Essayons.

Vous avez 8 bits de masque de sous-réseau pour "jouer" (les 8 bits restants de l'adresse IP 192.168.40.0/24 ne sont pas couverts par le masque de sous-réseau fourni par votre FAI). Nous devons trouver un moyen d'utiliser ces 8 bits pour créer un certain nombre d'identifiants réseau uniques pouvant accueillir les appareils ci-dessus.

Commencez avec le plus grand réseau - les ordinateurs clients. Vous savez que la prochaine puissance supérieure de deux du nombre de périphériques possibles est 128. Le nombre 128, en binaire, est "10000000". Heureusement pour nous, cela correspond à l'emplacement 8 bits dont nous disposons (si ce n'était pas le cas, cela indiquerait que notre sous-réseau de départ est trop petit pour accueillir tous nos appareils).

Prenons notre ID de réseau, tel que fourni par notre FAI, et y ajoutons un seul bit de masque de sous-réseau, en le divisant en deux réseaux:

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.00000000 - Old subnet mask (/24)

11000000.10101000.00101000.00000000 - 192.168.40.0 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - New subnet mask (/25)

Regardez cela jusqu'à ce que cela ait du sens. Nous avons augmenté le masque de sous-réseau d'un bit de longueur, ce qui a permis à l'ID de réseau de couvrir un bit qui aurait été utilisé pour l'ID d'hôte. Étant donné que ce bit peut être zéro ou un, nous avons effectivement divisé notre réseau 192.168.40.0 en deux réseaux. La première adresse IP valide dans le réseau 192.168.40.0/25 sera le premier ID d'hôte avec un "1" dans le bit le plus à droite:

11000000.10101000.00101000.00000001 - 192.168.40.1 - First valid Host in the 192.168.40.0/25 network

Le premier hôte valide du réseau 192.168.40.128 sera également le premier ID d'hôte avec un "1" dans le bit le plus à droite:

11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid Host in the 192.168.40.128/25 network

Le dernier hôte valide dans chaque réseau sera l'ID d'hôte avec chaque bit sauf le bit le plus à droite réglé sur "1":

11000000.10101000.00101000.01111110 - 192.168.40.126 - Last valid Host in the 192.168.40.0/25 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid Host in the 192.168.40.128/25 network

Ainsi, de cette manière, nous avons créé un réseau suffisamment grand pour contenir nos ordinateurs clients, et un deuxième réseau que nous pouvons ensuite appliquer le même principe pour se décomposer en réseaux encore plus petits. Faisons une note:

  • Ordinateurs clients - 192.168.40.0/25 - IP valides: 192.168.40.1 - 192.168.40.126

Maintenant, pour briser le deuxième réseau de nos serveurs et commutateurs, nous faisons la même chose.

Nous avons 12 ordinateurs serveurs, mais nous pourrions en acheter jusqu'à 6 de plus. Planifions sur 18, ce qui nous laisse la prochaine puissance la plus élevée de 2 comme 32. En binaire, 32 est "100000", ce qui fait 6 bits. Il nous reste 7 bits de masque de sous-réseau dans 192.168.40.128/25, nous avons donc suffisamment de bits pour continuer à "jouer". L'ajout d'un bit de masque de sous-réseau supplémentaire nous donne deux réseaux supplémentaires:

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.10000000 - Old subnet mask (/25)

11000000.10101000.00101000.10000000 - 192.168.40.128 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.10000001 - 192.168.40.129 - First valid Host in the 192.168.40.128/26 network
11000000.10101000.00101000.10111110 - 192.168.40.190 - Last valid Host in the 192.168.40.128/26 network

11000000.10101000.00101000.11000000 - 192.168.40.192 network ID
11111111.11111111.11111111.11000000 - New subnet mask (/26)
11000000.10101000.00101000.11000001 - 192.168.40.193 - First valid Host in the 192.168.40.192/26 network
11000000.10101000.00101000.11111110 - 192.168.40.254 - Last valid Host in the 192.168.40.192/26 network

Donc, maintenant, nous avons divisé 192.168.40.128/25 en deux réseaux supplémentaires, chacun ayant 26 bits de masque de sous-réseau, ou un total de 62 ID d'hôte possibles - 2 ^ (32 - 26) - 2.

Cela signifie que ces deux réseaux ont suffisamment d'adresses pour nos serveurs et commutateurs! Prenons des notes:

  • Serveurs - 192.168.40.128/26 - IP valides: 192.168.40.129 - 192.168.40.190
  • Commutateurs - 192.168.40.192/26 - IP valides: 192.168.40.193 - 192.168.40.254

Cette technique est appelée masquage de sous-réseau de longueur variable (VLSM) et, si elle est correctement appliquée, les "routeurs principaux" ont des tables de routage plus petites (via un processus appelé "résumé de route"). Dans le cas de notre FAI dans cet exemple, ils peuvent être totalement inconscients de la façon dont nous avons résolu 192.168.40.0/24. Si leur routeur a un paquet lié à 192.168.40.206 (l'un de nos commutateurs), il leur suffit de savoir le transmettre à notre routeur (puisque 192.168.40.206 correspond à l'ID réseau et au masque de sous-réseau 192.168.40.0/24 dans la table de routage de leur routeur ) et notre routeur l'achèvera à destination. Cela empêche nos itinéraires de sous-réseau de leurs tables de routage. (Je simplifie ici, mais vous avez l'idée.)

Vous pouvez planifier de très grands réseaux géographiquement de la même manière. Tant que vous effectuez la bonne "planification urbaine" à l'avance (en anticipant le nombre d'hôtes dans chaque sous-réseau avec une certaine précision et un œil sur l'avenir), vous pouvez créer une grande hiérarchie de routage qui, au niveau des routeurs principaux, "résume "à un très petit nombre de routes. Comme nous l'avons vu ci-dessus, plus il y a d'itinéraires dans la table de routage d'un routeur, plus il exécute lentement son travail. Concevoir un réseau IP avec VLSM et garder les tables de routage petites est une bonne chose (tm).

L'irréalisme des exemples

Le monde fictif dans cette réponse est, évidemment, fictif. En règle générale, vous pouvez créer des sous-réseaux sur Ethernet commuté moderne avec plus d'hôtes que 254 (en fonction du profil de trafic). Comme cela a été souligné dans les commentaires, l'utilisation de réseaux/24 entre les routeurs n'est pas cohérente avec Real Life (tm). Cela donne de jolis exemples, mais c'est un gaspillage d'espace d'adressage. En général, un/30 ou un/31 (voir http://www.faqs.org/rfcs/rfc3021.html pour plus de détails sur le fonctionnement de/31 - ils dépassent le cadre de cette réponse à coup sûr) le réseau est utilisé sur des liaisons strictement point à point entre deux routeurs.

144
Joseph Kern

Sous-compensation

La sous-compensation n'est pas difficile mais elle peut être intimidante. Commençons donc par l'étape la plus simple possible. Apprendre à compter en binaire.

binaire

Le binaire est un système de comptage de base 2. Composé de seulement deux nombres (1 et 0). Le comptage se déroule de cette manière.

1 = 001 ( 0 + 0 + 1 = 1)
2 = 010 ( 0 + 2 + 0 = 2)
3 = 011 ( 0 + 2 + 1 = 3)
4 = 100 ( 4 + 0 + 0 = 4)
5 = 101 ( 4 + 0 + 1 = 5)

Donc, si vous imaginez simplement que chaque 1 est un espace réservé pour une valeur (toutes les valeurs binaires sont des puissances de deux)

1     1     1     1     1 = 31
16  + 8  +  4  +  2  +  1 = 31

Donc ... 100000 = 32. Et 10000000 = 128. ET 11111111 = 255.

Quand je dis: "J'ai un masque de sous-réseau de 255.255.255.0", je veux vraiment dire: "J'ai un masque de sous-réseau de 11111111.11111111.11111111.00000000". Nous utilisons des sous-réseaux comme une main courte.

Les périodes de l'adresse, séparées tous les 8 chiffres binaires (un octet). C'est pourquoi IPv4 est connu comme un espace d'adressage 32 bits (8 * 4).

Pourquoi sous-réseau?

Les adresses IPv4 (192.168.1.1) sont rares. La sous-compensation nous permet d'augmenter la quantité de réseaux (ou hôtes) disponibles. Ceci pour des raisons administratives et techniques.

Chaque adresse IP est divisée en deux parties distinctes, le réseau et l'hôte. Par défaut, une adresse de classe C (192.168.1.1) utilise les 3 premiers octets (192.168.1) pour la partie réseau de l'adresse. et le 4e octet (.1) comme partie hôte.

Par défaut, une adresse IP et un masque de sous-réseau pour une adresse de classe C ressemblent à ceci

IP     192.168.1.1 
Subnet 255.255.255.0

En binaire comme celui-ci

IP     11000000.10101000.00000001.00000001
Subnet 11111111.11111111.11111111.00000000

Regardez à nouveau l'exemple binaire. Remarquez comment j'ai dit que les trois premiers octets sont utilisés pour le réseau? Remarquez comment la partie réseau est tout entière? C'est tout le sous-filet. Développons.

Étant donné que j'ai un seul octet pour ma partie hôte (dans l'exemple ci-dessus). Je ne peux avoir que 256 hôtes (256 est la valeur maximale d'un octet, à partir de 0). Mais il y a une autre petite astuce: vous devez soustraire 2 adresses d'hôte des adresses disponibles (actuellement 256). La première adresse de la plage sera pour le réseau (192.168.1.0) et la dernière adresse de la plage sera la diffusion (192.168.1.255). Vous avez donc vraiment 254 adresses disponibles pour les hôtes d'un même réseau.

ne étude de cas

Disons que je vous ai donné le morceau de papier suivant.

Create 4 networks with 192.168.1.0/24.

Jetons un coup d'oeil à cela. Le/24 est appelé notation CIDR. Plutôt que de référencer le 255.255.255.0, nous référençons simplement les bits dont nous avons besoin pour le réseau. Dans ce cas, nous avons besoin de 24 bits (3 * 8) à partir d'une adresse 32 bits. Écrire cela en binaire

11111111.11111111.11111111.00000000 = 255.255.255.0
8bits   + 8bits  + 8bits  + 0bits   = 24bits

Ensuite, nous savons que nous devons déterminer le nombre de sous-réseaux dont nous avons besoin. On dirait 4. Puisque nous avons besoin de créer plus de réseaux (actuellement nous n'en avons qu'un) permet de retourner quelques bits

11111111.11111111.11111111.00000000 = 255.255.255.0   = 1 Network OR /24
11111111.11111111.11111111.10000000 = 255.255.255.128 = 2 Networks OR /25
11111111.11111111.11111111.11000000 = 255.255.255.192 = 4 Networks (remember powers of 2!) OR /26

Maintenant que nous avons décidé d'un/26, commençons à allouer des hôtes. Un peu de maths simples:

32(bits) - 26(bits) = 6(bits) for Host addresses.

Nous avons 6 bits à allouer dans chaque réseau pour les hôtes. N'oubliez pas que nous devons soustraire 2 pour chaque réseau.

h = Host bits    
2^h - 2 = hosts available

2^6 - 2 = 62 hosts 

Finally we have 62 hosts in 4 networks, 192.168.1.0/26

Maintenant, nous devons déterminer où vont les hôtes. Retour au binaire!

11111111.11111111.11111111.00,000000 [the comma is the new network/hosts division]

Begin to calculate:

11000000.10101000.00000001.00,000000 = 192.168.1.0 [First IP = Network Adress]
11000000.10101000.00000001.00,000001 = 192.168.1.1 [First Host IP]
11000000.10101000.00000001.00,000010 = 192.168.1.2 [Second Host IP]
11000000.10101000.00000001.00,000011 = 192.168.1.3 [Third Host IP]

And so on ... until ...

11000000.10101000.00000001.00,111110 = 192.168.1.62 [Sixty Second Host IP]
11000000.10101000.00000001.00,111111 = 192.168.1.63 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.01,000000 = 192.168.1.64 [First IP = Network Address]
11000000.10101000.00000001.01,000001 = 192.168.1.65 [First Host IP]
11000000.10101000.00000001.01,000010 = 192.168.1.66 [Second Host IP]

And so on ... until ...

11000000.10101000.00000001.01,111110 = 192.168.1.126 [Sixty Second Host IP]
11000000.10101000.00000001.01,111111 = 192.168.1.127 [Last IP = Broadcast Address]

So ... On to the NEXT network ....

11000000.10101000.00000001.10,000000 = 192.168.1.128 [First IP = Network Address]
11000000.10101000.00000001.10,000001 = 192.168.1.129 [First Host IP]

Etc ...

De cette façon, vous pouvez calculer l'intégralité du sous-réseau.

Caractères génériques Un masque générique est un masque de sous-réseau inversé.

11111111.11111111.11111111.11000000 = 255.255.255.192 [Subnet]
00000000.00000000.00000000.00111111 = 0.0.0.63 [Wild Card]

Plus loin

Google pour les termes "super-filet" et "VLSM (masque de sous-réseau de longueur variable)", pour des sujets plus avancés.

Je peux voir maintenant que j'ai mis trop de temps à répondre ... soupir

78
Joseph Kern

Une brève leçon d'histoire: à l'origine, les adresses IPv4 unicast étaient divisées en 3 classes, chacune avec une longueur de masque "par défaut" associée (appelée masque de sous-réseau avec classe)

  • Classe A: tout élément compris dans la plage 1.0.0.0 -> 127.255.255.255. Masque de sous-réseau classe de 255.0.0.0 (/ 8 en notation CIDR)
  • Classe B: tout ce qui se situe dans la plage 128.0.0.0 -> 191.255.255.255. Masque de sous-réseau classe de 255.255.0.0 (/ 16 en notation CIDR)
  • Classe C: tout ce qui se trouve dans la plage 192.0.0.0 -> 223.255.255.255. Masque de sous-réseau classe de 255.255.255.0 (/ 24 en notation CIDR)

L'idée était que des organisations de tailles différentes pouvaient se voir attribuer une classe d'adresse IP différente, afin d'utiliser efficacement l'espace d'adressage IP.

Cependant, à mesure que les réseaux IP se sont développés, il est devenu clair que cette approche avait ses problèmes. Pour n'en citer que trois:

Dans un monde classe, tous les sous-réseaux devaient avoir un masque de/8,/16 ou/24. Cela signifiait que le plus petit sous-réseau pouvant être configuré était un/24, ce qui permettait de 254 adresses d'hôte (.0 et .255 étant réservées comme adresses de réseau et de diffusion, respectivement). Cela a été extrêmement coûteux, en particulier sur les liaisons point à point avec seulement deux routeurs attachés à eux.

Même après que cette restriction a été assouplie, les protocoles de routage antérieurs (par exemple RIPv1 ) n'ont pas annoncé la longueur de masque associée à un préfixe IP. En l'absence d'un masque spécifique, il utiliserait soit le masque d'une interface directement connectée dans le même réseau de classe, soit retomberait sur l'utilisation du masque de classe. Par exemple, si vous souhaitez utiliser le réseau 172.16.0.0 pour les liaisons inter-routeurs avec/30 masques, tous les sous-réseaux de 172.16.0.0 - 172.16. 255.255 devrait avoir un masque/30 (16384 sous-réseaux, chacun avec 2 IP utilisables).

Les tables de routage des routeurs Internet ont commencé à prendre de plus en plus de mémoire; ce fut/est connu comme "l'explosion de la table de routage". Si un fournisseur avait 16 réseaux contigus/24, par exemple, il aurait besoin d'annoncer les 16 préfixes plutôt qu'un seul résumé couvrant toute la gamme.

Deux raffinements connexes nous ont permis d'aller au-delà des limitations ci-dessus.

  1. Masques de sous-réseau à longueur variable (VLSM)
  2. CIDR (routage inter domaine sans classe)

VLSM fait référence à la capacité d'un protocole de routage à prendre en charge différents masques de sous-réseau au sein d'un même réseau de classe. Par exemple:

192.168.1.0/24

Pourrait être divisé en:

192.168.1.0/25
192.168.1.128/26
192.168.1.192/27
192.168.1.224/27

Ce qui a permis une utilisation beaucoup plus efficace de l'espace d'adressage; les sous-réseaux pourraient être dimensionnés correctement pour le nombre d'hôtes/routeurs qui leur seraient attachés.

Le CIDR prend VLSM et l'étend dans l'autre sens; en plus de diviser un réseau avec classe unique en sous-réseaux plus petits, le CIDR permet l'agrégation de plusieurs réseaux avec classe en un seul résumé. Par exemple, les réseaux de classe B (/ 16) suivants:

172.16.0.0/16
172.17.0.0/16
172.18.0.0/16
172.19.0.0/16

Peut être agrégé/résumé avec un seul préfixe:

172.16.0.0/14

En termes de sous-réseau: un masque de sous-réseau a une longueur de 32 bits. La longueur du masque indique le nombre de bits identifiant la partie réseau de l'adresse. Par exemple:

10.1.1.0/24
  • Le masque de sous-réseau classe est/8
  • Le masque de sous-réseau réel est/24
  • 16 bits (24-8) ont été "empruntés" pour l'utilisation du sous-réseau.

Cela signifie que, en supposant que l'ensemble du réseau 10.0.0.0/8 est sous-réseau en/24s, il y aura 65536 (2 ^ 16) sous-réseaux dans cette plage. (Cela suppose que la plate-forme que vous utilisez prend en charge les numéros de sous-réseau de 0 et 255. Voir le sous-réseau IP de Cisco).

Il reste 8 bits dans la "partie hôte" de l'adresse. Cela signifie qu'il y a 256 adresses IP disponibles (2 ^ 8), dont 2 sont réservées (10.1.1.0 est l'adresse réseau, 10.1.1.255 est l'adresse de diffusion dirigée vers le sous-réseau). Cela laisse 254 adresses IP utilisables sur ce sous-réseau. ((2 ^ 8) - 2)

34
Murali Suriar

Plages de réseau: les réseaux sont toujours référencés par 2 nombres: un pour déterminer le réseau et un autre pour déterminer quel ordinateur (ou hôte) se trouve sur ce réseau. Étant donné que chaque adresse de réseau a une longueur de 32 bits, les deux nombres doivent tenir dans ces 32 bits.

La numérotation des réseaux est importante, car c'est ce que l'ICANN distribue lorsque vous demandez une plage IP réseau. Si nous ne l'avions pas, personne ne pourrait faire la différence entre mon réseau et AT&T. Donc, bien que ces numéros doivent être uniques, personne d'autre ne veut attribuer de numéros aux hôtes qui se trouvent sur mon réseau. D'où la scission - la première partie est gérée par les gens du réseau, la deuxième partie est à moi pour donner aux machines que je veux.

Le numéro de réseau n'est pas fixé à un certain nombre de bits - par exemple, si je n'avais que 200 machines à gérer moi-même, je serais parfaitement satisfait d'un numéro de réseau qui utilisait 24 bits, me laissant avec seulement 8 bits pour moi - ce qui est suffisant pour jusqu'à 255 hôtes. Comme le numéro de réseau utilise 24 bits, nous pouvons en avoir beaucoup, ce qui signifie que beaucoup de gens peuvent avoir leurs propres réseaux.

Dans le passé, cela était appelé un réseau de classe C. (la classe B utilisait 16 bits pour le numéro de réseau et la classe A utilisait 8 bits, il n'y a donc que quelques réseaux de classe A).

De nos jours, cette convention de dénomination est tombée en désuétude. Il a été remplacé par le concept appelé CIDR. CIDR place explicitement le nombre de bits pour vos hôtes après la barre oblique. Donc mon exemple ci-dessus (la classe C) est maintenant appelé CIDR/24.

Cela nous donne un peu plus de flexibilité, avant si j'avais 300 hôtes à gérer, j'aurais besoin d'un réseau de classe B! Maintenant, je peux juste obtenir un CIDR/23, donc j'ai 9 bits pour moi et 23 bits pour le numéro de réseau. L'ICANN ne dispose peut-être pas de ce type de réseaux, mais si j'en ai un interne ou que je loue un réseau partiel à un FAI, cela est plus facile à gérer - d'autant plus que tous leurs clients peuvent recevoir un/29 (en me laissant. 3 bits ou un maximum de 8 machines) qui permet à plus de personnes d'avoir leur propre petite tranche des adresses IP disponibles. Jusqu'à ce que nous obtenions IPv6, c'est très important.


Cependant ... alors que je sais qu'un/24 CIDR est l'équivalent de l'ancien réseau de classe C, et a/16 est de classe B et a/8 est une classe A ... Je suis toujours perplexe en essayant de calculer a/22 en ma tête. Heureusement, il existe des outils qui le font pour moi :)

Cependant - si vous savez que/24 est 8 bits pour les hôtes (et 24 bits pour le réseau), alors je sais que/23 me donne un bit supplémentaire qui double le nombre d'hôtes.

7
gbjbaanb

Je vais poser et répondre à quelques questions connexes en cours de route:

  • Pourquoi voyez-vous 255.255.255.0 si souvent?
  • Pourquoi 192.168.0.1?
  • Pourquoi 127.0.0.1?

Pourquoi de tels nombres étranges - 255, 192, 168, 127?


8 + 8 + 8 + 8 bits décimal en pointillé

Les adresses Internet comme 194.60.38.1 utilisent la notation décimale à points pour diviser 32 bits en 8 + 8 + 8 + 8 bits . La décimale en pointillés signifie la conversion chaque nombre en binaire puis en le remplissant à gauche avec 0 ’S.

Par exemple .60. → 60 = 32 + 16 + 8 + 4 → 111100.00111100..

Ainsi, 194.60.38.10 est décimal en pointillés pour l'adresse 4 × 8 = 32 bits 11000010.00111100.00100110.00001010, depuis 38 → 100110, 10 → 1010, etc. 194 nécessite les 8 bits; les autres sont rembourrés.

padded

Une fois que vous pensez à 255, 192 et 127 en binaire 8 bits, vous pouvez plus facilement comprendre pourquoi certains nombres décimaux sont si courants:

  • 255 = 11111111
  • 192 = 11000000
  • 127 = _1111111
  • 128 = 10000000

Ces nombres décimaux représentent des blocs de 8 bits visuellement pratiques, tels que ■■■■■■■■■, ■ □□□□□□□, et □ ■■■■■■■■. Vous n'avez donc jamais vu 256 = 2⁹ à cause de la limite de 8 bits, et 127 = 128−1 = 2⁸ − 1 est le basculement de bits d'une puissance de deux - et les puissances de deux sont 10………00000 ’S en binaire.

  • 168 = 10101000

Masques de sous-réseau: ce qui est à moi est à moi + ce qui est à vous est à vous

Masques de sous-réseau puis décomposez chaque adresse Internet 32 ​​bits en un ID réseau et un ID hôte. Alors que les adresses Internet peuvent avoir n'importe quel mélange de 1 et de 0, les masques de sous-réseau commencent par seulement 1 et se terminent par seulement 0.

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|■■■■■■■■|□□□□□□□□ subnet

Noircir les premiers 8 + 8 + 8 = 24 bits et blanchir les 8 derniers bits est un moyen de diviser l'IP ■■ □ □ □ □ ■ ■ ■ | □ □ ■■■■ □■ | □ □ ■ □ □ ■ ■ □ | □→□→ ■ □ ■ □ en deux parties:

■■□□□□■□|□□■■■■□□|□□■□□■■□          network
                             □□□□■□■□ Host

Si le propriétaire du sous-réseau (disons OmniCorp ) voulait plus d'adresses IP internes, il pourrait acheter plus (disons 8 + 8 = 16 bits) du côté droit du réseau, comme ceci:

■■□□□□■□|□□■■■■□□|□□■□□■■□|□□□□■□■□ IP
■■■■■■■■|■■■■■■■■|□□□□□□□□|□□□□□□□□ subnet
■■□□□□■□ □□■■■■□□                    network
                   □□■□□■■□ □□□□■□■□ Host

Il y a clairement un compromis à l'intérieur de l'espace d'adressage de l'option 32 bits = 2³² = 4 294 967 296: si vous achetez plus d'ID réseau (côté gauche), votre réseau interne a plus d'ID hôte (côté droit) à attribuer.

Les gens bon marché ont donc un masque de sous-réseau de

255.255.255.0 = ■■■■■■■■ | |■■■■■■■■ | ■■■■■■■■ | □■□□□□→□.

Des gens encore moins chers ont

255.255.255.128 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | ■ □■■

ou 255.255.255.192 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | ■■ □■□□□→.

Selon le folklore, ce n'était pas réellement Roger Miller, mais un administrateur système modeste avec un masque 255.255.255.254 qui a écrit à l'origine King of the Road, en remplaçant "Je n'ai pas de grand sous-réseau" pour "Je n'ai pas de cigarettes".

I smoke my cigarettes down to the butt

(Pourquoi les masques des humbles sont-ils remplis de nombres aussi élevés? Parce que, comme le narrateur de Miller, les masques de sous-réseau comptent toutes les choses que vous ne faites pas.)


Que signifie la barre oblique de fin après une adresse IP? (par exemple, 194.60.38.10/24)

Étant donné que les masques de sous-réseau (qui séparent "les leurs" des "nôtres") commencent toujours par 1 ’S, et comme nous détestons résumer les pouvoirs de deux encore plus que nous ne détestons figurer les pouvoirs de deux en premier lieu, quelqu'un a inventé le CIDR (la barre oblique après une adresse IP).

194.60.38.10/24 signifie "le sous-masque en a 24, puis les autres sont des zéros", donc

■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □■□→□□□□□ avec 8 + 8 + 8 bits appartenant à "eux" et 8 bits appartenant à "nous".

Inverser l'hymne du hobo ci-dessus,

  • /31 est l'auteur-compositeur
  • /24 appartient à la classe moyenne (255.255.255.0 = ■■■■■■■■ | ■■■■■■■■ | ■■■■■■■■ | □■□□□□□□→
  • /16 est riche ■■■■■■■■ | ■■■■■■■■ | □□□□□□□→ | □■□□□□□□→
  • /8 est super riche ■■■■■■■■■ | □ □ □ □ sdic Consignations de la politique de confidentialité
  • /1 ou /0 serait l'IANA ou quelque chose.





† Utilisation bc -l; obase=10; 60 par exemple.

5
isomorphismes

Bien que ce qui précède soit correct (désolé, TL; DR), le calcul des sous-réseaux cause toujours beaucoup de problèmes à de nombreux administrateurs réseau. Il existe en fait un moyen très simple de faire un calcul de sous-réseau, vous pouvez faire la plupart de cela dans votre tête, et il y a très peu de choses à mémoriser. Pour la plupart des applications, il n'est même pas nécessaire de comprendre la représentation binaire, bien que cela soit utile pour une compréhension complète du sous-réseau. Ici, je ne parlerai que d'IPv4; IPv6 sort du cadre de cette discussion.

Rappelez-vous ceci:

Il y a trois éléments clés à retenir: tous les sous-réseaux sont basés sur deux puissances, et il y a deux nombres clés: 256 et 32. Plus d'informations à ce sujet plus tard.

Tout d'abord, regardons un tableau contenant des puissances de 2:

2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256

Calculer des puissances de 2 est facile: chaque augmentation entière de la puissance double le résultat. 1 + 1 = 2, 2 + 2 = 4, 4 + 4 = 8, 8 + 8 = 16, etc. Le nombre total d'adresses dans un sous-réseau doit toujours être une puissance de 2 .

Étant donné que chaque octet d'un sous-réseau IPv4 monte à 256, 256 est un très nombre important et constitue la base du reste des calculs.

Dimensionnement du sous-réseau

Nous commencerons par une question simple: "combien d'adresses dans un sous-réseau si le masque est 255.255.255.248?" Nous ignorerons les trois premiers octets pour l'instant et regardez le dernier. Voici comment c'est facile: soustrayez 248 de 256. 256 moins 248 est égal à 8. Il y a 8 adresses disponibles (y compris le réseau et les adresses de diffusion). L'inverse fonctionne également: "si je veux avoir un sous-réseau avec 16 adresses, quel sera le masque de sous-réseau?" 256 moins 16 est égal à 240. Le masque de sous-réseau sera 255.255.255.248.

Maintenant, si nous voulons étendre au-delà de 256 adresses (historiquement, une "classe C"), cela devient un tout petit peu plus compliqué: si notre dernier octet est 0 et notre troisième octet est, disons, 240, (255.255.240.0) alors nous faisons le calcul sur le troisième octet et constatons qu'il y aurait 16 adresses. Nous multiplions donc 16 par 256 (le nombre d'adresses dans le dernier octet) pour obtenir 4096. Si les deux derniers octets sont à 0, (ex. 255.240.0.0), alors nous prenons le résultat de la soustraction du deuxième octet (nous dirons que c'est encore 16), multiplions mais 256 (adresses dans le troisième octet), multiplions encore par 256 (adresses dans le dernier octet) pour obtenir 1 048 576 adresses. Aussi simple que ça! (OK, donc l'inverse est un peu plus difficile. Si nous voulons un sous-réseau avec 1 048 576 adresses, nous devrons diviser ce nombre par 256 plusieurs fois pour obtenir un nombre que nous pouvons soustraire de 256.)

Adresse réseau

Maintenant que nous savons comment calculer le masque de sous-réseau, comment déterminer l'adresse réseau? C'est simple: c'est toujours un multiple du nombre d'adresses de notre sous-réseau. Donc, si nous avons 16 adresses dans notre sous-réseau, les adresses réseau possibles seront 0, 16, 32, 48, 64, etc. jusqu'à 240. (Notez que 0 est un multiple valide de n'importe quel nombre, comme n'importe quel nombre multiplié par 0 est égal à 0.)

Et, bien sûr, l'adresse de diffusion sera la dernière adresse de la portée. Donc, si nous avons 16 adresses dans notre sous-réseau et que nous avons choisi une adresse réseau de 10.3.54.64, l'adresse de diffusion sera (64 + 16-1 = 79) 10.3.54.79.

Notation CIDR

Et la notation CIDR? Comment traduire cela vers et depuis un masque de sous-réseau de style IPv4?

Rappelez-vous nos pouvoirs de deux? Eh bien, nous avons maintenant un autre numéro de clé à retenir en plus de 256: 32. N'oubliez pas, la notation CIDR décrit le nombre de bits significatifs dans l'adresse IPv4, et il y a 32 bits dans une adresse IPv4, 8 pour chaque octet. Donc, si nous avons un masque de sous-réseau de 255.255.255.240, c'est 16 adresses. Si nous regardons notre tableau "puissances de 2" ci-dessus, nous voyons que 16 est deux à la quatrième puissance (2 ^ 4). Nous soustrayons donc ce numéro de puissance - 4 - de 32 et obtenons 28. Notre notation CIDR pour un masque de sous-réseau de 255.255.255.240, notre notation CIDR est/28.

Et si on nous donne un CIDR de/28, nous soustrayons ce (28) de 32 pour obtenir 4; augmenter 2 à cette (4e) puissance (2 ^ 4) pour obtenir 16; soustrayez ensuite (16) de 256 pour obtenir 240; ou 255.255.255.240.

4
Jonathan J

Je pense également qu'il devrait au moins être fait mention des NAT, car ils sont si couramment utilisés dans les réseaux modernes à la place des sous-réseaux, en raison de l'épuisement des adresses IPv4, entre autres. (De plus, lorsque j'ai découvert les sous-réseaux pour la première fois, j'étais très confus quant à la relation entre les sous-réseaux et les réseaux créés par les routeurs WiFi).

NAT (traduction d'adresse réseau) est une technique (couramment) utilisée pour créer des réseaux privés en mappant un espace d'adressage (IP: Port) à un autre. Surtout, cela est utilisé pour créer un réseau privé de plusieurs adresses IP privées derrière une adresse publique, par exemple, dans des routeurs Wifi, par des organisations (comme une université ou une entreprise), ou parfois par des FAI.

La traduction de l'adresse réelle est effectuée de manière transparente dans NAT nœuds capables, généralement des routeurs. Elle peut prendre plusieurs formes, complète Cône, adresse restreinte, port restreint, etc. ou un mélange de ceux-ci, qui dicte comment les connexions à travers le nœud peuvent être initiées.

Tous les détails peuvent être trouvés sur Wikipedia , mais considérons par exemple un routeur Wifi avec 2 appareils connectés. L'IP publique du routeur est 10.9.20.21/24 et l'IP des périphériques (IP privées) sont A: 192.168.0.2, B: 192.168.0.3 et celle du routeur est R: 192.168.0.1. Ainsi, si A veut se connecter au serveur S: 10.9.24.5/24, (qui est en fait sur un sous-réseau différent avec le routeur ici):

  1. A envoie un paquet IP à R (qui serait la passerelle par défaut) avec l'IP source _ 192.168.0.2, port src (par exemple) 14567 et IP de destination: 10.9.24.5 (Bien que le port fasse en fait partie de l'en-tête TCP).
  2. Le routeur (qui est NAT) mappe le port 14567 vers le périphérique A et change la source du paquet IP en 10.9.20.21 (qui est l'IP publique du routeur). Ceci contraste avec le sous-réseau décrit ci-dessus, où les paquets IP ne sont en fait jamais modifiés .
  3. S reçoit la série de TCP (avec src IP: 10.9.20.21, port src: 14567) et envoyer des paquets de réponse avec ces valeurs dans les champs de destination.
  4. R vérifie le port de destination, qui est 14567 et transmet le paquet à A.
  5. A reçoit le paquet de réponse.

Dans la situation ci-dessus, si B a tenté d'ouvrir une connexion sur le même port source (14567), il serait mappé sur un autre port par R (et le port du paquet sortant changé) avant d'être envoyé à S. Autrement dit, il y aurait également une traduction de port au lieu de simplement IP.

Deux choses à noter ici:

  1. En raison de cette traduction d'adresse, il n'est souvent pas possible d'établir une connexion à des appareils dans le réseau privé sans utiliser certaines techniques spéciales.
  2. La restriction sur le total des connexions TCP du même appareil à un serveur (65536 = 2 ^ 16) s'applique désormais collectivement à tous les appareils derrière le NAT, dans le NAT = formulaire utilisé ci-dessus.
2
forumulator