IPv4 Address

6 분 소요

IPv4는 인터넷 프로토콜의 4번째 판이며, 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다. 과거에 인터넷에서 사용되는 유일한 프로토콜이였으나 오늘날에는 IPv6이 대중화되었다. IETF RFC 7969.(1981년 9월)에 기술되어 있다. (위키백과)

IP 주소는 32bit address다. IP주소는 유일하며, 2진수 표현으로 했을 때 32bit로 표현하고, .와 10진수 표기법으로 하면 우리가 흔히 보는 xxx.xxx.xxx.xxx 형식으로 표현할 수 있다.

32비트 IPv4 주소는 계층적이지만, 두 부분으로 나눌 수 있다.

  1. 첫 부분은 prefix라고 부르고, network를 정의 한다.
  2. 두번째 부분은 suffix라고 부르고, node connection를 정의한다. (Host IP)

IPv4

Classful addressing

IP 주소 공간은 5개의 클래스로 나누어진다.(A, B, C, D, E)

classful address

Class Prefixes 구성 First byte 범위
A n = 8 bits xxx.xxx.xxx.xxx 0 ~ 127 1.0.0.1 ~ 126.255.255.254
B n = 16 bits xxx.xxx.xxx.xxx 128 ~ 191 128.0.0.1 ~ 191.255.255.254
C n = 24 bits xxx.xxx.xxx.xxx 192 ~ 223 192.0.0.1 ~ 223.255.255.254
D X X 224 ~ 239 224.0.0.0 ~ 239.255.255.255
E X X 240 ~ 255 240.0.0.0 ~ 254.255.255.254

ipv4 class

이런 주소들은 빠르게 소진되었고, 인터넷에 연결하려고 하는 개인이나 조직을 위해 더이상 가용한 주소가 없다.

  • Class A는 16,777,216개의 IP를 갖는다. 이 규모의 조직은 소수 밖에 없어서 대부분의 주소는 낭비됨
  • Class B는 중간 사이즈의 기업을 위해 디자인되었으나, 많은 주소들이 사용하지 않는 상태로 남아있다.
  • Class C는 256개의 IP밖에 없다. 이 주소들을 사용하는 회사들은 너무 적어서 불편함.
  • Class E는 거의 사용되지 않았다. 전체 클래스가 낭비되고 있음. (미래를 위해 남겨두긴 했지만..)

서브넷, 슈퍼넷

주소고갈을 완화하기 위해서 Subnetting, Supernetting이 권장되었다.

  • Subnetting에서 Class A나 Class B는 몇개의 subnet으로 나누어진다. 각 서브넷들은 원래 네트워크보다 더 긴 prefix를 갖는다. 즉, 큰 블록을 더 작은 블록으로 나눈다.
    1. 대부분의 큰 조직들이 자신들이 사용하지 않는 블록을 더 작은 조직을 위해 나누어주는 것을 좋아하지 않았기 때문에 효과적이지 않았다.
  • Supernetting에서는 여러 Class C 블록들을 모아서 더 큰 블록으로 결합해서 사용한다. 256개보다 많은 아이피를 필요로 하는 조직에 적합했다.
    1. 이 아이디어는 패킷 라우팅을 더 어렵게 만들어서 효과적이지 않았다.

Classless addressing

Classless addressing에서는 클래스에 속하지 않는 가변길이 블록이 사용되었다. 1, 2, 4, 128 주소 등의 블록을 가질수 있다.

주소의 prefix는 network를 정의한다. suffix는 node(device)를 정의한다. 그러므로 2^0, 2^1, …, 2^32 주소의 블럭을 가질 수 있다. (작은 prefix는 큰 네트워크, 큰 prefix는 작은 네트워크를 의미한다. - 내부 node의 개수가 많은 것이니까)

제한

  1. 블록 내의 주소 수
    • 2의 승수개, 2^0, 2^1 …
  2. 첫 주소
    • 첫 번째 주소는 주소의 개수로 균등하게 나눌 수 있어야한다
  3. Mask
    • 주소는 반드시 mask를 가져야한다.
    • 마스크는 *CIDR(classless inter-domain routing) 표기법으로 주어진다. Classless 주소의 포맷은 X.Y.Z.t/n 형식이고, 슬래시 다음의 n은 블록의 모든 주소에서 동일한 비트 수를 정의한다.

*CIDR

사이더(Classless Inter-Domain Routing, CIDR)는 클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한, 최신의 IP 주소 할당 방법이다. 사이더는 기존의 IP 주소 할당 방식이었던 네트워크 클래스를 대체하였다. 사이더는 IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더해준다. 특히 다음과 같은 장점이 있다.

  1. 급격히 부족해지는 IPv4 주소를 보다 효율적으로 사용하게 해준다.
  2. 접두어를 이용한 주소 지정 방식을 가지는 계층적 구조를 사용함으로써 인터넷 광역 라우팅의 부담을 줄여준다.

