네트워크

서브넷 마스크와 CIDR

개발정리 2024. 10. 16. 21:18

 

 

ip주소는 크게 네트워크 아이디(Network ID), 호스트 아이디(Host ID) 두 파트로 나뉜다. 서브넷 마스크(Subnet Mask)를 기준으로 네트워크 아이디와 호스트 아이디를 나눌 수 있다.

 

예를들어, 192.168.0.10이라는 IP가 있을 때 각 진수로 표시하면 아래와 같다.

 

1) 2진수

1100 0000 / 1010 1000 / 0000 0000

 

2) 16진수

1111(F) 1111(F) / 1111 1111 / 1111 1111 

 

3) 위 둘을 AND 연산하면 아래와 같은 값이 나온다.
1100 0000 / 1010 1000 / 0000 0000

 

결국, 1)과 3)의 값이 동일하다는 것을 알 수 있다. 

이는 주소에서 서브넷 마스크 값을 가지고 bit단위로 AND 연산을 한 것이다. 

 

 

실제 네트워크에서는 어떠한 패킷이 왔을 때, 서브넷 마스크 (1111 1111 /... )값과 AND 연산을 한다. 연산을 하여 네트워크 아이디가 나와 일치하다면 해당 네트워크로 유입된다는 것으로 판단을 하게된다. 

 

bit 단위로 AND 연산을 하여 호스트 아이디를 잘라내는 것을 Mask 연산이라 한다. Mask 연산을 수행해서 네트워크 아이디가 같다면 이 패킷은 우리 네트워크로 오는 패킷임을 알게되는 것이다. 

 

 

요약하자면, 패킷이 오면 서브넷 마스크 값으로 (1111.1111 ....) bit 단위 Mask 연산을 한 후 호스트 아이디 값을 빼고, 나머지 네트워크 아이디를 AND 연산을 하여 나의 네트워크와 같은 네트워크인지를 판단한다. 같으면 패킷을 수용하는 것이다. 

 

 

이 때 문제는 호스트 아이디의 구분 문제이다. Mask 연산을 어디서 부터 어디까지 할 것인지에 대한 문제가 있었다. 이를 해결하기 위해 주소 각 자리에 A/B/C 클래스로 구분하였다. (빨간색 박스 A 클래스, 분홍색 B 클래스, 노란색 C 클래스)

 

 

하지만 현재는 이와 같은 방법을 쓰지 않는다.

 

 

...

 

 

현재는 ClDR (Classless Inter-Domain Routing) 개념을 사용한다. 이는 클래스 없이 사용하는 개념이다. 이는 IP 끝에 네트워크 아이디가 몇 비트까지인지 표시를 두는 방식이다.

 

여기에 더 해 예전엔 Mask 연산을 한 후 AND 연산을 하여 값을 비교했다면, 현재는 표시된 비트 수와 == (관계 연산)을 하여 같은지 찾아낸다. 

 

 

위와 같은 표기가 더 직관적으로 이해하기 쉬워 많이 사용되고 있다. 

 

 

 ...

 

 

정리

 

1) 패킷이 오면 해당 네트워크의 패킷이 맞는지 확인이 필요하다.

2) 이 때 사용되는 것이 서브넷 마스크이다. 

3) 서브넷 마스크의 값은 16진수 F (1111 1111  ....)로 구성되어 있다.

 

4) 패킷이 오면 서브넷 마스크 값과 bit 단위의 Mask 연산을 한 후 호스트 아이디 값을 뺀다. 그 다음 나머지 네트워크 아이디를 AND 연산하여 현재 네트워크와 패킷의 네트워크가 같은지 확인한다.

5) 위 방법은 구식이며 문제가 있다. IP 주소에서 Mask 연산을 어디부터 어디까지 할 것인가 이다. 이를 위해 A/B/C 클래스 값을 주어 구분하였다.

 

6) 현재는 CIDR (클래스가 필요없는) 방법을 많이 쓴다.

7) IP 주소 끝에 네트워크 아이디가 몇 비트까지인지 표시한다.

8) 그리고 관계 연산 (==) 을 통해 값을 비교하여 패킷을 수용한다.

 

'네트워크' 카테고리의 다른 글

Host 자신을 가리키는 IP주소  (0) 2024.10.17
Broadcast IP주소  (1) 2024.10.17
IPv4 Header 형식  (1) 2024.10.14
TCP/IP 송수신 구조  (1) 2024.10.12
계층별 데이터 단위  (0) 2024.10.10