Pourquoi tous les zéros de la partie hôte de l'adresse IP ne peuvent-ils pas être utilisés pour un hôte?

21

Je sais que si j'ai un réseau, 83.23.159.0/24j'ai 254 adresses IP hôtes utilisables car:

83.23.159.0      (in binary: host portion all zeros) is the subnet address
83.23.159.1-254  are host addresses
83.23.159.255    (in binary: host portion all ones) is the broadcast address

Je comprends l'utilisation d'une adresse de diffusion, mais je ne comprends pas à quoi sert l'adresse de sous-réseau. Je ne vois aucune raison pour laquelle l'adresse de destination d'un paquet IP serait définie sur l'adresse de sous-réseau, alors pourquoi le sous-réseau lui-même a-t-il besoin d'une adresse s'il ne sera jamais le point de terminaison pour un flux IP? Pour moi, il semble inutile de ne pas autoriser cette adresse à être utilisée comme adresse d'hôte.

Pour résumer, mes questions sont:

  1. La destination d'un paquet IP est-elle déjà définie sur l'adresse IP du sous-réseau?
  2. Si oui, dans quels cas et pourquoi?
  3. Si non, alors pourquoi ne pas libérer cette adresse pour tout hôte à utiliser?
Grezzo
la source
2
ifconfigne se plaint pas lorsque vous définissez l'adresse d'hôte d'un réseau 24 sur 0 ou 255. Essayez simplement de l'utiliser.
ott--
2
J'ai fait. Il semble fonctionner pour un .0. Mais cela pourrait casser des logiciels plus anciens. .255 fonctionnera également si vous n'utilisez aucun protocole nécessitant une diffusion. Je suppose que vous pouvez le configurer si vous configurez manuellement les tables ARP avec des adresses permanentes sur tous les ordinateurs, mais yuk!
Hennes
doublon possible de Comment fonctionne le sous-réseau IPv4?
John Gardeniers
1
Je ne suis pas d'accord avec ce John. Je l'ai revérifié et il ne répond pas à la question spécifique posée. Ce qui est plutôt un cas de bord.
Hennes
1
Cette question est désormais également posée sur ou sur un nouveau site d'ingénierie réseau. Ces réponses (à http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) contiennent des informations qui ne figurent pas encore dans les messages de Server Fault . .
Hennes

Réponses:

12

La destination d'un paquet IP est-elle déjà définie sur l'adresse IP du sous-réseau?

Oui. Il s'agit d'une adresse IP valide, elle peut donc être utilisée.

Si oui, dans quels cas et pourquoi?

C'est simplement l'un des 255 IP utilisables dans un / 24

Si non, alors pourquoi ne pas libérer cette adresse pour tout hôte à utiliser?

Si vous avez un matériel ancien , vous devez vérifier s'il utilise la première ou la dernière adresse comme adresse réseau. (.0 ou .255 pour les réseaux avec masque FF.FF.FF.00)

Cela en fait une bonne habitude de sauter cette IP. Et les habitudes apprises depuis longtemps sont difficiles à ignorer.

Et les gens qui ne connaissent pas l'arrière-plan ne l'utilisent pas «parce que d'autres ne l'utilisent pas non plus, donc ça doit être faux de l'utiliser» ou parce qu'ils ne réalisent pas que «0» peut être un premier nombre.

[Modifier] Grezzo vient de le tester sur Windows XP où l'interface graphique du réseau Windows a «utilement» empêché ce paramètre. Windows 7 a le même comportement. Je l'ai ensuite essayé sur un hôte non Windows où cela fonctionne. Si vous utilisez Windows, vous devrez peut-être configurer votre réseau manuellement via IPconfig pour le définir sur tous les zéros.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[Modifier 2]

Plus je travaille avec cela, plus je suis confus.

Rfc4632 - Le routage inter-domaine sans classe ne semble pas l'interdire mais ne le permet pas explicitement.

Ce message de ServerFault mentionne: "Pour des raisons historiques, de nombreux systèmes d'exploitation traitent la première adresse comme une diffusion. Par exemple, envoyer une requête ping à xxx0 à partir d'OS X, Linux et Solaris sur mon réseau local (/ 24) obtient des réponses. Windows ne vous laisse pas cingler la première adresse par défaut, mais vous pourrez peut-être l'activer à l'aide de la méthode WMI SetIPUseZeroBroadcast. Je me demande si vous pourriez vous permettre d'utiliser .0 comme adresse d'hôte sur un réseau tout Windows. " .

