TL;DR
- IPv4 주소는 하나의 32비트 값이며, 점으로 구분한 십진수·이진수·16진수·패킹된 정수는 같은 값을 읽거나 처리하기 편하게 나타내는 표기법임.
- 점 표기 십진수는 32비트를 네 개의 8비트 옥텟으로 나눠 사람이 읽고 기억하고 입력하기 쉽게 만든 기본 표기법임.
- 이진수는 CIDR 접두사가 고정하는 선행 비트 수를 직접 보여 주므로 서브넷 계산의 논리를 확인하기에 적합한 표기법임.
- 16진수는 옥텟당 두 문자로 같은 8비트를 나타내며, 패킷 캡처 도구와 일부 라우터 설정 인터페이스, IPv6에서 사용되는 표기법임.
- 데이터베이스와 IP 범위 조회 시스템은 저장 효율과 간단한 범위 비교를 위해 주소를 32비트 정수로 저장하는 경우가 많으며, 변환 시 각 옥텟의 자릿값은 10이나 16이 아닌 256의 거듭제곱임.
하나의 32비트 숫자, 여러 표기법
- IPv4 주소는 근본적으로 하나의 32비트 숫자이며, 접하는 여러 표기법은 모두 같은 값을 맥락에 맞게 읽거나 처리하기 쉽도록 나타낸 방식임.
- 예시 주소
192.168.1.1의 표기법은 다음과 같음. - 점 표기 십진수:
192.168.1.1 - 이진수:
11000000.10101000.00000001.00000001 - 16진수:
C0.A8.01.01 - 패킹된 정수:
3232235777
점 표기 십진수: 사람이 읽기 쉬운 기본 표기법
- 32비트를 각각 8비트인 네 옥텟으로 나누고, 각 옥텟을
0–255범위의 십진수로 써서 점으로 구분하는 형식임. - 네 개의 작은 십진수는 32비트 이진 문자열이나 10자리 정수보다 읽고 기억하고 정확하게 입력하기 쉬움.
이진수: 실제 서브넷 마스크 계산에 쓰이는 표기법
- 일상적인 도구에서 주소를 저장하거나 표시할 때 이진수를 쓰는 경우는 드물지만, 서브넷 계산 논리를 명확하게 보여 주는 표현임.
- CIDR 접두사(CIDR prefix)는 고정되는 선행 비트의 개수를 나타내며, 주소를 십진수보다 이진수로 쓸 때 그 의미를 더 직접적으로 파악할 수 있음.
16진수: 간결하며 저수준 네트워킹 도구에서 흔한 표기법
- 16진수는 옥텟 하나의 8비트를 정확히 두 문자로 나타냄. 예를 들어 십진수
192는C0로 표기됨. - 패킷 캡처 도구, 일부 라우터 설정 인터페이스, 그리고 IPv4와 달리 16진수 그룹을 기본으로 사용하는 IPv6 주소에서 볼 수 있는 표기법임.
패킹된 32비트 정수: 데이터베이스가 실제로 저장하는 형식
- 많은 데이터베이스, 지리 위치 데이터 세트, IP 범위 조회 시스템은 주소를 네 개의 옥텟 대신 하나의 32비트 정수로 저장함.
- 단일 정수는 저장 효율이 높고 비교가 간단하므로, 주소가 범위에 포함되는지
시작값 <= IP <= 끝값으로 확인할 수 있음. 옥텟 네 개를 각각 비교할 때 생기는 번거로운 자리올림 처리는 필요하지 않음. 192.168.1.1을 패킹된 정수로 변환하는 계산은 다음과 같음.192 × 256³ + 168 × 256² + 1 × 256¹ + 1 × 256⁰3232235777
흔한 실수
- 점 표기 십진수를 실제 기반 형식으로 생각하는 오류임. 이는 같은 32비트 값을 나타내는 여러 동등한 표현 중 사람이 가장 읽기 쉬운 형식임.
- 옥텟을 패킹된 정수로 직접 변환하면서 계산을 틀리는 오류임. 각 옥텟의 자릿값은 10이나 16의 거듭제곱이 아니라 256의 거듭제곱임.
- 16진수 옥텟에는 정확히 두 문자가 필요하다는 점을 잊는 오류임. 대부분의 표기 관례에서 한 자리 16진수 값은 전체 바이트를 올바르게 나타내도록 앞에 0을 붙여
A가 아닌0A로 표기함.
자주 묻는 질문
- 데이터베이스는 왜 흔히 IP 주소를 익숙한 점 표기 대신 단일 정수로 저장하는가?
- 패킹된 정수는 저장 효율이 높고, 주소가 X와 Y 사이에 있는지 확인하는 범위 비교를 옥텟별 비교 로직 대신 간단한 숫자 연산으로 수행할 수 있음.
- 이진수 표기법은 네트워킹 도구에서 실제로 쓰이는가, 아니면 교육용에 불과한가?
- 서브넷 계산 논리에 실제로 쓰임. CIDR 접두사는 고정 비트 수를 직접 나타내므로 주소를 이진수로 쓸 때 가장 투명하게 확인할 수 있음.
- IPv4 옥텟 하나는 16진수 문자 몇 개로 나타내는가?
- 정확히 두 문자임. 8비트 값
0–255는 16진수 두 자리00–FF에 대응함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요