[ip 주소] ip 주소와 서브넷 마스크

안녕하세요. 코딩신생아 입니다. 

최근 인턴을 하면서 로컬 환경에서 제가 개발한 부분을 돌리고, 

다른 분의 로컬 컴퓨터에서 제 IP로 프로그램을 실행하던 중 의도한대로 로컬 환경이 실행되지 않아서 관련 부분을 보던중, IP 관련 지식이 많이 부족하다는 것을 깨닫고 IP주소에 대해 정리하고자 글을 쓰게 되었습니다.

IP 주소란

IP의 역할은 '엔드투엔드 통신'을 하는 것이다. 네트워크 상의 어떤 PC에서 다른 PC로 데이터를 전송하는 것이 IP의 역할이다. 

IP로 데이터를 전송하기 위해서는 데이터에 IP헤더를 추가해 IP패킷으로 만들어야 한다. 

IP 패킷

IP헤더에는 IP주소를 이용해 출발지 주소와 도착지 주소를 나타낸다. 목적지가 다른 네트워크에 접속된 경우는 중간에 라우터가 존재하여 IP패킷을 출발지로부터 최종적으로 목적지 호스트까지 전송한다.

IP의 주소는 32bit로 나타내며 0과 1이 32개 나열된다. 이를 사람이 이해하기에는 한계가 있으므로 8비트씩 10진수 형태로 0~255 사이의 숫자를 '.'으로 구분해 4개로 나열하는 형태가 일반적인 IP주소이다. 이를 도트형 10진 표기라고 부른다.

IP 주소는 어떻게 결정되는가

IP주소는 이더넷 등의 인터페이스와 연관지어 설정한다. 그러므로, IP주소는 호스트 자체가 아니라 정확하게는 호스트의 인터페이스를 식별하는 것이다.

이 부분은 네트워크 OSI 7계층과 연관되므로 이 부분에 대해 자세한 내용은 후에 다루겠다. 

네트워크 부와 호스트 부

IP주소는 어느 네트워크의 어느 호스트라는 것을 식별하는 주소이다. 따라서 네트워크 부와 호스트 부로 구성된다. 

같은 네트워크 안에 있는 컴퓨터는 라우터 없이도 데이터 전송이 가능하고, 서로 다른 네트워크에 속한 컴퓨터들은 라우터를 통해 통신이 가능하다. 

그렇다면, 네트워크 부와 호스트 부를 식별하는 기준은 무엇일까? IPv4 도입 초기에는 클래스를 기준으로 나누었지만, 이 방식의 비효율성으로 인해 현재는 클래스에 구애받지 않고

서브넷 마스크 방식을 사용하고 있다.

  • 클래스 A

클래스 A는 IP주소 32비트 중 앞 8비트를 네트워크 부로, 다음 24비트를 호스트 부로 나눈 것이다. 

첫 비트는 클래스 A 식별 비트인 '0'이 할당되기 때문에 00000000~01111111 의 번호가 네트워크 부로 사용된다. 이를 십진수로 표기하면 0~127 번호가 할당된다. 

다음 24비트는 호스트 부로 할당되고, 할당 가능한 호스트 번호는 0.0.0 ~ 255.255.255 에서 2개를 뺀 것까지이다. 주소 관리 기관인 인터넷 할당번호관리기관(IANA, Internet Assigned Numbers Authority)에서 통합 관리하고 있는데, 클래스 A의 네트워크 부 1개를 할당하면, 신청자는 약 1,677만 개의 호스트 부를 정할 수 있게 된다. 

이 때문에 클래스 A는 주로 대규모의 네트워크를 구축하는 기관에 할당된다.

  • 클래스 B

클래스 B는 IP 주소 32비트 중 앞 16비트를 네트워크 부로, 다음 16비트를 호스트 부로 나눈 것이다. 맨 앞 2비트는 클래스 B의 식별 비트인 '10'으로 할당되기 때문에 10000000~10111111의 번호가 네트워크 부의 첫 8비트로 사용된다. 

따라서 네트워크 부 16비트를 십진수로 표기하면 클래스 B의 네트워크 부는 128.0~191.255 번호가 할당된다.

다음 16비트로 호스트 부가 할당되고, 할당할 수 있는 호스트 주소는 2^16 - 2 개 이다.

여기서 2를 빼는 이유는 호스트 부의 모든 비트가 0인 번호는 네트워크 주소로, 모든 비트가 1인 번호는 브로드 캐스트 주소라는 특수 목적으로 사용하기에 호스트와 라우터에는 할당하지 않는다.

 

