IP 주소는 인터넷 프로토콜 (Internet Protocol)에서 사용되는 주소 체계로, 네트워크 상의 장치들을 식별하는 데 사용된다. 컴퓨터, 스마트폰, 서버, 라우터 등 네트워크에 연결된 모든 장치에 IP 주소가 할당된다.
IP 주소는 컴퓨터별로 달라야하므로 계층적으로 할당되고, 규칙이 있다. 이를 위해 ICANN(Internet Corporation for Assigned Names and Numbers)에서 모든 IP주소를 관리한다.
ICANN은 지역 인터넷 레지스트리(RIR, Regional Internet Registry)에게 IP 주소의 일정 범위를 할당하고 지역 인터넷 레지스트리는 국가별 인터넷 레지스트리에 일정 범위를 할당하고, 국가별 인터넷 레지스트리는 로컬 인터넷 레지스트리의 ISP들에게 일정 범위를 할당한다.
마지막으로 로컬 인터넷 레지스트리는 사용자에게 특정 IP주소를 할당한다.
요약하면 ICANN -> 지역 인터넷 레지스트리(RIR) -> 국가별 인터넷 레지스트리(NIR) -> 로컬 인터넷 레지스트리(LIR) -> 사용자 순으로 할당된다.

- MAC 주소와 IP 주소가 모두 필요한 이유
MAC 주소는 NIC에 할당된 물리적인 주소이다. '다음에 어떤 기기에 프레임을 전송하는지'를 지정하는 주소로 사용된다.
반면 IP주소는 OS에 할당되는 논리적인 주소이다. '최종적으로 어디에 패킷을 전달할지'를 지정하는 주소이다.
(이 두 주소를 연결하는 것이 ARP이다.)
이더넷 네트워크에서 통신을 하기 위해 MAC 주소가 필요하다. 그리고 IP 네트워크에서 통신을 하기 위해서는 IP주소가 필요하다. 현대의 네트워크에서 많은 네트워크는 네트워크 계층에서 IP를 사용하고 데이터링크 계층에서 이더넷을 사용하기 때문에 IP주소와 MAC 주소가 둘 다 필요하다.
IP에는 2가지 버젼이 있다. IPv4 (Internet Protocol version 4)와 IPv6 (Internet Protocol version 6)이다.
32비트 주소 체계를 사용하며 보통 192.168.0.1과 같이 "xxx.xxx.xxx.xxx" 형식으로 표현된다. IPv4로 최대 할당 가능한 IP 주소의 개수는 2의 32승으로 약 40억개이다. 초기 인터넷이 발전할 당시에는 충분했지만, 인터넷 사용량이 급증함에 따라 부족해졌다. 따라서 IPV6가 발명 되었다. 하지만 아직도 IPv4는 현재까지도 가장 널리 사용되는 프로토콜이며, 많은 기존 시스템과 장치들이 IPv4를 사용하고 있다.

IP주소는 네트워크부와 호스트부로 나뉜다. 네트워크부는 어떤 네트워크를 측정하는 정보이다. 호스트부는 그 네트워크 안에 있는 디바이스를 특정한다. 이 두가지를 통합하여 1개의 IP주소가 되는 것이다.
128비트 주소 체계를 사용하며 16진수로 표현된다. 보통 2001:0db8:85a3:0000:0000:8a2e:0370:7334와 같이 "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" 형식으로 표현된다. IPv6로 최대 할당 가능한 IP 주소의 개수는 2의 128승인데 이는 340조의 1조배의 1조배 정도의 천문학적인 숫자이다. IPv4의 주소 고갈 문제와 더 많은 기능과 보안을 제공하는 IPv6의 특징으로 인해, IPv6의 채택이 점차적으로 늘어나고 있다.
일반적으로 IPv4와 IPv6는 호환된다. 따라서 IPv6 네트워크에서 IPv4 장치와 통신할 수 있으며, 그 반대도 가능하다. 하지만 이러한 호환성은 일부 환경에서는 문제가 될 수도 있다. 예를 들어 IPv4를 기반으로 작성된 애플리케이션은 IPv6 환경에서 문제를 일으킬 수 있다.
인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이다. 공용 IP 주소라고도 불리며 외부에 공개되어 있는 IP 주소이다.
일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소이며, 로컬 IP, 가상 IP라고도 불린다. IPv4의 주소부족으로 인해 서브넷팅된 IP이기 때문에 라우터에 의해 로컬 네트워크상의 PC나 장치에 할당된다.
Private IP 주소만으로는 인터넷에 직접 연결할 수 없다. 따라서 라우터를 통해 1개의 Public IP만 할당하고, 라우터에 연결된 개인 PC는 Private IP 주소를 각각 할당 받아 인터넷에 접속할 수 있게 된다.

