Je comprends comment les masques de sous-réseau sont utilisés pour diviser un réseau en sous-réseaux, mais pourquoi chaque ordinateur du réseau doit-il connaître le masque de sous-réseau et pas uniquement le routeur?
Je pourrais le comprendre, si chaque ordinateur était physiquement connecté l’un à l’autre avec un fil, mais tous les paquets doivent quand même passer par le routeur.
Disons que j'ai un ordinateur sur un réseau 192.168.0.0/255.255.255.0
, qui a l'IP 192.168.0.1
.
Si cet ordinateur tente de joindre un ordinateur en dehors du sous-réseau, disons 192.168.1.1
, il transmet le message au routeur, le routeur identifie alors que l'adresse IP se situe en dehors de la plage IP du sous-réseau et ne le transmet pas sur le sous-réseau. -network, il le transmet au réseau auquel il est connecté (peut-être un autre routeur).
Vos hypothèses de départ ne sont pas tout à fait correctes. Ce que vous appelez un "routeur", c'est deux périphériques en un - un routeur à deux ports connecté en interne à un commutateur Ethernet à plusieurs ports Ethernet . (Voici un exemple diagramme .)
Cela signifie que les ordinateurs sont directement connectés à la couche 2 et peuvent se transmettre des paquets sans / via le cœur du routeur - ils sont simplement relayés entre les ports par la puce du commutateur. (Le routeur a son propre "port" dans le commutateur.)
Donc, si vous regardez les paquets en utilisant Wireshark, vous verrez qu'ils utilisent directement les adresses MAC les uns des autres, tandis que les paquets "extérieurs" ont toujours le MAC du routeur comme destination.
(Je suppose que vous parlez des «routeurs sans fil» typiques de la plupart des foyers, qui sont la cause habituelle de ce type de question. Un réseau plus grand aurait un routeur séparé avec un port par sous-réseau et quelques commutateurs distincts (éventuellement un maître plus un par étage/pièce) et plusieurs dizaines d’ordinateurs connectés à ces commutateurs.)
C'est à peu près la même chose avec les réseaux Wi-Fi, sauf que "commutateur" est remplacé par "pont sans fil", également appelé "point d'accès". Dans les deux cas, les ordinateurs connectés peuvent s’envoyer des paquets directement au niveau 2, sans via le routeur.
Commentaires:
Quand j'ai dit routeur, je voulais en fait dire switch. Mon erreur. Je tiens à souligner que chaque ordinateur d’un sous-réseau n’est pas connecté entre eux, mais plutôt à un commutateur, qui peut alors transmettre des paquets à la bonne destination. Une trame ethernet ne contient pas le masque de sous-réseau, car le commutateur dispose déjà de ces informations et n'a donc pas besoin de cette information pour effectuer la commutation correcte.
C'est encore incorrect. Les commutateurs n'ont pas cette connaissance; leur cœur de commutation fonctionne au niveau 2 et ne sait pas rien à propos de l'IP - il transmet des trames Ethernet uniquement sur la base du champ "adresse MAC de destination".
Par conséquent, les hôtes ont besoin du masque de sous-réseau pour déterminer quelle adresse MAC utiliser comme destination:
Si l'homologue se trouve dans le même sous-réseau, il est supposé être on-link par définition - de sorte que la trame Ethernet aura le MAC de l'homologue comme destination.
Pour les homologues en dehors du sous-réseau, la trame Ethernet aura comme destination la passerelle de la passerelle MAC.
(Ceci s'applique à la configuration par défaut. Certains réseaux spéciaux flocon de neige modifient cela - par exemple, la plupart des systèmes d'exploitation autorisent l'ajout d'itinéraires "en liaison" pour des sous-réseaux supplémentaires; à l'inverse, certains commutateurs peuvent être configurés de manière à altérer les réponses ARP de telle sorte que " "on-link" est forcé à traverser la passerelle.)
Comment un ordinateur sait-il si un adresse de destination est dans le même sous-réseau ou dans un autre?
Vérification de la adresse locale et du masque de sous-réseau.
Voyons quelques exemples:
Si mon ordinateur a l'adresse IP 192.168.0.1
et que le masque est 255.0.0.0
, cela signifie que toute adresse de 192.0.0.0
à 192.255.255.255
se trouve dans le même sous-réseau. Les paquets vers tous ces ordinateurs n'ont pas besoin de passer par le routeur, ils peuvent être envoyés directement. Envoyez un paquet ARP pour obtenir l'adresse MAC de l'ordinateur de destination, puis envoyez le paquet.
Mais, si mon ordinateur a l'adresse IP 192.168.0.1
et que le masque est 255.255.255.128
, les ordinateurs du même sous-réseau proviennent uniquement de l'adresse IP 192.168.0.0
au 192.168.0.127
. Ils sont joignables directement (envoi d’ARP, recherche d’adresse MAC, etc.). Toute autre adresse, par exemple 192.168.0.200
, doit être atteinte en passant par le routeur.
Une chose non évidente à propos de l'IP est que chaque périphérique IP est lui-même un routeur .
Ceci peut être vu sur un PC normal avec la commande "route print". Vous êtes connecté à deux réseaux: votre segment Ethernet local ou wifi et le réseau localhost. Chaque paquet doit être soumis à une décision quant au réseau sur lequel le mettre.
Cela devient plus évident si vous mettez votre ordinateur sur deux réseaux, un "public" et un "privé". Maintenant, vous avez définitivement besoin du masque de sous-réseau pour pouvoir choisir le réseau sur lequel envoyer le paquet.
Beaucoup de gens vont découvrir accidentellement qu'un PC avec une seule connexion réseau peut fonctionner avec un sous-masque mal configuré: ils finissent simplement par tout envoyer à la passerelle.
Je vois ceci mentionné dans certaines des autres réponses ici mais je pense que cela pourrait être plus clair: Sur les ordinateurs avec plusieurs interfaces réseau, le masque de sous-réseau peut être utilisé pour déterminer automatiquement quelle interface physique vers send le trafic IP sur sur l'adresse IP de destination.
Si vous envoyez un paquet à un périphérique d’un réseau local connecté à l’une des interfaces, pour savoir sur quelle interface l’envoyer (si vous n’avez pas configuré explicitement de route), l’ordinateur peut vérifier les interfaces pour voir if subnet_mask & destination_ip == subnet_mask & interface_ip (par &
je veux dire bitwise-and et par ==
je veux affirmer l'égalité), et s'il y a correspondance, choisissez cette interface.
De cette façon, si vous avez par exemple:
Et vous envoyez un paquet à 192.168.2.123 et n’avez pas de route configurée, on peut déterminer que l’interface C doit être utilisée car 255.255.255.0 et 192.168.2.123 == 255.255.255.0 et 192.168.2.97 .
Cela ne serait pas possible si le masque de sous-réseau n'était pas connu. Vous devez donc définir un itinéraire pour chaque adresse IP à laquelle vous avez envoyé des données.
Si nous regardons une table de routage (ceci se trouve être ma machine de bureau):
default via 172.20.25.1 dev eth1 172.20.25.0/24 dev eth1 proto kernel scope link src 172.20.25.33 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 172.20.25.1 0.0.0.0 UG 0 0 0 eth1 172.20.25.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Les deux vues transmettent les mêmes informations. Les masques de sous-réseau indiquent les hôtes directement accessibles sur ce réseau, et d'autres hôtes sont trouvés à l'aide d'une passerelle. En particulier, nous devons savoir que la passerelle est accessible, sinon nous ne pourrions pas envoyer de paquets pour la transmettre.
Vous pouvez, en principe, tout envoyer via votre hôte de passerelle. Cela ressemblerait
default via 172.20.25.1 dev eth1 172.20.25.1 dev eth1 proto kernel scope link src 172.20.25.33
ou
Destination Gateway Genmask Flags Metric Ref Use Iface default 172.20.25.1 0.0.0.0 UG 0 0 0 eth1 172.20.25.1 0.0.0.0 255.255.255.255 U 0 0
Je n'ai pas essayé, mais il peut être utilisé pour MAC-Forced Forwarding .
TCP/IP aurait pu être conçu comme vous le suggérez: les noeuds feuille envoyaient tout au routeur et le transmettaient à la cible, qui pourrait se trouver sur le même sous-réseau que l'expéditeur.
Mais ce ne serait pas une conception optimale, pour deux raisons:
Il utilise plus de bande passante: chaque paquet entre des périphériques d'un même sous-réseau doit être transmis deux fois: une fois de l'expéditeur au routeur et une autre fois du routeur au destinataire. Sur les réseaux où le routeur est également le commutateur réseau, cela ne représente en réalité aucune bande passante supplémentaire, étant donné que le commutateur devait passer de toute façon par le commutateur. Mais toutes les technologies de réseau ne fonctionnent pas comme ça. La conception Ethernet d'origine était une technologie de bus, sans commutateur central ni répéteur.
Cela met plus de charge sur le routeur. Même si le routeur est également le commutateur, cela demande un peu plus de travail, car il a été mis en œuvre jusqu'à la mise en œuvre du routage de couche 3, plutôt que la commutation de couche 2 plus simple.
Selon une philosophie générale de la conception de TCP/IP, les noeuds d'extrémité sont des périphériques intelligents, ils sont donc supposés être capables d'effectuer une partie du travail. Ils n'ont pas besoin de connaître la topologie complète du réseau, contrairement aux routeurs dorsaux, mais ils en savent suffisamment sur l'environnement local pour prendre en charge une partie de la tâche de routage initiale locale vs distante. Il ne faut pas beaucoup de code pour implémenter ce routage initial simple.
De plus, les périphériques non-routeurs ne sont pas nécessairement sur un seul sous-réseau. Vous pouvez facilement avoir plusieurs cartes réseau dans un PC - beaucoup ont à la fois Ethernet et WiFi. Et chacun de ceux-ci peut être connecté à un sous-réseau différent, et les adresses ainsi que les masques de sous-réseau sont utilisés pour déterminer la carte réseau à utiliser. Si vous exécutez des machines virtuelles, il est probable qu'un sous-réseau virtuel les connecte au système hôte.
Je comprends donc comment les masques de sous-réseau sont utilisés pour diviser un réseau en sous-réseaux, mais ma question est la suivante: pourquoi chaque ordinateur du réseau doit-il connaître le masque de sous-réseau et pas uniquement le routeur?
ainsi, les périphériques que les utilisateurs appellent des routeurs ne sont généralement pas que des routeurs. C'est pourquoi les gens utilisent parfois des termes tels que routeur NAPT, routeur domestique ou routeur consommateur, pour suggérer qu'il ne s'agit pas uniquement d'un routeur. Pour faire valoir qu'ils ne sont pas que des routeurs, ces périphériques peuvent effectuer NAPT (qui n'est pas un routage) et ils ont un commutateur intégré (un commutateur établit un pont, ce qui n'est pas un routage - distinctions entre un commutateur et un pont sont un peu moins bien définis - on peut dire qu'un pont aurait souvent 2 ports et connecter différents supports de réseau (par exemple, ethernet et non-ethernet), alors qu'un commutateur aurait plusieurs ports et le même support de réseau). Un commutateur fait le pontage.
Si le commutateur était séparé du "routeur", alors, en fait, ce serait plus clair. Lorsque l'adresse IP est sur le même réseau, le paquet est dirigé vers descend le câble vers le prochain commutateur qui est le commutateur, et est finalement destiné à un autre ordinateur du réseau (sauf s’il s’agissait d’un commutateur géré et que vous vous connectiez au commutateur, par exemple telnet ou http et que le commutateur avait sa propre adresse IP ), et comme le paquet n’est pas destiné à un autre réseau, il n’atteindra pas le routeur. Quand il est destiné à un ordinateur sur un réseau différent, il va bien sûr toujours au commutateur, mais continue ensuite au routeur (le commutateur a dirigé le paquet vers le routeur et l'adresse MAC de destination du paquet entrant dans le commutateur aurait été l'adresse MAC du routeur) et la route l'acheminerait depuis l'interface correcte du routeur.
Avec ces choses généralement appelées routeurs, qui contiennent des commutateurs (comme les routeurs Cisco/Juniper de style professionnel), le commutateur est à l'intérieur. Mais ce n'est que l'emplacement du commutateur .. C'est toujours comme ça que l'IP est activé le même réseau alors le paquet est adressé au commutateur pas au routeur. Et cela ne concerne que le commutateur à l'intérieur du routeur et n'atteint pas le routeur.
Je pourrais le comprendre, si chaque ordinateur était physiquement connecté entre eux avec un fil,
que voulez-vous dire ici? Si tous les ordinateurs d'un réseau entier étaient physiquement connectés avec un fil .. alors je suppose que vous n'auriez pas besoin d'un commutateur ou d'un routeur. Ce que vous décrivez ressemble un peu à Ethernet d'origine .. et s'ils sont tous reliés par un fil, ce ne serait probablement pas un si grand réseau. Et de toute façon, ce ne sera pas un fil comme vous en avez l'habitude. Des ordinateurs seraient connectés le long du chemin avec des "robinets". Donc, je ne sais pas pourquoi vous avez simplement ajouté cette phrase.
mais tous les paquets doivent quand même passer par le routeur.
vous voulez donc dire en mettant de côté cette idée de tous les ordinateurs connectés avec un fil sans routeur.
Et non, même chez vous, ils ne passent pas par le routeur à chaque fois. Même avec votre "routeur domestique", appelez-le une boîte Internet. Ils vont au commutateur dedans.
Disons que j'ai un ordinateur sur un réseau 192.168.0.0/255.255.255.0, dont l'adresse IP est 192.168.0.1.
Si cet ordinateur tente d’atteindre un ordinateur situé en dehors du sous-réseau, disons 192.168.1.1, il transmet le message au routeur,
au commutateur puis du commutateur, il va au routeur
le routeur identifie que l'adresse IP se situe en dehors de la plage IP du sous-réseau et, au lieu de la transmettre sur le sous-réseau, il le transmet au réseau auquel il est connecté (peut-être un autre routeur).
le routeur identifie l’interface réseau à laquelle il est destiné. Il envoie d'une interface à une autre interface. Une distinction - outre l'interface, serait de savoir si un réseau est directement connecté ou non. Il pourrait envoyer à un commutateur puis à un ordinateur. Ou il pourrait envoyer à un ordinateur. Ou si le réseau n'est pas directement connecté, il irait à un autre routeur.
et votre dernière phrase était
il transmet le message au routeur,
et puis quoi, avez-vous soudainement décidé d'arrêter d'écrire?
le routeur identifie que l'adresse IP se situe en dehors de la plage IP du sous-réseau et, au lieu de la transmettre sur le sous-réseau, il le transmet au réseau auquel il est connecté (peut-être un autre routeur).
eh bien, je ne le dirais pas comme ça. Chaque interface du routeur a une plage IP différente.
Mais, avec votre routeur grand public ou votre routeur domestique, il s’agit d’un routeur à deux interfaces, dont un est connecté à un commutateur. Et les multiples ports sont des ports du commutateur.
Donc, si vous pensez en termes de routeur, ce n’est pas comme si c’était à l’intérieur du sous-réseau et à l’extérieur, car il y avait potentiellement beaucoup de réseaux. Il y en a un sur chaque interface. Et le routeur ne le transmettra pas au même réseau d'où il vient. La raison pour laquelle il a atteint le routeur en premier lieu est précisément parce que le commutateur (auquel il est arrivé en premier) a vu l'adresse MAC et a donc vu que ce n'est pas l'adresse MAC du routeur.
L'ordinateur qui a envoyé le paquet vérifiera si l'adresse IP de destination du paquet se trouve sur son propre réseau, ou sur le même réseau, et choisira ensuite l'adresse MAC appropriée. Soit l'adresse MAC de l'ordinateur auquel elle est destinée (c'est-à-dire si l'ordinateur est sur le même réseau). Ou (si l'ordinateur est sur une autre interface du routeur), il s'agira de l'adresse MAC du routeur. Je suppose que cela pourrait répondre assez directement au titre de votre question, à savoir pourquoi l’ordinateur aurait besoin de connaître le masque de sous-réseau. Dans le système TCP/IP tel quel, c’est ainsi que cela fonctionne, l’ordinateur sélectionne la couche 2 correspondante. adresse par exemple pour Ethernet, l'adresse MAC.
Mais pourquoi le masque de sous-réseau est-il alors attribué à l'utilisateur/à l'appareil, alors qu'il n'en a besoin pour rien? - Orpedo 22 mars à 13h45
L'ordinateur/périphérique utilise utilise le masque de sous-réseau afin de calculer l'adresse de diffusion IP.
Les interfaces IP qui ne sont pas en mode promiscuous sont configurées pour répondre à l'adresse de diffusion IP ainsi qu'à leur propre adresse IP.
J'ai créé un compte juste pour répondre à cette question, car je pense que d'autres compliquent trop le rôle d'un masque de sous-réseau.
Le masque de sous-réseau détermine les autres machines d'un réseau avec lesquelles un hôte communiquera. Si un hôte se trouve en dehors de mon sous-réseau, j'essaierai de parler à cette machine via ma passerelle. Si cet hôte se trouve dans mon sous-réseau, je parlerai directement à cet hôte (aucune passerelle n'est nécessaire). De plus, si une machine en dehors du sous-réseau de l'hôte essaie de lui parler, ces paquets tomberont dans l'oreille d'un sourd et seront immédiatement abandonnés.
Pourquoi est-ce pertinent pour vous? Parce que si nous n'utilisions pas de masques de réseau, si vous tentiez de vous connecter au serveur DNS de Google (8.8.8.8), vous-même (et TOUS les autres hôtes qui lui parleraient) voudriez connaître son adresse physique (adresse MAC). Ainsi, votre ordinateur et tous les autres utilisateurs devront créer une entrée ARP pour chaque machine Internet à laquelle vous parlez. Cela gaspillerait votre RAM et ralentirait tous les réseaux, car l'adresse physique des machines est transmise beaucoup plus loin que nécessaire.