Les sous-réseaux sont-ils toujours des 1 contigus? [dupliquer]

25

Je comprends la prémisse 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) 1s contigus (bits HI). Par exemple, 255.255.0.0( /16) se traduit par les octets suivants:

11111111 . 11111111 . 00000000 . 00000000

Je crois que ces bits doivent être contigus, car le but du sous-réseau est de dériver l'ID d'hôte et les plages d'ID de périphérique disponibles. Mais cela me fait me demander, pourriez-vous jamais avoir un masque de sous-réseau de, disons 255.17.255.0, ou:

11111111 . 00010001 . 11111111 . 00000000
  • Cela arriverait-il jamais? Ou est-il impossible pour les sous-réseaux d'exister sans 1 contigus? Si oui, pourquoi?
  • Sinon, s'il est possible de le faire, pourquoi le feriez-vous (quelques exemples concrets)?
DirtyMikeAndTheBoys
la source
@MSalters Juste pour que vous le sachiez, le commentaire automatique a maintenant été modifié pour dire "Duplication possible de ..." afin que vous n'ayez plus besoin d'entrer manuellement le commentaire. ;-)
Chris Jester-Young
Réponse courte: oui, vous avez raison.
Octopus du

Réponses:

18

La section 3.1 de la RFC montre les masques autorisés dans le routage inter-domaine sans classe. Les bits doivent être contigus pour que le routage fonctionne correctement.

De plus, en pensant logiquement, cela n'aurait pas vraiment de sens d'avoir d'étranges masques de réseau aléatoires.

Sami Kuhmonen
la source
28

Oui, la manière la plus simple d'y penser est que les masques de sous-réseau sont toujours 1s 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é, en utilisant les normes modernes.

La RFC 1219 indique que la précédente RFC 950 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 qu'IPv6 a utilisé (à moins depuis RFC 1884 page 7 , première phrase de l' article 2.4), de sorte que les bits non contigus ont jamais été largement pris en charge pour les réseaux IPv6. RFC 1219 méthode de spécifie que « sous - réseau les bits (masque = 1) sont affectées des plus de travail de bit de poids faible vers le moins ". (La section 3.1 de la RFC 4632 , mentionnée par la réponse de Sami, pointe vers une norme officielle traitant de la notation CIDR.)

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

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

Certains équipements Cisco de qualité professionnelle prennent en charge ce que l'on appelle un «masque générique», qui inverse les bits. Un sous-réseau normal pourrait donc ê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 selon laquelle tous les zéros devaient passer en premier. Vous pouvez donc utiliser 00000000.00000000.00000000.11111110.

Cela finirait par créer un groupe contenant toutes les adresses IP paires.

Il était en fait important de le savoir, car la formation de Cisco le couvrait, et donc le processus d'examen des certifications professionnelles de Cisco pourrait poser une question à 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 des adresses impaires, vous pouvez simplement diviser un réseau en deux en utilisant des adresses peu nombreuses et des adresses élevées, en créant des sous-réseaux normaux moitié moins gros.

Les masques génériques avec des bits non contigus n'étaient pas terriblement utiles et pouvaient être plus difficiles à travailler. Le point du bit de masque de sous-réseau défini sur 1 est de dire que ce bit aide à identifier le sous-réseau dans lequel se trouve un périphérique. . Le résultat était que le support de ces types de masques était une complexité supplémentaire sans beaucoup d'avantages substantiels.

Je suppose que Cisco a finalement convenu qu'il n'y avait aucun intérêt à de tels masques de sous-réseau non traditionnels, car ils ont finalement abandonné la prise en charge des «masques génériques». Les anciens pare-feu Pix prennent en charge les «masques génériques», mais les nouvelles unités ASA utilisent des «masques de sous-réseau» à la place .

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 beaucoup de logiciels suivraient les nouvelles tendances / normes et rejetteraient une telle conception de réseau. Même si j'utilisais des logiciels plus anciens, je souhaiterais probablement que mon réseau puisse être facilement modifié pour pouvoir utiliser des logiciels plus récents sans avoir à reconcevoir le réseau. Ainsi, les «bits de sous-réseau» contigus sont la seule solution.