네트워크 주소는 전체 네트워크에서 작은 네트워크를 식별할 때 사용하고, 

브로드캐스트 주소는 하나의 네트워크에 있는 모든 호스트에 동시에 데이터를 보낼 때 사용하는 전용 ip 주소를 의미한다.

  • 클래스 C

클래스 C의 경우도 비슷한 방식으로 주소 32비트 중 앞 24비트를 네트워크 부로, 다음 8비트를 호스트 부로 할당한다.

ip 주소의 클래스

 

서브넷팅과 서브넷

클래스 기반 주소 지정 방식에서 

클래스 A를 사용할 경우, 한 개의 네트워크당 약 1,677만 대의 호스트를 연결할 수 있는데, 실제로 많은 호스트들을 하나의 네트워크에 연결하는 경우는 없기에 많은 IP 주소가 사용되지 않고 낭비된다. 

IP주소를 효율적으로 활용하기 위해 클래스 A,B 와 같은 대규모 네트워크를 좀 더 작은 네트워크로 분할하는 것을 서브넷팅이라하고 분할된 네트워크를 서브넷이라고 한다.

서브넷팅 후

서브넷팅을 하면 네트워크 부 + 호스트 부로 구성된 클래스가 네트워크 부 + 서브넷 부 + 호스트 부 로 변경된다.

이는 아래 네트워크 부가 0인 클래스 A의 서브넷팅 후 그림과 같다.

서브넷팅이라는 논리적인 방법으로 분할된 네트워크는 라우터에 의해 물리적으로 구별된다. 서브넷팅 전 클래스 A 에 속하는 IP주소들은 라우터 없이 통신이 가능했지만, 서브넷팅 후에는 서로 통신을 위해서는 라우터가 필요하다.

왜 라우터가 필요한 것일까?

이를 위해서는 스위치라우터의 개념을 알아야 한다.

  • 스위치

목적지로 출발한 데이터를 중간에 적합한 경로로 스위칭해주는 역할을 한다. 스위치는 데이터 링크 계층에 속하여 MAC 주소 기반으로 동작한다.

  • 라우터

라우터 또한 적합한 경로를 찾아주는 역할을 하지만 IP주소를 기반으로 작동하여 네트워크 계층에 속한다.

둘의 차이는 우선 계층의 차이이다. 

서브넷이 다르면 보르드캐스트 도메인이 다르고, 다른 네트워크로 간주되어, 통신을 하기 위해서는 라우터가 필요하다.

더보기

예)

IP: 192.168.1.10/24

서브넷 마스크 : 255.255.255.0

네트워크 주소: 192.168.1.0

같은 서브넷에 속하므로, 직접 통신(스위칭을 통해) 가능

 

서브넷 마스크

이렇게 서브넷팅을 하는 경우, IP주소에서 어디까지가 네트워크 부, 호스트 부인지 구별할 수 있는 식별자가 필요하다.서브넷 마스크는 네트워크 부와 호스트 부의 경계를 식별하기 위해 만든 숫자이다.

IP 주소 32비트에 대응되어 비트가 네트워크 부에 해당하면 1, 호스트 부에 해당하면 0이 된다. 

서브넷 마스크 표기법
  • 십진수 표기법

32비트를 8비트씩 4그룹으로 나누어, 각 그룹을 십진수로 변환하고, 그룹 경계에 점을 넣어 표기한다.

  • 프리픽스 표기법

슬래시와 네트워크 부 비트수로 나타내는 프리픽스 표기법을 사용할 수 있다.

 

그렇다면 서브넷 마스크의 유용성은 무엇일까?

서브넷 마스크를 사용하면 8비트 단위가 아닌 1비트 단위로 네트워크 부를 구성할 수 있다.

클래스와 상관없이 호스트들의 규모에 맞게 네트워크 부와 호스트 부의 길이를 비트 단위로 변경할 수 있는 서브넷 마스크를 사용하여 IP주소를 할당한다.

서브넷 마스크는 맨 앞에서부터 차례로 네트워크 부에 해당하는 부분을 선택하기 때문에, 반드시 '1'과 연속한 '0' 으로 구성된다. 따라서 서브넷 마스크의 십진수 표기법이 가질 수 있는 값은 다음과 같다.

서브넷 마스크가 가질 수 있는 값

 

[참고]

[네트워크 주소 , 서브넷 마스크]