IP 주소의 호스트 부분에서 모두 0을 호스트에 사용할 수없는 이유는 무엇입니까?


21

네트워크가 있으면 83.23.159.0/24다음과 같은 이유로 254 개의 사용 가능한 호스트 IP 주소 가 있음을 알고 있습니다 .

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

브로드 캐스트 주소 사용을 이해하지만 서브넷 주소가 무엇인지 이해하지 못합니다. IP 패킷의 대상 주소가 서브넷 주소로 설정되는 이유를 알 수 없으므로 서브넷이 IP 흐름의 끝 점이되지 않을 경우 왜 서브넷 자체에 주소가 필요한가? 나 에게이 주소를 호스트 주소로 사용하지 못하게하는 것은 낭비처럼 보입니다.

요약하면, 나의 질문은 :

  1. IP 패킷의 대상이 서브넷 IP 주소로 설정되어 있습니까?
  2. 그렇다면 어떤 경우와 왜?
  3. 그렇지 않다면, 호스트가 사용할 수 있도록 해당 주소를 비워 두지 않겠습니까?

2
ifconfig24-net의 호스트 주소를 0 또는 255로 설정할 때 불평하지 않습니다. 그냥 사용해보십시오.
ott--

2
나는했다. .0에서 작동하는 것 같습니다. 그러나 오래된 소프트웨어가 손상 될 수 있습니다. 브로드 캐스트가 필요한 프로토콜을 사용하지 않으면 .255도 작동합니다. 모든 컴퓨터에서 영구 주소를 사용하여 ARP 테이블을 수동으로 구성하면 yuk!
Hennes


1
나는 그 요한에 동의하지 않습니다. 나는 그것을 다시 확인했지만 특정 질문을 다루지 않습니다. 어느 것이 가장자리 케이스입니다.
Hennes

