IPv4 주소

IPv4 주소

인터넷에 연결된 각 장치의 연결을 식별하기 위해 TCP/IP 프로토콜 그룹의 IP 계층에서 사용되는 식별자를 IP 주소라고 한다.

IPv4 주소는 32비트(4바이트) 주소이다. IP 주소는 장치가 다른 네트워크로 이동할 때 변경되기 때문에 라우터나 호스트가 아닌 연결의 주소이다.

2개의 네트워크를 가지고 있다면 2개의 IPv4 주소를 가지게 된다.

주소 공간

프로토콜에서 사용 가능한 전체 주소의 수. 주소를 정의하는 IPv4와 같은 프로토콜은 주소 공간을 가진다. IPv4는 32비트의 주소를 사용하므로 2^32 만큼의 주소 공간을 가지는 것이다.

표기법

IPv4를 표기하는 3가지 방법이 있다.

  • 2진수 표기법(binary notation) : 10000000 00001011 00000011 00011111
  • 점 10진수 표기법(dotted-decimal notation) : 128.11.3.31
  • 16진수 표기법() : 80 0B 03 1F

계층적 주소

전화망이나 우편 네트워크와 같이 전송에 연계된 통신 네트워크에서는 주소 시스템이 계층적이다.

주소 첫 부분은 접두사(Prefix)로 네트워크를 정의하고, 두번째 부분은 접미사(suffix)로 노드(장치의 인터넷으로 연결)를 정의한다.

접두사는 클래스 기반 주소 지정과 클래스 없는 주소 지정으로 나눠진다.

클래스 기반의 주소 지정

인터넷이 시작될 때 소규모, 대규모 네트워크 지원을 위해 한 가지가 아닌 3가지의 고정된 접두사(n=8, n=16, n=24)로 설계되었다. 그래서 총 5개의 클래스로 구분해 지정되었다. 이 기술을 클래스 기반 주소 지정이라 한다.

각 기관들은 규모에 따라 클래스를 부여받아 사용한다.

주소 고갈

클래스 기반 주소 지정은 이제 사용하지 않는다. 금방 주소가 고갈되기 때문이다. 클래스 A만 봐도 128개의 기관만 할당할 수 있고 각 기관은 단일 네트워크에 16,777,216개의 노드를 가지는 구조가 된다. 대부분 기관은 이정도 노드를 사용하지 않기 때문에 대부분 주소가 낭비된다.

클래스 기반 주소지정의 장점

  • 접두사가 고정이라 쉽게 주소 클래스를 찾을 수 있다.
  • 접두사의 길이를 즉시 알 수 있어 접두사와 접미사를 추출하기 위해 추가적인 정보가 필요치 않다.

클래스 없는 주소지정

클래스 기반의 주소 고갈 문제를 해결하지 못해 결국 클래스 권한을 제거하게 되었다. 클래스 없는 주소지정은 클래스에 속하지 않는 가변 길이의 블록이 사용된다.

전체 주소 공간은 가변 길이의 블록으로 나눠진다. 접두사는 블록을 지정하고 접미사는 노드를 지정한다.

접두사도 가변적이기 때문에 0~32 사이 길이를 지정할 수 있다. 네트워크의 크기는 접두사 길이에 비례한다. 작은 접두사는 큰 네트워크를 의미하고 큰 접두사는 작은 네트워크를 의미한다.

슬래시 표기법

클래스 없는 주소지정에서는 접두사가 가변적이라 길이를 찾기 힘들다. 접두사의 길이가 주소에 포함되지 않기 때문에 접두사의 길이를 따로 주어야한다. 비공식적으로 / 를 사용해 뒤에 주소에 추가한다. 이것을 비공식적으로 슬래시 표기법이라 하고 공식적으로는 클래스 없는 인터도메인 라우팅(classless interdomain routing) 혹은 CIDR(Classless Interdomain Routing)이라 한다.

ex)

12.24.76.8/8

