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

20

Sei que, se eu tiver uma rede 83.23.159.0/24 , tenho 254 endereços IP de host úteis 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

Eu 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 para o endereço de sub-rede, então por que a própria sub-rede precisa de um endereço se nunca será o ponto de extremidade para um fluxo de 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 para o endereço IP de sub-rede?
  2. Se sim, em que casos e por quê?
  3. Se não, então por que não liberar esse endereço para qualquer host usar?
por Grezzo 22.11.2012 / 14:52

7 respostas

10

Is an IP packet's destination ever set to the subnet IP address?

Sim. É um IP válido, portanto, pode ser usado.

If yes, in what cases and why?

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

If no, then why not free up that address for any host to use?

Se você tiver hardware antigo , precisará 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 faz com que seja um bom hábito ignorar esse IP. E os hábitos aprendidos há muito tempo são difíceis de ignorar.

E as pessoas que não conhecem o plano de fundo não o usam porque outras não o usam, por isso deve ser errado usá-lo ou porque não percebem que '0' pode ser um primeiro número.

[Editar] Grezzo acabou de testá-lo no Windows XP, onde o GUI da rede do Windows 'ajudado' impediu essa configuração. O Windows 7 tem o mesmo comportamento. Eu tentei em um host não-windows, onde ele simplesmente funciona. Se você usa Windows, pode ser necessário configurar sua rede manualmente via IPconfig para configurá-la para todos os zeros.

[Editar 2]

Quanto mais eu trabalho com isso, mais confuso fico.

Rfc4632 - Roteamento entre domínios sem classe não parece proibir, mas nem permite explicitamente.

Esta postagem do ServerFault menciona: .

É a mesma pergunta, mas não é uma resposta.

O endereço de rede também é usado nas tabelas de roteamento. Mas não vejo por que isso não funcionaria devido a isso. A mesma notação nas tabelas de roteamento seria encaminhada para a rede correta. Uma vez na rede certa, chegaria a um PC com IP 0.

