CS/Computer network

IPv4 Addresses (1)

ys_cs17 2022. 4. 27. 20:22
반응형

우리가 주로 쓰는 ip 주소는 ipv4이다. 이는 32비트로 이루어져있고, 우리는 이를 10진법으로 변환하여 표현한다.

네트워크 상에서 ip 주소는 몇 가지 예외를 제외하고 전 세계에 딱 1개이다.

사설망 구축 주소 192.168. ... . ... 또는 127로 시작하는 루프백 주소를 제외하고는 ip 주소는 unique하다.

 

밑에 Dotted decimal에 써있는 숫자가 우리가 주로 보는 ip 주소이다. ip는 사실 32비트짜리 숫자 1개라고 생각하면 된다. 하지만 사람들끼리 의사 소통하는 것이 불편하여 8비트씩 끊고 10진법으로 쉽게 풀어서 사용한다.

10진수를 2진수로 변경하는 과정이다.

위 문항들에서 각 틀린 부분을 찾아보자.

a. 첫 번째 부분은 0이 될 수 없다. 따라서 045를 45로 바꿔야 한다.

b. ip는 총 4개씩 끊어서 읽어야 한다. 5개가 되면 안된다.

c. 301과 같이 255보다 클 수 는 없다.

d. 2진법과 10진법이 혼용되면 안된다.

 

참고로 MAC address는 16진법을 사용한다.

 

만약 시작 주소가 146.102.29.0이고 마지막 주소가 146.102.32.255면 총 몇개의 주소를 가지고 있을까?

이는 큰 숫자에서 작은 숫자를 빼고 더하기 1을 해주면 된다.

따라서 3.255가 나오고 여기서 1을 더하면 총 개수가 나온다.

$$0.0.3.255 + 1 = 0.0.11.11111111 + 1 = 0.0.100.00000000$$

총 1024개가 된다.

 

그럼 반대로 시작 주소가 14.11.45.96이고, 이를 포함해서 32개의 주소가 있다. 그러면 마지막 주소는 무엇인가?

32 - 1은 31임으로 31을 더한다.

$$14.11.45.96+0.0.0.31 = 14.11.45.127$$

조금 더 복잡한 수로 계산해보자.

14.11.45.96이 시작 주소이며, 총 201개의 주소가 있는 경우 마지막 주소는 무엇인가?

$$14.11.45.96 + 200 = 14.11.45.296$$

 

IP 주소에도 bit-wise operation을 적용할 수 있다.

(1) AND: 255랑 만나게 되면 작은 숫자가 된다. 아니면 2진수로 바꿔서 연산해야 한다.

(2) OR: 255를 만나면 무조건 255이다. 아니면 2진수로 변환해서 연산해야 한다.

(3) NOT: 255에서 뺀 값이 된다. (합이 255가 되면 된다.)

 

IP에도 class가 A, B, C, D로 나뉘게 되는데 비율과 숫자는 다음 그림과 같다.

또한 Class 별로 구분하는 방법이 있다.

Class A: 맨 왼쪽이 0으로 시작한다. 따라서 맨 왼쪽 부분은 0부터 127까지의 수로 구성 된다.

Class B: 10로 시작한다. 128~191까지이다.

Class C: 110으로 시작한다. 192~223까지이다.

Class D: 1110으로 시작한다. 224~239까지이다.

Class E: 1111로 시작한다. 240~255까지이다.

 

IP는 2가지로 끊어서 읽는다. 앞 부분을 Netid라고 하고, 뒷 부분을 Hostid라고 하는데, 이는 class마다 다르다. 

주로 Class D는 multicast address 용도로 사용하고, Class E는 여유 공간으로 미래를 위해서 사용한다.

 

각 네트워크마다 대표하는 번호가 있고, 이를 Netid라고 한다. 그리고 여기에 속한 네트워크를 구분하는 것이 Hostid이다.