1
이 질문은 이제 또는 새로운 네트워크 엔지니어링 사이트에서도 요청됩니다. 해당 답변 ( http://networkengineering.stackexchange.com/questions/11200/what-is-the-purpose-of-network-address-aka-subnet-address )에는 아직 Server Fault 의 게시물 에없는 정보가 있습니다. .
Hennes

답변:


12

IP 패킷의 대상이 서브넷 IP 주소로 설정되어 있습니까?

예. 유효한 IP이므로 사용할 수 있습니다.

그렇다면 어떤 경우와 왜?

/ 24에서 사용 가능한 255 개의 IP 중 하나입니다.

그렇지 않다면, 호스트가 사용할 수 있도록 해당 주소를 비워 두지 않겠습니까?

당신이있는 경우 고대 다음 하드웨어를 당신은 첫 번째 또는 네트워크 주소와 마지막 주소를 사용하는 경우 확인해야합니다. (마스크가 FF.FF.FF.00 인 네트워크의 경우 .0 또는 .255)

따라서 IP를 건너 뛰는 것이 좋습니다. 그리고 오래 전에 배운 습관은 무시하기가 어렵습니다.

그리고 배경을 모르는 사람들은 '다른 사람들도 그것을 사용하지 않기 때문에 그것을 사용하는 것이 잘못 되었기 때문에'또는 '0'이 첫 번째 숫자 가 될 수 있다는 것을 모르기 때문에 그것을 사용하지 않습니다 .

[편집] Grezzo는 Windows 네트워크 GUI가이 설정을 '유용하게'방지 한 Windows XP에서 테스트했습니다. Windows 7의 동작은 동일합니다. 그런 다음 Windows가 아닌 호스트에서 작동했습니다. Windows를 사용하는 경우 IPconfig를 통해 네트워크를 수동으로 구성하여 모든 0으로 설정해야 할 수 있습니다.

192.168.1.0_on_win7 192.168.1.0_on_FreeBSD

[편집 2]

이 작업을 오래할수록 혼란스러워집니다.

Rfc4632-클래스리스 도메인 간 라우팅 은이를 금지하지는 않지만 명시 적으로 허용하지는 않습니다.

이 ServerFault 게시물은 다음과 같이 언급합니다. "역사적인 이유로 많은 OS가 첫 번째 주소를 브로드 캐스트로 취급합니다. 예를 들어, 로컬 (/ 24) 네트워크의 OS X, Linux 및 Solaris에서 xxx0을 ping하면 응답을 얻습니다. Windows에서는 ping 할 수 없습니다. 기본적으로 첫 번째 주소이지만 SetIPUseZeroBroadcast WMI 방법을 사용하여 활성화 할 수 있습니다. 모든 Windows 네트워크에서 .0을 호스트 주소로 사용하여 벗어날 수 있는지 궁금합니다. " .

같은 질문이지만 대답은 아닙니다.

네트워크 주소는 라우팅 테이블에도 사용됩니다. 그러나 왜 그로 인해 작동하지 않는지 알 수 없습니다. 라우팅 테이블의 동일한 표기법이 올바른 네트워크로 라우팅됩니다. 올바른 네트워크에 연결되면 IP 0의 PC에 도착합니다.

(이 모든 것은 192.168.1 / 24의
경우 입니다. 192.168.0 / 23을 사용한 경우 192.168.1.0은 범위의 중간에 유효하고 안전한 값입니다)

[편집 3]

같은 질문에 대한 링크가 하나 더 있습니다. 스택 교환에서 다소 인기가있는 것 같습니다.

/superuser/379451/why-can-a-network-address-not-be-a-valid-host-address

그리고 한 생각 :

Destination_IP은 아마도 라우팅 테이블의 항목과 비교되기 전에 네트워크 마스트 (하드웨어에서 빠른 동작)와 에드. 그러나:

192.168.0.42 AND 255.255.255.0은 192.168.0.0을 생성
하지만 192.168.0.0과 255.255.255.0은 192.168.0.0을 생성합니다.


[편집 4-이 답변이 작성된 후- 이 새로운 정보 로 인해 전체 게시물을 다시 작성해야 할 수도 있습니다 ]

RFC923 은 3 페이지에 다음과 같이 명시되어 있습니다.

  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.

네트워크 엔지니어링 사이트 에서 @ylearn 인용

나는 그것의 첫 번째 문서가 RFC943 ( 위의 RFC923 을 폐기 했지만 특수 주소에 동일한 언어를 사용함) 을 참조하는 RFC950 에서 온 것이라고 생각합니다 .

     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.

명확히하기 위해 xxx0 / 24 호스트의 유효한 IP 주소 라고 말하고 있습니까? 그렇다면, 왜 (내 IP 주소를 255.255.255.0의 넷 마스크로 192.168.1.0으로 설정하려고 할 때) Windows XP에서 " IP 주소와 서브넷 마스크의 조합이 유효하지 않습니다. IP 주소의 호스트 주소 부분이 0으로 설정되어 있습니다. IP 주소와 서브넷 마스크의 올바른 조합을 입력하십시오. "
Grezzo

3
Windows가 잘못되었습니다. (또는 적은 힘으로 말했다 : 창문은 모든 시스템 조합에서 작동하기에 지나치게주의를 기울입니다). 방금 Windows 7 시스템 에서이 작업을 시도했지만 귀하와 동일한 오류가 발생했습니다. 깨끗한 FreeBSD 시스템을 설치하고 작동하는 곳에서 테스트했습니다. (게시물에 추가하겠습니다)
Hennes

감사합니다. 정말 도움이되었습니다. OS X의 GUI로도 할 수는 없지만 ifconfig는 내기를 걸었습니다. m0ntassar의 답변이 더 많은 표를 얻은 이유를 이해할 수 없습니다. 내 질문에 대답조차하지 않습니다. 하나 더; "당신이 말할 때 당신은 당신이 첫 번째 또는 네트워크 주소와 마지막 주소를 사용하는 경우 확인해야 다음 고대의 하드웨어가 있으면. "당신 뜻 브로드 캐스트 주소를 .
Grezzo

예, 방송 주소를 의미했습니다. 젠장, "5 분보다 오래된 댓글 편집"버튼은 어디에 있습니까?
Hennes

Sweet, 방금 .0과 .255를 핑하려고 시도했습니다 .PS3가 .65부터 (다른 모든 것이 무선이므로 먼저 거기에 도착한 것 같아요) 응답 할 때마다 내 네트워크에서 브로드 캐스트에 사용됩니다. 왜 (일반적으로) 실제 호스트 주소를 사용해서는 안됩니다.
Grezzo

15

호스트 부분이 모두 0 인 주소는 특정 호스트가 아닌 네트워크 자체를 나타냅니다.

역사적으로이 제로 호스트 주소는 대체 브로드 캐스트 주소로 사용되었으며 장치는 여전히 그런 식으로 응답합니다.

따라서 다른 답변에 동의하지 않아야합니다. 아니요, 0은 완벽하게 사용 가능한 호스트 주소가 아닙니다. 254 개가 넘는 주소가 필요한 경우 더 큰 서브넷을 만들어야합니다.

주소가 .1핑에 응답 하는 내 Linksys 라우터를보십시오 .0. 넷 마스크는 255.255.255.0이므로 마지막 옥텟은 호스트 번호에 해당합니다.

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

.0주소를 일부 호스트에 할당하면 라우터가 응답을하지 않고 핑을 할 수 없습니다. 보시다시피, 해당 라우터 버전의 일부 도구 는 브로드 캐스트 로 ping취급 0됩니다.

이러한 굽힘으로 인해 영향을받는 모든 프로토콜 스택 및 기타 소프트웨어를 패치하려는 경우 규칙을 구부릴 수 있습니다. 그렇지 않으면 규칙을 준수하십시오.

지목 사항.

14 슬롯 섀시에 내장 된 네트워크 노드를 설계 한 회사에서 일하면서 여러 유형의 카드에서 수많은 독립적 인 OS 이미지를 실행하고 모두 백플레인을 통해 통신했습니다. 127.X.0.Y슬롯 X에있는 노드 Y의 내부 IP 주소 인 규칙에 따라 백플레인을 통한 네트워킹 설정이 있었으며 모두 1부터 번호가 매겨졌습니다.

우리는 기본적으로 루프백 주소를 우리 자신의 목적으로 서브넷으로 만들었습니다. 제대로 작동하려면 약간의 사용자 공간 인 Linux 커널과 IIRC를 패치해야했습니다.

해당 네트워크는 상자 내에서만 사용되었으며 루프백이 필요한 대부분의 프로그램은 정상적으로 작동 하는 127.0.*네트워크 (및 특정 주소 127.0.0.1)를 사용하므로 모든 것이 멋졌습니다.


7

예를 들어 네트워크 83.23.159.0/23, 83.23.159.0은 완벽하게 사용 가능한 IP 주소입니다.


3
+1-83.23.158.255도 유효한 호스트 주소입니다. 사람들은 서브넷 마스크를 고려하지 않고 0과 255의 규칙에 매달 렸습니다.
joeqwerty

1
xxx0 주소가 / 24보다 작은 넷 마스크로 유효하다는 것을 알고 있지만 내 질문에 / 24 넷 마스크를 지정 했으므로 내 질문에 대답하지 않았습니다. 마지막 4 중 바이트 / 바이트에서 0 또는 255 모두에 대해 이야기 한 것이 아니라 IP 주소의 "호스트 부분"에서 0 또는 255를 모두 언급했습니다. 넷 마스크를 고려합니다.
Grezzo

2
@Grezzo 짧은 대답 : CIDR이 아닌 레거시 항목은 .0으로 끝나고 MS는 완전히 허용하지 않습니다. 그러나 IPv6이 임박 했으므로 걱정하는 이유는 무엇입니까? ;)
Sammitch

