본문 바로가기

Information Network

[Information Network] Logical Addressing-IPv4




IPv4 주소

IPv4 주소는 32bit으로 구성되며 유일하고 전체적이다.




주소 공간


주소 공간은 프로토콜이 사용할 수 있는 주소의 총 개수이다. IPv4는 32bit의 주소를 사용하므로 이는 주소 공간이 2^32개 즉 4,294,967,296이라는 것을 의미한다.




표기법


IP주소는 2진 표기법과 점-10진 표기법이 있다. 이때 일정 규칙이 존재 하는데,

a. 111.56.045.78
  ==> 점-10진 표기법으로 앞에다가 0을 쓸 수 없다.(045)

b. 221.34.7.8.20
  ==> IPv4 주소에서는 4개의 숫자 이상을 쓸 수 없다.

c. 75.45.301.14
  ==> 각각의 숫자는 255 이하여야 한다. (301은 범위를 벗어난다.)

d. 11100010.23.14.67
  ==> 2진 표기법과 점-10진 표기법을 함께 사용할 수 없다.



클래스형 주소지정(Classful Addressing)


지금은 유명무실해져 가고 있지만 초기 IPv4의 주소할당은 클래스의 개념을 사용하였다.

클래스형 주소지정에서 IP주소 공간은 A, B, C, D, E 클래스의 5개의 클래스로 나뉘어 진다.

주소가 2진 표기법이나 점-10진 표기법으로 주어지면, 주소의 클래스를 찾을 수 있다. 다음은 두 방법들을 보여준다.

노란색으로 표시된 부분은 기관에서 주소를 결정하는 부분이다. 주소를 관리하는 입장에서 classful addressing을 이용하여 라우터의 mapping table의 크기를 줄일 수 있다.

classful addressing이 가진 하나의 문제는 각 클래스가 고정된 수의 블록으로 나뉘고 각 블록은 고정길이를 갖는다는 것이다.

위와 같은 경우 A class의 주소로 된 블록은 대부분의 기관에서 사용하기에 너무 크다. 이는 A class의 주소 대부분이 낭비되는 것을 의미한다. B class의 블록 또한 A class에 비해서 작긴 하지만 한 기관에서 사용하기에는 이 역시 사이즈가 크다. 하지만 C class의 블록은 어느정도 규모가 있는 기관에서 사용하기에는 오히려 너무 작다. D class는 멀티캐스팅을 위해 만들어 졌는데 각각의 주소는 인터넷에서 한 그룹을 정의한다. E class 주소는 미래에 대비하기 위하여 예약되었지만 다른 class의 낭비의 결과로 단지 몇몇만 사용되고 있다.

이렇듯 classful addressing은 사용 가능한 주소의 많은 부분을 낭비하는 결과를 낳았다.


NetID와 HostID
class A, B, C의 IP주소는 NetID, HostID로 나뉘어져 있다. 각 부분들의 길이는 주소 클래스에 따라서 가변적인데, 다음은 NetID, HostID의 byte 길이들을 보여주고 있다.


보면 class A 에서는 1 byte를 NetID로 정의하고 나머지 3 byte를 HostID로 정의하였다는 것을 알 수 있다.
 

자신을 목적지로 하는 data가 전송될 경우 라우터에서는 NetID를 통해 내가 속한 Network로 전송한다.

MASK
mask를 이용하여 NetID, HostID를 찾을수 있다.

예를 들면 A class의 마스크는 8개의 1을 가지고 있어 이 8bit와 해당 NetID를 &시키면 원하는 NetID를 찾을 수 있다. 
ex) NetID = 123인 경우
11111010 & 11111111 = 11111010.00000000.00000000.00000000
와 같은 방식으로 NetID를 확인할 수 있다.

CIDR : IPv4의 IP 주소 고갈에 대한 대안으로써, IP 주소를 Class A, B, C 등과 같이 규격화된 구분없이 단지 bit단위의 subnet Mask에 의해서 네트워크 정보를 라우팅한다.


Subnetting & Supernetting
Subnetting : 만약에 한 기관이 Class A, B의 큰 블록을 승인 받으면 그것을 몇 개의 연속하는 그룹으로 주소를 분할하고 더 작은 네트워크(서브넷)로 각각의 그룹을 할당한다. 즉, 관리하고 있는 Network내에서 다시 소규모 망을 구성하는 것이다. 이때 특정 범주의 block 단위(Masking 단위)로 구성되어야 한다.

Supernetting : 관리하고 있는 여러 Network들을 하나의 Network으로 구성하는 것이다.
이는 class C block을 사용하는 어느정도 규모가 있는 기관에서는 더 많은 주소를 필요로 하기 때문에 Supernetting을 통하여 C class를 합칠수 있다.

예로 1000개의 주소를 필요로 하는 기관에서는 연속해서 4개의 C class block의 사용 승인을 받아 이 주소들을 하나의 Supernet으로 사용할 수 있는 것이다.

