IPv4 주소의 일부를 0으로 설정하는 것이 유효합니까?


36

ServletRequest.getRemoteAddr을 사용하여 사용자의 IP 주소를 기반으로 인증하는 Java EE 응용 프로그램에서 변경 작업 중입니다 . 우리는 데이터베이스에 IP 주소 범위 (FROM_IP 및 TO_IP)를 저장하며 시스템은 사용자의 IP 주소가 범위 내에있는 경우에만 인증합니다.

이제 테스터는 FROM_IP 및 TO_IP 값에서 숫자 0을 허용해서는 안된다고 지적했습니다. 이 응용 프로그램은 인터넷 연결 응용 프로그램이므로 공용 IP 주소 만 얻습니다.

테스터가 해당 유효성 검사를 제안하는 데 옳습니까? 167.23.0.1-167.23.255.255와 같은 범위 값에서 0을 가질 수없는 이유는 무엇입니까?


11

8
IPv6 주소에 수십 개의 0이 포함될 수있을 때 테스터가이를 제기한다는 것은 놀라운 일입니다. 추신 : IP 주소 필드가 너무 늦지 않은 경우 IPv6 주소에 맞도록 만들어야합니다. 앞으로 두통을 덜어 줄 것입니다.
Mark Henderson

2
127.0.0.1에 두 개의 0이 있습니까?
John Smith

1
그건 그렇고, whatismyipaddress.com나타나는 내 자신의 IP 주소 는 0을 가지고 있습니다 (67.xx.0.xx)
Ritesh

답변:


70

아니요, 완전히 잘못되었습니다.

실제로 이것은 유효한 IP 주소입니다. 192.168.24.0

있는 그대로 167.23.0.1.

점으로 구분 된 IP 주소를 분리하는 것은 순전히 사람이 편리하게 표시 할 수 있습니다. 192.168.1.42보다 기억하기가 훨씬 쉽습니다 3232235818.

컴퓨터에 중요한 것은 분리 (넷 마스크)입니다. 주소의 호스트 섹션이 완전히 0 또는 1로 설정된 호스트 주소를 갖는 것은 유효하지 않습니다.

따라서 넷 마스크가 호스트 부분에 일부 비트가 설정되는 한 192.168.24.0입니다. 다음 계산을 참조하십시오.


michael@challenger:~$ ipcalc 192.168.24.0/16
Address:   192.168.24.0         11000000.10101000. 00011000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

이 경우 어드레스 부분 (오른쪽)에는 2 비트가 설정됩니다. 이것은 192.168.0.0/16 서브넷에서 유효한 호스트 주소입니다.


michael@challenger:~$ ipcalc 192.168.24.255/16
Address:   192.168.24.255       11000000.10101000. 00011000.11111111
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet

이 경우, 어드레스 부분은 10 비트 세트 및 6 비트 세트 해제되어있다. 동일한 서브넷에있는 다른 유효한 호스트 주소입니다.


michael@challenger:~$ ipcalc 192.168.24.0/24
Address:   192.168.24.0         11000000.10101000.00011000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.24.0/24      11000000.10101000.00011000. 00000000
HostMin:   192.168.24.1         11000000.10101000.00011000. 00000001
HostMax:   192.168.24.254       11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255       11000000.10101000.00011000. 11111111
Hosts/Net: 254                   Class C, Private Internet

이 경우, 어드레스 부분은 제로 비트 세트를 갖는다. 192.168.24.0/24 네트워크에서 유효한 호스트 주소가 아닙니다.


11
IP 주소에 대한 "점으로 구분 된 쿼드"형식이 유일한 표현 형식이 아니라는 점을 추가하기 위해이 답변으로 넘어가겠습니다. 명령을 시도하십시오 ( ping 2130706432또는 ping 017700000001Windows에서도 가능). 결과에 놀라게 될 수 있습니다.
BMDan


1
여기서 말하는 것은 실제로 사실이지만 불행히도 접두사 길이에 관계없이 후행 0 (또는 255)이 나쁘다고 생각하는 많은 수의 사용자 인터페이스가있는 경우도 있습니다.
Theobroma Cacao

1
192.168.0.257잘못이지만, 192.168.257의 올바른 표현입니다 192.168.1.1(같이 192.11010305). 참조하십시오 inet_aton(3).
BMDan

2
@Raffael : 서브넷 0은 실제로 클래스 전체 라우팅 일로부터의 보류였습니다. 예를 들어, 클래스 B 네트워크 (129.97.0.0/16)가 있으면 서브넷 0은 비트 17 → X가 모두 0으로 설정된 네트워크입니다 (여기서 X는 서브넷의 길이 임). 따라서 네트워크 129.97.0.0/24는 서브넷이없고 초기에는 허용되지 않습니다. 요즘 (감사하게) 우리는 CIDR을 사용하고 그것에 대해 걱정하지 않습니다.
MikeyB

16

내가 오해하지 않는 한, 테스터는 잘못 죽었습니다. 유효한 IP 주소는 확실히 0을 가질 수 있습니다.


12

일반적으로 : 아니요, 주소에 0이 있는지 여부는 중요하지 않습니다.

그러나 테스터의 말에는 진실이 있습니다. 경우에 따라 이전 또는 중단 된 네트워크 장비는 마지막 octest에서 0을 가진 주소에서 올바르게 작동하지 않습니다. 이는 이전 클래스 풀 라우팅 규칙 때문입니다. Classfull 라우팅에서는 주소의 첫 옥텟에서 넷 마스크를 알 수 있습니다. 장비가 여전히 클래스 전체 라우팅 규칙을 따르는 경우 200.100.1.0/16과 같은 주소를 잘못 처리 할 수 ​​있습니다.


3

한 범위에서 510 개의 IP 주소가 필요하고 네트워크 주소가 192.1.1.0이고 호스트 IP 중 하나가 .0 IP 주소 인 / 23 서브넷이 있고 .0 주소 인 경우 테스터가 잘못되었다고 가정 해 봅시다. 호스트 주소입니다. / 24 네트워크를 가지고 있다면 그것이 틀렸다고 말하는 것이 옳을 것입니다.


2

매우 간단한 답변 제공 : IP 주소의 하나 이상의 0은 네트워크 또는 브로드 캐스트 주소가 아닌 한 호스트 주소에 완벽하게 유효합니다.

네트워크 및 브로드 캐스트 주소는 유효한 IP 주소이며 호스트가 사용할 수 없습니다.


1
XY0.255의 브로드 캐스트 주소는 어떻습니까?
Random832

2
호스트의 네트워크 주소를 사용할 수 있으며 그렇게하는 것은 한 번의 일반적인 "부패"테스트였습니다. 고맙게도, 그 이후로 유행에서 벗어났습니다. 비슷한 맥락에서 RFC 3021 은 / 31에서 "브로드 캐스트" "네트워크"주소 를 모두 사용할 수 있도록 허용 하지만 두 호스트 만 처리 할 때는이 용어가 다소 적용되지 않을 수 있습니다.
BMDan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.