> For the complete documentation index, see [llms.txt](https://jmxx219.gitbook.io/cs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jmxx219.gitbook.io/cs/network/ip.md).

# IP Address

<br>

## IP 주소

* 개념
  * 네트워크 환경에서 컴퓨터(노드)간 통신하기 위해 각 컴퓨터에 부여된 네트워크상의 주소
  * TCP/IP 프로토콜을 사용하는 네트워크와 연결된 모든 장치에 할당된 고유 식별자
* 표현
  * 기본적으로 IP는 **IPv4** 형태
  * IP는 32비트 2진수로 표현 가능하며, 0 \~ 2^32개가 IP가 가질 수 있는 최대 갯수
  * IP의 8비트의 각각의 영역을 **옥텟**으로 지칭하여 구분하며 4개의 옥텟을 dot(`.`)로 구분함
  * `IP 주소 = 네트워크 주소 + 호스트 주소`
    * IP는 네트워크 주소와 호스트 주소로 구분되며, 하나의 네트워크 상에 여러 호스트 주소가 있을 수 있음
    * 네트워크 주소: 호스트들을 모은 네트워크를 칭함. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 함
    * 호스트 주소: 하나의 네트워크에 존재하는 호스트를 구분하기 위한 주소
    * ex) `192.168.0.103`에서 `192.168.0`은 네트워크 주소, `103`은 호스트 주소
* 유형
  * 공인 IP(Public IP) 주소
    * 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소로, 공용 IP라고도 불림
    * 공인 IP는 전세계에서 유일한 IP 주소를 가짐
    * 외부에 공개되어 있어 인터넷에 연결된 다른 PC로부터 접근이 가능함
      * 공인 IP 주소를 사용하는 경우, 방화벽 등 보안 프로그램을 설치할 필요가 있음
  * 사설(Private IP) IP 주소
    * 일반 가정이나 회사 내 등에 할당된 네트워크의 IP 주소로, 로컬 IP 또는 가상 IP라고도 불림
    * 공인되지 않은 주소로, 외부에 공개되지 않아 원칙적으로 외부에서 검색과 접근이 불가능함
    * 사설 IP 주소만으로는 인터넷 연결 불가능
      * 라우터를 통해 1개의 공인 IP만 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당받아 인터넷에 접속 가능
      * ex) 공인 IP가 건물 주소라면, 사설 IP는 각 호실로 생각할 수 있음
* IP 주소 설정 방식
  * 고정 IP 주소
    * 사용자가 직접 IP 주소를 입력해 주소를 설정하는 방식(수동)
    * 컴퓨터에 고정적으로 부여된 IP로, IP를 반납하기 전까지 다른 장비에 부여할 수 없음
  * 유동 IP 주소
    * IP 주소를 할당하는 서버나 공유기가 보여주는 정보 그대로 컴퓨터에 자동 설정되는 방식(자동)으로, [DHCP](/cs/network/dhcp.md) 서비스라고도 함
    * 고정적으로 IP를 부여하지 않고, 컴퓨터를 사용할 때 남아있는 IP 중에서 돌아가면서 부여하는 IP
  * ex) 인터넷 공유기는 사설 IP 주소를 생성하고 각 컴퓨터 등에 주소를 자동 할당(DHCP 서비스)하는 역할을 함

<br>

**MAC 주소**