2
이 질문은 실제로 점 표기 수비학이 아니라 너비 서브넷에서 0 호스트 주소의 상태 / 의미에 관한 것이기 때문에 실제로 대답이 아닙니다.
Kaz

2
이 답변이 왜 그렇게 많은 표를 얻었는지 모르겠습니다. 83.23.159.0/23은 "기술적으로"유효한 네트워크가 아닙니다. 23 개의 마스크가있는 83.23.159.0은 실제로 83.23.158.0/23 네트워크의 중간에있는 ip입니다. 문제는 "ip의 끝에서 .0을 가질 수없는 이유"가 아니라 "호스트 부분이 모두 0 인 주소를 사용할 수없는 이유"였습니다. 귀하의 예에서 "모든 호스트 0"주소는 83.23.158.0입니다. 다른 답변에서 언급했듯이 이것은 역사적으로 사용할 수없는 주소 ( "네트워크 주소")이며 일부 OS에서는 작동하지만 시도하여 사용하지 않는 것이 좋습니다.
USD Matt

3

기본 네트워킹과 약간의 혼동이있는 것 같습니다.

응답 중 하나에서 언급 된 '고대 하드웨어'는 IP 서브넷 0을 사용하지 않습니다. / 24 CIDR 또는 255.255.255.0 서브넷 마스크에 대해 네트워크가 설정된 상태에서 ip 주소 xxx0을 사용하는 것은 완전히 다른 문제입니다.

