Por que um endereço de rede não pode ser um endereço de host válido?


18

Então ... eu estudei para o CCNA e outros e tenho trabalhado com redes IP pelo menos nos últimos 8 anos. Sempre vi e me disseram que o endereço de rede de uma sub-rede não é um endereço de host válido. Agora, primeiro vou começar dizendo que sei que isso é verdade. Minha pergunta é mais ... existe algum motivo técnico para que ele não possa ser usado ou foi acordado arbitrariamente quando a especificação foi projetada? Entendo por que um endereço de broadcast não pode ser usado (porque é realmente usado). O problema é que, quando vejo um endereço de rede usado, normalmente é apenas no roteamento, que usa especificamente endereços de REDE. Sendo esse o caso, (os endereços de rede sendo usados ​​somente quando você espera um endereço de rede) há algum motivo técnico para que eles não possam ter o endereço de rede como um endereço de host válido real?

Respostas:


16

Tanto quanto eu entendo, "endereço de rede" como endereço especial é um artefato das redes IP classful do passado. Hoje, usamos o CIDR (Classless Inter-Domain Routing ) na Internet, que não possui o conceito de endereço de rede (se você observar a RFC 4632 vinculada acima, verá que ela lista 256 endereços IP possíveis por legado Bloco "C", por exemplo, nenhum endereço reservado para rede ou endereço de broadcast (embora as transmissões sejam definidas como essenciais em outras RFCs).

Dito isto, você ainda não deve atribuir um endereço de rede a nenhum host específico em uma rede: O endereço de rede é essencial para o roteamento. Este conceito é amplamente utilizado em RFCs ( RFC 1812 ). Basta olhar para as tabelas de roteamento ( routecomando); você verá como o endereço de rede local é usado para separar o tráfego da rede local do que deve passar pelo roteador. E se esse endereço de rede local foi atribuído a algum host?

Pior ainda: é melhor não atribuir endereços IP que terminem em zero, mesmo que esse endereço não seja um endereço de rede. Por exemplo, se sua rede é 10.10.0.0/255.255.0.0, o endereço IP 10.10.5.0 não é o seu endereço de rede, mas é melhor não atribuir esse IP, mesmo que seja completamente válido, mesmo em redes IP classful. Algumas pilhas de software / IP herdadas podem ter problemas com isso.

UPDATE: por goblinlord

De acordo com a RFC 1812 (Seção 5.3.5.2), o que chamamos de endereço de rede foi originalmente usado para "transmissões direcionadas" que enviariam um pacote de transmissão para a rede desejada. Esta função ficou obsoleta devido a ataques SMURF. A função foi oficialmente alterada na RFC 2644 . Posteriormente, outras implementações devem silenciosamente descartar pacotes com um endereço de origem, conforme descrito (o endereço de rede). Enquanto isso é o que deve acontecer, estou curioso para saber quantas implementações realmente o fazem.

Isso é adicionado ainda no RFC 3021 quando a sub-rede / 31 foi abordada.


5
@ grrawity: nem sempre. Somente em uma rede maior que / 31. Por exemplo, o P2P pode ter dois endereços e nenhum endereço de broadcast.
haimg

3
Hmmm ... eu gosto da primeira parte da resposta ... que é um artefato de redes IP classful. Meu problema novamente com a segunda parte é que as tabelas de roteamento são usadas especificamente para rotear para uma rede. Pelo que entendi, a tabela de roteamento é vista apenas para rotear para uma rede na qual o receptor não está (o IP de destino não faz parte da sua sub-rede / rede). Sendo esse o caso ... ao olhar para uma tabela de roteamento, fica claro que os endereços são endereços de rede e não endereços de host, separando isso de um IP de destino do pacote do host. No tráfego real, um IP de destino de um endereço de rede nunca é usado.
Goblinlord 17/01/12

11
Portanto ... existe algum motivo para reservá-lo especificamente se essas duas instâncias já estiverem separadas (endereço de rede na tabela de roteamento e IP de destino ao determinar se você precisa examinar uma tabela de roteamento).
Goblinlord 17/01/12

11
@ Goblinlord: Nenhuma razão oficial que eu pude encontrar (RFCs recentes, etc.). No entanto, tanto software é construído com a suposição de que o endereço de rede é "especial" que, na prática, é melhor não usá-lo como endereço IP do host.
haimg

11
Existe uma entrada de configuração da Cisco que permite que o endereço de rede também seja um host, que existe há pelo menos 10 anos ... Eu nunca o usei, nem testei, e devido a possíveis problemas de pilha, como mencionado, especificamente não permite que os hosts terminem em .0 ou .255 nas redes pelas quais eu era responsável, embora eu não tivesse encontrado outros endereços de rede ou transmissão em uso por menos de / 24s, no @Home, e enquanto o CoreOS quisesse emitir o meio .0 e .255 como hosts nos / 23 e / 21s sanbrunocable, eu os reservei manualmente.
Nevin Williams 25/05

5

Portanto, a resposta prática é: realmente depende. Isso depende de:

  • O endereço exato e seus significados nas muitas RFCs
  • A versão e revisão do seu sistema operacional
  • ... E o do seu roteador, e de qualquer outro roteador upstream
  • ... E a inteligência e sofisticação de todos os administradores de rede desses roteadores ...

Não tive problemas para acessar sites em testar isso; parece que, em última análise, tudo depende dos caprichos dos administradores de rede. Geralmente, não há como um dispositivo upstream dizer se um endereço faz parte de uma rede ou endereço de broadcast ou não, pois é simplesmente um endereço em um bloco maior para eles ... Portanto, nenhum provedor de serviços de Internet impedirá que você atribua e usando seu endereço de rede, a menos que eles o designem a você e ao administrador da rede o tenha bloqueado explicitamente.

Tenho certeza de que existem analistas de segurança e hackers por aí que possuem estatísticas insanamente detalhadas sobre exatamente quantas variantes de implementações de pilha TCP-IP existem e quais são as funções de acomodar e não acomodar ou permitir e exatamente como e onde eles perdem sua marca .

De fato, estou navegando e postando isso no meu endereço de rede.

Não me chame de netizen ruim, a menos que você tenha uma solução melhor para consertar esse castelo de cartas: a realidade é que, se possível, isso acontecerá. A realidade é que ninguém realmente inteligente o suficiente sentou-se e refletiu sobre tudo isso em todas as suas iterações possíveis para criar um design completamente à prova de idiotas, antes de as pessoas começarem a usá-lo - como na maioria das coisas na vida. O resultado? Padrões em que muitas coisas não se somam e / ou se perdem na tradução.

Bem-vindo ao mundo real. Não deixe isso dissuadi-lo de perseguir os ideais ideais sempre esquivos ... Só não espere apoio dos canais ou fóruns "oficiais", a menos que esteja disposto a sujar as mãos e dedicar seu tempo e vida a ele, construindo o consenso necessário e navegando na política em torno disso.

Então, acho que o que os outros pôsteres estavam tentando dizer: se você deseja fazer essa política oficial e usá-la na produção, está por sua conta. (Mas você não está de qualquer maneira?) Talvez tenhamos sorte e tenhamos uma inteligência de computador projetada para nós um IPv8 compatível com o IPv4 e IPv6 e todas as suas implementações interrompidas.


Claro - quando você estiver usando o endereço de rede, o dispositivo ao qual está atribuído pode receber todos os tipos de tráfego de transmissão, pois algumas pilhas de rede o tratam como uma transmissão. No entanto, eles geralmente não interferem muito, pois são descartados silenciosamente. Estou curioso para saber quantas explorações da rede contam com as peculiaridades em torno deste no entanto ...
Dagelf

2

Eu sou novo na rede, mas vou dar meus 2 centavos também.

Se eu tiver uma sub-rede / 28 de xxx0 - xxx15 De acordo com as regras predefinidas, teríamos 14 hosts utilizáveis ​​e 2 restantes. o restante é para rede e transmissão.

Vamos, em vez de seguir a regra acima, usar todos os 16 hosts. Então, nesse caso, tudo ficaria bem, sem problemas. Mas se a comunicação fosse necessária fora da rede, não seria possível devido à falta de recursos para enviar ou receber as informações.

Não sou bom em explicar, mas em outras palavras.

Se eu morasse em uma casa em uma rua e a rua continha 14 casas. Uma entrada e saída para acesso à estrada principal.

Meu endereço de correspondência varia de 1-14 Personal Street, Off Network Road.

Isso não seria problema para o carteiro. Agora vamos supor que os desenvolvedores ficaram gananciosos e adicionaram mais 2 casas e se livraram das pistas.

Em seguida, meu novo endereço de correspondência iria de 1-16 Personal Street

Nesse caso, o homem do correio estaria com problemas.

Isso é um palpite, deixe-me saber se estou falando besteira.


0

O endereço de rede permite criar tabelas de roteamento com coluna de destino de tamanho fixo (IPv4 de 4 bytes) e operações binárias de tamanho fixo, para que o roteamento de host e o roteamento de rede sejam realmente a mesma coisa.

Imagine uma tabela de roteamento como esta: (este PC possui uma conexão paralela com outro PC e uma placa de rede)

Dest           Mask    Dev
192.168.0.123  /32     plip0   # This is a single host
192.168.0.0    /24     eth0    # This is a network

O AND entre o endereço IP e a máscara de rede fornece exatamente o que você precisa, um número de 4 bytes que pode ser comparado com cada linha sem cálculos adicionais.

Portanto, o número zero do host é especial no sentido de que, após a operação AND, seu endereço representa naturalmente toda a rede.

Se você decidisse usar o número da rede como um número de host, isso resultaria em uma tabela como esta:

Dest           Mask    Dev
192.168.0.0    /32     eth0    # This is the host (it's a redundant line)
192.168.0.0    /24     eth0    # This is the network

Isso parece legítimo, então suponho que o conceito de endereço de rede seja usado por razões de roteamento e, portanto, foi decidido arbitrariamente marcá-lo como um endereço especial e proibir seu uso como endereço de host.

Bem ... na verdade não é assim tão simples. Eu decidi experimentá-lo (!!!):

# route add -net 192.168.0.0/32 eth0
# ping 192.168.0.0
Do you want to ping broadcast? Then -b
# telnet 192.168.0.0
Trying 192.168.0.0...
telnet: connect to address 192.168.0.0: Network is unreachable

No momento, os programas de rede não me permitem usar um número de rede como um endereço normal.


Considerando o seu primeiro exemplo de tabela de roteamento, acho que é uma maneira realmente ruim de fazer as coisas ... se você tiver outros hosts em sua sub-rede .0.0, como eles se comunicam adequadamente entre si e com o host .0.123 sem definir rotas de maneira estática todo host? Isso realmente não parece ser a maneira correta de fazer as coisas.
Goblinlord 17/01/12

É apenas um exemplo fictício, eu nunca configuraria uma tabela como essa :-) O host .123 é conectado a uma conexão ponto a ponto, enquanto o resto é a rede ethernet usual. Se você quiser que outras máquinas acessem o host .123, precisará fazer um trabalho adicional, mas não é impossível.
David Costa