C'est la même question, mais pas une réponse.

L'adresse réseau est également utilisée dans les tables de routage. Mais je ne vois pas pourquoi cela ne fonctionnerait pas à cause de cela. La même notation dans les tables de routage serait acheminée vers le bon réseau. Une fois sur le bon réseau, il arriverait à un PC avec IP 0.

(Tout cela pour un 192.168.1 / 24.
Si vous avez utilisé 192.168.0 / 23, alors 192.168.1.0 serait une valeur valide et sûre au milieu de la plage)

[Modifier 3]

Un lien de plus vers la même question. Il semble quelque peu populaire sur l'échange de pile:

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

Et une pensée:

Destination_IP est probablement ET édité avec le mât réseau (une opération rapide dans le matériel) avant d'être comparé aux entrées dans les tables de routage. Mais:

(Une adresse IP semi-aléatoire) 192.168.0.42 ET 255.255.255.0 donnerait 192.168.0.0
Mais 192.168.0.0 ET 255.255.255.0 donnerait également 192.168.0.0


[Edit 4 - Longtemps après que cette réponse a été écrite - je pourrais avoir besoin de réécrire le message entier en raison de ces nouvelles informations ]

La RFC923 déclare à la page 3 que:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Citant @ylearn sur notre site d' ingénierie réseau

Je crois que la première documentation à ce sujet provient de RFC950 qui fait référence à RFC943 (qui obsolète RFC923 ci-dessus mais utilise le même langage pour les adresses spéciales):

     It is useful to preserve and extend the interpretation of these
     special addresses in subnetted networks.  This means the values
     of all zeros and all ones in the subnet field should not be
     assigned to actual (physical) subnets.
Hennes
la source
Donc, pour clarifier, dites-vous que xxx0 / 24 est une adresse IP valide pour un hôte? Si tel est le cas, pourquoi (lorsque j'essaie de définir mon adresse IP sur 192.168.1.0 avec un masque de réseau de 255.255.255.0) Windows XP dit-il que " la combinaison de l'adresse IP et du masque de sous-réseau n'est pas valide. Tous les bits de la la partie d'adresse hôte de l'adresse IP est définie sur 0. Veuillez entrer une combinaison valide d'adresse IP et de masque de sous-réseau. "
Grezzo
3
Windows a tort. (Ou dit avec moins de force: Windows est trop prudent pour travailler avec n'importe quelle combinaison de systèmes). Je viens d'essayer cela sur mon système Windows 7 et j'ai eu la même erreur que vous. J'ai installé un système FreeBSD propre et l'ai testé là où cela fonctionne. (J'ajouterai cela au post)
Hennes
Merci, vous avez été vraiment utile. Je voulais juste ajouter que l'interface graphique sous OS X ne vous laisserait pas le faire non plus, mais je parie que ifconfig le ferait. Je ne comprends pas pourquoi la réponse de m0ntassar a obtenu plus de votes - elle n'essaie même pas de répondre à ma question. Encore une chose; lorsque vous dites " Si vous avez un matériel ancien, vous devez vérifier s'il utilise la première ou la dernière adresse comme adresse réseau. " voulez-vous dire adresse de diffusion .
Grezzo
Oui, je voulais dire l'adresse de diffusion. Merde, où est ce bouton "modifier le commentaire de plus de 5 minutes".
Hennes
Doux, j'ai juste essayé de cingler .0 et .255, les deux fois, ma PS3 a répondu (tout le reste est sans fil, donc je suppose que c'est la raison pour laquelle il est entré en premier) à partir de .65, ce qui confirme que sur mon réseau, les deux sont utilisés pour la diffusion, ce qui est pourquoi (normalement) nous ne devrions pas utiliser non plus pour une véritable adresse d'hôte.
Grezzo
15

Une adresse avec une partie hôte entièrement nulle fait référence au réseau lui-même, plutôt qu'à un hôte particulier.

Historiquement, cette adresse d'hôte zéro a servi d'adresse de diffusion alternative et les appareils répondent toujours de cette façon.

Je dois donc être en désaccord avec d'autres réponses: non, zéro n'est pas une adresse d'hôte parfaitement utilisable. Si vous avez besoin de plus de 254 adresses, vous devez créer un plus grand sous-réseau.

