IPv4 주소의 일부를 0으로 설정하는 것이 유효합니까? 사용자의 IP 주소가 범위

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을 가질 수없는 이유는 무엇입니까?



답변

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

실제로 이것은 유효한 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 네트워크에서 유효한 호스트 주소가 아닙니다.


답변

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


답변

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

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


답변

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


답변

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

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


답변