참고로 Supernetting은 Mask에서 1의 개수를 줄인다. 예를 들면 한 기관에 4개의 C class가 주어진 경우 Mask는 /24에서 /22로 바뀐다.

잠시후에 비클래스형 주소지정은 Supernetting의 필요성을 제거했다는 것을 알 수 있다.

서브넷팅은 마스크에서 1의 개수를 늘린다.


Classful addressing은 인터넷의 급격한 성장에 따른 사용 가능한 주소의 고갈문제가 발생하였다. 이러한 문제를 해결하기 위하여 비클래스형 주소지정(Classless addressing)으로 대체된다.




비클래스형 주소지정(Classless Addressing)

이 방법에는 class가 없지만 여전히 block단위로 승인된다.
A, B, C, D, E급 외의 방식을 사용하기 때문이라고 생각하자~!

Address block
기관에 주소의 blcok단위로 승인을 하는데, block의 크기는 기관의 성격과 크기에 기반하여 바뀐다. ISP(인터넷 서비스 제공자)의 경우에는 수천 또는 수십만의 주소를 받기도 하지만 가정집은 몇 개의 주소를 승인 받게 된다.

제한
주소의 조정을 단순화하기 위해서 다음과 같은 제한을 두는데,

block 안의 주소들은 반드시 연속되어야 한다.

block 안의 주소들의 개수는 반드시 2의 2수여야 한다. (1, 2, 4, 8,...)

첫 번째 주소는 반드시 주소들의 개수로 동일하게 나누어 질 수 있어야 한다.


Mask
주소들의 block을 정의하는 보다 좋은 방법은 block과 mask안의 어떠한 주소라도 선택하는 것이다. 기존(classful addressing) mask는 왼쪽부터 n개의 bit은 1이며, 32-n개의 bit은 0인 32bit 숫자였다. 그러나 classless addressing의 mask는 0에서 32까지 어떤 값이든 가질 수 있기 때문에 CIDR의 /n의 값을 주기에 편하다.

IPv4 주소지정에서  주소들의 block은 x,y,z,t/n으로 정의될 수 있다. 여기에서 x,y,z,t/n는 주소들의 하나를 정의 하는 것이고 /n은 마스크를 정의한다.


First address & Last address & Number of address
block의 첫 주소는 오른쪽부터 32-n개의 bit을 0으로 설정해서 찾을 수 있다.

ex)주소들의 block은 작은 기관에 승인되었다. 주소들 중의 하나는 205.16.37.39/28인걸 알고 있다면 이 block의 첫 주소는 무엇인가?

이는 205.16.37.39 => 11001101.00010000.00100101.00100111 이 되며
32-28 = 4bit을 오른쪽부터 0으로 채우자. 그러면 다음 주소가 first address가 된다.
11001101.00010000.00100101.00100000 or 205.16.37.32


이와는 반대로 block의 마지막 주소는 오른쪽부터 32-n개의 bit을 1로 설정해서 찾을 수 있다.

위의 예제에서의 마지막 주소는 11001101.00010000.00100101.00101111 or 205.16.37.47이 된다.


주소들의 개수는 첫 주소와 마지막 주소의 차이다. 즉 이것은 2^(32-n)이다.

위 예제에서 n의 값은 28 이다. 따라서 주소들의 개수는 2^(32-28)=16임을 의미한다.



Network Address
일반적으로 block의 첫 주소는 NetID(Network address)로 사용된다. 이 첫 주소를 이용하여 외부로부터 기관으로 메시지를 직접 보내기 위한 라우터에서 network를 식별하도록 한다.
 

이때 라우터에서는 내·외부의 interface의 주소는 따로 갖는다.


Hierarchy
Two-level hierarchy : No subnetting
IP 주소는 subnetting을 하지 않을 경우 2단계 계층으로 정의할 수 있다. 일반적으로 block안의 각각의 주소들은 2단계 계층 구조로 왼쪽부터 n bit는 Network로 정의되고, 오른쪽 32-n bit는 Host로 정의된다.


Three-levels Hierarchy : Subnetting
주소들의 큰 block을 승인 받은 기관은 network subnet을 만들거나 서로 다른 network 사이에 주소들을 나눈다. 외부적으로는 여전히 하나의 Network지만 내부적으로는 몇 개의 subnet으로 되어 있는 것이다.

ex) 한 기관이 17.12.40.0/26 block을 받았다고 가정하면, 이는 2^(32-26)=64개의 주소들을 갖는다. 기관이 3개의 사무실을 가지고 있고 32, 16, 16 개의 주소들을 가진 3개의 block으로 주소들을 나눌 필요가 있다고 하자.

첫 번째 subnet을 위한 mask가 n1이라 가정하면 2^(32-n1)은 반드시 32가 되고 이것은 n1=27을 의미 한다.

두 번째 subnet을 위한 mask가 n2라 가정하면 2^(32-n2)은 반드시 16이 되고 이것은 n2=28을 의미한다. 

세 번째 subnet을 위한 mask가 n3라 가정하면 2^(32-n3)은 반드시 16이 되고 이것은 n3=28을 의미한다.