Regardez, mon routeur Linksys, dont l'adresse est .1répond aux pings de .0. (Le masque de réseau est 255.255.255.0, donc le dernier octet correspond au numéro d'hôte.)

webserver:~# ping  192.168.1.0
Do you want to ping broadcast? Then -b
webserver:~# ping -b 192.168.1.0
WARNING: pinging broadcast address
PING 192.168.1.0 (192.168.1.0) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.46 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.812 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.819 ms

Si j'attribuais l' .0adresse à un hôte, je ne serais pas en mesure de le cingler sans que le routeur n'intervienne également avec ses réponses. Et comme vous pouvez le voir, certains outils comme la version de ce routeur pingtraitent 0comme une diffusion.

Vous pouvez contourner les règles, si vous êtes prêt à patcher toutes les piles de protocoles et autres logiciels affectés par un tel pliage. Sinon, respectez les règles.

Affaire au point.

J'ai travaillé dans une entreprise qui a conçu un nœud de réseau intégré dans un châssis à 14 emplacements, exécutant de nombreuses images de système d'exploitation indépendantes sur plusieurs types de cartes, toutes communiquant via un fond de panier. Il y avait une configuration réseau sur le fond de panier avec une convention qui 127.X.0.Yest l'adresse IP interne du nœud Y dans l'emplacement X, toutes numérotées de 1.

Nous avons essentiellement sous-résidé l'adresse de bouclage à nos propres fins. Pour le faire fonctionner, nous avons dû patcher le noyau Linux ici et là, et IIRC, un peu d'espace utilisateur.

Étant donné que ce réseau n'était utilisé que dans la boîte et que la plupart des programmes nécessitant un bouclage utilisent le 127.0.*réseau (et en fait l'adresse spécifique 127.0.0.1) qui a continué à fonctionner normalement, tout était cool.

Kaz
la source
7

en fait, cela dépend du masque de réseau, par exemple, pour le réseau 83.23.159.0/23, 83.23.159.0 est une adresse IP parfaitement utilisable

