ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크: 초보도 이해하길 바라는 CIDR블록이란?
    CS기초/Network 2022. 12. 4. 00:33
    728x90
    반응형

     

     CS는 추상적일수록 어려운데, 그래서 운영체제와 네트워크가 정말 어렵다. 공부할 수록 어려움. 근데 설명되어있는 자료도 무슨말인지 모르겠어서 차라리 내가 적어보자하는 취지에서 적는 포스팅 (위키백과는 언제나 함께보면 좋습니다.)

     

     IPv4기준, IP주소는 사람이 볼 때는 10진수 4자리로 표기되지만, 컴퓨터가 이해할 때는 2진수 32자리로 처리되며, 비트단위로 끊어서 10진수를 2진수로 변환한다. 즉, 10진수.10진수.10진수.10진수 -> 2진수 8자리.2진수 8자리.2진수 8자리.2진수 8자리 => 8x4 => 32비트로 변환된다 (참고로 IPv4가 4옥텟이라서 IPv6는 6옥텟이고 48비트인가라고 생각할 수 있는데 IPv6은 16진수를 사용하고 8옥텟으로 표현함. IPv6 위키문서는 안 어려우니 한번 읽어보길) (옥텟=바이트)

     

     CIDR이 왜 기존의 네트워크 클래스 문제를 해결할 수 있었는지를 이해하려면 기본적으로 네트워킹이 어떻게 이루어지는지, 그리고 네트워크 클래스가 무엇인지를 이해하고 있어야한다. 왜냐하면 CIDR은 라우터에게 IP주소 내에서 네트워크 IP주소를 알려주는 방법이니까 왜 네트워크 IP주소를 알아야하는지, 네트워크 IP주소가 뭔지 알아야하기 때문이다. 이게 뭔지 아시는 분은 맨 밑의 CIDR이란?으로 직행하시면 된다.

     

    컴퓨터가 다른 컴퓨터에게 자료를 요청하는 법

     기본적으로 내가 인터넷 주소창에 http://www.google.com을 입력하고 엔터를 친다는 행위는 내 컴퓨터가(사람x) world wide web(인터넷 서비스 중 하나. 인터넷 = www아님)라는 것을 통해 google.com에 거기 있는 자료를 가져와서 보여달라는 요청을 보내는 행위이다.

     

     하지만 내 컴퓨터는 당연히 google.com이 어딘지 모른다. 사실 우린 입력하지 않았지만 브라우저가 알아서 이 앞에 http:// (요즘은 https://)라는 프로토콜(궁금하다면 통신규약 검색)을 붙이고 일단 컴퓨터는 문자 자체를 모르니 google.com을 컴퓨터가 알 수 있게 IP주소로 변환한다. 브라우저는 이게 어딘지 알까? 당연히 모름. 하지만 브라우저는 이걸 DNS서버에서 조회해야한다는 것을 알고 있고 거기서 찾은 IP주소로 요청을 보낸다.

     

     이전 포트포워딩 포스팅에서 얘기했듯, IP주소는 우리 집 주소와같이 컴퓨터가 컴퓨터를 찾아갈 수 있는 주소이다. 사실 정확하게 현대 시스템을 따르면 라우터가 라우터를 찾아가는 주소임. 아무튼 따라서 통신을 하려면 IP주소 내에서 경부선을 타야하는지, 호남선을 타야하는지를 알려주는 네트워크 주소와 경부선을 탔으면 목적지는 부산역인지 진주역인지를 알려주는 host주소를 알아야한다. 그래서 google의 ip를 찾은 다음 미국 캘리포니아 바다 지하 깊숙히 있는 데이터 센터의 네트워크를 찾는다. 거기에는 해당 네트워크에서 통신할 수 있는 라우터라는 애가 있다. Host ip는 이 라우터의 번호라고 생각하면 된다. 라우터에는 라우팅 테이블이라는게 있는데, 라우터는 정보를 받으면 이 라우팅 테이블에서 

     

     사람이야 부산을 생각한 다음 경부선을 찾지만 컴퓨터는 역으로 생각할 수 없는 구조라는 것을 다시한번 되새기자. 컴퓨터는 천재이면서 바보고 바보면서 천재다.

     여기서 놀라운건 이 모든 과정이 (심지어 다 설명한 것도 아닌데도) 내가 클릭 한번을 하는 속도 안에 일어난다는 것이다. 기술의 발전이란.. 절레절레

     

    네트워크 클래스

     네트워크 클래스는 A부터 E까지 있는데 D,E클래스는 일반 네트워크에서 사용할 수 없는 클래스이므로 A~C까지만 보면 된다.

    • A클래스: 대규모 네트워크 주소
    • B클래스: 중형 네트워크 주소
    • C클래스: 소규모 네트워크 주소

      각 클래스별로 다음과 같이 네트워크 IP와 Host IP를 분할한다.

    • A클래스: 처음 8비트 (n.h.h.h)
    • B클래스: 처음 16비트 (n.n.h.h)
    • C클래스: 처음 24비트 (n.n.n.h)

     이렇게 분할한 이유는 소규모 네트워크일 수록 네트워크 갯수가 많기 때문이다. 소규모 네트워크라하면 한 네트워크 안에서 통신하는 장비의 개수가 적은 네트워크라고 생각하면 쉽다. 대표적으로 가정집이 C클래스에 속한다. 대규모 네트워크일 수록 host수가 많기 때문에 IP주소가 많아지고, 그래서 자리수를 많이 배정받은 것이다.

     여기서 그럼 컴퓨터가 IP주소만 보고 무슨 클래스인지 어떻게 아나요? 라는 질문이 들 수 있다. 각 클래스 별로 IP주소의 1옥텟의 범위를 다르게 쓰기 때문에 알 수 있다.

    • A클래스: 1 ~127.255.255.255 (10.0.0.0 ~ 10.255.255.255는 사설 IP, 나머지는 공인 IP)
    • B클래스: 128 ~ 191.255.255.255.255 (172.16.0.0  ~ 172.31.255.255는 사설 IP, 나머지는 공인 IP)
    • C클래스: 192 ~ 233.255.255.255 (192.168.0.0 ~ 192.168.255.255는 사설 IP, 나머지는 공인 IP)

     따라서 맨 앞자리가 128로 시작하면 B클래스이고,  128.15. 으로 시작하는 두 IP주소는 같은 네트워크에 속한다는 뜻이다. 따라서 이 두 IP는 서로 자유롭게 통신할 수 있다.

     

     그리고 여기서 네트워크 클래스의 문제점이 발생한다. 소규모 네트워크가 많아지면서 C클래스의 네트워크 수가 고갈되어 B클래스까지 할당받았는데도 부족해진 것이다. 따라서 클래스를 사용하지 않고 CIDR을 통해 네트워크 주소를 구분하는 방법으로 이 문제를 초큼 해소했다고 한다 (근데 그래도 부족해서 결국 IPv6를 병행해서 사용한다고 함).

     

    CIDR이란?

    (사이더라고 읽어야 한다. 난 왜 자꾸 씨아이디알이라고 읽을까)

     

     접미사 (/뒤에 나오는 숫자)를 가지고 IP주소를 분할하는 방법이다. 이해하고 문서를 다시 읽으니 왜 굳이 저렇게 어렵게 써놨을까 싶은데 그냥 "IP주소/네트워크 IP주소 자리수"이다. 근데 네트워크 자리수를 비트 단위로 표현한 것 뿐.

     /뒤의 숫자는 0에서 32까지의 정수로 이루어진다. 당연하다. IPv4가 32자리니까.

     

     예를 들어 10.10.1.44/27은 앞에서부터 27비트만큼이 네트워크 IP주소라는 뜻이고, 

     10을 2진수로 나타내면 1010이니까 1옥텟으로 표현하면 0001010임. 

     이런식으로

     10.10.1.44는 0001010.0001010.0000001.00101100

     10.10.1.32는 0001010.0001010.0000001.00100000

     10.10.1.90은 0001010.0001010.0000001.01011010

    이다.

     

    10.10.1.44/27과 10.10.1.32/27은 같은 네트워크에 있다고 할 수 있고, 10.10.1.90/27과는 다른 네트워크에 있다.

    그렇다면 문제.

    1. 10.10.1.44/25와 10.1.32/25와 10.10.1.90은 같은 네트워크에 있을까?

    2. 하나의 IP만 허용하고 싶을 때는 CIDR로 어떻게 표현할까? 반대로 모든 IP를 허용하고 싶을땐?

     

     결국 CIDR은 host ip영역의 일부를 네트워크 영역으로 사용하게 함으로써 부족한 ip문제를 해결함과 동시에 여러 개의 ip주소를 하나로 묶을 수 있는 방법을 제시함으로써 광역 라우팅 시 라우팅 테이블이 커지는 것을 방지해주는 역할도 하고 있다고 한다.

    728x90
    반응형

    댓글