Por que todos os zeros na parte do host do endereço IP não podem ser usados ​​para um host?

21

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:

  1. O destino de um pacote IP já foi definido como o endereço IP da sub-rede?
  2. Se sim, em que casos e por quê?
  3. Se não, por que não liberar esse endereço para qualquer host usar?
Grezzo
fonte
2
ifconfignão se queixa quando você define o endereço de host de 24 redes como 0 ou 255. Tente usá-lo.
ott--
2
Eu fiz. Parece funcionar para um .0. Mas isso pode quebrar o software mais antigo. .255 também funcionará se você não usar nenhum protocolo que exija transmissão. Eu acho que você pode configurá-lo se você configurar manualmente as tabelas ARP com endereços permanentes em todos os computadores, mas yuk!
Hennes
possível duplicata de Como funciona a sub-rede IPv4?
John Gardeniers
1
Eu discordo desse John. Verifiquei novamente e ele não aborda a questão específica. O que é um caso extremo.
Hennes
1
Agora, essa pergunta também é feita no novo site de engenharia de rede. Essas respostas (em http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address ) possuem informações que ainda não estão nas postagens de Server Fault .
Hennes

Respostas:

12

O destino de um pacote IP já foi definido como o endereço IP da sub-rede?

Sim. É um IP válido para que possa ser usado.

Se sim, em que casos e por quê?

É simplesmente um dos 255 IPs utilizáveis ​​em um / 24

Se não, por que não liberar esse endereço para qualquer host usar?

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.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[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:

  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.

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):

     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
fonte
Então, para esclarecer, você está dizendo que xxx0 / 24 é um endereço IP válido para um host? Se é assim, então por que (quando tento definir meu endereço IP como 192.168.1.0 com uma máscara de rede 255.255.255.0) o Windows XP diz " A combinação de endereço IP e máscara de sub-rede é inválida. Todos os bits no parte do endereço IP do host está definida como 0. Por favor, insira uma combinação válida de endereço IP e máscara de sub-rede. "
Grezzo
3
Windows está errado. (Ou dito com menos força: o Windows é excessivamente cuidadoso ao trabalhar com qualquer combinação de sistemas). Eu apenas tentei isso no meu sistema Windows 7 e recebi o mesmo erro que você. Instalei um sistema FreeBSD limpo e testei-o onde ele simplesmente funciona. (Vou acrescentar que para o cargo)
Hennes
Obrigado, você foi realmente útil. Só queria acrescentar que a GUI do OS X também não permitirá que você faça isso, mas aposto que o ifconfig permitiria. Não consigo entender por que a resposta de m0ntassar recebeu mais votos - nem sequer tenta responder à minha pergunta. Mais uma coisa; quando você diz " Se você tem hardware antigo, então você precisa verificar se ele usa o primeiro ou o último endereço como endereço de rede. " Você quer dizer endereço de broadcast .
Grezzo 22/11/12
Sim, eu quis dizer endereço de transmissão. Porra, onde está o botão "editar comentário com mais de 5 minutos"?
Hennes
Doce, eu apenas tentei fazer o ping .0 e .255, nas duas vezes em que meu PS3 respondeu (todo o resto é sem fio, acho que foi por isso que chegou primeiro) a partir de 0,65, confirmando que na minha rede os dois são usados ​​para transmissão, o que é por que (normalmente) não devemos usar um endereço de host real.
Grezzo 22/11/12
15

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 .1responde a pings de .0. (A máscara de rede é 255.255.255.0, portanto, o último octeto corresponde ao número do host.)

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

Se eu atribuísse o .0endereç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 roteador pingtratam 0como 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ífico 127.0.0.1) que continuou a funcionar normalmente, tudo foi legal.

Kaz
fonte
7

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