IP 서브넷 제로

  • 오래된 하드웨어는 IP 서브넷 0을 사용하지 않습니다. 즉, 다중 서브넷 네트워크 시스템에서 첫 번째 서브넷을 사용하지 않습니다. 따라서 / 23 또는 255.255.254.0 네트워크에서 서브넷 XXX0 및 모든 주소가 사용되지 않습니다. 최신 라우터에는이 제한이 없지만 원하는 경우 서브넷 0을 사용하지 않는이 이전 모델 IE를 사용하도록 구성 할 수 있습니다.

서브넷에서 사용 가능한 호스트 IP 주소

  • 기본 네트워킹 :
    • / 24, 즉 255.255.255.0의 서브넷 마스크 사용
    • xxx0은 네트워크 주소로 예약되어 있습니다. 라우터 및 라우팅 프로토콜 (EIGRP, RIP2 등)은 네트워크 주소를 사용하여 네트워크 네트워크 경계 내에서 또는 네트워크 네트워크 경계를 통해 패킷을 이동하기위한 네트워크 세그먼트를 정의합니다.
    • xxx255는 브로드 캐스트 주소를 위해 예약되어 있습니다
    • 라우터에서 주소 .1 또는 .254를 사용하여 253 개의 사용 가능한 IP 번호를 남기는 것이 일반적입니다.

네트워크 주소와 브로드 캐스트 주소는 모두 예약되어 있으며 현재 및 이전 네트워크 표준에 따라 장치에 할당 할 수 없습니다. / 24 시스템에서 호스트 주소로 xxx0을 사용하는 것은 잘못되었습니다. 리눅스가 당신을 사용한다고해도 그것이 옳다는 것을 의미하는 것은 아니며, 단지 리눅스가 당신이하고있는 일을 알고 있다고 생각한다는 것을 의미합니다.

시스템에서 xxx0을 호스트에 IP4 주소로 할당 할 수 있고 작동하는 것 같습니다. 특정 호스트가 해당 네트워크의 모든 장치를 대상으로하는 모든 트래픽을 수신하여 네트워킹이 최적으로 작동하지 않을 수 있습니다.


1
" xxx0은 (는) 네트워크 주소로 예약되어 있지만 (전체 주소 또는 전체 서브넷에 대한 포인터 라고 생각합니다.) 실제로 사용 된 것을 설명하지 않았으므로 호스트에 사용할 수없는 이유를 설명하지 않았습니다
Grezzo

2
내 게시물을 업데이트했습니다. 결론은 장치에 네트워크 주소를 지정하는 것이 사양에 위배되며 작은 스터브 네트워크에서 사용하지 않아도 라우터가 소프트웨어 업데이트를 받거나 라우터를 변경하는 경우 여전히 위험에 처할 수 있다는 것입니다 )는 기기 또는 전체 네트워크가 제대로 작동하지 않을 수 있습니다.
TheSteven

3

RFC 1122 ( "인터넷 호스트 요구 사항-통신 계층")는 다음을 금지합니다.

IP 주소는 <Host-number>, <Network-number> 또는 <Subnet-number> 필드에 대해 0 또는 -1 값을 가질 수 없습니다.


1
가능한 한 사실입니다. 그러나 실제로 조언대로 섹션 3.3.6으로 가면 전체 설명을 얻을 수 있습니다.
Michael Hampton

@MichaelHampton BSD 4.2가 0을 브로드 캐스트로 사용하기 때문에?
Grezzo

3
@Grezzo 거의. 80이 죽지 않기 때문에 당신은 이것에 붙어 있습니다.
Michael Hampton

0

실제로 정답은 서브넷의 기본입니다. 네트워크 ID와 결합 된 서브넷의 "모두 0"IP는 패킷이 전송되는 위치를 계산하는 데 사용됩니다.

귀하의 예에서 서브넷은 255.255.255.0입니다. TCP / IP 프로토콜을 알고있는 모든 장치는 IP 주소와 결합 된 넷 마스크를 사용하여 패킷이 로컬 네트워크로 향하는 지 (논리적 AND 연산을 수행하여) 패킷이 게이트웨이 / 라우터를 통해 전송되어야하는지 계산합니다.

따라서 IP를 사용할 수없는 이유는 IP가 이미 의도적으로 네트워크 마스크와 함께 네트워크 경계를 "정의"하는 데 사용 되었기 때문입니다.


