개요
대부분의 네트워크는 TCP/IP로 동작한다. 이름에서부터 IP가 떡하니 들어간다. 얼마나 중요하면 이름에 넣었겠는가!
네트워크를 잘 이해하려면 IP 주소 체계에 대한 이해가 필수적이다. 따라서 이번 포스팅에서는 IP 주소에 대해 아주 구체적으로 알아볼 예정이다.
3 계층 주소의 특징
- 사용자가 변경 가능한 논리 주소다.
- 주소에 레벨이 있다. 그룹을 의미하는 네트워크 주소/호스트 주소로 나뉜다.
논리 주소와 물리 주소의 차이
- 논리 주소는 소프트웨어에 의해 생성되고 관리되는 주소다.
- 물리 주소는 하드웨어에 의해 실제로 사용되는 주소로, 메모리나 네트워크 하드웨어에 의해 직접적으로 접근되는 주소를 의미한다.
- 논리 주소는 물리 주소로 변환되어야 실제 자원에 접근할 수 있다. 예를 들어, 네트워크에서 논리 주소인 IP 주소는 ARP(Address Resolution Protocol)을 통해 물리 주소인 MAC 주소로 변환된다.
IP 주소란?
IP 주소(Internet Protocol address)는 인터넷에 연결된 장치들을 식별하기 위해 사용되는 고유한 논리 주소다.
IP 주소는 두 가지 주요 버전인 IPv4와 IPv6로 나뉘는데, 우리가 흔히 사용하는 IP 주소는 IPv4 주소다.
IPv4 주소 체계
IPv4 주소 체계는 32비트로, 4개의 옥텟(Octet)이라고 부르는 8비트 단위로 나누며 각 옥텟은 .
으로 구분한다.
위의 그림처럼 8비트 한 덩이를 옥텟이라고 부른다.
IP 주소는 네트워크와 호스트 주소 두 부분으로 나뉜다.
- 네트워크 주소 : 호스트들을 모은 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 함
- 호스트 주소 : 하나의 네트워크 내에 존재하는 호스트를 구분하기 위한 주소
이렇게 두 부분으로 나뉜다고 하니 주소의 절반씩, 즉 2 옥텟씩 가져가지 않을까? 하는 생각이 들 법하다. 하지만 IP주소는 두 주소를 그리 간단히 나누지 않는다.
IPv4 주소의 클래스
IP 주소 체계는 필요한 호스트 IP의 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 클래스(Class) 개념을 도입했다.
- A 클래스 : 첫 번째 옥텟만 네트워크 주소, 이후 세 옥텟은 호스트 주소 => 약 1,600만 개의 IP 주소 할당 가능
- B 클래스 : 두 번째 옥텟까지 네트워크 주소 => 약 6만 5천개의 IP 주소 할당 가능
- C 클래스 : 세 번째 옥텟까지 네트워크 주소 => 약 250개의 IP 주소 할당 가능
- D 클래스 : 멀티캐스트(Multicast)용
- E 클래스 : 예약(Reserved for futures)용. 미래에 사용하기 위해 남겨둠
만약 네트워크 주소와 호스트 주소를 나누는 구분자가 고정되어 있다면 네트워크가 가질 수 있는 호스트 IP의 개수가 모두 같을 것이다. 아주 작은 호스트가 필요한 네트워크도, 아주 많은 호스트가 필요한 네트워크도 모두 같은 개수의 호스트 IP를 할당받는다면 비효율적이다. 따라서 클래스를 도입해 사용하는 것이다.
클래스 구분법
A, B, C 클래스는 맨 앞 옥텟의 주소만 보고 구분할 수 있다.
- A 클래스 : 맨 앞 옥텟의 주소가 0~127 범위
- B 클래스 : 맨 앞 옥텟의 주소가 128~191 범위
- C 클래스 : 맨 앞 옥텟의 주소가 192~223 범위
왜 이렇게 되는 건지 더 자세히 알아보자.
A 클래스
첫 옥텟을 이진수로 표기하면 8자리가 된다. 한 개의 옥텟은 8비트이기 때문이다.
이 8자리 이진수 중 맨 앞 자리가 0이면 A클래스다.
따라서 A 클래스는 첫 옥텟이 00000000 - 01111111인 주소다. 이걸 십진법으로 나타내면 0 - 127이 된다.
여기서 127은 예외적으로 자신을 의미하는 루프백(Loopback) 주소로 사용된다.
B 클래스
8자리 이진수 중 앞 두자리가 10이면 B 클래스다.
B 클래스는 첫 옥텟이 10000000 - 10111111인 주소다. 이걸 십진법으로 나타내면 128 - 191이 된다.
여기서 주의해야 할 점이 첫 옥텟을 보고 B 클래스인 걸 알아냈어도 첫 옥텟만 네트워크 주소라고 헷갈리면 안 된다.
B 클래스는 앞의 두 옥텟이 모두 네트워크 주소다. 다만 어떤 클래스인지 알아내기 위해 맨 첫 옥텟을 보는 것이다.
예를 들어 172.16.254.1
은 B 클래스다. 이건 맨 앞 옥텟이 128 - 191 사이이므로 알 수 있다. 이때 네트워크 주소는 172.16
에 해당하고 호스트 주소는 254.1
에 해당한다.
C 클래스
8자리 이진수 중 앞 세 자리가 110이면 C 클래스다.
C 클래스는 첫 옥텟이 11000000 - 11011111인 주소다. 이걸 십진법으로 나타내면 192 - 223이 된다.
C 클래스 역시 첫 옥텟을 보고 어떤 클래스인지 알아냈지만, 네트워크 주소는 앞 세 개의 옥텟임을 명심하자.
문제 풀어보기
네트워크 주소와 브로드캐스트 주소가 뭔가요?
IP 체계에서는 맨 앞의 숫자를 네트워크 주소로, 맨 뒤의 숫자를 브로드캐스트 주소로 사용한다.
주소가 172.16.254.1
인 경우
1. 네트워크 주소는?
B 클래스이므로 앞의 두 옥텟이 네트워크 주소다.
따라서 172.16.0.0
2. 브로드캐스트 주소는?
브로드캐스트 주소는 가능한 IP 주소 중 맨 마지막 주소를 말한다.
따라서 172.16.255.255
3. 유효 IP 범위는?
172.16.0.0 - 172.16.255.255 중에서 네트워크 주소와 브로드캐스트 주소를 제외한
172.16.0.1 - 172.16.255.254가 된다.
클래스풀(Classful) 주소 체계
위에서 학습한 것처럼 클래스 기반의 IP 주소 체계를 클래스풀(Classful)이라 부른다.
IP 주소 체계를 처음 만들었을 때는 클래스 개념을 도입하여 확장성을 높이고 주소 낭비를 줄일 수 있었다.
이 주소 체계에서는 복잡한 것 없이 그냥 맨 앞자리 숫자만 보면 자연스럽게 이 주소가 어느 클래스에 속해있는지 구분하고 주소 구분자를 적용할 수 있었다.
클래스리스 네트워크의 등장
하지만 인터넷이 상용화되면서 인터넷에 연결되는 호스트 숫자가 폭발적으로 증가했고, 클래스풀 주소 체계만으로는 늘어나는 호스트를 감당하기 턱없이 부족해졌다. 이유는 다음과 같다.
- 이론적으로 사용할 수 있는 IP 개수는 43억여 개인데 전 세계 인구가 하나의 IP만 갖더라도 턱없이 부족함
- 하나의 네트워크에서 IP가 사용되지 않더라도 해당 IP를 다른 네트워크에서 사용할 수 없음 => IP주소가 낭비됨
이런 문제때문에 3가지 보존 전략이 등장한다.
- CIDR 기반의 주소 체계(클래스리스) : 단기 대책
- NAT, 사설 IP 주소 : 중기 대책
- IPv6 : 장기 대책
클래스풀에서는 한 개의 클래스 네트워크가 한 조직에 할당되면 아무리 비어있는 주소라도 IP를 분할해 다른 기관이 사용하도록 할 수 없다. 이 문제를 해결하기 위해 클래스 개념 자체를 버리는데 이를 클래스리스라고 부른다.
기존에 클래스풀 주소 체계에서는 맨 앞 옥텟만 보고 어떤 클래스에 해당하는지, 어디까지가 네트워크 주소이고 어디까지가 호스트 주소인지 구분할 수 있었다.
하지만 클래스리스에는 이름처럼 클래스 개념이 없으므로 별도로 네트워크와 호스트 주소를 나누는 구분자를 사용해야 한다. 이 구분자를 서브넷 마스크라고 부른다.
IPv6 도입
클래스리스 네트워크 중에서도 IPv6(Internet Protocol version 6)는 128비트 주소 체계를 사용하여 더 많은 고유 주소를 제공한다.
이는 장기 대책으로서, 아직까지는 IPv4에서 IPv6로 완전한 전환이 이루어지지 않았다.
현재까지도 많은 라우터들이 IPv4를 사용하는데, 만약 IPv6 데이터그램을 전송하려면 tunneling 방식을 사용한다.