m0ntassar
fonte
3
+1 - 83.23.158.255 também seria um endereço de host válido. As pessoas ficam presas às regras do zero e do 255 sem considerar a máscara de sub-rede.
joeqwerty
1
Estou ciente de que um endereço xxx0 é válido com uma máscara de rede inferior a / 24, mas observe que, na minha pergunta, especifiquei uma máscara de rede / 24, para que você não tenha respondido à minha pergunta. Eu não estava falando sobre todos os 0s ou 255s no último quarteto / byte, eu disse todos os 0s ou 255s na "parte do host" do endereço IP. Isso leva em conta a máscara de rede.
Grezzo 22/11/12
2
@Grezzo resposta curta: coisas que não são do CIDR e herdadas são quebradas com 0,0, o MS simplesmente o desaprova completamente. Mas o IPv6 é iminente, por que se preocupar? ;)
Sammitch 22/11/2012
2
Isso não é realmente uma resposta, já que a pergunta não é realmente sobre numerologia de notação de ponto, mas sobre o status / significado de um endereço de host 0 em qualquer sub-rede de largura.
Kaz
2
Não vejo por que essa resposta tem tantos votos positivos. 83.23.159.0/23 não é "tecnicamente" uma rede válida. 83.23.159.0 com uma máscara 23 é realmente um IP no meio da rede 83.23.158.0/23. A pergunta não era "por que não posso ter 0,0 no final do ip", era "por que não consigo usar o endereço com todos os zeros da parte do host". No seu exemplo, o endereço "todos os zeros do host" seria 83.23.158.0. Como mencionado em outras respostas, este é historicamente um endereço inutilizável (o "endereço de rede") e, embora possa funcionar em alguns sistemas operacionais, não é aconselhável tentar usá-lo.
USD Matt
3

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

  • O hardware mais antigo não usaria IP Subnet Zero - o que significa que eles não usariam a primeira sub-rede em um sistema de rede com várias sub-redes. Portanto, em uma rede / 23 ou 255.255.254.0, a sub-rede XXX0 e todos os seus endereços não seriam usados. Os roteadores modernos não têm essa restrição, mas podem ser configurados para usar este modelo antigo, ou seja, não usar a sub-rede zero, se desejado.

Endereços IP de host utilizáveis ​​em uma sub-rede

  • Rede básica:
    • Com / 24 ou seja, máscara de sub-rede 255.255.255.0
    • xxx0 é reservado como o endereço de rede. Roteadores e protocolos de roteamento (EIGRP, RIP2, etc.) usam o endereço de rede para definir segmentos de rede para mover pacotes dentro e além dos limites da rede.
    • xxx255 está reservado para o endereço de broadcast
    • É prática comum usar os endereços .1 ou .254 nos roteadores, para deixar 253 números de IP utilizáveis.

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.

TheSteven
fonte
1
Você disse " xxx0 é reservado como endereço de rede (pense nele como endereço global ou ponteiro para toda a sub-rede) ", mas não explicou para que é realmente usado e, portanto, não explicou por que não pode ser usado para um host
Grezzo 24/11/12
2
Atualizei minha postagem. A conclusão é que atribuir o endereço de rede a um dispositivo é contra as especificações e, embora você possa usá-lo em uma pequena rede stub, ainda corre o risco de que se o roteador receber uma atualização de software (ou se você mudar de roteador) ) que o dispositivo ou toda a sua rede pode parar de funcionar corretamente.
TheSteven
3

A RFC 1122 ("Requisitos para hosts da Internet - Camadas de comunicação") proíbe:

Não é permitido que endereços IP tenham o valor 0 ou -1 para qualquer um dos campos <Número do host>, <Número da rede> ou <Número da sub-rede>

Bryan
fonte
1
Verdadeiro na medida em que vai. Mas se você realmente for para a seção 3.3.6, como recomendado, obterá a explicação completa.
Michael Hampton
@MichaelHampton Porque o BSD 4.2 usa 0 como transmissão?
Grezzo
3
@Grezzo Bastante. Você está preso a isso porque os anos 80 simplesmente não morrem.
Michael Hampton
0

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.

Goez
fonte
Você diz que " Qualquer dispositivo que conheça o protocolo TCP / IP usará 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) ", mas ANDing 83.23.159.0 com 255.255 .255.0 e ANDing 83.23.159.1 com 255.255.255.0 produzem o mesmo resultado (83.23.159.0), portanto, usar esse cálculo para descobrir se ele é destinado à rede ou roteador ainda funciona mesmo quando um host tem o endereço .0
Grezzo
0

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:

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"

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:

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.

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":

     (a)   {0, 0}

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

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:

  1. O destino de um pacote IP já foi definido como o endereço IP da sub-rede?
  2. Se sim, em que casos e por quê?
  3. Se não, por que não liberar esse endereço para qualquer host usar?

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.

YLearn
fonte