공부한 기록/네트워크 통신

네트워크(5) -IP 주소

YongE 2023. 4. 23. 21:25

IP 주소

 


 

네트워크층에서는 모든 장치와 서로 통신할 수 있도록 연결된 장치를 유일하게 구분할 수 있는 방법이 필요하다. 인터넷에 연결된 각 장치를 구별하기 위해 IP계층에서 사용하는 식별자를 인터넷 주소 또는 IP주소라고 한다.

한 장치가 두 개의 네트워크와 연결되어 두 개의 IP주소를 가질 수 있지만 똑같은 IP주소를 두 장치가 가질 수는 없다.

 

허나 여기서 알아둬야 할 것은 IP주소는 유일하긴 하지만 바뀔 수 있다는 것이다.

 

IPv4 주소는 32비트 길이의 주소이며, IPv4 같은 프로토콜에서 사용되는 주소의 총 개수를 주소공간이라 한다.IPv4 주소의 주소공간은 2^32개, 40억 개 이상이다.

 

IP주소를 나타내는 데에 3가지 표기법이 있는데, 각각 이진 표기법, 16진 표기법, 점 10진 표기 법이 있다.

2진 표기법 : 10000000 00001011 00000011 00011111
↓변환
점 10진 표기법 : 128·11·3·31

 

 

 

클래스 기반 주소지정 classful addressing

 


 

IP 주소는 처음부터 클래스 개념을 사용한 클래스 기반 주소 지정을 사용하였다. 이후에 등장한 것이 클래스 없는 주소 지정이며, 클래스 없는 주소지정과 왜 이것으로 넘어가야 하는지를 이해하기 위해 클래스 기반 주소지정을 알아보자.

 

클래스 기반 주소지정에서 IP주소 공간은 5개의 클래스(A B C D E)로 구분된다.

각 클래스의 주소공간 점유 정도은 다음과 같다.

 

각 클래스의 점유비율

 

주소가 2진 표기법이나 점 10진 표기법으로 주어졌을 때는 그 주소의 클래스를 알 수 있다.

 

왼쪽 2진 표기, 오른쪽 점 10진 표기

 

 

 

 

이제 각 클래스를 간단히 설명해보면 다음과 같다. 미리 알아둬야 할 것은 각 클래스는 정해진 수의 블록block으로 나뉘고  이 블록 크기는 고정되어 있다.

 

  • 클래스 A
    • 1바이트만 netid를 지정
    • 7비트로 나타낼 수 있는 블록의 수 2^7 = 128개
  • 클래스 B
    • 두 바이트에 netid 지정
    • 블록 수는 2^14
  • 클래스 C
    • 3바이트가 netid 지정
    • 블록 수는 2^21개이고, 각 블록에 속한 주소 수는 256개이다.
  • 클래스 D
    • 멀티캐스팅을 위해 설계, 인터넷상에 호스트들의 그룹을 지정하는 데 사용
  • 클래스 E
    • 주소는 한 블록만 있으며 나중에 사용하기 위한 예약용

 

 

 

2계층 주소지정

네트워크의 모든 주소는 한 블록에 속한다. 각 주소는 netid와 hostid부분을 포함한다. netid는 네트워크를 구분하고 hostid는 네트워크에 연결된 특정 호스트를 구분한다. 즉, netid는 네트워크 주소로, 목적지로 패킷을 전송하는 데에서도 사용하며 네트워크의 식별자이다.

 

네트워크 마스크 또는 디폴트 마스크는 n개의 왼쪽비트가 1이고, 32-n개의 오른쪽비트가 0인 수이다. 이를 이용해 네트워크를 주소를 찾아낼 수 있다.

 

블록을 더 작은 블록으로 나누는 것을 서브넷팅 subnetting이라고 한다. 이는 보다 용이한 관리를 위해 네트워크를 몇 개의 작은 서브네트워크로 나누는 것이다. 이런 서브네트워크들은 자신의 서브네트워크 주소 netid를 가진다.

