IP 주소는 크게 네트워크 주소와 호스트 주소로 이루어진다. 네트워크 주소는 호스트가 속한 특정 네트워크를 식별하는 역할을 하며, 호스트 주소는 네트워크 내에서 특정 호스트를 식별하는 역할을 한다.
네트워크 주소와 호스트 주소
네트워크 주소는 네트워크 ID, 네트워크 식별자 등으로 부르기도 하며, 호스트 주소는 호스트 ID, 호스트 식별자 등으로 불린다.
다음은 네트워크 주소가 16비트, 호스트 주소가 16비트인 IP 주소의 예시이다.
이때 네트워크 주소가 늘어나면 더 많은 네트워크를 표기할 수 있고, 호스트 주소가 늘어나면 더 많은 호스트를 표기할 수 있다. 어떻게 해야 적절한 크기를 설정할 수 있을지 고민이 생기게 되는데, 이를 해결하기 위한 개념이 IP 주소의 클래스이다.
클래스 풀 주소체계
클래스는 네트워크 크기에 따라 IP 주소를 분류하는 기준이다. 클래스를 사용하면 호스트 IP 개수에 따라 네트워크 크기를 가변적으로 조정해 네트워크 주소와 호스트 주소를 구획할 수 있다. 이런 주소 체계를 클래스풀 주소 체계(classful addressing)라고 한다.
클래스는 A, B, C, D, E가 있는데, D와 E는 각각 멀티캐스트와 특수한 목적을 위해 예약된 클래스이기 때문에 실질적으로 사용되는 클래스는 A, B, C이다. 이 클래스들이 어떻게 다른지 알아보자.
A클래스로 갈수록 호스트 주소가 커지고, C클래스로 갈수록 호스트 주소가 작아진다.
A클래스의 맨 첫 번째 주소의 맨 좌측 비트는 0이어야 한다. B 클래스는 10이어야 하고, C클래스는 110이어야 한다. 이는 각각 표기할 수 있는 비트의 최솟값과 최댓값이 다르다는 것을 의미한다.
또 호스트의 주소공간을 모두 사용할 수는 없다. 호스트 주소가 전부 0인 주소와 호스트 주소가 전부 1인 IP 주소는 특정 호스트를 지칭하는 IP 주소로 활용될 수 없다. 전자는 해당 네트워크 자체를 의미하는 네트워크 주소로 사용되고, 후자는 브로드캐스트를 위한 주소로 사용되기 때문이다.
클래스 초기 비트 네트워크 주소 비트/호스트 주소 비트 할당 가능한 네트워크 수 할당 가능한 호스트 수 최솟값 최댓값
A | 0 | 8/24 | 128 | 16,777,216 - 2 | 0.0.0.0 | 127.255.255.255 |
B | 10 | 16/16 | 16,384 | 65,536 - 2 | 128.0.0.0 | 191.255.255.255 |
C | 110 | 24/8 | 2,097,152 | 256 - 2 | 192.0.0.0 | 223.255.255.255 |
클래스리스 주소 체계
클래스풀 주소 체계를 사용하면 네트워크 영역을 결정하고 할당 가능한 호스트의 주소 공간을 유동적으로 관리할 수 있지만, 클래스별 네트워크의 크기가 고정되어 있다는 한계가 있다.
예를 들어 호스트가 300명인 네트워크를 구성하고 싶을 때 C클래스를 사용하기엔 수가 조금 부족하기 때문에 B클래스를 사용해야 한다. 이때 많은 호스트 주소가 낭비된다.
그래서 클래스풀 주소 체계보다 더 유동적이고 정교하게 네트워크를 구획할 수 있는 클래스리스 주소 체계(classless addressing)가 등장했다. 오늘날 주로 사용되는 방식으로, 이번 절의 핵심이다.
서브넷 마스크
클래스풀 주소 체계는 클래스를 이용해 네트워크 주소와 호스트 주소를 구분하지만, 클래스리스 주소 체계는 서브넷 마스크(subnet mask)를 통해 구분한다.
서브넷마스크는 1과 0으로 이루어진 비트열로, 1은 네트워크 주소를 의미하고 0은 호스트 주소를 의미한다. 서브넷 마스크를 이용해 클래스를 원하는 크기로 더 잘게 쪼개어 사용하는 것을 서브네팅(subnetting)이라고 한다.
서브넷 마스크로 클래스풀 주소 체계를 표현한다면 다음과 같다.
- A클래스 : 255.0.0.0(11111111.00000000.00000000.00000000)
- B클래스 : 255.255.0.0(11111111.11111111.00000000.00000000)
- C클래스 : 255.255.255.0(11111111.11111111.11111111.00000000)
서브네팅 : 비트 AND 연산
네트워크 주소와 호스트 주소를 구분 짓는 방법은 서브넷 마스크에 비트 AND 연산을 하는 것이다.
비트 마스크 방법과 동일하다.
서브넷 마스크 표기 : CIDR 표기법
서브넷 마스크를 표기하는 방법은 크게 두 가지가 있다.
- ‘255.255.255.0’처럼 10진수로 표기하는 법
- ‘IP 주소/서브넷 마스크 상의 1의 개수’ 형식으로 표기하는 방법
여기서 두 번째 방식이 CIDR 표기법(CIDR;Classless Inter-Domain Routing notation)이라고 부른다.
예를 들어 C클래스를 표기한다면 다음과 같다.
IP 주소 192.168.219.103과 서브넷 마스크 255.255.255.0 → 192.168.219.103/24
공인 IP 주소와 사설 IP 주소
IPv6를 설명하면서 ‘IP주소가 고갈될 수 있다.’라고 말했다. 이는 반만 맞는 이야기이다. 전 세계에는 고유한 IP가 있고, 고유하지 않은 IP 주소도 있다. 지금까지 설명한 IP 주소는 고유한 IP주소를 의미하며, 이를 공인 IP 주소라고 한다.
공인 IP 주소
공인 IP 주소(public IP address)는 전 세계에서 고유한 IP 주소이다. 네트워크 간의 통신에서 사용하는 IP 주소가 바로 공인 IP 주소이다. 공인 IP 주소는 ISP나 공인 IP 주소 할당 기관을 통해 할당받을 수 있다.
사설 IP 주소와 NAT
사설 IP 주소(private IP address)란 사설 네트워크에서 사용하기 위한 IP 주소이다. 사설 네트워크란 인터넷, 외부 네트워크에 공개되지 않은 네트워크를 의미한다. 일반적인 사용자는 IP 주소를 별도로 신청해서 받지 않는다. 이는 사설 IP 주소를 사용하기 때문이다.
IP 주소 공간에서 사설 IP주소로 사용하도록 예약된 IP 주소공간이 있다.
- 10.0.0.0/8 (10.0.0.0 ~ 10.255.255.255)
- 172.16.0.0/12 (172.16.0.0 ~ 172.31.255.255)
- 192.168.0.0/16 (192.168.0.0 ~ 192.168.255.255)
사설 IP 주소의 할당 주체는 일반적으로 라우터이다. 할당받은 사설 IP 주소는 해당 호스트가 속한 사설 네트워크상에서만 유효하므로, 얼마든지 다른 네트워크상의 사설 IP 주소와 중복될 수 있다. 따라서 사설 IP 주소만으로는 일반적인 통신이 어렵다.
사설 IP 주소를 사용하는 호스트가 외부 네트워크와 통신하기 위해선 NAT(Network Area Translation) 기술이 필요하다. 이는 IP주소를 변환하는 기술로, 주로 사설 IP 주소와 공인 IP 주소를 변환하는 데 사용된다. 대부분의 라우터와 (가정용) 공유기는 NAT 기능을 내장하고 있다.
정적 IP 주소와 동적 IP 주소
호스트에 IP 주소를 할당하는 방법은 두 가지가 있다. 하나는 수작업으로 할당하는 정적 할당이고, 다른 하나는 DHCP라는 프로토콜을 사용해 할당하는 동적 할당이다.
정적 할당
정적 할당은 수작업으로 IP 주소를 할당하는 방식으로, 이를 정적 IP 주소(static IP address)라고 한다.
IP를 수작업으로 부여하기 위해선 IP 주소, 서브넷 마스크, 게이트웨이(라우터) 주소, DNS 주소를 입력해야 한다.
💡 기본 게이트웨이
게이트웨이(gateway)의 일반적인 의미는 서로 다른 네트워크를 연결하는 소프트웨어적/하드웨어적 수단을 의미한다. 그중 기본 게이트웨이(default gateway)는 호스트가 속한 네트워크 외부로 나가기 위한 첫 번째 경로(홉)를 의미한다.
동적 할당과 DHCP
수작업으로 할당하는 방법은 호스트가 많아지면 관리가 어려워진다. 이럴 때 사용하기 좋은 방법이 동적 할당이다. 동적으로 할당된 IP 주소를 동적 IP 주소(dynamic IP address)라고 부른다.
동적 IP 주소는 사용하지 않으면 회수되고, 할당받을 때마다 주소가 바뀔 수 있다.
동적 할당에 사용되는 대표적인 프로토콜이 DHCP(Dynamic Host Configuration Protocol)이다. DHCP는 응용 계층에 속하지만, 네트워크 계층의 개념을 이해하는데 도움이 되므로 동작 과정을 살펴보자.
💡 IPv4 주소를 동적으로 할당하는 프로토콜은 DHCPv4이고, IPv6 주소를 동적으로 할당하는 프로토콜은 DHCPv6이다. 여기에선 DHCPv4를 설명한다.
DHCP를 통해 IP 주소를 할당받는 방식은 호스트와 IP 주소를 제공하는 DHCP 서버 간의 메시지를 주고받음으로써 이루어진다. DHCP 서버의 역할은 일반적으로 라우터(공유기)가 수행하지만 특정 호스트가 수행할 수도 있다.
DHCP 서버는 IP 주소 목록을 관리하다가 클라이언트가 요청할 때 IP 주소를 할당해 준다. DHCP로 할당받은 IP 주소는 임대 기간이 정해져 있으며, 임대기간이 끝나면 DHCP 서버로 반환된다. 임대기간이 끝나면 IP 주소를 재할당 받아야 하며, 이를 임대 갱신(lease renewal)이라고 한다. 기본적으로 자동으로 수행해 주며, 이 과정이 모두 실패하면 IP 주소는 DHCP 서버로 반납된다.
DHCP 서버와의 메시지
클라이언트와 DHCP 서버 간에 주고받는 메시지의 종류는 다음과 같다.
- DHCP Discover
- 클라이언트가 DHCP Discover 메시지를 브로드캐스트로 전송하여 DHCP 서버를 찾는다.
- DHCP Offer
- DHCP 서버는 DHCP Discover 메시지를 받은 뒤 클라이언트에게 DHCP Offer 메시지를 보낸다. 이때 IP주소와 서브넷 마스크, 임대 기간 등의 정보가 포함된다.
- DHCP Request
- 클라이언트가 DHCP Offer 메시지를 받으면, 메시지를 받았고 IP 주소를 사용해도 되는지 DHCP 서버에게 DHCP Request 메시지를 브로드캐스트로 전송한다.
- DHCP Acknowledgment(이하 DHCP ACK)
- DHCP 서버는 클라이언트에게 DHCP ACK 메시지를 보내 최종 승인을 해준다. 이때 임대 기간 동안 IP주소가 설정된다.
예약 주소 : 0.0.0.0 vs 127.0.0.1
특수한 목적을 위해 예약된 IP 주소들이 있는데, 그중 자주 접하게 될 IP 주소가 있다. 바로 루프백 주소와 0.0.0.0이다.
루프백 주소(loopback address)는 자기 자신을 가리키는 주소이다. 일반적으로 사용되는 주소는 127.0.0.1이고, 로컬호스트라고도 불린다. 루프백 주소는 전송하면 자기 자신에게 되돌아오므로 디버깅 용도로 사용할 수 있다.
0.0.0.0/8은 인터넷 표준 공식 문서(RFC 6890)에 따르면 ‘이 네트워크의 이 이 호스트(This host on this network)를 지칭하도록 예약되었다’라고 명시되어 있다.
이와 유사하지만 다른 의미를 지니는 주소로 0.0.0.0/0이 있다. 이는 ‘모든 임의의 IP 주소’를 의미한다. 주로 패킷이 이동할 경로를 결정하는 라우팅에서 사용되며, 디폴트 라우트를 나타내기 위해 사용된다.
'도서 정리 > 혼자 공부하는 네트워크' 카테고리의 다른 글
[혼자 공부하는 네트워크]Chapter 4 - 1 전송 계층 개요 : IP의 한계와 포트 (0) | 2024.07.28 |
---|---|
[혼자 공부하는 네트워크] Chapter 3 - 3 라우팅 (1) | 2024.07.21 |
[혼자 공부하는 네트워크] Chapter 3 - 1 LAN을 넘어서는 네트워크 계층 (0) | 2024.07.21 |
[혼자 공부하는 네트워크] Chapter 2 - 4 스위치 (0) | 2024.07.14 |
[혼자 공부하는 네트워크] Chapter 2 - 3 허브 (0) | 2024.07.14 |