본문 바로가기

네트워크/네트워크 용어 (DICT)

네트워크와 관련된 넓고 얕은 지식 (IP 편)

반응형
찾고 싶은 내용이 있으시면 Ctrl + F로 찾아보시는 것을 추천해요. 
혹여나 틀린 내용이 있다면, 댓글이나 이메일로 알려주시면 감사하겠습니다.

 

모바일컴퓨팅

  오늘 포스팅할 내용은 대학에서 강의 중인 내용이다. 요새 시험기간이라 별도로 포스팅하기도 어렵고 해서, 겸사겸사 강의 내용을 리마인드할 겸 포스팅하기로 했다. 일단 강의는 "모바일컴퓨팅" 이라는 강의인데, 네트워크 레이어를 훑어가며 프로토콜 하나하나 작동 원리와 취약점, 연관된 내용 등 다양하게 배우고 있다.

  3학년때 배웠던 컴퓨터네트워크의 연장선이자 조금 심화된 내용을 강의하시는 것이 목적인 듯 하다. 아무래도 같은 분야 (네트워크)에 대한 강의를 다른 교수님 께서 하시다보니 학생들의 적극적인 건의가 없다면 중복되는 내용이 있는 것은 불가피하다고 생각한다. 어쨌든 복습의 의미로도 나쁘지 않은 것 같다.

 

IP ADDRESSING

IP에서 사용하는 주소 디자인에 관한 내용. IP에서 사용하는 주소가 가져야하는 구조와 목적에는 무엇이 있을까?

  1. 그룹별로 체계적인 구조를 가져야한다.
  2. Addressing, Forwarding, Routing의 3가지 기능을 보장할 수 있어야한다.
  3. 이러한 주소는 Unique하며 Global Address이어야 한다.
    • 예외적인 개념으로 DHCP와 NAT가 있다.
    • 둘 다 Local에서만 사용할 수 있는 추상적인 IP를 사용해야 한다.
    • 그래서 NAT의 경우 IP Address의 규칙을 붕괴시킨 나쁜 X이라는 교수님의 강조

위의 개념을 고려해서 만들어진 IP Address 는 다음과 같은 특징을 갖는다.

  1. 32bit 체계
    • 사람이 보기 편하게 10진수로 표현도 가능하다. 이 때는 8bit씩 묶어서 Dot (.)으로 구분한다.
    • ex) 192.168.10.1 (Dotted Decimal Notation)
  2. Network prefix + Host number의 구조를 갖고 있다.
    • IP Address의 계층적인 구조 구현을 위해서 그룹별로 IP Address를 묶어서 표기하는 방식이 있는데, 1993년 까지는 Classful IP Address*를 사용했다.
    • 1993년 이후부터는 netmask*의 개념을 사용하기 시작했다.
  3. 총 20byte의 Header Size
    • IP Header

IP 헤더는 이렇게 생겼다.

 

Classful IP Address

앞서 이야기한 Classful IP Address는 다음 그림과 같은 형태로, 32bit 중에서 앞의 5비트를 이용해 A,B,C,D,E 그룹으로 IP Address를 묶는 개념이다.

 

  이런 방식인데, 실질적으로 사용하는 클래스는 A, B, C이다. 음.. 보면 알 수 있듯이, 클래스 별로 사용할 수 있는 IP Address의 수가 정해져있다.

  A 클래스의 경우는 24bit로 2^24 (약 1600만), B 클래스는 2^16 (약 6만), C 클래스는 2^8 (256개)의 호스트 수를 운용할 수 있다. 여기서 Classful 방식의 문제가 나오는데, 바로 효율적인 사용이 어렵다는 것. 당장 우리 주변의 환경만 봐도 256개의 호스트를 모두 채울 수 있는 환경은 잘 나오지 않는다. 그리고 두 클래스 간의 격차도 너무 크다. 

이렇다보니 특정 클래스의 사용이 몰리고 결국 사용할 수 있는 IP가 고갈되어 버리는 현상이 나타난다.

(엄밀히 말하면 IP의 고갈은 Classful 방식의 문제라기보다는 근본적으로 32bit 자체가 너무 적은 수이기 때문이지만,)

 

C 클래스 그만 괴롭혀

어쨌든 중요한 건 비효율적이라는 것.

Subnet

  그래서 1993년 이후 등장한 Subnet, 기본적인 개념은 기존의 Network prefix + Host number 형식의 구조에서 Host part를 다시 쪼개서 Network part를 확장하는 방식.

 

