web-dev-qa-db-fra.com

Les sous-réseaux sont-ils toujours contigus?

Je comprends le principe de base derrière les masques de sous-réseau, tels que 255.255.255.0. Mais tous les exemples de sous-réseau que j'ai vus étaient (de gauche à droite) des 1 contigus (bits HI). Par exemple, 255.255.0.0 (/16) se traduit par les octets suivants:

11111111 . 11111111 . 00000000 . 00000000

Je pense que ces bits doivent être contigus, car le point entier de Le sous-réseau consiste à dériver l'ID d'hôte et les plages d'ID de périphériques disponibles. Mais je me demande si vous pourriez avoir un masque de sous-réseau de, disons, 255.17.255.0, ou:

11111111 . 00010001 . 11111111 . 00000000
  • Cela arriverait-il? Ou est-il impossible pour des sous-réseaux d'exister sans des 1 contigus? Si oui, pourquoi?
  • Sinon, s'il est possible de le faire, pourquoi voudriez-vous (quelques exemples concrets)?
25
DirtyMikeAndTheBoys

La section 3.1 du RFC montre les masques autorisés dans le routage interdomaine sans classe. Les bits doivent être contigus pour que le routage fonctionne correctement.

De même, en pensant logiquement, il n’aurait pas vraiment de sens d’avoir d’étranges masques de réseau aléatoires.

18
Sami Kuhmonen

Oui, le moyen le plus simple d’y penser est que les masques de sous-réseau sont toujours des 1 au début. Si un indicateur de taille de sous-réseau n'a pas de 1 au début de la représentation binaire, alors je dirais que l'indicateur de taille de sous-réseau n'est pas un "masque de sous-réseau" approprié, à l'aide des normes modernes.

RFC 1219 indique que la RFC 950 précédente autorise les bits non contigus. En fait, RFC 950 page 15 (section 3) a clairement un exemple qui "illustre des bits de sous-réseau non contigus". Cependant, il n'y a aucun moyen de convertir ces sous-réseaux en notation CIDR. La notation de style CIDR est ce que IPv6 a utilisé (au moins depuis RFC 1884 page 7 , première phrase de la section 2.4), les bits non contigus n’ont jamais été largement pris en charge pour les réseaux IPv6. La méthode RFC 1219 indique que "les bits de sous-réseau ( masque = 1) sont affectés du bit le plus significatif au moins ". (La RFC 4632, section 3.1 , mentionnée par Sami dans sa réponse, indique une norme officielle traitant de la notation CIDR.)

RFC 1878 page 2 montre la notation standard "masque de sous-réseau" pour tous les sous-réseaux IPv4 à l'exception de /0.

Cependant, je vais développer un peu la réponse de Sami, en cherchant le "pourquoi" (avec un exemple concret, comme l’a demandé la question) ...

Certains équipements Cisco de niveau professionnel prennent en charge ce qu’on appelle un "masque générique", qui inverse les bits. Ainsi, un sous-réseau normal pourrait être représenté par quelque chose appelé 00000000.00000000.00000000.11111111.

Avec les masques génériques de Cisco, il n’y avait pas de règle voulant que tous les zéros soient placés en premier. Donc, vous pouvez utiliser 00000000.00000000.00000000.11111110.

Cela créerait un groupe contenant toutes les adresses IP paires.

C’était en fait important de le savoir, car la formation de Cisco le couvrait et le processus d’examen des certifications professionnelles de Cisco pourrait donc poser des questions à ce sujet.

Cependant, je pense que c'était surtout inutile. Au lieu de diviser un réseau en deux en utilisant des adresses paires ou impaires, vous pouvez simplement diviser un réseau en deux en utilisant des adresses en bas et des adresses en haut, en créant des sous-réseaux normaux deux fois plus petits.

Les masques génériques avec des bits non contigus ne sont pas très utiles et peuvent être plus difficiles à utiliser. Le bit de masque de sous-réseau mis à 1 indique que ce bit permet d'identifier le sous-réseau dans lequel se trouve un périphérique. Il n'y a aucune raison impérieuse de répartir ces bits dans l'adresse au lieu de simplement les regrouper au début de l'adresse. . Le résultat était que la prise en charge de ces types de masques était une complexité supplémentaire sans avantage substantiel.