" TCP / IP 프로토콜을 알고있는 모든 장치는 IP 주소와 결합 된 넷 마스크를 사용하여 (논리적 AND 연산을 수행하여) 패킷이 로컬 네트워크로 향하는 지 여부를 계산 하지만 255.255로 AND. 83.23.159.0을 사용합니다. 255.255.255.0을 사용하는 .255.0 및 ANDing 83.23.159.1은 동일한 결과 (83.23.159.0)를 생성하므로이 계산을 사용하여 호스트의 주소가 .0 인 경우에도 네트워크 또는 라우터로 예정되어 있는지 확인할 수 있습니다.
Grezzo

0

NetworkEngineering 에서 답변을 다시 게시하라는 요청을 받았습니다. 해야 사이트를 약간 수정하면됩니다.

RFC919 에서는 네트워크 주소의 일반적인 승인을 참조합니다.

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"

이것은 누군가가 "10.1.2.0"을 네트워크의 호스트가 아닌 네트워크로 언급 한 경우 이해를 명확히하는 규칙을 제공합니다.

여기에서 IP 주소에 "0"을 사용하는 것은 RFC923 에서 정의 되었으며 연속 RFC에서 이어졌습니다.

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.

이 예에서는 주소의 네트워크 부분에서 0을 사용하여 현재 네트워크 (0.0.0.37)의 특정 호스트를 제공하지만 실제로 반대의 경우를 명확하게 설명하지는 않습니다 (주소의 호스트 부분에 0). 그러나 "0"을 "this"로 정의한 것처럼.

에서 RFC1060 주소는 "0.0.0.0"은 분명히 "이 네트워크에이 호스트"라고 설명했다 :

     (a)   {0, 0}

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

주소의 호스트 부분에 대한 모든 0은 "이 호스트"를 의미하므로 논리적으로 호스트 주소로 사용할 수 없습니다.

질문에 직접 답변하기 :

  1. IP 패킷의 대상이 서브넷 IP 주소로 설정되어 있습니까?
  2. 그렇다면 어떤 경우와 왜?
  3. 그렇지 않다면, 호스트가 사용할 수 있도록 해당 주소를 비워 두지 않겠습니까?

RFC에서 찾은 내용에 따르면 이것을 사용해서는 안됩니다. 나는 그것이 원하는만큼 명확하게 지정되지 않았 음을 인정할 것이지만, 그것은 많은 표준에서 공통적입니다. 표준이 어느 정도 견고하지 않으면, 업계는 일반적으로 받아 들여지는 해석에 "고정"하는 것처럼 보입니다.

또한, RFC 소프트웨어의 내용에 기초하여,이 주소는 특정 호스트가 아닌 네트워크를 어드레싱하는데 사용된다고 가정하도록 작성 될 수있다. 또는 문자 그대로 일종의 "루프백"(즉, 지정된 네트워크의이 호스트)으로 표시됩니다.

그렇다면 왜 일부 OS는 분명히 사용을 허용합니까? 개발자 시간 / 리소스에 달려 있거나 유효성 검사를 추가하려고 생각한 사람이 많지 않다고 생각합니다. 더 큰 서브넷 (/ 23 이상)에는 유효한 IP 주소 .255 및 .0 (예 : 10.1.2.0/23에는 유효한 IP가 모두 포함됨)이 있으므로 논리는 "0으로 끝나는 경우"보다 조금 더 복잡해야합니다. 주소는 10.1.2.255 및 10.1.3.0). 일부 조직에서는 최신 서브넷을 올바르게 지원하지 않는 소프트웨어의 이상한 문제를 피하기 위해 더 큰 서브넷에서 유효한 주소를 사용하지 않는 경우도 있습니다.

하나의 IP 주소를 비우지 않는 이유는 간단히 비용 / 혜택입니다. 서브넷 당 하나의 IP 주소를 다시 가져 오려면이 변경을 수행하는 데 많은 시간과 노력이 필요하며 추가 IP 주소가 필요한 경우에는 하나의 주소만으로 충분합니까? 두 번째 서브넷을 추가하거나 현재 서브넷을 확대하는 것이 훨씬 쉬워 잠재적으로 소프트웨어 / 하드웨어에 큰 변화를주지 않으면 서 하나 대신 사용할 주소를 많이 제공 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.