예를 들어 서울 전화번호 02는 Netid이고, 나머지 번호들이 Hostid라고 생각하면 된다.

 

Class A는 첫번째 부분만 Netid로 사용한다. Netid는 0부터 127까지로 범위가 되어 있고, 나머지 부분을 Hostid로 사용한다.

어떤 기관에서 Class id 1개만 구입하면 크기가 매우 커진다. 그 이유는 1600만개의 주소를 산 것과 같다. 구매를 했는데 낭비 되는 것이 있으면 양도가 안된다.

 

class B도 마찬가지이다. 하지만 C부터는 그렇게 낭비가 심해지지는 않는다.

우리가 실질적으로 사용하는  class는 A, B, C이다. D는 멀티 캐스팅, E는 여유 공간이기 때문이다.

 

각 클래스별 netid와 hostid의 비트수는 다음과 같다.

 

어떤 IP주소가 주어지면 어떤 class에 속하는지 찾아한다. class 별 netid, hostid의 범위가 다르기 때문이다. 이때 hostid가 전부 0이면 해당 주소의 첫 주소이다. 반대로 다 1이면 마지막 주소이고, 총 $2^{32-n}$개의 주소가 존재한다. 

 

73.22.17.25의 첫 주소, 마지막 주소를 찾아보자.

우선 맨 처음 73을 보면 class A라는 사실을 알 수 있다. 따라서 첫 주소는 73.0.0.0, 마지막 주소는 73.255.255.255이다.

위 그림과 같이 첫 주소와 마지막 주소는 라우터에 할당을 하지 않는다. 첫 주소는 network address를 의미하고, 마지막 주소는 broadcasting 전용으로 사용된다.

위 그림과 마찬가지로 주소가 1개 주어지면 그 주소에 해당하는 첫 주소, 마지막 주소를 알 수 있다.

라우터는 주소를 2개 할당 받는다. R1 라우터를 기준으로 라우터는 양쪽에 속하게 된다.

 

또한 네트워크 주소는 id처럼 사용된다.

라우터는 routing table을 갖는데, 이는 network address, interface로 구성되어 있다. 사실은 더 많은데 얘네가 가장 중요하다. 이를 통해 어디로 보내고, 어떤 인터페이스와 연결되어 있는지 확인한다. 만약 class A라면 테이블이 1600만개의 주소를 가지고 있어야하는데, 이는 현실적으로 불가능해서 대표 번호인 network address만 저장한다. 만약 50.3.5.1이면 network address는 50.0.0.0이 되고, 얘만 적어두면 된다. 따라서 수만가지 주소를 적지 않고, 네트워크 주소와 인터페이스만 가지고 있는다.

각 class마다 mask가 존재한다. mask와 AND 연산을 통해 목적지가 주어지면 네트워크 주소를 찾는다.

class A와 B 같이 많이 가지고 있는 애들은 한번에 저장을 하지 않는다. 보안성과 성능이 좋지 않기 때문이다. 따라서 하나의 네트워크를 여러개로 나누게 되는데, 이를 서브넷이라고 부른다.

학교 전화 번호로 예를 면 같은 전공을 담당하는 부서의 번호가 같은 경우이다. 예를 들어 032-860-7 로 시작하면 컴퓨터 공학과, 032-860-8로 시작하면 기계공학과 처럼 이렇게 효율적으로 나눈 것을 생각하면 된다.

이를 네트워크로 한다고 하면 4개의 서프넷을 만든다고 가정한다면 00, 01, 10, 11로 나눌 수 있다.

서브넷 구조를 밖에서는 몰라도 된다. 라우터가 관리하기 때문이다. 하지만 목적지가 어느 서브넷에 속하는 지는 알고 있어야한다.

 

4개의 서브넷을 나누면 총 18개의 비트까지 봐야한다. 주소가 주어지면 서브넷 마스크와 AND를 하면 네트워크 주소가 나온다.

 

 

반응형