![](https://ipcisco.com/wp-content/uploads/2023/06/what-is-a-mac-address-ipcisco.com_.jpg)

* IP 주소는 네트워크 상에서 단말을 구분하기 위해 부여된 논리적 주소(네트워크 주소)
* MAC 주소는 48비트 식별자로, 제조업체를 식별하는 OUI와 각 장치를 고유하게 식별하는 NIC 부분으로 구성됨
* MAC 주소는 NIC에 부여된 고유한 물리적 주소(하드웨어 주소)로, 48bit로 이루어져 있음
  * 컴퓨터간 데이터를 전송하기 위해 있는 컴퓨터의 물리적 주소
* IP 주소간의 통신은 각 라우터 hop에서 일어나는 MAC 주소와 MAC 주소 통신의 연속적인 과정임
  * IP 주소는 변동가능성이 있지만, 하드웨어의 식별번호(기계의 고유 주소번호)인 MAC 주소는 변하지 않음

<br>

### IP 주소 클래스(A, B, C class)

* 개념
  * IP 주소를 네트워크 주소와 호스트 주소로 구분하는 방법(`IP 주소 = 네트워크 주소 + 호스트 주소`)
  * 하나의 네트워크에서 몇 개의 호스트 주소를 가질 수 있느야에 따라 클래스를 나눌 수 있음
* 클래스 도입 이전
  * 예전에 IPv4 주소는 단순한 8비트의 네트워크 영역과 해등 네트워크 내의 호스트 주소를 가리키는 영역으로 단순하게 구분되어 있었음
  * 이 당시에는 대규모 네트워크가 적었기 때문에 나눌 필요가 없었음
* 클래스 도입
  * 시대가 바뀌면서 대규모 네트워크가 늘어나는 상황에서 IP 주소 클래스가 등장함
  * 한정된 자원인 IP 주소를 체계적으로 나눠 쓸 필요가 있음
  * 대표적으로 A, B, C 클래스들이 가장 많이 사용됨

| 클래스 | 최상위 비트 |             주소 범위            |  호스트 수(개)  | 주소 영역 구분 (네트워크 + 호스트) | 네트워크 / 호스트 ID |
| :-: | :----: | :--------------------------: | :--------: | :-------------------: | :-----------: |
|  A  |    0   |  0.0.0.0 \~ 127.255.255.255  | 16,777,216 |   `네트워크.호스트.호스트.호스트`  |    8/24 bit   |
|  B  |   10   | 128.0.0.0 \~ 191.255.255.255 |   65,536   |  `네트워크.네트워크.호스트.호스트`  |   16/16 bit   |
|  C  |   110  | 192.0.0.0 \~ 223.255.255.255 |     256    |  `네트워크.네트워크.네트워크.호스트` |    24/8 bit   |
|  D  |  1110  | 224.0.0.0 \~ 239.255.255.255 |     N/A    |        멀티 캐스트 용       |       -       |
|  E  |  1111  | 240.0.0.0 \~ 255.255.255.255 |     N/A    |       특수용도 예약주소       |       -       |

<br>

### Classful vs Classless

* **Classful** addressing
  * 클래스 기반의 IP 주소 체계로, 기존 Class 별로 분류되어 있는 네트워크 범위를 사용하여 네트워크를 분류하고 주소를 지정하는 방식
  * 클래스 기반으로 네트워크를 분할하는 기법은 현재 사용하지 않음
  * 인터넷의 상용화로 네트워크 사용량이 폭발적으로 증가하여 IP 주소 부족 문제 발생
    * 해결 방법: Classless, IPv6, NAT 등
* **Classless** addressing
  * 클래스 개념 자체를 버리는 클래스리스 기반의 주소 체계로, 관리자가 임의ㅇ로 네트워크를 분류하고 주소를 지정하는 방식
  * 클래스 기반보다 네트워크 주소를 세밀하게 분할하고 할당하기 위해 네트워크 크기에 맞춰 1bit 단위로 네트워크를 상세히 분할하는 방법을 사용함
  * Classless 기반 주소 체계를 사용하기 위해 도입된 것이 서브넷 마스크(`Subnet Mask`)임
    * 관리자가 임의로 네트워크를 분류하기 때문에 컴퓨터입장에서는 어디까지가 네트워크 범위인지 구분할 수 없음
    * 서브넷 마스크(`Subnet Mask`): 네트워크 ID와 호스트 ID를 식별(구분)하기 위해 사용하는 Mask(네트워크 ID - 1bit, 호스트 ID - 0 bit)
    * 서브넷팅(`Subnetting`): 네트워크-호스트 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 조개 사용하는 것으로, 클래스리스 네트워크의 가장 큰 특징

> Network ID : Host들을 모은 네트워크를 지칭하는 주소\
> Host ID : 하나의 네트워크 내에 존재하는 Host를 구분하기 위한 주소

<br>

## IPv4 vs IPv6

|    구분    |        IPv4       |           IPv6          |
| :------: | :---------------: | :---------------------: |
|   주소 길이  |       32bit       |          128bit         |
|   표시 방법  | 8bit씩 4부분 10진수 표시 |    16bit 8부분 16진수로 표시   |
|   주소 개수  |       약 43억개      |      거의 무한대(2^128)      |
| 주소 할당 방식 |   클래스 기반 비순차 할당   | 네트워크 규모, 단말기 수에 따라 순차할당 |
|   헤더 크기  |         가변        |            고정           |
|  Qos 제공  |         미흡        |            제공           |
|    보안    |  IPSec 프로토콜 별도 설치 |       IPSec 자체 지원       |
|  서비스 품질  |     제한적 품질 보장     |        확장된 품질 보장        |

<br>

### IPv4(Internet Protocol version 4)

* 기본적으로 IP는 IPv4 형태
* 주소 체계
  * 8bit 씩 4개의 필드로 구성되어 32bit의 숫자로 표현함
  * IP address = Network ID + Host ID
  * Class 기반 주소 체계(A \~ E)
* `Checksum`
  * IPv4에서 수행하는 체크섬
    * 전달된 IP 패킷의 헤더에서 체크섬 값을 제외한 모든 값을 더해 전달된 체크섬 값과 비교해 같으면 정상, 다르면 비정상으로 판단이 진행됨
  * TCP에서 수행하는 체크섬
    * IPv4와 같이 헤더만 필요한 것이 아님
    * IP 헤더에서 뽑아낸 출발지의 주소와 도착지의 주소 등을 포함하고 있는 의사 헤더(Pseudo Header)를 만들어낸 다음, 의사 헤더와 TCP 세그먼트의 값을 16비트 단위로 끊은 뒤 모두 더해 하나의 값을 만들어냄
    * 만들어진 값이 전달된 체크섬과 더해 모두 1이라면 정상, 아니라면 비정상으로 판단
    * 정상일 경우 1의 보수를 취한 뒤 체크섬 값으로 보내게 됨
* 한계
  * IPv4의 클래스 기반 주소 체계는 네트워크와 호스트 ID 길이가 고정적이므로 비효율적이며 주소 부족 문제 발생

<br>

**주소 고갈 문제해결**

* 논리적 확장 방안
  * 서브넷팅(`Subnetting`)
    * `Subnet Mask`를 이용하여 IP 주소 중 host 주소 일부분을 필요한 만큼의 서브 network로 분할하여 사용하는 방법
    * 한 네트워크의 브로드캐스팅이 다른 네트워크로 전송되지 않으므로 네트워크 상의 불필요한 트래픽을 줄일 수 있음
  * NAT(Network Address Translation)
    * 공인 IP와 사설 IP를 서로 변환시켜줌
      * 사설 IP는 공인 IP와는 달리 동일 네트워크 내부에서만 인식이 되고 타 네트워크에서는 접속할 수 없기 때문에 방화벽의 일부로 사용함
    * 소수의 공인 IP를 통해 수 많은 사설 IP가 인터넷에 연결될 수 있게 하는 기술을 말함
      * 통신사업자들이 개인에게 대부분 한 개의 유동 IP만 제공하고 있어, 한 개의 IP로 여러 단말들이 공유하여 사용할 수 있음
    * 사설 IP 주소를 사용하면서 공인 IP 주소는 한정되어 있기 때문에 이를 공유하는 것
  * [DHCP](/cs/network/dhcp.md)
    * IP 주소를 관리하고 할당하며 컴퓨터가 네트워크의 다른 장소에 접속되었을 때 자동으로 새로운 IP 주소를 할당함
    * 사용 가능한 IP 주소의 개수보다 더 많은 컴퓨터가 있는 경우에도 IP 주소의 임대시간을 짧게 함으로써 네트워크를 동적으로 재구성할 수 있음
* 물리적 확장 방안
  * IPv6 적용
    * 32bit 주소공간체계를 쓰던 IPv4에 비하여 128bit로 이를 확장하여 이론적으로 무한대의 주소공간을 확보하게 됨
    * IPv4와 달리 비클래스 주소체계를 적용하여 효율성을 높임

<br>

> 브로드캐스팅(broadcasting): 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식

<br>

### IPv6(Internet Protocol version 6)

* IPv4의 주소 부족과 보안성 취약, 성능 부족 등의 문제점을 해결하기 위한 Internet Protocol
* 특징
  * 확장된 주소 공간
    * 128 bit 주소 체계를 사용하여 IPv4의 주소 부족 문제 해결
    * IP 주소를 절약하기 위해 사용되는 NAT와 같은 주소 변환 기술도 불필요
  * 새로운 헤더 포맷
    * 헤더를 고정 길이로 변경
    * 패킷 단편화(fragmentation) 관련 필드 삭제
    * 체크섬(checkSum) 필드 삭제
  * 향상된 서비스의 지원
    * 트래픽을 효과적으로 분류할 수 있는 기능 제공
    * 이를 위해 IPv6 헤더 내에 플로우 레이블(Flow Label) 필드 이용
  * 보안 기능
    * IPv4에서의 보안은 IPSec라는 보안 관련 프로토콜을 별도로 설치해주어야 함
    * IPv6에서는 프로토콜 내에 보안관려 기능을 탑재할 수 있도록 설계
    * 확장 헤더를 통하여 네트워크 계층에서의 종단감 암호화 제공
  * 주소 자동 설정
    * 로컬 IPv6 주소를 LAN 상의 MAC 주소와 라우터가 제공하는 네트워크 프리픽스(prefix)에 결합하여 IP 주소를 자동 생성함
    * 이동형 컴퓨터의 경우, 어느 곳에서든 네트워크 연결을 설정하면 자동으로 포워딩 주소를 설정할 수 있게 함
* 주소 체계
  * 128bit = Network ID(64bits)+ Host ID(64bits)
  * 128bit를 16bit로 나누어 16진수로 표시하여 `:`으로 구분함

<br>

### IPv4과 IPv6의 통신

* 듀얼 스택
  * 하나의 시스템에서 IPv4와 IPv6 두 프로토콜을 처리하는 기술
  * 시스템은 물리적으로 하나지만 논리적으로는 둘 다 지원
* 터널링(tunneling)
  * 패킷을 캡슐화하여 가상의 터널을 이용하여 통신
  * IPv4 지역에 들어서면 IPV6 패킷은 IPv4 패킷으로 캡슐화되고, 이 지역을 벗어날 때 역캡슐화됨
* 헤더 변환
  * 인터넷의 대부분이 IPv6로 변경되고, 일부만이 IPv4를 사용할 때 필요한 방법
  * 헤더를 제외하면 동일하기 때문에 헤더 변환을 통해 헤더의 형태를 완전히 변경하여 데이터를 전송

<br>

➕ **IP(Internet Protocol)**

* 개념
  * 네트워크 통신을 할 때 쓰는 프로토콜로, IP 기기의 주소를 나타내는 것이 IP 주소
* 특징
  * IP는 비신뢰성, 비연결성 특징을 갖고 있어 IP 자체만으로는 정확하게 전송되는 것을 보장할 수 없음
  * 따라서 TCP와 같은 상위 계층의 프로토콜을 함께 사용해야 함
* TTL(Hop Limit)
  * IP 패킷이 무한정으로 네트워크를 떠돌지 않도록 하기 위해서 설정한 거칠 수 있는 라우터의 최대 개수
  * 하나의 라우터를 거칠 때 마다 1씩 감소하며 TTL이 0인 패킷을 받은 라우터는 해당 패킷을 버리게 됨