출처: 위키백과 - 사이더(네트워킹)

Mask

  • Prefix는 주소 범위의 공통 부분의 또다른 이름이다. classful 주소 지정 방식에서 netid와 비슷하다.
  • Prefix 길이는 CIDR 표기법에서의 n
  • Classful 주소지정 방식은 classless 주소지정 방식의 특별한 케이스다.
  • Suffix는 hostid와 비슷하다.
  • Suffix 길이는 CIDR 표기법에서 suffix(32-n)의 길이다.
/n Mask
/1 128.0.0.0
/2 192.0.0.0
/3 224.0.0.0
/31 255.255.255.254
/32 255.255.255.255

Mask - 예시

classless 주소 167.199.170.82/27 이 있다. 여기서 알 수 있는 것은 무엇일까?

mask example - 1

  1. 이 네트워크 주소의 개수는 2^(32-27) = 2^5 = 32개다
  2. 이 네트워크의 첫 주소는 앞의 27비트는 고정, 뒤의 5비트는 0인 값이다.
    • 3번째 . 까지가 24비트고 네번째 숫자인 82는 bit로 바꾸면 01010010 이므로, 여기서 앞에 표기한 010까지만 고정, 뒤의 숫자는 모두 0인 01000000 = 64 이다.
    • 167.199.170.64/27
  3. 이 네트워크의 마지막 주소는 앞의 27비트는 고정, 뒤의 5비트는 1인 값이다.
    • 위에서 계산한 방식대로 01011111 이므로, 이는 95 이다.
    • 167.199.170.95/27

mask example - 1 - range

위에서 계산한 것을 NOT, AND, OR을 이용해서 구할 수도 있다. (/27은 255.255.255.224이다)

  1. 네트워크 주소 개수: NOT(mask) + 1 = 0.0.0.31 + 1 = 32개
  2. 첫 주소: address AND mask = 167.199.170.82 AND 255.255.255.224 = 167.199.170.64/27
  3. 마지막 주소: address OR (NOT mask) = 167.199.170.95/27

예시 2

classless 주소지정 방식에서 특정 주소는 한 주소 블록에만 속한 것이 아니다. 예를 들어 주소 230.8.24.56은 많은 블록에 속할 수 있다. 아래처럼..

prefix length block
16 230.8.0.0 ~ 230.8.255.255
20 230.8.16.0 ~ 230.8.31.255
26 230.8.24.0 ~ 230.8.24.63
28 230.8.24.48 ~ 230.8.24.63
29 230.8.24.56 ~ 230.8.24.63
31 230.8.24.56 ~ 230.8.24.57

예시 3 - AWS 보안 그룹

aws example

  1. 121.123.254.0/24
  2. 221.148.253.119/32

실제 IP로 예시를 들 수는 없지만, AWS 보안그룹에 다음과 같은 인바운드 규칙을 추가했다고 해보자. 그러면 이 규칙은 어떤 IP를 허용하는 것일까?

1번 네트워크

  1. 이 네트워크 주소의 개수는 2^(32-24) = 2^8 = 256개다.
  2. 이 네트워크의 첫 주소는 121.123.254.0/24이다.
  3. 이 네트워크의 마지막 주소는 121.123.254.255/24이다.

2번 네트워크

  1. 이 네트워크 주소의 개수는 2^(32-32) = 2^0 = 1개다.
  2. 이 네트워크의 첫 주소이자 마지막 주소는 221.148.253.119/32

그러니까 prefix의 숫자는 이 네트워크에 속하는 주소가 몇개나 되는지를 결정하는 것이다. 결론적으로

1번 네트워크는 121.123.254.0/24 ~ 121.123.254.255/24의 256개의 주소를 모두 인바운드로 허용한다.

2번 네트워크는 221.148.253.119/32 에 해당하는 IP와 포트로부터 들어오는 요청만 허용한다.

결론적으로는 집에서 개인적으로 프로젝트를 하면서, EC2에 SSH로 접속하기 위해 집의 IP, 22번 포트를 인바운드 규칙에 포함시키고자 한다면 n을 32로 제한하자. 그렇지 않으면(그럴리는 거의 없겠지만) 해당 네트워크에 속한 본인 외의 IP에서도 접속이 가능할 것이다.

Network Address

주소 블럭의 첫 주소인 network address는 목적지 네트워크의 패킷을 라우팅하는데 사용되기 때문에 특히 중요하다.

첫 주소 = (10진수 prefix) * 2^(32-n) = (10진수 prefix) * N

Network Address - 예시

어떤 조직이 14.24.74.0/24로 시작하는 주소 블럭을 할당 받았다. 해당 조직은 3개의 서브 주소 블럭을 가져야하고, 그래서 세개의 서브넷에 사용할 3개의 서브블록이 필요하다. 만약 서브블록을 30, 40, 120개로 할당해야 한다고 하면 이 서브블록들을 디자인 해보자.