Private IP를 할당받은 디바이스가 데이터 패킷을 인터넷으로 전송하면, 라우터(공유기)가 해당 Private IP를 Public IP로 바꿔서 전송한다.
인터넷에서 오는 데이터 패킷의 목적지도 해당하는 Private IP로 변경한 후 디바이스에 전송한다.
위에서 Public IP와 Private IP를 살펴보았다. 그런데 인터넷에 접속한 디바이스는 모두 고유의 IP 주소를 사용해야한다. 그렇다면 Private IP를 통해 접속한 디바이스는 어떻게 인터넷 통신을 할까? 주소를 변환함으로써 가능하다. 여기에는 2가지 방법이 있다.
NAT는 몇개의 Public IP 주소를 라우터에 할당하고 LAN 내의 디바이스가 인터넷에 접속할 때 이 중 하나를 이용하여 통신하는 방법이다. LAN 내에서 인터넷에 패킷을 전송할 때 Private IP 주소를 Public IP 주소로 교체한다. 따라서 인터넷에 동시에 접속할 수 있는 디바이스의 개수는 라우터가 갖고 있는 Public IP 주소의 개수로 제한된다.
NAPT는 IP주소의 변환과 함께 포트번호도 변환하는 것으로 한개의 Public IP 주소를 여러대의 컴퓨터가 공용으로 사용하는 방법이다. 라우터의 Public IP 주소 하나에 여러 Private IP 주소를 매칭하는 것이다. 이 과정에서 Private IP들을 구분해야하므로 포트번호를 통해 구분한다.
- 그런데 일반적으로 포트번호는 프로세스를 구분하기 위함인데 그럼 프로세스 구분은 어떻게 할까?
디바이스가 특정 포트번호를 통해 요청을 보내도 라우터가 해당 Private IP주소와 포트번호를 Public IP주소와 새로운 포트번호로 바꿔준다.
ICMP(Internet Control Message Protocol)는 네트워크 장비 간에 제어 메시지를 전송하기 위한 프로토콜이다.
간단히 말해 ICMP는 네트워크 장비 간에 서로 통신할 수 있도록 도와주는 프로토콜이다. 네트워크에서 발생하는 다양한 이벤트를 감지하고 통지하는 데 사용되며, 예를 들어 네트워크 장비의 동작 상태를 확인하거나, 라우팅 오류나 호스트의 접속 불가능 여부를 알려주는 등 다양한 기능을 수행한다.
ICMP를 사용하는 대표적인 예시로 핑(ping)이 있다. 핑을 실행하면 송신 호스트는 해당 목적지 호스트에게 ICMP 에코 요청 메시지를 보내고, 목적지 호스트는 에코 응답 메시지를 다시 송신 호스트로 보낸다. 이 과정에서 송신 호스트는 에코 요청을 보낸 시간부터 에코 응답을 받은 시간까지의 경과 시간을 측정하여 이를 통해 네트워크 지연 시간을 알 수 있다.

서브넷은 이름에서 알 수 있듯 네트워크의 부분망이다. 그림에서 3개의 하늘색 부분이 서브넷이다. 조직에서는 하나의 큰 네트워크 대신 네트워크들을 서브넷으로 나누어서 관리하는 경우가 있다. 이를 서브넷화(Subnetting)라고 한다. 서브넷화를 하는 이유는 아래와 같다.
브로드캐스트가 닿는 범위가 한정된다.
- 브로드캐스트란 네트워크 내의 전체 컴퓨터로의 일괄 전송을 의미한다. 따라서 그 범위가 너무 넓으면 무관한 컴퓨터에도 쓸데 없는 처리를 하게되므로 네트워크의 통신 능력을 낭비한다.
장애가 미치는 범위를 최소화할 수 있다.
서브넷화를 하는 경우 IP 주소 중 네트워크부를 더 연장하고 그만큼 호스트부를 줄인다. 즉, 호스트의 일부까지 네트워크부로 사용한다.

