IP 주소는 네트워크에서 목적지를 찾기 위한 주소다.
그런데 IP 주소를 그냥 하나의 숫자처럼 보면 조금 헷갈린다.
예를 들어 192.168.10.25라는 주소가 있다고 해보자.
처음 보면 이 주소 전체가 한 대의 컴퓨터를 가리키는 것처럼 보인다.
하지만 실제로 IP 주소는 크게 두 부분으로 나누어 생각한다.
네트워크 주소와 호스트 주소다.
네트워크 주소는 “어느 네트워크에 속해 있는가”를 나타내고,
호스트 주소는 “그 네트워크 안에서 어떤 장비인가”를 나타낸다.
비유하자면 주소에서 동네 이름과 집 번호를 나누는 느낌이다.
서울시 강남구 어떤 동네까지가 네트워크 주소라면,
몇 번 집이 호스트 주소에 가깝다.
컴퓨터가 통신할 때도 비슷하게 생각한다.
“상대방이 나와 같은 동네에 있나?”
“아니면 다른 동네라서 게이트웨이를 통해 나가야 하나?”
이 판단을 하기 위해 IP 주소를 네트워크 부분과 호스트 부분으로 나누어 본다.
IPv4 주소는 우리가 흔히 보는 이런 형태의 주소다.
192.168.10.25
숫자 4개가 점으로 구분되어 있다.
각 숫자는 0부터 255까지의 값을 가질 수 있다.
사람이 보기에는 192, 168, 10, 25처럼 나뉘어 보이지만,
컴퓨터 입장에서는 결국 0과 1로 이루어진 32비트 값이다.
즉 IPv4 주소는 총 32비트 주소다.
다만 블로그 글을 쓰면서 매번 2진수로 풀어 쓰면 너무 피곤해진다.
지금은 이렇게만 잡고 가도 충분하다.
IPv4 주소는 32비트이고,
그 안에서 앞쪽 일부는 네트워크를 나타내고,
뒤쪽 일부는 그 네트워크 안의 호스트를 나타낸다.
여기서 중요한 건 IP 주소만 봐서는 어디까지가 네트워크 부분인지 알 수 없다는 것이다.
그래서 필요한 것이 서브넷 마스크다.
서브넷 마스크는 IP 주소에서 어디까지가 네트워크 주소인지 알려주는 값이다.
예를 들어 이런 설정이 있다고 해보자.
IP 주소: 192.168.10.25
서브넷 마스크: 255.255.255.0
255.255.255.0이라는 서브넷 마스크는 앞의 세 묶음, 즉 192.168.10까지를 네트워크 부분으로 보겠다는 뜻으로 이해할 수 있다.
그러면 이 IP 주소는 이렇게 나누어 볼 수 있다.
네트워크 부분: 192.168.10
호스트 부분: 25
그래서 192.168.10.25는
192.168.10.0 네트워크에 속한 25번 호스트처럼 볼 수 있다.
물론 실제 내부에서는 비트 단위로 계산하지만, 처음에는 이 정도 감각이 더 중요하다.
내 컴퓨터가 어떤 서버로 데이터를 보내려고 한다고 해보자.
목적지 IP가 192.168.10.50이다.
내 설정은 이렇다.
내 IP 주소: 192.168.10.25
서브넷 마스크: 255.255.255.0
목적지 IP 주소: 192.168.10.50
서브넷 마스크가 255.255.255.0이므로 앞의 세 묶음이 네트워크 부분이다.
내 네트워크는 192.168.10.0이다.
목적지도 192.168.10.0 네트워크에 있다.
그러면 컴퓨터는 이렇게 판단할 수 있다.
목적지가 나와 같은 네트워크 안에 있네.
그럼 굳이 라우터를 타고 밖으로 나갈 필요는 없겠다.
같은 LAN 안에서 직접 보내면 되겠다.
반대로 목적지 IP가 192.168.20.50이라면 어떨까?
내 IP 주소: 192.168.10.25
서브넷 마스크: 255.255.255.0
목적지 IP 주소: 192.168.20.50
내 네트워크는 192.168.10.0이다.
목적지는 192.168.20.0 네트워크에 있다.
앞의 세 묶음이 다르다.
그러면 컴퓨터는 이렇게 판단한다.
목적지가 내 네트워크 안에 없네.
그럼 내가 직접 보낼 수 없겠다.
기본 게이트웨이로 보내야겠다.
여기서 중요한 건 IP 주소와 서브넷 마스크가 단순히 “내 주소가 뭔지”를 알려주는 용도만은 아니라는 점이다.
이 둘은 함께 사용되어
목적지가 같은 네트워크에 있는지, 다른 네트워크에 있는지 판단하는 기준이 된다.
서브넷 마스크는 255.255.255.0처럼 쓸 수도 있지만, CIDR 표기법으로 더 간단하게 표현하기도 한다.
예를 들면 이런 식이다.
192.168.10.25/24
여기서 /24는 앞에서부터 24비트가 네트워크 부분이라는 뜻이다.
IPv4 주소는 총 32비트다.
그중 앞의 24비트를 네트워크 주소로 쓰고,
나머지 8비트를 호스트 주소로 쓰겠다는 의미다.
/24는 255.255.255.0과 같은 의미로 볼 수 있다.
자주 보게 되는 예시는 이런 것들이다.
/8
/16
/24
/32
/8은 앞의 8비트가 네트워크 부분이다.
/16은 앞의 16비트가 네트워크 부분이다.
/24는 앞의 24비트가 네트워크 부분이다.
/32는 주소 전체 32비트가 딱 하나의 호스트를 가리키는 경우라고 볼 수 있다.
처음에는 /24 정도부터 익숙해지는 게 좋다.
개발이나 인프라 설정을 보다 보면 이런 표현을 자주 만난다.
192.168.0.0/24
10.0.0.0/16
172.16.0.0/12
0.0.0.0/0
특히 클라우드나 쿠버네티스, 보안 그룹, 라우팅 테이블 같은 걸 보다 보면 CIDR 표기법이 자주 나온다.
처음엔 그냥 알 수 없는 숫자처럼 보이지만, 결국 의미는 이것이다.
이 IP 범위를 하나의 네트워크 범위로 보겠다.
서브네팅은 하나의 큰 네트워크를 더 작은 네트워크들로 나누는 것이다.
예를 들어 192.168.10.0/24라는 네트워크가 있다고 해보자.
이 네트워크 안에는 여러 호스트를 둘 수 있다.
그런데 모든 장비를 하나의 네트워크에 다 넣는 것이 항상 좋은 것은 아니다.
부서별로 나누고 싶을 수도 있고,
서버 영역과 사용자 PC 영역을 분리하고 싶을 수도 있고,
보안 정책을 다르게 적용하고 싶을 수도 있다.
이럴 때 큰 네트워크를 더 작은 단위로 쪼갠다.
비유하자면 하나의 큰 사무실을 칸막이로 나누는 느낌이다.
공간은 하나의 건물 안에 있지만,
개발팀 자리, 운영팀 자리, 회의실, 서버실처럼 구역을 나누는 것이다.
네트워크도 마찬가지다.
하나의 큰 IP 대역을 목적에 맞게 더 작은 네트워크로 나누면 관리하기가 쉬워진다.
예를 들어 이런 식으로 나눌 수 있다.
192.168.10.0/24
이 큰 네트워크를 더 작은 네트워크로 나누면
192.168.10.0/25
192.168.10.128/25
처럼 나눌 수 있다.
여기서 /24보다 /25는 네트워크 부분이 1비트 더 길다.
네트워크 부분이 길어졌다는 것은, 호스트에 사용할 수 있는 부분이 줄어든다는 뜻이다.
즉 더 작은 네트워크가 된다.
처음부터 서브네팅 계산을 깊게 파고들 필요는 없다고 생각한다.
중요한 흐름은 이거다.
네트워크 부분을 더 길게 잡으면,
하나의 네트워크 안에 들어갈 수 있는 호스트 수는 줄어든다.
대신 네트워크를 더 잘게 나눌 수 있다.
반대로 네트워크 부분을 짧게 잡으면,
하나의 네트워크 안에 더 많은 호스트를 넣을 수 있다.
대신 네트워크 단위가 커진다.
내 컴퓨터가 어떤 목적지로 데이터를 보내려고 할 때, 머릿속에서는 대략 이런 판단이 일어난다고 볼 수 있다.
1. 내 IP 주소를 확인한다.
2. 내 서브넷 마스크를 확인한다.
3. 목적지 IP 주소를 확인한다.
4. 내 네트워크 주소와 목적지의 네트워크 주소를 비교한다.
5. 같은 네트워크면 같은 LAN 안에서 보낸다.
6. 다른 네트워크면 기본 게이트웨이로 보낸다.
여기서 서브넷 마스크가 빠지면 판단 기준이 사라진다.
IP 주소가 192.168.10.25라고 해서 무조건 192.168.10까지가 네트워크라는 뜻은 아니다.
/24라면 192.168.10.0 네트워크로 볼 수 있지만,
/16이라면 192.168.0.0 네트워크로 볼 수도 있다.
같은 IP 주소처럼 보여도 서브넷 마스크에 따라 네트워크 범위가 달라진다.
여기서 중요한 건 IP 주소는 혼자 쓰이지 않는다는 점이다.
IP 주소는 서브넷 마스크와 함께 봐야 한다.
IP 주소 = 내 위치
서브넷 마스크 = 어디까지를 같은 네트워크로 볼지 정하는 기준
CIDR = 그 기준을 짧게 표현하는 방법
서브네팅 = 네트워크를 목적에 맞게 더 잘게 나누는 작업
결국 IP 주소를 나눈다는 것은 단순히 숫자를 쪼개는 일이 아니다.
컴퓨터가 통신하기 전에
“이 목적지가 내 주변에 있는가, 아니면 밖으로 나가야 하는가”를 판단하기 위한 기준을 세우는 일이다.