슬래시 - 주소에서 정보 추출

주소가 주어지면, 주소가 소속된 블록에 대한 주소의 수, 블록의 첫 번째 주소, 마지막 주소의 3가지 정보를 알아야한다.

  1. 블록 내의 주소 수 N = 2^32-n
  2. 첫 번째 주소는 주어진 고정된 Prefix 주소를 유지하고, 나머지 주소를 0으로 채우면 찾을 수 있다.
  3. 마지막 주소는 주어진 고정된 Prefix 주소를 유지하고, 나머지 주소를 1으로 채우면 찾을 수 있다.

주소 마스크

주소의 처음과 마지막을 찾는 다른 방법은 주소 마스크를 사용할 수 있다.

32비트의 숫자로 처음 n개의 비트는 1로 설정되고 나머지 (32-n)개의 비트는 0으로 설정된 것을 주소 마스크라고 한다.

이렇게 하면 컴퓨터 연산으로 NOT, OR, AND 로 쉽게 정보를 추출할 수 있다.

  1. 블록 내의 주소 수 N = NOT(Mask) + 1 이다.
  2. 블록 내의 첫번째 주소 = (어느 블록의 주소) AND (Mask)
  3. 블록 내의 마지막 주소 = (어느 블록의 주소) OR [NOT(Mask)]

네트워크 주소

IP 주소의 Prefix 부분이다. 각 네트워크를 구분해 라우터가 포워딩 테이블을 만들어 패킷이 전송될 인터페이스를 찾을 수 있게 한다.

블록 할당

블록 할당은 ICANN(Internet Corporation for Assigned Names and Numbers)이란 기관이 결정한다. 이 기관이 큰 주소 블록을 가지고 있고 이 블록을 ISP(혹은 기관)에 할당해준다. 할당에는 두 가지 제한 사항이 있다.

  • 요청된 주소 수는 2의 제곱승이어야 한다.
  • 블록 내의 연속된 숫자의 이용 가능한 주소 공간이 있어야 한다. 그리고 첫 번째 주소가 블록 내의 주소로 나눠져야 한다.

서브네팅

일정 범위의 주소를 할당받았다면 그 주소를 또 서브네트워크에 할당할 수 있다. 서브네트워크들은 또 서브-서브네트워크로 나눠질 수 있다.

서브넷 설계

서브네트워크는 패킷의 라우팅을 위해 신중히 설계해야한다.

  • 각 서브네트워크의 주소의 수는 2의 제곱승이어야한다.

  • 각 서브네트워크의 접두사의 길이는 다음 공식으로 구할 수 있다.

  • 각각의 서브 네트워크의 시작 주소는 해당 서브 네트워크에 속하는 주소의 개수로 나누어질 수 있어야 한다.
  • 큰 서브네트워크에 주소를 먼저 할당한다

주소 집단화

CIDR 기법의 장점은 주소 집단화(address aggregation)이다. 큰 주소 블록을 ISP에 할당하고 ISP가 또 다른 기관들에게 할당해주어 패킷을 이동할 때 그 주소 블록(집단)으로 이동하면 되어 관리가 편리하다.

특수 주소

특별한 목적으로 사용되는 주소들이 있다.

디스-호스트 주소

0.0.0./32블록에 있는 주소는 디스-호스트(this-host) 주소라고 한다. 자신의 주소를 모를때 사용한다.

제한된 브로드캐스트 주소

255.255.255.255/32의 주소는 제한된 브로드캐스트 주소(limited-broadcast address)이다. 호스트나 라우터가 네트워크 상의 모든 장치로 데이터그램을 보낼 때 사용된다. 네트워크 상의 라우터가 이런 패킷은 차단하여 외부로는 보낼 수 없다.

루프백 주소

127.0.0.0/8루프백 주소(loopback address)이다. 이 블록 주소들의 패킷들은 모두 호스트 내부에만 존재하게 된다. 주로 테스트 목적으로 사용된다.

