IP 주소에 대해서
네트워크 주소 & 호스트 주소
--
IP 주소는 크게 2가지 파트로 나누어진다.
- 네트워크 주소 : 인터넷에서 각 네트워크를 식별하기 위한 주소 파트
(네트워크 ID, 네트워크 식별자 등으로 부르기도 한다.) - 호스트 주소 : 네트워크에서 각 장치를 식별하기 위한 주소 파트
(호스트 ID, 호스트 식별자 등으로 부르기도 한다.)
위 그림처럼
네트워크 주소에 하나의 옥텟을 사용한다면, 호스트 주소 할당에 3개의 옥텟을 사용할 수 있어서 상대적으로 많은 호스트에 IP 주소를 할당할 수 있다.
반대로 호스트 주소가 하나의 옥텟만 사용한다면 각 네트워크는 적은 호스트에 IP 주소를 할당할 수 있지만, 3개의 옥텟만큼의 많은 네트워크를 구성할 수 있게 된다.
옥텟(Octet)은
8bit로 구성된 데이터 단위를 의미한다.
이때 네트워크 주소와 호스트 주소의 범위를 어떻게 정할지 사용하는 개념이 "IP 주소의 클래스"다.
--
클래스풀 (Classful) 주소 체계
--
여기서 클래스는
네트워크 크기에 따라 IP 주소를 분류하는 기준이다.
클래스를 사용하면
필요한 호스트 IP 개수에 따라 네트워크 크기를 가변적으로 조정하여
네트워크 주소와 호스트 주소 범위를 정의할 수 있다.
IP 주소는 4개의 옥텟으로 구성되어 있으며,
해당 주소를 A, B, C, D, E의 5가지 클래스로 나누어 사용한다.
클래스 D와 클래스 E는 멀티캐스트를 위한 클래스와 특수한 목적을 위해 예약된 클래스로,
네트워크 크기를 나누는 데에 실질적으로 사용되는 클래스가 아니다.
다만 호스트의 주소 공간을 모두 사용할 수 있는 것은 아니다.
2진수 기준 호스트 주소가 전부 0인 IP 주소와 전부 1인 IP 주소는 특정 호스트를 지정하는 IP 주소로 사용할 수 없다.
- 호스트 주소가 전부 0인 IP 주소 = 해당 네트워크 자체를 의미하는 네트워크 주소로 사용
- 호스트 주소가 전부 1인 IP 주소 = 브로드캐스트를 위한 주소로 사용
A 클래스를 예시로 보여주면
121.0.0.0 = 네트워크 주소
121.255.255.255 = 브로드캐스트 주소
현재는 클래스 방식을 사용하지 않는다.
1. 주소 낭비 문제
고정된 크기의 네트워크를 할당하나 보니 실제로 필요한 IP 주소 수보다 훨씬 더 많은 주소가 할당되는 경우가 많다.
ex) B 클래스는 약 65,000개의 호스트 주소를 지원하지만,
만약 1,000개의 호스트만 필요하다면 약 6,4000개의 주소가 낭비된다.
2. 네트워크 부족 문제
네트워크 범위가 넓은 A 클래스는 대규모 네트워크에,
네트워크 범위가 적닥한 B 클래스는 중간 규모 네트워크에,
네트워크 범위가 작은 C 클래스는 소규모 네트워크로 할당하여 사용했지만,
점점 더 많은 네트워크가 인터넷에 연결되면서 클래스에 따라 할당할 수 있는 네트워크가 고갈되었다.
그래서 현재는 클래스에 의존하지 않고 유연하게 주소를 분배할 수 있는
CIDR (Classless Inter-Domain Routing) 방법을 사용한다.
--
클래스리스 (Classless) 주소 체계 (+ 서브넷 마스크, CIDR)
--
위의 클래스풀 주소 체계는 클래스별 네트워크의 크기가 고정되어 있기에 IP 주소가 낭비될 가능성이 크다.
그래서 클래스풀 주소 체계보다 더 유동적이고 정교하게 네트워크를 구획할 수 있는 방법이 "클래스리스" 주소 체계다.
즉, 클래스에 구애받지 않고 네트워크 영역을 나누어 호스트에게 IP 주소 공간을 할당하는 방식이다.
클래스풀 주소 체계는 클래스를 이용하여 네트워크 주소와 호스트 주소를 구분하지만
클래스리스 주소 체계는 클래스를 사용하지 않으므로 네트워크와 호스트를 구분 짓는 "서브넷 마스크"를 사용한다.
서브넷 마스크 (Subnet Mask)
서브넷 마스크는
IP 주소상에서 네트워크 주소는 1, 호스트 주소는 0으로 표기한 비트열이고,
(10진수로 네트워크 주소는 255, 호스트 주소는 0으로 표기)
이를 이용하여 IP 주소의 네트워크 부분과 호스트 부분을 구분하기 위해 사용된다.
(클래스를 사용하지 않아서 네트워크 범위가 정해져 있기 않기 때문이다.)
즉, 현재 IP 주소에서 어느 부분이 네트워크를 나타내고, 호스트를 나타내는지 구분하기 위해 사용된다.
서브넷 (Subnet)은
IP 주소의 네트워크 주소로 구분이 가능한 네트워크의 부분 집합인 "서브네트워크"의 줄임말이다.
서브넷 마스크 비트 AND 연산
서브넷 마스크를 이용하여 현재 IP의 네트워크 주소와 호스트 주소를 구분하는 방법은
현재 IP 주소와 해당 서브넷 마스크를 비트로 AND 연산을 수행하면 네트워크 주소를 확인할 수 있다.
비트 AND 연산이란?
피연산자가 모두 1인 경우 = 1, 아니면 = 0
예시
- IP 주소 : 192.168.222.101
- 서브넷 마스크 : 255.255.255.0
이렇게 서브넷 마스크를 이용하여 AND 연산을 통해 해당 IP 주소에서 네트워크 주소를 찾을 수 있다.
서브넷 마스크 표기 방법 (CIDR 표기법)
서브넷 마스크를 표기하는 방법은 크게 2가지 존재한다.
- 10진수 표기법 : 위에서 작성했던 방법(255.255.255.0)처럼 10진수로 표기
- CIDR 표기법 : 네트워크 주소의 비트의 수를 슬래시(/) 뒤에 표기 (ex /24)
[ 255.255.255.0 => 11111111.11111111.11111111.00000000 => /24 ]
위 방법 중에서 CIDR 표기법이 서브넷의 크기를 정확하게 나타낼 수 있어서 상대적으로 더 직관적이고 유연하다.
그리고 CIDR 표기법은 해당 IP 뒤에 붙여서 표현할 수 있다.
( 192.168.222.101/24 )
예시
- IP 주소 (+ CIDR) : 192.168.33.16/25
서브넷 마스크를 보면 호스트 주소는 마지막 0의 개수인 7bit로 표현된다.
그리고 해당 IP 주소의 네트워크 주소는 192.168.33.0인 것을 확인할 수 있다.
그러면 해당 IP 주소의 범위는 192.168.33.0 ~ 192.168.33.127이 된다.
(여기서 192.168.33.0은 네트워크 주소, 192.168.33.127은 브로드캐스트 주소가 된다.)
(즉, 실제로 사용 가능한 호스트 IP 범위는 192.168.33.1 ~ 192.168.33.126)
--
공인 IP 주소 & 사설 IP 주소
--
IP 주소는 고유한 주소라고 하지만 반은 맞고 반을 틀린 말이다.
IP 주소에는 전 세계에 대한 고유한 IP 주소가 있고, 고유하지 않은 IP 주소도 존재한다.
공인 IP 주소 (Public IP Address)
공인 IP 주소는 전 세계에서 공유한 IP 주소를 의미한다.
네트워크 간의 통신(인터넷 통신 등)을 이용할 때 사용하는 IP 주소로
ISP나 공인 IP 주소 할당 기관을 통해 할당받을 수 있다.
사설 IP 주소 (Private IP Address)
사설 IP 주소는 사설 네트워크 or 로컬 네트워크에서 사용하기 위한 IP 주소를 의미한다.
사설 네트워크 or 로컬 네트워크는
인터넷 or 외부 네트워크에 공개되지 않은 네트워크를 의미한다.
보통 가정집에서 인터넷 개통을 하나만 한다.
즉, 해당 집은 공인 IP를 1개 할당받은 것인데
어떻게 해당 집에서 여러 장치를 사용하는 것일까?
바로 내부에 사설 네트워크를 구성하여 각 장치들이 사설 IP 주소를 사용하기 때문이다.
이때 사설 IP 주소의 할당을 해주는 주체는 일반적으로 "라우터(Router)"다.
(공유기도 라우터다)
사설 IP 주소는 해당 호스트가 속한 사설 네트워크상에서만 유효한 주소이므로,
다른 네트워크상의 사설 IP 주소와 중복될 수 있다.
(어쩌피 내 사설 네트워크에서만 사용하므로 외부의 IP와 겹치든 말든 전혀 상관이 없다.)
NAT (Network Address Translation)는
IP 주소를 변환하는 기술로,
주로 네트워크 내부에서 사용되는 사설 IP 주소와
네트워크 외부에서 사용되는 공인 IP 주소를 서로 변환하는 데 사용된다.
대부분의 라우터와 공유기는 NAT 기능을 내장하고 있다.
그래서 사설 네트워크상에서 만들어진 패킷 내부에 사설 IP 주소는
공유기를 거쳐 공인 IP 주소로 변경되어 외부 네트워크에서도 통신이 가능하도록 한다.
(이 반대로도 가능)
--
정적 IP 주소 & 동적 IP 주소
--
호스트에 IP 주소를 할당하는 방법은 크게 2가지가 존재한다.
- 정적 할당
- 동적 할당
정적 할당 (Static)
정적 할당은
사람이 직접 호스트에 수작업으로 IP 주소를 부여하는 방식을 의미하며,
이렇게 할당된 IP 주소를 "정적 IP 주소"라고 부른다.
사람이 직접 입력하므로, 할당한 호스트의 수가 많아질수록
중복된 IP를 할당할 수도 있으며, 관리가 어려워질 수 있다.
일반적으로 IP 주소를 부여할 때 입력하는 내용들
- IP 주소
- 서브넷 마스크
- 게이트웨이 (라우터) 주소
- DNS 주소
게이트웨이 (Gateway)는
일반적으로 서로 다른 네트워크를 연결하는 HW/SW적 수단을 의미한다.
그중에서도 "기본 게이트웨이(Default Gateway)"는
호스트가 속한 네트워크 외부로 나가기 위한 기본적인 첫 경로(첫 홉)를 의미한다.
그래서 기본 게이트웨이는 네트워크 외부와 연결된 라우터(공유기)의 주소를 의미하는 경우가 많다.
동적 할당 (Dynamic)
동적 할당은
정적 할당과 달리 호스트에 동적(자동)으로 IP 주소가 할당되는 방식을 의미한다.
이렇게 할당된 IP 주소를 "동적 IP 주소"라고 부른다.
동적 IP 주소는
사용하지 않을 경우 자동으로 회수되며,
할당받을 때마다 사용 중인 주소 외에 다른 주소를 받을 수 있다.
그래서 노트북, 스마트폰 등 IP 주소를 직접 할당하지 않아도 사용할 수 있었던 이유다.
IP 동적 할당에 사용되는 대표적인 프로토콜은 "DHCP(Dynamic Host Configuration Protocol)"다.
DHCP (Dynamic Host Configuration Protocol)
DHCP는
네트워크에 연결된 장치(컴퓨터, 스마트폰 등)에 자동으로 IP 주소 및 기타 네트워크 설정을 할당해 주는 프로토콜이다.
(응용 계층에 속하는 프로토콜)
그래서 네트워크 관리자가 일일이 장치에 IP 주소를 설정하지 않아도 되기 때문에,
효율적이고 편리하게 IP 주소를 관리할 수 있다.
IPv4 주소를 동적 할당하는 프로토콜 = DHCPv4
IPv6 주소를 동적 할당하는 프로토콜 = DHCPv6
DHCP를 통한 동적 IP 주소 할당 방법
IP 주소를 할당받고자 하는 "호스트"와 해당 호스트에게 IP 주소를 제공해주는 "DHCP 서버"간에
메시지를 구조받음으로써 할당이 이루어진다.
DHCP 서버의 역할은
일반적으로 라우터(공유기)가 수행하지만,
틀정 호스트에 DHCP 서버 기능을 추가할 수도 있다.
DHCP 서버는
클라이언트(호스트)에게 할당 가능한 IP 주소 목록을 관리하다가,
클라이언트(호스트)가 요청할 때 IP 주소를 할당한다.
다만 DHCP로 할당받은 IP 주소는 사용 가능한 기간이 정해져 있다.
즉, IP 주소를 임대해 주는 것인데, 해당 기간은 DHCP 서버에서 설정할 수 있으며,
일반적으로는 n시간에서 n일로 설정한다.
(임대 기간이 끝난 IP 주소는 다시 DHCP 서버로 반납)
IP 주소 할당 과정
1. DHCP Discover (호스트 -> DHCP 서버)
호스트는 DHCP Discover 메시지를 통해 DHCP 서버를 찾는다.
이때 브로드캐스트로 전송하여 찾는다.
2. DHCP Offer (DHCP 서버 -> 호스트)
DHCP 서버는 (Discover) 메시지를 받은 뒤에
다시 호스트에게 DHCP Offer 메시지를 전달한다.
해당 메시지는 호스트에게 할당해 줄 수 있는 IP 주소를 제안하는 메시지다.
(IP 주소뿐만 아니라 서브넷 마스크, 임대 기간 등의 정보도 포함)
3. DHCP Request (호스트 -> DHCP 서버)
DHCP Offer의 응답 메시지로 해당 IP 주소를 사용하겠다고 수락하는 메시지다.
이때도 브로드캐스트로 전송한다.
4. DHCP ACK (DHCP 서버 -> 호스트)
수락을 확인한 DHCP 서버는 마지막으로 호스트에게 DHCP ACK 메시지를 전송한다.
해당 메시지는 최종 승인과도 같은 메시지로
호스트는 해당 메시지를 받으면 이제 할당받은 IP 주소를 자신의 IP 주소로 설정하여 사용하게 된다.
IP 주소는 임대 기간이 존재한다고 했는데
임대 기간이 끝나기 전에 해당 기간을 연장할 수도 있다.
기본적으로 2번은 자동으로 임대 갱신이 수행되며,
만약 임대 갱신 과정에서 실패하면 IP 주소를 DHCP 서버로 반납한다.
--
'CS > 네트워크' 카테고리의 다른 글
[전송 계층] 전송 계층 (0) | 2024.11.20 |
---|---|
[네트워크 계층] 라우팅 (0) | 2024.11.19 |
[네트워크 계층] ARP (Address Resolution Protocol) (0) | 2024.11.17 |
[네트워크 계층] IP (0) | 2024.11.16 |
[OSI 물리 계층, 데이터 링크 계층] 스위치 (0) | 2024.11.12 |