Sei que, se tenho uma rede 83.23.159.0/24
, tenho 254 endereços IP de host utilizáveis porque:
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
Entendo o uso de um endereço de broadcast, mas não entendo para que serve o endereço de sub-rede. Não vejo nenhum motivo para o endereço de destino de um pacote IP ser definido como o endereço de sub-rede. Por que a própria sub-rede precisa de um endereço se nunca será o ponto de extremidade para um fluxo IP? Para mim, parece um desperdício não permitir que esse endereço seja usado como endereço de host.
Para resumir, minhas perguntas são:
- O destino de um pacote IP já foi definido como o endereço IP da sub-rede?
- Se sim, em que casos e por quê?
- Se não, por que não liberar esse endereço para qualquer host usar?
ifconfig
não se queixa quando você define o endereço de host de 24 redes como 0 ou 255. Tente usá-lo.Respostas:
Sim. É um IP válido para que possa ser usado.
É simplesmente um dos 255 IPs utilizáveis em um / 24
Se você possui um hardware antigo , precisa verificar se ele usa o primeiro ou o último endereço como endereço de rede. (.0 ou .255 para redes com máscara FF.FF.FF.00)
Isso torna um bom hábito pular esse IP. E hábitos aprendidos há muito tempo são difíceis de ignorar.
E as pessoas que não conhecem o plano de fundo também não o usam 'porque outros também não o usam, portanto deve ser errado usá-lo' ou porque não percebem que '0' pode ser o primeiro número.
[Editar] Grezzo acabou de testá-lo no Windows XP, onde a GUI de rede do Windows 'útil' impediu essa configuração. Windows 7 tem o mesmo comportamento. Eu tentei em um host que não fosse o Windows, onde simplesmente funciona. Se você usa o Windows, pode ser necessário configurar sua rede manualmente via IPconfig para configurá-la com todos os zeros.
[Editar 2]
Quanto mais trabalho com isso, mais confuso fico.
Rfc4632 - O roteamento entre domínios sem classe não parece proibi-lo, mas também não permite explicitamente.
Esta publicação do ServerFault menciona: "Por motivos históricos, muitos sistemas operacionais tratam o primeiro endereço como uma transmissão. Por exemplo, o ping xxx0 do OS X, Linux e Solaris na minha rede local (/ 24) obtém respostas. O Windows não permite executar ping o primeiro endereço por padrão, mas você pode habilitá-lo usando o método WMI SetIPUseZeroBroadcast. Gostaria de saber se você conseguirá usar .0 como endereço de host em uma rede totalmente Windows. " .
É a mesma pergunta, mas não uma resposta.
O endereço de rede também é usado em tabelas de roteamento. Mas não vejo por que não funcionaria devido a isso. A mesma notação nas tabelas de roteamento seria direcionada para a rede correta. Uma vez na rede correta, chegaria a um PC com IP 0.
(Tudo isso para um 192.168.1 / 24.
Se você usasse 192.168.0 / 23, o 192.168.1.0 seria um valor válido e seguro no meio do intervalo)
[Editar 3]
Mais um link para a mesma pergunta. Parece um pouco popular na troca de pilhas:
/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address
E um pensamento:
O IP de destino provavelmente é AND com o mastro da rede (uma operação rápida em hardware) antes de ser comparado às entradas nas tabelas de roteamento. Mas:
(Um IP semi-aleatório) 192.168.0.42 AND 255.255.255.0 produziria 192.168.0.0
Mas 192.168.0.0 AND 255.255.255.0 também produziria 192.168.0.0
[Editar 4 - Muito tempo depois que esta resposta foi escrita - talvez seja necessário reescrever a postagem inteira devido a essas novas informações ]
A RFC923 declara na página 3 que:
Citando @ylearn em nosso site de engenharia de rede
Eu acredito que a primeira documentação disso vem do RFC950, que faz referência ao RFC943 (que obsoleto RFC923 acima, mas usa o mesmo idioma para endereços especiais):
fonte
Um endereço com uma parte de host totalmente zero refere-se à própria rede, e não a qualquer host em particular.
Historicamente, esse endereço de host zero serviu como um endereço de transmissão alternativo e os dispositivos ainda respondem dessa maneira.
Portanto, tenho que discordar de outras respostas: não, zero não é um endereço de host perfeitamente utilizável. Se você precisar de mais de 254 endereços, precisará criar uma sub-rede maior.
Olha, meu roteador Linksys, cujo endereço
.1
responde a pings de.0
. (A máscara de rede é255.255.255.0
, portanto, o último octeto corresponde ao número do host.)Se eu atribuísse o
.0
endereço a algum host, não seria capaz de executá-lo sem o roteador também com suas respostas. E como você pode ver, algumas ferramentas como a versão desse roteadorping
tratam0
como uma transmissão.Você pode dobrar as regras, se estiver disposto a corrigir todas as pilhas de protocolos e outros softwares afetados por essa dobra. Caso contrário, siga as regras.
Caso em questão.
Eu trabalhei em uma empresa que projetou um nó de rede construído em um chassi de 14 slots, executando várias imagens independentes do SO em vários tipos de placas, todas se comunicando através de um backplane. Havia uma configuração de rede no backplane com uma convenção que
127.X.0.Y
é o endereço IP interno do nó Y no slot X, todos numerados de 1.Basicamente, fizemos a sub-rede do endereço de loopback para nossos próprios propósitos. Para fazê-lo funcionar, tivemos que corrigir o kernel do Linux aqui e ali, e o IIRC, um pouco de espaço do usuário.
Como essa rede foi usada apenas dentro da caixa, e a maioria dos programas que exigem loopback usa a
127.0.*
rede (e de fato o endereço específico127.0.0.1
) que continuou a funcionar normalmente, tudo foi legal.fonte
na verdade, depende da máscara de rede, por exemplo, para a rede 83.23.159.0/23, 83.23.159.0 é um endereço IP perfeitamente utilizável
fonte
Parece que há um pouco de confusão aqui com redes básicas.
O 'hardware antigo' referido em uma das respostas não usaria a sub-rede IP zero - o uso do endereço IP xxx0 com uma rede configurada para uma máscara de sub-rede CIDR / 24 ou 255.255.255.0 é um problema completamente diferente.
Zero de sub-rede IP
Endereços IP de host utilizáveis em uma sub-rede
O endereço de rede e o endereço de transmissão são reservados e não podem (pelos padrões de rede atuais e anteriores) ser atribuídos a um dispositivo. Usar xxx0 para um endereço de host em um sistema / 24 está errado. Mesmo que o Linux permita que você o use, isso não significa que esteja certo, apenas significa que o Linux pensa que você sabe o que está fazendo.
Se o seu sistema permitir que você atribua xxx0 como um endereço IP4 a um host e ele pareça estar funcionando - é provável que um host específico esteja recebendo TODO o tráfego direcionado para QUALQUER dispositivo na rede, de modo que sua rede provavelmente não esteja funcionando de maneira ideal.
fonte
A RFC 1122 ("Requisitos para hosts da Internet - Camadas de comunicação") proíbe:
fonte
Na verdade, a resposta é o básico da sub-rede. O IP "todos os zeros" da sua sub-rede, combinado com a identificação da rede, é usado para calcular para onde o pacote deve ser enviado.
No seu exemplo, você tem uma sub-rede 255.255.255.0. Qualquer dispositivo que conheça o protocolo TCP / IP utilizará a máscara de rede combinada com o endereço IP para calcular se o pacote é destinado à rede local (executando uma operação AND lógica) ou se deve ser enviado através do gateway / roteador.
Então, acho que o motivo pelo qual o IP não pode ser usado é porque ele já é usado para "definir" os limites da rede junto com a máscara de rede por design.
fonte
Foi solicitado que eu repassasse minha resposta da NetworkEngineering , por isso farei isso com algumas modificações neste site.
No RFC919 , ele faz referência à aceitação geral do endereço de rede:
Isso fornece uma convenção que deve esclarecer nossa compreensão se alguém mencionar "10.1.2.0" como a rede e não um host na rede.
A partir daí, o uso de "0" nos endereços IP foi definido no RFC923 e transportado em RFCs sucessivos:
Este exemplo fornece um host específico na rede atual (0.0.0.37) usando zeros nas partes da rede do endereço, mas na verdade não esclarece o caso oposto (zeros na parte do host do endereço). No entanto, como ele definiu "0" como "isso".
No RFC1060, o endereço "0.0.0.0" foi claramente documentado como "este host nesta rede":
Como todos os zeros para a parte do endereço do host significam "este host", segue-se logicamente que ele não pode ser usado como endereço do host.
Voltando a responder diretamente às suas perguntas:
De acordo com o que eu acho nas RFCs, isso não deve ser usado. Admito que não está tão claramente especificado quanto gostaria, mas isso é comum em muitos padrões. Quando os padrões são um pouco menos firmes, a indústria parece "se acomodar" em uma interpretação geralmente aceita.
Além disso, com base no conteúdo do software RFCs, pode ser gravado para assumir que esse endereço é usado para endereçar a rede e não um host específico. Ou ainda mais literalmente como uma espécie de "loopback" (ou seja, este host na rede especificada).
Então, por que alguns sistemas operacionais permitem claramente seu uso? Eu imagino que muitas coisas se resumem ao tempo / recursos do desenvolvedor ou que ninguém realmente pensou em adicionar a verificação de validade. A lógica deve ser um pouco mais envolvente do que "se terminar em 0", pois uma sub-rede maior (a / 23 ou maior) conterá um endereço IP válido de 0,255 e 0,0 (ou seja, 10.1.2.0/23 contém os dois endereços IP válidos). endereço de 10.1.2.255 e 10.1.3.0). Embora algumas organizações também evitem o uso desses endereços válidos em sub-redes maiores, para evitar problemas estranhos com o software que não suporta corretamente as sub-redes modernas.
Quanto ao porquê de não liberar esse endereço IP, ele simplesmente se resume em custo / benefício. Levaria muito tempo e esforço para fazer essa alteração para recuperar um endereço IP por sub-rede e em quantos casos você precisa de endereços IP adicionais, apenas um endereço será suficiente? É muito mais fácil adicionar uma segunda sub-rede ou ampliar a sub-rede atual, potencialmente fornecendo muitos endereços para usar em vez de apenas um, sem fazer grandes alterações em nenhum software / hardware instalado.
fonte