m0ntassar
la source
3
+1 - 83.23.158.255 serait également une adresse d'hôte valide. Les gens se sont accrochés à la règle du non 0 et du 255 sans tenir compte du masque de sous-réseau.
joeqwerty
1
Je sais qu'une adresse xxx0 est valide avec un masque de réseau inférieur à / 24, mais notez que dans ma question, j'ai spécifié un masque de réseau / 24, vous n'avez donc pas répondu à ma question. Je ne parlais pas de tous les 0 ou 255 dans le dernier quartet / octet, j'ai dit tous les 0 ou 255 dans la "partie hôte" de l'adresse IP. Cela prend en compte le masque de réseau.
Grezzo
2
@Grezzo réponse courte: les éléments non-CIDR et hérités rompent avec .0, MS l'interdit complètement. Mais IPv6 est imminent, alors pourquoi s'inquiéter? ;)
Sammitch
2
Ce n'est pas vraiment une réponse car la question ne concerne pas vraiment la numérologie de la notation par points mais le statut / la signification d'une adresse d'hôte 0 dans n'importe quel sous-réseau de largeur.
Kaz
2
Je ne vois pas pourquoi cette réponse a autant de votes positifs. 83.23.159.0/23 n'est pas "techniquement" un réseau valide. 83.23.159.0 avec un masque 23 est en fait une adresse IP en plein milieu du réseau 83.23.158.0/23. La question n'était pas "pourquoi ne puis-je pas avoir .0 à la fin de l'ip", c'était "pourquoi ne puis-je pas utiliser l'adresse avec la partie hôte tous les zéros". Dans votre exemple, l'adresse "tous les zéros de l'hôte" serait 83.23.158.0. Comme mentionné dans d'autres réponses, il s'agit historiquement d'une adresse inutilisable (l '"adresse réseau") et bien qu'elle puisse fonctionner sur certains systèmes d'exploitation, il n'est pas conseillé d'essayer de l'utiliser.
USD Matt
3

On dirait qu'il y a un peu de confusion ici avec les réseaux de base.

Le `` matériel ancien '' mentionné dans l'une des réponses n'utiliserait pas IP Subnet Zero - l'utilisation de l'adresse IP xxx0 avec un réseau configuré pour un masque de sous-réseau / 24 CIDR ou 255.255.255.0 est un problème complètement différent.

IP Subnet Zero

  • Le matériel plus ancien n'utilisait pas IP Subnet Zero - ce qui signifie qu'ils n'utilisaient pas le premier sous-réseau sur un système réseau multi-sous-réseau. Ainsi, sur un réseau / 23 ou 255.255.254.0, le sous-réseau XXX0 et toutes ses adresses ne seront pas utilisés. Les routeurs modernes n'ont pas cette restriction mais peuvent être configurés pour utiliser cet ancien modèle IE pour ne pas utiliser le sous-réseau zéro, si vous le souhaitez.

Adresses IP hôtes utilisables sur un sous-réseau

  • Réseautage de base:
    • Avec / 24 ie masque de sous-réseau de 255.255.255.0
    • xxx0 est réservé comme adresse réseau. Les routeurs et les protocoles de routage (EIGRP, RIP2, etc.) utilisent l'adresse réseau pour définir des segments de réseau pour déplacer des paquets à l'intérieur et à travers les limites du réseau du réseau.
    • xxx255 est réservé pour l'adresse de diffusion
    • Il est courant d'utiliser les adresses .1 ou .254 sur les routeurs, ce qui laisse 253 numéros IP utilisables.

L'adresse réseau et l'adresse de diffusion sont réservées et ne peuvent pas (selon les normes de réseau actuelles et antérieures) être attribuées à un périphérique. L'utilisation de xxx0 pour une adresse d'hôte sur un système / 24 est incorrecte. Même si Linux vous permet de l'utiliser, cela ne signifie pas qu'il est juste, cela signifie simplement que Linux pense que vous savez ce que vous faites.

Si votre système vous permet d'affecter xxx0 en tant qu'adresse IP4 à un hôte et que cela semble fonctionner - il est probable que cet hôte particulier reçoive TOUT le trafic ciblé vers N'IMPORTE QUEL périphérique sur ce réseau, de sorte que son réseau ne fonctionne probablement pas de manière optimale.

TheSteven
la source
1
Vous avez dit que " xxx0 est réservé en tant qu'adresse réseau (pensez-y comme une adresse globale ou un pointeur vers l'ensemble du sous-réseau) ", mais vous n'avez pas expliqué à quoi il sert réellement, et donc pas expliqué pourquoi il ne peut pas être utilisé pour un hôte
Grezzo
2
Mis à jour mon message. L'essentiel est que l'attribution de l'adresse réseau à un appareil est contre les spécifications et bien que vous puissiez vous en sortir avec un petit réseau de stub, vous courez toujours le risque que si votre routeur reçoive une mise à jour logicielle (ou si vous changez de routeur ) que l'appareil ou l'ensemble de votre réseau peut cesser de fonctionner correctement.
TheSteven
3

La RFC 1122 ("Exigences pour les hôtes Internet - Couches de communication") l'interdit:

Les adresses IP ne doivent pas avoir la valeur 0 ou -1 pour les champs <numéro d'hôte>, <numéro de réseau> ou <numéro de sous-réseau>

Bryan
la source
1
Vrai dans la mesure où il va. Mais si vous allez réellement à la section 3.3.6 comme il vous le conseille, vous obtiendrez l'explication complète.
Michael Hampton
@MichaelHampton Parce que BSD 4.2 utilise 0 comme diffusion?
Grezzo
3
@Grezzo À peu près. Vous êtes coincé avec ça parce que les années 80 ne mourront pas.
Michael Hampton
0

En fait, la réponse est la base du sous-réseau. L'adresse IP «tous zéros» de votre sous-réseau combinée à l'ID réseau est utilisée pour calculer où le paquet doit être envoyé.

Dans votre exemple, vous avez un sous-réseau de 255.255.255.0. Tout périphérique connaissant le protocole TCP / IP utilisera le masque de réseau combiné à l'adresse IP pour calculer si le paquet est destiné au réseau local (en effectuant une opération logique ET) ou s'il doit être envoyé via la passerelle / routeur.

Donc, je suppose que la raison pour laquelle IP ne peut pas être utilisé est qu'il est déjà utilisé pour "définir" les limites du réseau avec le masque de réseau par conception.

Goez
la source
Vous dites que " Tout périphérique connaissant le protocole TCP / IP utilisera le masque de réseau combiné avec l'adresse IP pour calculer si le paquet est destiné au réseau local (en effectuant une opération ET logique) ", mais ANDing 83.23.159.0 avec 255.255 .255.0 et AND 83.23.159.1 avec 255.255.255.0 produisent le même résultat (83.23.159.0), donc utiliser ce calcul pour déterminer s'il est destiné au réseau ou au routeur fonctionne toujours même lorsqu'un hôte a l'adresse .0
Grezzo
0

Il m'a été demandé de republier ma réponse de NetworkEngineering , je vais donc le faire avec quelques modifications pour ce site.

Dans RFC919 , il fait référence à l'acceptation générale de l'adresse réseau:

However, as a notational convention, we refer to
networks (as opposed to hosts) by using addresses with zero fields.
For example, 36.0.0.0 means "network number 36"

Cela fournit une convention qui devrait clarifier notre compréhension si quelqu'un devait mentionner «10.1.2.0» comme réseau et non comme hôte sur le réseau.

À partir de là, l'utilisation de "0" dans une adresse IP a été définie dans la RFC923 et reportée dans les RFC successives:

Special Addresses:

  In certain contexts, it is useful to have fixed addresses with
  functional significance rather than as identifiers of specific
  hosts.  When such usage is called for, the address zero is to be
  interpreted as meaning "this", as in "this network".  The address
  of all ones are to be interpreted as meaning "all", as in "all
  hosts".  For example, the address 128.9.255.255 could be
  interpreted as meaning all hosts on the network 128.9.  Or, the
  address 0.0.0.37 could be interpreted as meaning host 37 on this
  network.

Cet exemple fournit un hôte spécifique sur le réseau actuel (0.0.0.37) en utilisant des 0 dans les parties réseau de l'adresse, mais il ne clarifie pas réellement le cas contraire (0 dans la partie hôte de l'adresse). Cependant, comme il a défini "0" comme "ceci".