(Tudo isso por 192.168.1 / 24.
 Se você usou 192.168.0 / 23, em seguida, 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 pilha:

link

E um pensamento:

Destination_IP é provavelmente AND ed com o mastro da rede (uma operação rápida no hardware) antes de ser comparado com as entradas nas tabelas de roteamento. Mas:

(Um IP semi-aleatório) 192.168.0.42 E 255.255.255.0 produziria 192.168.0.0
Mas 192.168.0.0 E 255.255.255.0 também renderiam 192.168.0.0

[Editar 4 - Muito depois de essa resposta ter sido gravada, talvez seja necessário reescrever toda a postagem devido a esta nova informação ]

RFC923 afirma 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 de RFC950 que faz referência a RFC943 (que ficou obsoleta RFC923 acima, mas usa o mesmo idioma para especial endereços):

     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.
    
por 22.11.2012 / 15:10
13

Um endereço com uma parte do host totalmente zero refere-se à própria rede, e não a qualquer host específico.

Historicamente, esse endereço de host zero serviu como um endereço de broadcast alternativo, e os dispositivos ainda respondem dessa maneira.

Então, eu tenho que discordar de algumas outras respostas: não, o zero não é um endereço de host perfeitamente utilizável. Se você precisar de mais de 254 endereços, será necessário criar uma sub-rede maior.

Veja, meu roteador Linksys, cujo endereço é .1 , responde a pings de .0 . (A máscara de rede é 255.255.255.0 , então 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 endereço .0 a algum host, eu não conseguiria fazer o ping sem que o roteador entrasse em contato com suas respostas também. E, como você pode ver, algumas ferramentas, como a versão do roteador de ping , tratam 0 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, cumpra 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 de SO independentes em vários tipos de cartões, todos se comunicando via um backplane. Havia uma configuração de rede sobre o backplane com uma convenção de que 127.X.0.Y é o endereço IP interno do nó Y no slot X, todos numerados de 1.

Basicamente, criamos sub-redes no endereço de loopback para nossos próprios fins. 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 era usada apenas dentro da caixa, e a maioria dos programas que requerem loopback usam a rede 127.0.* (e, na verdade, o endereço específico 127.0.0.1 ) que continuou funcionando normalmente, tudo ficou legal.

    
por 22.11.2012 / 23:26
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

    
por 22.11.2012 / 14:57
3

Parece que há um pouco de confusão aqui com a rede básica.

O 'hardware antigo' referido em uma das respostas não usaria o IP Subnet Zero - usar o endereço IP xxx0 com uma rede configurada para uma máscara de sub-rede / 24 CIDR ou 255.255.255.0 é um problema completamente diferente.

IP de sub-rede zero

  • O hardware mais antigo não usaria o IP Subnet Zero - o que significa que eles não usariam a primeira sub-rede em um sistema de rede de várias sub-redes. Portanto, em uma rede / 23 ou 255.255.254.0, a sub-rede X.X.X.0 e todos os seus endereços não serão usados. Os roteadores modernos não possuem essa restrição, mas podem ser configurados para usar este modelo antigo I.E. não use sub-rede zero, se desejar.

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

  • Rede básica:
    • Com / 24, isto é, máscara de sub-rede de 255.255.255.0
    • x.x.x.0 é 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 através dos limites da rede.
    • x.x.x.255 é reservado para o endereço de transmissão
    • É uma prática comum usar os endereços .1 ou .254 nos roteadores, o que resulta em 253 números IP utilizáveis.

Tanto o endereço de rede quanto 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. Usando x.x.x.0 para um endereço de host em um sistema / 24 está errado. Mesmo se o Linux permitir que você o use, isso não significa que esteja certo, significa apenas que o Linux pensa que você sabe o que está fazendo.

Se o seu sistema permite que você atribua xxx0 como um endereço IP4 a um host e parece estar funcionando - as chances são de que determinado host esteja recebendo TODO o tráfego direcionado a QUALQUER dispositivo nessa rede para que sua rede provavelmente não funcione da maneira ideal .

    
por 23.11.2012 / 20:36
3

RFC 1122 ("Requisitos para Hosts da Internet - Camadas de Comunicação") proíbe:

IP addresses are not permitted to have the value 0 or -1 for any of the < Host-number>, < Network-number>, or < Subnet- number> fields

    
por 10.12.2014 / 15:48
0

Na verdade, a resposta é o básico da sub-rede. O IP "all zeros" da sua sub-rede combinado com o id da rede é usado para calcular para onde o pacote deve ser enviado.

No seu exemplo, você tem uma sub-rede de 255.255.255.0. 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) ou se deve ser enviado pelo gateway / roteador.

Então, eu 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.

    
por 22.11.2012 / 20:09
0

Foi solicitado que eu repassasse minha resposta de NetworkEngineering , então farei isso com algumas modificações para isso site.

Em RFC919 , 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 nosso entendimento se alguém mencionasse "10.1.2.0" como a rede e não como um host na rede.

A partir daí, o uso de "0" em um endereço IP foi definido em RFC923 e transitado em sucessivas RFCs :

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 0s nas partes da rede do endereço, mas na verdade não esclarece o caso oposto (0 na parte do host do endereço) . No entanto, como ele definiu "0" como "isso".

Em 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 host do endereço significam "este host", segue logicamente que ele não pode ser usado como um endereço de host.

Voltando a responder diretamente às suas perguntas:

  1. Is an IP packet's destination ever set to the subnet IP address?
  2. If yes, in what cases and why?
  3. If no, then why not free up that address for any host to use?

De acordo com o que eu encontro nos RFCs, isso não deve ser usado. Admito que não é tão claramente especificado quanto eu gostaria, mas isso é comum em muitos padrões. Quando os padrões são um pouco menos firmes em um ponto, a indústria parece "estabelecer-se" em uma interpretação geralmente aceita.

Além disso, com base no conteúdo do software RFCs pode ser escrito para assumir que esse endereço é usado para endereçar a rede e não um host específico. Ou ainda mais literalmente como algum tipo de "loopback" (ou seja, este host na rede especificada).

Então, por que alguns sistemas operacionais permitem claramente seu uso? Eu imagino que, como muitas coisas, isso se resume a tempo / recursos do desenvolvedor ou ninguém realmente pensou em adicionar a verificação de validade. A lógica tem que 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 .255 e .0 (isto é, 10.1.2.0/23 contém o IP válido 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 softwares que não suportam sub-redes modernas corretamente.

Por que não liberar esse endereço IP, ele simplesmente se resume em custo / benefício. Seria necessário muito tempo e esforço para fazer essa alteração para recuperar um endereço IP por sub-rede e, em quantos casos em que você precisa de endereços IP adicionais, somente um endereço será suficiente? É muito mais fácil adicionar uma segunda sub-rede ou ampliar a sub-rede atual, potencialmente dando a você muitos endereços para usar em vez de apenas um enquanto não faz grandes alterações em nenhum software / hardware.

    
por 30.12.2014 / 17:50

Tags