사설 주소

10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16의 4개의 블록은 사설 주소이다. 내부망에서 사용하는 주소이다.

멀티캐스트 주소

224.0.0.0/4멀티캐스트 주소(multicast address)로 예약된 블록이다. 제한된 브로드캐스트는 내부에서 뿌리는 브로드캐스트라면 이 주소는 외부에서 들어오는 방송을 내부로 뿌려주도록 미리 지정된 주소이다.

DHCP

큰 기관이나 ISP는 ICANN으로부터 직접 주소를 할당받고 작은 기관은 ISP로부터 할당받는다. 할당받고 나면, 내부 개별 호스트나 라우터에 주소를 할당해야한다. 수동으로 할 수 있지만, 동적 호스트 구성 프로토콜(DHCP, Dynamic Host Configuration Protocol)를 사용하면 기관 내의 주소지정을 자동으로 할 수 있다. 실질적으로는 TCP/IP의 네트워크층을 보조하는 역할을 한다.

  • 자동으로 IP를 할당해주는 역할을 하는 프로토콜.
  • 플러그 앤 플레이 프로토콜(plug-and-play protocol)이라 불린다.

  • DHCP는 서버-클라이언트 프로토콜이다.

동작 과정

  1. DISCOVER: 새롭게 참가하는 클라이언트가 트랜잭션-ID 필드가 임의의 숫자로 지정된 DISCOVER 메시지를 생성한다. 이 메세지는 source port가 68이고 Destination port가 67인 UDP 데이터그램으로 캡슐화된다. 사용자 데이터그램은 source address가 0.0.0.0, Destination address가 255.255.255.255(브로드캐스트 주소)로 IP 데이터그램으로 캡슐화한다. 참가하는 클라이언트는 자신의 주소도 서버의 주소도 모르기 때문이다.
  2. OFFER: 서버가 참가하는 클라이언트를 위해 IP 주소를 지정해 제안하는 메시지를 작성한다. 클라이언트가 해당 IP를 사용할 수 있는 시간도 명시한다. 이 메시지는 같은 포트번호지만 근원지와 목적지를 바꾸어 사용자 데이터그램으로 캡슐화한다.
  3. REQUEST: 클라이언트가 하나 혹은 그 이상의 제안을 받고 그중 가장 좋은 것을 고른다. 그리고 메세지를 만들어 가장 좋은 제안을 보낸 서버에게 전송한다. Destination addess는 다른 DHCP서버에게도 제안이 받아들여지지 않았다고 알리도록 255.255.255.255로 설정한다.
  4. ACK: 선택된 서버가 요청한 IP 주소가 유효할 경우 ACK 메시지로 클라이언트에게 응답한다. 만약 서버가 그 주소를 받아들일 수 없다면, NACK 메시지를 전송해 클라이언트가 이 과정을 반복하도록 한다.

NAT(네트워크 주소 변환)

NAT(Network Address Translate)는사설 주소와 범용 주소의 연결을 제공하고 동시에 가상 사설 네트워크를 지원하는 기술이다. 내부 통신을 위해 사설 주소를 사용하고 다른 네트워크와 통신에는 범용 인터넷 주소를 사용할 수 있도록 해준다. NAT 라우터 내의 사설 네트워크가 있어도 다른 네트워크에서는 한 주소밖에 보이지 않는다. 그래서 사설 네트워크에서 외부 네트워크랑 통신하려할 때 NAT가 사설 주소를 범용 주소로 바꿔주는 역할을 한다.

주소 변환

  • NAT 라우터를 통해 나가는 모든 패킷은 근원지 주소를 범용 NAT 주소로 변환한다.
  • NAT 라우터를 통과하는 모든 들어오는 패킷은 목적지 주소(범용 주소)를 적절한 사설 주소로 변환해준다.

변환 테이블