Dans la RFC1060, l'adresse "0.0.0.0" était clairement documentée comme "cet hôte sur ce réseau":

     (a)   {0, 0}

        This host on this network.  Can only be used as a source
        address (see note later).

Étant donné que tous les zéros de la partie hôte de l'adresse signifient «cet hôte», il s'ensuit logiquement qu'elle est inutilisable en tant qu'adresse hôte.

Revenir à répondre directement à vos questions:

  1. La destination d'un paquet IP est-elle déjà définie sur l'adresse IP du sous-réseau?
  2. Si oui, dans quels cas et pourquoi?
  3. Si non, alors pourquoi ne pas libérer cette adresse pour tout hôte à utiliser?

Selon ce que je trouve dans les RFC, cela ne devrait pas être utilisé. J'admets que ce n'est pas aussi clairement spécifié que je le souhaiterais, mais c'est tout à fait commun dans de nombreuses normes. Lorsque les normes sont un peu moins fermes sur un point, l'industrie semble alors «s'installer» dans une interprétation généralement acceptée.

En outre, sur la base du contenu du logiciel RFC, il peut être écrit pour supposer que cette adresse est utilisée pour adresser le réseau et non un hôte particulier. Ou encore plus littéralement comme une sorte de "bouclage" (c'est-à-dire cet hôte sur le réseau spécifié).

Alors, pourquoi certains systèmes d'exploitation autorisent-ils clairement son utilisation? J'imagine comme beaucoup de choses que cela se résume au temps / ressources du développeur ou personne n'a vraiment pensé à ajouter la vérification de validité. La logique doit être un peu plus impliquée que "si elle se termine par 0" car un sous-réseau plus grand (a / 23 ou plus) contiendra une adresse IP valide de .255 et .0 (c'est-à-dire que 10.1.2.0/23 contient les deux IP valides adresse des 10.1.2.255 et 10.1.3.0). Bien que certaines organisations évitent également l'utilisation de ces adresses valides dans des sous-réseaux plus grands pour éviter tout problème étrange avec un logiciel qui ne prend pas correctement en charge les sous-réseaux modernes.

Quant à savoir pourquoi ne pas libérer cette adresse IP, cela se résume simplement au coût / avantage. Cela prendrait beaucoup de temps et d'efforts pour effectuer cette modification pour récupérer une adresse IP par sous-réseau et dans combien de cas où vous avez besoin d'adresses IP supplémentaires, une seule adresse suffira-t-elle? Il est beaucoup plus facile d'ajouter un deuxième sous-réseau ou d'agrandir le sous-réseau actuel, vous donnant potentiellement de nombreuses adresses à utiliser au lieu d'une seule, sans apporter de modifications majeures à aucun logiciel / matériel en place.

YLearn
la source