0

Enquanto procurava a resposta para esta pergunta, deparei-me com este artigo da Cisco. A citação a seguir desse artigo resume muito bem, eu acho.

[...] considere o endereço IP 172.16.1.10. Se você calcular o endereço de sub-rede correspondente a esse endereço IP, a resposta que você chega é a sub-rede 172.16.0.0 (sub-rede zero). Observe que esse endereço de sub-rede é idêntico ao endereço de rede 172.16.0.0, que foi sub-rede em primeiro lugar; portanto, sempre que você realiza sub-redes, obtém uma rede e uma sub-rede (sub-rede zero) com endereços indistinguíveis. Antigamente, isso era uma fonte de grande confusão .

Evitar a confusão é uma razão boa o suficiente para mim.


Eu sei que essa pergunta foi feita há muito tempo, mas eu estava apenas analisando essas coisas. O artigo que você citou está falando sobre "sub-rede zero" ou a primeira sub-rede em um endereço de rede. Isso é algo completamente diferente e em qualquer rede moderna em que trabalhei em todos os switches, o recurso "ip subnet-zero" está ativado. Ele também menciona que atualmente é ativado por padrão em todos os comutadores (a partir da versão 12, lançada em 2003).
Goblinlord 25/02

0

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>


0

Um endereço de rede não é considerado um endereço de host, mas é apenas um número. Em áreas limitadas de endereço, como redes ponto a ponto, uma máscara / 30 é usada com frequência, mas ainda utiliza os endereços de host. Uma prática menor, mas que atinge o mesmo princípio, é usar uma máscara / 31 e usar uma extremidade como endereço de rede e a outra como transmissão.

Ex.

Router(config)#int gi0/0
Router(config-if)#ip add 10.0.0.0 255.255.255.254
Router(config-if)#no shut


Router2(config)#int gi0/0
Router2(config-if)#ip add 10.0.0.1 255.255.255.254
Router2(config-if)#no shut


        .0        .1
[Router]-----------[Router2]
   network      broadcast
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.