Je sais que si j'ai un réseau, 83.23.159.0/24
j'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:
- La destination d'un paquet IP est-elle déjà définie sur l'adresse IP du sous-réseau?
- Si oui, dans quels cas et pourquoi?
- Si non, alors pourquoi ne pas libérer cette adresse pour tout hôte à utiliser?
ifconfig
ne 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.Réponses:
Oui. Il s'agit d'une adresse IP valide, elle peut donc être utilisée.
C'est simplement l'un des 255 IP utilisables dans un / 24
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.
[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:
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):
la source
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
.1
répond aux pings de.0
. (Le masque de réseau est255.255.255.0
, donc le dernier octet correspond au numéro d'hôte.)Si j'attribuais l'
.0
adresse à 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 routeurping
traitent0
comme 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.Y
est 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écifique127.0.0.1
) qui a continué à fonctionner normalement, tout était cool.la source
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
la source
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
Adresses IP hôtes utilisables sur un sous-réseau
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.
la source
La RFC 1122 ("Exigences pour les hôtes Internet - Couches de communication") l'interdit:
la source
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.
la source
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:
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:
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":
É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:
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.
la source