개개인 네트워크 관리자가 임의로 subnet number를 설정해서 사용할 수 있었다. 그러면 Subnet을 사용해서 얻는 이익은?

  1. 주소의 효율적인 사용
    • 위 그림에서 예상해볼 수 있듯이, 적은 호스트를 운용하는 네트워크라면 subnet number를 늘려 적절한 수의 IP만 사용하는 것이 가능하다.
  2. 보안과 트래픽 분산
    • Subnet을 나누는 행위를 Subnetting이라고 하는데, Subnetting의 결과로 만들어진 각기 네트워크들은 당연히 서로 다른 네트워크로 취급되며 ARP등의 불필요한 트래픽이 닿지 않게 할 수 있다.
    • 그러므로 Subnetting으로 나누어진 네트워크는 외부에서 보이지 않으며, 게이트웨이 관리자가 내부적으로 설정한 것이기에 포워딩만 제대로 이루어진다면 외부에서 알 필요가 없다.
  3. 라우터의 부하 감소 / 확장 용이
    • 갑자기 라우터 이야기가 나왔는데, Subnet을 사용하게된 시점부터 라우터는 라우팅 ( 어디로 패킷을 보내야하는지 ) 에 대한 고민을 덜 해도 된다.
    • prefix에 해당하는 주소만 구분해서 보내주면 되기 때문이다. 거기에 같은 네트워크로 호스트가 추가되더라도 어차피, 이미 어디로 보내야하는지 아는 네트워크라면 어디로 보내야하는지 고민하지 않아도 된다.

  단점이라고 하기는 어렵지만, 어쨌든 익숙하지 않은 사용자는 Subnetting된 주소를 단번에 이해하기 어려울 수도 있다. 그래서 Subnetting 예제가 상당히 많다. CISCO社의 가장 낮은 단계 자격증인 CCNA에서는 Subnetting 문제를 항상 출제할 정도로 기본 중의 기본 개념으로 자리잡고 있다.

Subnet 예제

Q. IP Address 10.10.1.44/27과 10.10.1.90/27의 Netwrok 주소와 Boradcast 주소를 각각 구하시오. (/27)

A. 10.10.1.44의 경우, 

 

10.10.1.44의 네트워크 파트, 나머지는 호스트 파트

  표시된 부분이 네트워크 파트이다. 정확히는 A클래스에 속하는 가장 앞에 8bit를 제외하고 나머지 19bit가 Subnet bit 이다. 어쨌든, 10.10.1.44/27은 32개의 가용한 호스트 갯수를 가지고 있으며, 2^19개의 서브넷 갯수를 갖고 있다. 라고 주저리주저리 보다는... 이렇게 하는 게 쉽겠다.

  prefix 즉, IP 주소 뒤에 붙는 숫자는 Network Part의 Bit 수를 의미한다. 즉 여기서는 1이 앞에서부터 27개 채워져 있다는 소리다. 호스트는 32 - 27인 5bit 라는 이야기. 

  호스트가 5bit라는 것은, 가용한 호스트의 수가 2^5개 즉, 32개 임을 의미한다. 10.10.1.44라는 IP주소는 32개씩 묶인 호스트 범위 중 어딘가에 속한다는 것이다. 편의상 각 8bit 묶음을 A,B,C,D 클래스라고 부르겠다.

  D 클래스로 시작하는 가장 처음에 나타나는 IP 주소 범위는 무엇일까? 10.10.1.0 ~ 10.10.1.31이다. 그렇다면 두번째는 ? 10.10.1.32 ~ 10.10.1.63이 될 것이다.

 

10.10.1.44의 Network 주소는 10.10.1.32 / Broadcast 주소는 10.10.1.63이다.

 

  너무 억지로 때려맞히는 느낌인데, 사실 이런 간단한 예제의 경우에는 이렇게 간단히 암산으로 구할 수 있기 때문에, 개인적으로는 이게 편한 것 같다.

  원래, Subnet Mask의 의미를 살려서 설명하면,  구하려는 IP 주소의 이진수와 Subnet Mask의 이진수를 And 연산을 하면 구하려는 IP 주소의 Network 주소를 알 수 있다.

 

0000 1010 / 0000 1010 / 0000 0001 / 0010 1100 (10.10.1.44)
1111 1111 / 1111 1111 / 1111 1111 / 1110 0000 (255.255.255.224 = prefix /27)
---------------------------------------------------------------------------------------------------------------------------
0000 1010 / 0000 1010 / 0000 0001 / 0010 0000 (10.10.1.32 네트워크 주소)

 

  AND 연산의 의미는 필요한 부분을 취하고 나머지는 버리는 의미이다. Subnet Mask는 IP 주소의 Network part가 어디까지인지 Bit로 표시되어 있고, 나머지는 0으로 셋팅되어있다. 이를 IP 주소와 AND 연산하면 IP주소의 Host part는 버리고, Network part만 살려둔 결과가 나오는 것이다.

그러면, 10.10.1.90 도 쉽게 구할 수 있다!

구하지는 않을 것이다.(?)

CIDR

CIDR은 Classless Inter-Domain Routing의 약자로 IP 주소 뒤에 /로 구분하여 Network prefix의 길이를 표기하는 방법이다. 사실 본문에서 이미 쓰고 있었다. 10.10.1.44/27 이런식으로..

Special IP Address

  1. Loopback interface
    • 127/8 (127.0.0.1 ~ 127.255.255.255) 
    • 인터페이스 자기 자신을 지칭하는 주소로 사용되며, "localhost'라는 이름으로도 사용된다.
  2. Broadcast address
    • IP 주소의 Host number를 모두 1로 채운 주소를 의미한다.
    • 동일한 네트워크에 모두 뿌려지므로 Broadcast라고 한다.
  3. Private Address space
    • 사설망이나 테스트 목적에서 사용되는 주소이다. (RFC 1918)

RFC 1918

 

반응형