예를 들어 위의 사진처럼 네트워크부를 2비트 연장하고 호스트부를 2비트 줄일 수 있다. 이 경우 각 서브넷에서 2^6 -2개의 호스트 IP가 존재할 수 있다.
2의 6 제곱에서 2를 빼는 이유:
브로드 캐스트 주소와 네트워크 주소를 제외해야하기 때문이다.
- 호스트 주소 111111 는 브로드 캐스트 주소로 사용된다. (브로드 캐스트 주소는 255.255.255.255 이다. 호스트가 브로드캐스트 주소로 패킷을 보내면, 같은 서브넷에 존재하는 모든 호스트들에게 패킷이 전송된다.)
- 호스트 주소 000000 는 네트워크 주소로 사용된다.
서브넷 마스크는 IP주소를 네트워크부와 호스트부로 나누는데 사용되는 숫자 조합이다. 서브넷 마스크는 IP 주소와 같은 길이의 비트로 구성되며, 이진수(Binary)로 표현했을 때 네트워크부는 1로, 호스트부는 0으로 설정된다.
예를 들어 210.100.100.1의 서브넷 마스크가 255.255.255.0이라면,
255.255.255.0은 1111 1111. 1111 1111. 1111 1111. 0000 0000과 같다.
여기서 1인 부분은 네트워크를, 0인 부분은 해당 네트워크 내에 속해있는 호스트를 나타내므로 IP주소와 서브넷 마스크를 논리적 AND 연산 결과 값이 바로 서브넷이 된다. 하나의 주소를 서브넷 마스크를 씌워서 작은 네트워크로 만드는 것을 서브넷화라고 한다.
라우팅이란 라우터로 패킷을 전송하는 것을 의미한다. 라우팅은 무엇을 어디로 전송하면 될지 결정하는 전송 규칙에 따라 수행되며 그 전송 규칙을 결정하는 데 있어 라우팅 테이블(routing table)이 중요한 요소이다.
라우팅 테이블이란 라우터에서 사용하는 테이블로, 네트워크에서 패킷이 전송될 때 해당 패킷을 어떻게 라우팅할지를 결정하는 데 사용되는 테이블이다. 라우터의 라우팅 테이블에는 목적지 IP 주소와 이 목적지로의 다음 홉(Next Hop) 정보, 목적지 네트워크의 서브넷 마스크 등이 포함되어 있다.

그런데 새로운 네트워크가 추가되는 되거나 네크워크의 상태가 변할 때 라우터 테이블은 어떻게 관리될까?
여기에는 정적 라우팅과 동적 라우팅 방법이 있다.
정적 라우팅은 네트워크의 라우팅 테이블을 수동으로 관리하여 목적지 네트워크로의 패킷 전송 경로를 설정하는 방식이다. 정적 라우팅은 수동적이며, 관리가 용이하고 간단하지만, 대규모 네트워크에서는 유지보수가 어렵고 복잡성이 증가할 수 있다.
동적 라우팅은 네트워크에서 라우팅 정보를 자동으로 교환하여 최적의 경로를 찾아주는 라우팅 방식이다. 이를 위해 라우터는 동적 라우팅 프로토콜을 사용하여 서로 정보를 교환하고 네트워크의 상태를 모니터링한다. 동적 라우팅은 아래와 같은 장점이 있다.
자동 라우팅 테이블 업데이트
네트워크 상태 고려
경로 선택 알고리즘
스케일러블
라우팅 프로토콜이란 라우팅 테이블을 동적으로 갱신하는 동적 라우팅에서 사용하는 프로토콜이다. 라우팅 프로토콜의 동작은 (1) 라우터끼리 경로 정보를 교환, (2) 수집한 경로에서 최적 경로를 결정 이 있다.
라우팅 프로토콜은 하나의 ISP나 조직이 관리하는 대규모 네트워크(AS, Autonomous System) 내의 라우팅 기법과 대규모 네트워크 간의 라우팅 기법으로 나뉜다.
네트워크에 연결된 장치가 IP 주소 및 기타 네트워크 구성 정보를 자동으로 얻을 수 있도록 하는 프로토콜이다. DHCP는 클라이언트-서버 모델을 기반으로 하며, 네트워크 관리자가 DHCP 서버를 구성하여 네트워크에 연결된 클라이언트에게 IP 주소를 동적으로 할당한다. 다음의 기능들을 갖고 있다.
IP 주소 할당
서브넷 마스크 및 기본 게이트웨이 할당
- 기본 게이트웨이
네트워크에서 다른 네트워크로 패킷을 전송하는데 사용되는 장치이다. 목적지 네트워크로의 경로를 제공하고, 패킷이 목적지 네트워크로 전달되도록 도와준다. 일반적으로 라우터나 라우팅 장비로 구성된다.
IP 주소 충돌 방지
네트워크 관리 용이성
1. DHCP Discover(검색)
2. DHCP Offer(제안)
3. DHCP Request(요청)
4. DHCP Acknowledge(승인)
참고: