IP 주소

개발(공부) 자국·2021년 9월 21일
0

네트워크 통신을 할 때 3계층에서 필요한 IP 주소에 대해 알아보려고 한다.

IP 주소

3계층에서는 3계층 장비인 라우터가 이해하는 논리 주소인 IP 주소를 사용한다.

3계층 주소의 특징

  • 사용자가 변경 가능한 논리 주소다.
  • 그룹을 의미하는 네트워크 주소와 호스트 주소로 나뉜다.

IP 주소 체계

주로 IP 주소는 32비트인 IPv4 주소를 사용한다. IPv4, IPv6 두 체계가 사용되고 있다. 여기서는 IPv4에 대해서 다뤄보려고 한다. IPv4는 8비트 단위를 하나의 옥텟이라고 부른다. 각 옥텟은 .점으로 구분하며 10진수로 표기한다. 하나의 옥텟은 8비트이기 때문에 00000000 ~ 11111111 → 0 ~ 255 까지 사용할 수 있다.

IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉜다.

  • 네트워크 주소
    호스트들을 모은 네트워크를 지징하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 한다.
  • 호스트 주소
    하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소. 로컬 네트워크를 구성하는 하나의 네트워크.

Classful 과 Classless

Classful IP

IP 주소는 네트워크 주소와 호스트 주소를 나누는 구분자가 이동할 수 있어서 네트워크의 크기가 달라질 수 있다. 네트워크의 크기에 따라 필요한 호스트 IP 개수를 할당 할 수 있는 클래스(class) 개념을 도입했다. 크게 A, B, C 클래스로 나뉘고 규모에 따라 나뉘게 된다.

A 클래스는 1개의 옥텟이 네트워크 주소를 나타내고 3개의 옥텟이 호스트 주소를 나타낸다. 첫 번째 .이 나누는 구분자가 된다. 그렇게 255.0.0.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 16,777,216개의 주소를 가질 수 있게 된다.

B 클래스는 2개의 옥텟이 네트워크 주소를 나타내고 2개의 옥텟이 호스트 주소를 나타낸다. 두 번째 .이 나누는 구분자가 된다. 그렇게 255.255.0.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 65,536개의 주소를 가질 수 있게 된다.

C 클래스는 3개의 옥텟이 네트워크 주소를 나타내고 1개의 옥텟이 호스트 주소를 나타낸다. 세 번째 .이 나누는 구분자가 된다. 그렇게 255.255.255.0 ~ 255.255.255.255 까지 정해진 네트워크 주소에 호스트 주소 256개의 주소를 가질 수 있게 된다.

IPv4의 한계로 IPv6 등장

IPv4의 가장 큰 문제는 기하급수적으로 늘어나는 IP 주소 요구였다. 43억개 중 5억개 정도는 예약되어 있는 IP이기 때문에 37억개 정도를 나눠 사용해야 하는데 이는 턱없이 부족했다. 이를 해결하기 위한 방안이

  • 클래스리스, CIDR(Classless Inter-Domain Routing) 기반의 주소체계
  • NAT와 사설 IP
  • IPv6

이 세가지였다.

Classful IP의 한계로 Classless IP 등장

Classful의 단점중 하나는 각 클래스에서 모든 IP를 다 사용하지 않아서 낭비되는 IP가 많았다. 네트워크 주소에 사용하지 않는 호스트를 다른 곳에서 사용할 수 없었기 때문에 옥텟 단위의 3단계로 나누는 클래스로는 개선이 어려웠다. 그렇게 class 개념을 버리고 현재 사용하고 있는 classless 주소체계를 사용하게 되었다.

classless는 classful처럼 옥텟만으로 네트워크 주소와 호스트 주소를 나눌 수 없다. 낭비를 줄이기 위해서 비트 단위로 쪼개 사용하는 방법이기 때문이다. 네트워크 주소와 호스트 주소를 나누는 구분자로 서브넷 마스크를 사용하였다.

클래스리스 기반의 IP 네트워크에서는 네트워크를 표현할 때 서브넷 마스크가 반드시 있어야 한다.

서브넷 마스크를 이용하여 네크워크 주소를 구할 때는 0과 1의 And 연산을 이용하여 구한다.

호스트 주소의 각 옥텟을 8비트로 나타낸 주소와 서브넷 마스크를 8비트로 나타낸 주소 각각의 비트를 & 연산을 통해 네트워크 주소를 알 수 있다.

서브넷 마스크 표현 방법

1로 나타낸 부분의 비트 수를 표시하여 나타낸다.

이전의 A 클래스를 비트 단위로 표현하면 /8 로 표현하고

B 클래스는 /16 로 표현하고

C 크래스는 /24 로 표현할 수 있다.

A 클래스 → 11111111.00000000.00000000.00000000

B 클래스 → 11111111.11111111.00000000.00000000

C 클래스 → 11111111.11111111.11111111.00000000

서브네팅

클래스의 기준을 무시하고 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 서브네팅이라고 한다. 부여된 주소를 다시 분할 하는 방법이다. 서브네팅으로 서브넷을 나누어 사용할 수 있다.

네트워크 사용자의 서브네팅

  • IP와 서브넷 마스크 둘다 이용하는 방법


IP 와 서브넷 마스크 각각의 옥텟을 2진수 주소 변환한다.


2진수로 바꾼 IP와 서브넷 마스크를 &&로 연산한다. 연산한 결과는 네트워크 주소가 된다.(3번)
네트워크 주소에 서브넷 마스크의 0 부분과 같은 위치를 1로 바꾸면 브로드 캐스트 주소가 된다.(4번)


네트워크 주소의 마지막 숫자에 1을 더한 주소가 이용할 수 있는 첫번째 주소가 된다.(5번)
브로드 캐스트 마지막 숫자에 1을 뺀 주소가 이용할 수 있는 마지막 주소가 된다.(6번)


각각의 구해진 주소를 10진수로 변환하면 우리가 사용하는 IP 주소가 된다.(7번)

  • 서브넷 마스크만 이용하는 방법

1번 서브넷 마스크를 2진수로 변환한다.
2번 서브넷 마스크의 0부분만을 가져온다.
3번 0부분이 몇을 표현할 수 있는지 수를 구한다.
4번 각 자리마다 0부터 구해진 수만큼 그룹을 나눈다.
5번 IP 주소가 이 그룹중에 어디에 속해있는지 찾는다.
6번 그룹의 가장 앞에 있는 주소가 네트워크 주소가 된다.
7번 네트워크 주소에서 1을 더한 값이 사용할 수 있는 첫번째 주소가 된다.
8번 그룹의 가장 뒤에 있는 주소가 브로드 캐스트 주소가 된다.
9번 브로드 캐스트 주소에서 1을 뺀 값이 사용할 수 있는 마지막 주소가 된다.

profile
기록을 중요하게 생각하는 사람입니다. 학습한 내용을 정리한 것이라 잘못된 정보가 있을 수 있습니다. 잘못된 정보는 언제든 말씀해 주시기 바랍니다.

0개의 댓글