J'imagine que Cisco a fini par reconnaître qu'il était inutile d'utiliser de tels masques de sous-réseau non traditionnels, car ils ont finalement abandonné la prise en charge des "masques génériques". .

Je n'essaierais même pas de créer un réseau avec des "bits de sous-réseau" non contigus dans le masque, car de nombreux logiciels suivraient les nouvelles tendances/normes et rejeteraient une telle conception de réseau. Même si j'utilisais un logiciel plus ancien, je souhaiterais probablement que mon réseau puisse être facilement modifié pour pouvoir utiliser un logiciel plus récent sans avoir besoin de le reconfigurer. Ainsi, les "bits de sous-réseau" contigus sont la seule solution.

Si on vous pose la question sur un test, je dirais que tous les 1 doivent être au début de l'adresse. C’est ce que tout testeur sensé voudrait que la majorité des étudiants apprennent de nos jours.

28
TOOGAM

Le RFC 950 dit au chapitre 2.2:

 To support subnets, it is necessary to store one more 32-bit
  quantity, called my_ip_mask.  This is a bit-mask with bits set in
  the fields corresponding to the IP network number, and additional
  bits set corresponding to the subnet number field.

 The code then becomes:

   IF bitwise_and(dg.ip_dest, my_ip_mask)
                               = bitwise_and(my_ip_addr, my_ip_mask)
         THEN
             send_dg_locally(dg, dg.ip_dest)
         ELSE
             send_dg_locally(dg,
                    gateway_to(bitwise_and(dg.ip_dest, my_ip_mask)))

la proposition portait donc sur une opération de bit simple qui ne se souciait pas des bits contigus.

En 1985, le nombre de processeurs et de mémoires étant beaucoup plus limité, toute opération plus complexe ne cadrait tout simplement pas avec le temps.

Cela devient encore plus explicite au chapitre 3:

et que sur le réseau, un champ de sous-réseau à 3 bits est utilisé (01011000), c'est-à-dire que le masque d'adresse est 255.255.255.88.

Cependant, ces RFC semblent être obsolètes. Sur Windows 7 SP1 par exemple, il n'est pas possible de définir un tel masque de sous-réseau:

Contiguous subnet mask required on Windows 7

Même sous Windows XP SP2, cela n’était plus possible:

Subnet mask Windows XP SP2

Le clone Windows 98 ReactOS permet toutefois de définir le masque de réseau "étrange":

ReactOS subnet mask

2
Thomas Weller

Je suis d'accord avec la réponse de @Sami Kuhmonen:

La section 3.1 du RFC montre les masques autorisés dans le routage interdomaine sans classe. Les bits doivent être contigus pour que le routage fonctionne correctement. De même, en pensant logiquement, il n’aurait pas vraiment de sens d’avoir d’étranges masques de réseau aléatoires.

Cependant, même si cela n'est pas souhaité ou autorisé, il est toujours possible de définir un masque de sous-réseau de 1 non consécutif. La raison derrière ceci:
L'ID réseau et l'ID hôte sont calculés à partir de l'adresse IP et du masque de sous-réseau à l'aide des opérations binaires AND et XOR. Tout le reste est hors de propos.

J'ai testé cela il y a des années sur Win 2000, cela fonctionne. Les deux ordinateurs avaient un masque 255.160.0.0. Ils étaient dans un réseau local sans routeur, je ne peux donc pas parler du comportement du routeur (normalement, vous ne pouvez définir le masque du routeur que dans son interface Web, qui le rejettera).
Vous ne pouvez pas non plus entrer un tel masque de sous-réseau "non valide" dans le champ correspondant des paramètres réseau; l'interface graphique refuse de le prendre. Mais vous pouvez tricher en le modifiant directement dans le registre. Ensuite, redémarrez ou désactivez + activez le NIC pour que les modifications deviennent actives.
Le but de tout cela: euh, probablement aucun.

1
Tobias Knauss