이것은 기관 mask가 26일 때, 27, 28, 28의 mask를 갖는 것을 의미한다.
 


따라서 subnetting을 통해서 3단계의 계층을 가질수 있다고 말할 수 있다. 이때 subnet prfix는 subnet을 위하여 달라질 수 있다.


더 많은 단계의 계층
국가 ISP는 승인된 큰 block을 작은 block으로 나누고 각각의 block을 광역 ISP에 할당 할 수 있다. 다시 광역 ISP는 block을 더 작게 나누어 다시 지역 ISP에게 할당하는 것이 가능하다.



Address Allocation (주소할당)
주소할당의 결정적인 권한은 ICANN이라는 국제단체에 주어져 있는데, 이들은 개별 기관에 주소를 할당하지 않고 ISP를 통해 주소들의 큰 block들을 할당한다.

ex) ISP는 190.100.0.0/16(65,536개 주소들)로 시작하는 주소들의 block을 승인 받았다고 하자. ISP는 다음과 같이 3개의 집단의 고객에게 주소들을 분배하려고 한다.

처음 집단은 64개의 고객을 가진다. 이때 각각 256개의 주소들을 필요로 한다.


두번째 집단은 128개의 고객을 가진다. 각각 128개의 주소들을 필요로 한다.


세번째 집단은 128개의 고객을 가진다. 각각 64개의 주소들을 필요로 한다.
 







Network Address Translation (NAT)

NAT는 내부적으로는 큰 주소의 집합을 user에게 사용할 수 있게 하고 외부적으로는 하나의 주소 or 작은 주소 집합을 가질수 있게 한다. 내부 트래픽은 큰 집합을 사용할 수 있으며 외부 트래픽은 작은 집합을 사용할 수 있다.

즉, 외부에서 사용하는 address 하나를 할당받고 내부에서는 subnet을 구성하여 임의의 address를 사용한다.

집이나 회사에서 사용하는 주소와 인터넷 주소를 구분하기 위하여 인터넷 기관에서는 사설주소로써 3개의 주소 집합을 예약해두었다.

위 주소는 인터넷 기관의 허락없이 사용이 가능하다. 때문에 이 주소들은 해당 기관내에서는 유일할 수 있지만 인터넷 망 전체적으로는 아니다. 그래서 이 사설 주소를 목적지 주소로 이용할 수는 없다.(라우터에서 역시 인식 불가)
 
한 사이트는 NAT software를 실행하여 라우터를 통해 전체 인터넷에 단일 연결이 되어야 한다.
 


주소 변환(Address Translation)
외부로 가는 모든 packet은 NAT 라우터를 통하여 나가며 라우터는 packet의 발신지 주소를 포괄적 NAT 주소로 대체한다.

들어오는 모든 packet 또한 NAT 라우터를 통해 들어오며 라우터는 packet 안의 목적지 주소를 적절한 사설 주소로 대체한다.



변환 테이블(Translation Table)
NAT의 라우터 테이블을 통하여 인터넷으로부터 들어오는 packet에 대한 목적지 주소를 알 수 있다.

한 개의 IP 주소를 사용하여 NAT를 수행할 수 있다.
이는 변환테이블이 사설 주소와 외부주소(packet의 목적지 주소) 2개의 행만을 갖는다.
 



여러 IP주소를 사용하여 NAT 수행
NAT 라우터가 하나의 주소만 사용하면, 하나의 사설 네트워크 호스트만이 동일한 외부 호스트에 접속할 수 있다. 이 제한을 없애기 위하여 NAT 라우터는 여러개의 주소를 사용할 수 있다.

예를 들면, NAT 라우터가 4개의 주소 200.424.5.8, 200.24.5.9, 200.24.5.10, 200.24.5.11를 사용한다고 하자. 이 경우 4개의 사설 네트워크 호스트는 같은 시간에 동일한 외부 호스트와 통신이 가능하다. 그 이유는 각 주소의 쌍으로 접속이 설정되기 때문이다.

하지만 동일한 목적지에 4개 이상의 연결을 만들 수 없으며, 동일한 시간에 2개의 외부 서버 프로그램(HTTP, FTP)에 접속할 수 없다는 단점이 있다.


IP 주소와 포트 번호 동시에 사용하기
사설 네트워크 호스트와 외부 서버 프로그램 사이에 다 대 다 연결을 허용하기 위해 변환 테이블에는 좀 더 많은 정보가 필요하게 된다.

예를 들어 외부 호스트 25.8.3.2에서 구동되는 HTTP서버에 접근을 원하는 사설 네트워크의 172.13.3.1과 172.18.3.2를 가진 2개의 호스트가 있다고 가정하자. 만약 변환 테이블이 2개의 호스트 대신 발신지와 목직지의 전송층 포트 번호를 포함한 5개의 행을 가지고 있다고 하면 모호성을 제거할 수 있다.
 



NAT와 ISP
전화접속 고객에게 서비스하기 위한 ISP는 NAT기술을 사용하여 주소를 절약할 수 있다.