Si on vous pose la question sur un test, je serais confiant de dire 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.

TOOGAM
la source
+1 - La seule fois où j'ai vu des masques génériques utilisés sans tous les 1 à la fin sont des masques mal entrés.
Mark Henderson
2

RFC 950 dit dans le 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 concernait donc une opération de bits simple qui ne se soucie pas des bits contigus.

En 1985, le processeur et la mémoire étaient beaucoup plus limités, de sorte que toute opération plus complexe ne cadrait tout simplement pas dans le temps.

Cela devient encore plus explicite dans le 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 obsolètes. Sur Windows 7 SP1 par exemple, il n'est pas possible de définir un tel masque de sous-réseau:

Masque de sous-réseau contigu requis sur Windows 7

Même sur Windows XP SP2, cela n'était plus possible:

Masque de sous-réseau Windows XP SP2

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

Masque de sous-réseau ReactOS

Thomas Weller
la source
1

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

La section 3.1 de la RFC montre les masques autorisés dans le routage inter-domaine sans classe. Les bits doivent être contigus pour que le routage fonctionne correctement. De plus, en pensant logiquement, cela n'aurait pas vraiment de sens d'avoir d'étranges masques de réseau aléatoires.

Cependant, même s'il n'est pas souhaité ou autorisé, il est toujours possible de définir un masque de sous-réseau de 1 non consécutifs. La raison derrière cela: 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 n'est pas pertinent.

J'ai testé 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 LAN sans routeur, donc je ne peux pas parler du comportement du routeur (normalement, vous ne pouvez définir le masque du routeur que dans son interface Web, ce qui le rejettera).
Vous ne pouvez pas non plus saisir 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. Redémarrez ensuite ou désactivez + activez la carte réseau pour que les modifications deviennent actives.
Le but de tout cela: euh, probablement aucun.

Tobias Knauss
la source
Merci pour le partage, mais cela ne constitue pas une réponse autonome. Ce devrait être un commentaire sur la réponse de Sami Kuhmonen.
agtoever
2
Trop long pour un commentaire ... Je ne m'attends pas non plus à ce qu'il soit marqué comme réponse.
Tobias Knauss
@agtoever: Après avoir modifié et ajouté plus de détails, je pense que cela peut être considéré comme une réponse autonome maintenant, car il contient beaucoup d'informations qui ne font pas partie d'autres réponses.
Tobias Knauss
"Fonctionne sur une seule implémentation" n'est cependant pas une bonne réponse. Et ce n'est pas seulement "fonctionne sur un seul système d'exploitation", non, vous avez apparemment testé un PC particulier avec (surtout) un réseau. Cela signifie que vous n'avez pas vérifié si le code de routage de sous-réseau dans Windows 2000 fonctionne réellement, et c'est précisément là que les ID réseau sont nécessaires. Pourriez-vous router entre deux 255.160.0.0réseaux non adjacents ?
MSalters
@MSalters Fonctionne sur une implémentation signifie toujours que cela fonctionne. Je n'ai pas prétendu parler de tous les OS possibles de configurations. De plus, que pensez-vous de la façon dont les paquets passent d'un PC à un autre? L'ordinateur doit connaître l'itinéraire. Par conséquent, il doit calculer si l'ordinateur cible se trouve dans le même sous-réseau (envoyer le paquet directement) ou éloigné (interroger la passerelle configurée pour un itinéraire). // Non, je ne pense pas que je pourrais faire un tel routage, car ces masques de sous-réseau n'étaient pas destinés à être utilisés. J'ai démontré un cas où cela fonctionnait, mais sans sous-réseau différent. Peut-être que ça marche aussi, qui sait ...
Tobias Knauss