network address

  1. 이 블록에는 2^(32-24) = 2^8 = 256 개의 주소가 있다.
  2. 첫 주소는 14.24.74.0/24
  3. 마지막 주소는 14.24.74.255/24

network address range

이 256개의 주소들을 할당하기 위해 일단 가장 큰 120개부터 할당한다.

  1. 120개를 할당하기 위해서는 128개(2의 승수)를 할당한다.
  2. subnet mask는 n = 25
  3. 첫 주소는 14.24.74.0/25, 마지막 주소는 14.24.74.127/25

address allocation - 120

그 다음 40개를 할당해보자

  1. 40개를 할당하기 위해서는 64개(2의 승수)를 할당
  2. subnet mask는 n = 26
  3. 첫 주소는 14.24.74.128/26, 마지막 주소는 14.24.74.191/26

address allocation - 40

그 다음 30개를 할당

  1. 30개를 할당하기 위해서는 32개를 할당
  2. subnet mask는 n = 27
  3. 첫 주소는 14.24.74.192/27, 마지막 주소는 14.24.74.223/27

address allocation - 30

이렇게 할당한다면, 128 + 64 + 32 = 224개의 주소를 할당 했다. 그래서 나머지 32개의 주소가 남는다.

address allocation - remain

특수 주소들

주소 설명
0.0.0.0/8 자체 네트워크
0.0.0.0/32 This-host, host가 IP datagram을 보내야 할 때 사용되지만, 소스 주소로 사용될 주소를 모른다.
10.0.0.0/8 사설 네트워크
127.0.0.0/8 루프백(자기 자신)
169.254.0.0/16 링크 로컬
172.16.0.0/12 사설 네트워크
192.0.2.0/24 예제 등 문서에서 사용
192.88.99.0/24 6to4 릴레이 애니캐스트
192.168.0.0/16 사설 네트워크
198.18.0.0/16 네트워크 장비 벤치마킹 테스트
224.0.0.0/4 멀티캐스트
240.0.0.0/4 reserved
255.255.255.255/32 Limited-broadcast, router가 모든 device에 데이터를 보내고 싶을 때
  1. 0.0.0.0/8 - This-Network
    • 송신 네트워크 자체
  2. 0.0.0.0/32 - This-host
    • 위에서 말하는 네트워크 안에 송신 호스트
  3. 10.0.0.0/8 - 사설 네트워크(private network)
    • 인터넷과 연동되지 않은 사적인 독립 네트워크에 권고되는 주소
  4. 127.0.0.0/8 - 루프백
    • 통상적으로 디버깅을 목적으로 네트워크 상에서 자기 자신을 나타내는 인터페이스
    • 루프백 인터페이스 IP주소를 갖는 데이터그램은 외부 네트워크쪽으로 이를 전송하지 않음
    • 라우터 등에서는 이를 수신하면, 전송하지 않고 바로 폐기함
  5. 169.254.0.0/16 - Link Local
    • DHCP 서버를 찾지 못했을 경우 클라이언트끼리 IP를 할당할 때 쓰기 위해 예약된 주소
  6. 172.16.0.0/12
    • 위와 동일하게 사설 네트워크에 쓰기 위해 예약된 IP주소, 네트워크는 16개 만들 수 있고(16~31) 각 네트워크의 호스트는 65534개
  7. 192.0.0.0/24
    • 이 블록은 IANA에 예약되어 있지만, 지금은 필요 없어졌기 때문에, 정상적인 등록이 가능하도록 RIR(Regional Internet Registry)로 할당 될 것이다.
  8. 192.0.2.0/24
    • TEST-NET-1
    • 문서와 예제 코드에서 사용되기 위해 예약됨.
    • public internet에 나타나면 안된다.
    • example.net 이나 example.com와 같은 도메인 네임과 같이 쓰인다.
  9. 192.88.99.0/24
    • IPv6를 IPv4로 연결할 때 사용하기 위해 예약된 IP주소
  10. 192.168.0.0/16
    • 위와 동일하게 사설 네트워크를 위해 예약된 주소(공유기에서 가장 많이 쓰는 대역, RFC1918 참조)
  11. 198.18.0.0/16
    • 네트워크 장비의 벤치마크 테스트를 위해 사용된다.(RFC2544 참조)
  12. 198.51.100.0/24
    • TEST-NET-2
  13. 203.0.113.0/24
    • TEST-NET-3
  14. 224.0.0.0/4 - 멀티캐스트 용
    • 멀티캐스트 그룹에 참여하는 구성원들을 확인하기 위한 주소
    • 이 주소로 전송하게되면, 이에 참여하는 여러 호스트들이 이를 동시에 수신하게 된다.
  15. 240.0.0.0/4
    • 예전에는 예약된 주소였으나, 현재는 모두 사용됨
  16. 255.255.255.255/32 - 제한된 브로드캐스트
    • 이 브로드캐스트 주소는 라우터를 넘어가는 것이 불가능하다.

참고자료

댓글남기기