NAT 라우터가 주소를 적절하게 변환할 수 있도록 하는 테이블이다. 가장 간단한 형태는 사설 주소와 외부 주소 2개의 열만 가진다.

사설 주소 외부 주소
172.18.3.1 25.8.2.10

통신 순서

  1. 내부에서 먼저 데이터를 보내면 테이블에 정보가 추가된다.
  2. 사설 주소를 바꿔준다.
  3. 외부에서 데이터가 들어올 때 테이블을 참조한다.
  4. 목적지 주소를 변환해준다.

IP 패킷의 포워딩

요즘 인터넷은 링크(네트워크)의 조합으로 구성되기 때문에 포워딩은 패킷을 다음 홉으로 전달하는 것을 의미한다. IP 포로토콜은 비연결형 프로토콜이지만 요즘 경향은 이를 연결 지향형 프로토콜로 변경하는 것이다. IP가 비연결형 프로토콜로 사용될 때는 목적지 주소에 기반을 둔 포워딩을, 연결 지향형으로 사용될 때는 레이블에 기반을 둔 포워딩을 사용한다.

목적지 주소에 기반을 둔 포워딩

이 경우 포워딩을 위해 포워딩 테이블이 필요하다. 호스트가 전송할 패킷이 있거나 라우터가 포워딩할 패킷을 수신한 경우 포워딩 테이블을 참조해 패킷을 전달할 다음 홉을 찾는다. 클래스 없는 주소지정에서는 패킷의 목적지 주소로만으로는 어느 네트워크 주소인지를 알기가 힘들다. 그래서 테이블에 마스크(/n)를 포함시킨다. 결국 클래스 없는 주소의 테이블은 마스크, 네트워크 주소, 인터페이스 주소, 다음 라우터에 대한 IP주소가 필요하다.

Mask 네트워크 주소 다음 라우터 인터페이스 주소
/26 180.70.65.192 m2
/25 180.70.65.128 m0

주소 집단화

클래스 없는 주소지정을 사용할 때 모든 주소 공간을 관리 가능한 블록으로 나누기 때문에, 포워딩 테이블 항목 번호가 많아질 가능성이 높다. 테이블의 크기가 증가하면 테이블을 검색하기 위한 시간이 증가한다. 이 문제를 해결하기 위해 주소 집단화 기법이 설계되었다.

주소 집단화는 주소 블록들을 묶어 더 큰 주소 블록으로 만들고 하나의 인터페이스로 합친다. 그 블록안에 목적지 주소가 있다면 그 인터페이스로 오게된다.

가장 긴 마스크 매칭

테이블은 항상 마스크가 긴 마스크부터 짧은 마스크 순으로 정렬한다는 원리이다. 마스크가 짧은 것이 위에 있다면 잘못 전달될 가능성이 있게된다.

계층적 라우팅

포워딩 테이블이 커지는 문제를 해결하기 위해 계층구조를 도입할 수 있다. 각 자치 시스템(AS)을 다시 영역으로 나누어 관리한다.

레이블에 기반을 둔 포워딩

1980년대에 IP를 연결 지향 프로토콜처럼 동작하고자 하는 시도가 시작되었다. 비연결형 네트워크(데이터그램 방법)에서는 목적지 기반으로 패킷을 포워딩한다. 반면 연결 지향 네트워크(가상 회로 방법)에서는 패킷에 부착된 레이블을 기반으로 패킷을 포워딩한다. 라우팅은 기본적으로 테이블 내용에 대한 탐색을 기반으로 하는 반면 교환은 인덱스를 사용한 테이블 접근방식에 의해 수행된다.

MPLS

  • 1980년대 교환 기술을 구현한 MPLS 라우터 개발
  • 라우터는 목적지 기반, 교환은 레이블 기반으로 패킷 포워딩
  • 레이블 정보를 포함할 수 있는 새로운 헤더 포함 IP 패킷에 추가된 MPLS 헤더
김땡땡's blog

김땡땡's blog

김땡땡