서브넷팅은 netid의 길이는 증가시키고, hostid의 길이는 감소시킨다. 네트워크를 s개의 서브넷으로 나누면 다음과 같은 subnetid를 구할 수 있다.

Nsub = n + log2(S)

 

만약 b 클래스에서 4개의 서브넷을 나눈다면  N=16, Nsub = 16 + log2(4) = 18이다. 따라서 subnetid는 255.255.192.0이 된다.

 

 

 

 

클래스 없는 주소지정 classless addressing

 


 

실제 주소 고갈 문제를 서브넷팅과 슈퍼넷팅은 해결하지 못한다. IPv6이 개발됐지만 동일한 주소공간을 사용하면서  각 기관에 대해 주소를 분배하는 방법이 필요했다. 그래서 나온 것이 클래스 없는 주소지정이다.

 

클래스 기반 주소지정은 블록의 크기가 이미 정해져 있었다. 하지만 여기서 블록은 가변적이다. 블록은 2^1~2^32개의 주소를 갖는 블록으로 지정가능하다.

 

클래스 없는 주소지정에서 프리픽스 prefix는 netid와 동일하고, 서픽스 suffix는 hostid와 동일하다. 프리픽스 길이는 0~32까지 가능하다.

또한, 주소를 표현할 때 프리픽스 길이를 주소에 포함하여 표현해야 한다.

예를 들어,

byte · byte · byte · byte / 프리픽스 길이

위와 같이 표현된다.

 

 

클래스 없는 주소지정에서도 블록에서 정보를 추출할 수 있다. 블록에 속하는 주소의 개수를 구하려면 다음과 같은 식을 사용하자.

N =2^(32-n)       n은 프리픽스의 길이

첫번째 주소를 구하려면 주어진 주소에서 네트워크 마스크로 AND연산 한다.

첫번째 주소 = 주어진 주소 AND 네트워크 마스크

마지막 주소는 첫번째 주소와 주소의 갯수를 더하거나, 주소에서 네트워크 마스크의 보수 값을 OR 연산하여 구한다.

마지막 주소 = 주어진 주소 OR (NOT 네트워크 마스크)

덧붙여서, 요구 주소 n은 2의 거듭제곱이어야 한다.

 

 

서브넷

클래스 없는 주소지정에서 서브넷은 여러 개의 서브넷으로 나눌 수 있다. 그리고 이를 만들려면 신중히 설계해야 한다. 다음 조건을 지키며 서브넷에 대한 정보를 구할 수 있다. 

기관이 할당받은 총 주소 수 = N

 프리픽스 길이 = n

각 서브넷에 할당된 주소 개수 = Nsub

각 서브넷 프리픽스 길이 = n sub

서브넷의 총 개수 = s

  1. 각 서브넷에 속한 주소의 개수는 2의 거듭제곱
  2. 프리픽스 길이(서브넷 마스크)는 다음 식을 이용해 구한다. n sub = n + log2(N/Nsub)
  3. 각 서브넷에 속하는 시작주소는  해당 서브넷에 속하는 주소 개수로 나눠질 수 있어야 한다.

 

 

특수주소


특수 목적을 위해 예약된 일부주소다.

 

  • 모두 0인 주소 : 패킷을 전송하는 호스트가 자신의 IPv4주소를 모르는 경우에 사용하는 주소다. 발신지 주소로만 이용한다.
  • 모두 1인 주소 : 네트워크 내의 모든 호스트에게 메시지 전달 시에 목적지 주소로 사용한다. 브로드캐스팅이다.
  • 루프백 주소 : 컴퓨터에 설치된 소프트웨어를 시험하기 위해 사용되는 주소다.
  • 사설 주소 : 집 공유기 같은 사설용도를 위해 할당하는 것이다. 네트워크가 분리돼 있거나 주소변환기술을 사용해 사설망을 인터넷에 연결하는 데 사용한다.
728x90
반응형