✅ IP 주소 (Internet Protocol)
: 네트워크에서 호스트와 라우터의 각 인터페이스마다 할당되어 있는 식별번호
IP(Internet Protocol)는 네트워크 계층에 위치하는 프로토콜이다.
그리고 이 IP 통신을 하기 위해 각 기기들을 구분하는 고유번호가 바로 IP 주소이다.
IP주소는 네트워크 주소와 호스트 주소로 나뉜다.
인터페이스: 호스트와 물리 링크 사이의 경계
✅ IPv4
: 32비트로 이루어진 IP주소

IPv4는 4개의 8bit(0~255)로 이루어져 있습니다. 이 4개의 수는 점(.)으로 구분된다.
ex) `192.169.12.1`
32비트로 이루어져 있기 때문에 2^32 = 약 42억 개의 서로 다른 주소를 부여할 수 있다.
1 byte = 8 bit = 1 octet(옥텟)
📍IPv4 헤더

- 버전 번호: IP 프로토콜 버전을 나타냄 (IPv4는 4)
- 헤더 길이: 옵션 포함 여부에 따라 실제 헤더 길이를 지정(일반적으로 20바이트)
- 데이터그램 길이: 전체 IP 데이터그램의 길이(헤더 + 데이터 포함)
- TTL (Time To Live): 패킷이 네트워크에서 무한히 순환하지 않도록 제한하는 수명 카운터
- 라우터마다 1씩 감소하며 0이 되면 폐기됨
- 프로토콜: 데이터그램 내부의 데이터가 어떤 상위 계층 프로토콜(TCP, UDP 등)에 속하는지 지정
- 헤더 체크섬: IP 헤더에 오류가 있는지 확인. TTL 변경 등으로 인해 라우터에서 매번 재계산됨
- 출발지/목적지 IP 주소: 데이터그램을 보낸 호스트와 도착할 호스트의 주소
- 데이터(페이로드): 실제로 전달되는 정보로 보통 TCP/UDP 세그먼트를 포함함
📍IPv4 클래스
: IPv4 주소는 네트워크 크기나 호스트 수에 따라 다음과 같이 5가지 클래스로 나뉜다

- A 클래스: 일반 사용자에게 부여하는 네트워크 구성용
- `0`으로 시작
- 처음 8비트가 네트워크 주소, 나머지 24비트가 호스트 주소
- 최대 네트워크 주소 수: `2^8`
- 최대 호스트 주소 수: `2^24 - 2`
- B 클래스: 일반 사용자에게 부여하는 네트워크 구성용
- `10`으로 시작
- 처음 16비트가 네트워크 주소, 나머지 16비트가 호스트 주소
- 최대 네트워크 주소 수: `2^14`
- 최대 호스트 주소 수: `2^16 - 2`
- C 클래스: 일반 사용자에게 부여하는 네트워크 구성용
- `110`으로 시작
- 처음 24비트가 네트워크 주소, 나머지 8비트가 호스트 주소
- 최대 네트워크 주소 수: `2^21`
- 최대 호스트 주소 수: `2^8 - 2`
- D 클래스: 멀티캐스트용
- E 클래스: 향후 사용을 위해 예약된 주소
(실질적으로 D와 E 클래스는 사용되는 경우가 거의 없다)
[호스트 주소 수에서 2를 빼는 이유]
2개는 브로드 캐스트 주소와 네트워크 주소로 사용되기 때문이다.
호스트 주소 `00000000`은 네트워크 주소로,
호스트 주소 `11111111`는 브로드 캐스트 주소로 사용된다.
✅ IPv6
: 128비트로 이루어진 IP주소

IPv4는 기하급수적으로 증가하는 사용자에게 턱없이 부족한 개수였다.
따라서 등장한 것이 IPv6이다.
IPV6는 8개의 4자리 16진수로 이루어져 있습니다. 그리고 각 16진수는 콜론(:)으로 구분된다.
ex) `2001:0 db8:85 a3:0000:0000:8 a2 e:0370:7334`
2^128 개의 서로 다른 주소를 부여할 수 있다.
하지만, 기존의 IPv4 주소 체계를 변경하는 데 비용이 많이 들어서 완전히 상용화되지 않았다.
이는 뒤에서 다시 언급할 예정이다.
- 확장된 주소 공간
- IPv4의 32비트에서 128비트 주소 체계로 확장
- 기존 유니캐스트, 멀티캐스트에 더해 애니캐스트(anycast) 주소 도입
- 간소화된 40바이트 고정 헤더
- IPv4의 많은 필드를 제거하거나 옵션화하여 라우터 처리 속도 향상
- 고정 길이 헤더(40바이트)로 설계되어 효율적이고 예측 가능한 처리 가능
📍IPv6 헤더

- 버전: 4비트 필드로 IP 버전을 나타냄. IPv6의 경우 값은 6
- 페이로드 길이: 헤더 이후 데이터의 길이(바이트 단위)를 나타냄. 고정된 40바이트 헤더는 제외
- 다음 헤더: 데이터가 전달될 상위 계층 프로토콜(TCP, UDP 등)을 명시. IPv4의 'Protocol' 필드와 동일한 역할
- 홉 제한 (Hop Limit):TTL(Time To Live)과 동일 개념. 라우터를 지날 때마다 1씩 감소, 0이 되면 폐기
- 출발지 / 목적지 주소: 128비트 IPv6 주소
- 데이터: 실제 전달할 데이터
✅ IP 주소 할당 방법
📍Public IP (공인 IP)
: 인터넷에서 사용되는 IP 주소
공인 IP 주소는 다음과 같이 부여된다.
- 전 세계적으로 ICANN이라는 기관이 국가별로 사용할 IP 대역을 관리한다.
- 대역을 할당받은 우리나라는 한국인터넷진흥원(KISA)에서 국내 IP 주소들을 관리한다.
- 이것을 ISP(KT, LG, SKT와 같은 통신업체)가 부여받는다.
- 우리는 위 회사에 가입을 통해 IP를 제공받아 인터넷을 사용하게 된다.
이렇게 발급받은 IP가 공인 IP이다.
즉, 공인 IP는 전 세계에서 유일하다.
📍Private IP (사설 IP)
: 회사나 가정 LAN에서 사용되는 IP 주소
공인 IP는 전 세계에서 유일해야 되므로 수가 한정되어 있다.
따라서 가정이나 회사 같은 단위로 공인 IP를 할당하고, 그 내부에 있는 디바이스는 해당 네트워크 안에서만 사용되는 사설 IP를 할당받는다.
하나의 네트워크에서 유일하다.
📍정적 할당 (고정 IP)
: IP주소를 수동으로 설정하는 방법
기기에 할당된 IP 주소가 변하지 않고 항상 동일한 주소를 사용하는 방식이다.
안정적인 통신을 할 수 있다는 장점이 있다.
주로 웹 서버, 이메일 서버 등 인터넷 서비스를 제공하는 기기에 사용된다.
📍동적 할당 (유동 IP)
: IP 주소를 자동으로 설정하는 방법
기기에 할당된 IP 주소가 일정 시간이 지나면 변경되는 방식이다.
인터넷 서비스 제공자(ISP)에 의해 임시로 할당된다.
주로 일반 가정이나 회사에서 사용하는 인터넷 접속에 사용된다.
✅ NAT (Network Address Translation)
: Public IP를 Private IP로 변환해 주는 기술
NAT는 IPv4 주소 사용량을 획기적으로 줄여주는 핵심 기술 중 하나이다.
- 가정이나 회사 내부에서는 사설 IP 주소를 사용하고
- 공유기(라우터)가 외부 인터넷과 통신할 때는 하나의 공인 IP 주소를 대신 사용한다.
- 이렇게 하면 수십~수백 대의 내부 디바이스가 단 하나의 공인 IP를 공유하며 인터넷을 사용할 수 있게 된다.
✅ 터널링 (Tunneling)
: IPv6 패킷을 IPv4 네트워크를 통해 전달하기 위해 사용하는 기술
IPv4와 IPv6는 서로 호환되지 않기 때문에 IPv6 패킷을 IPv4 패킷 안에 캡슐화(Encapsulation)하여 전송해야 한다.
이를 가능하게 해주는 방법이 바로 터널링이다.
📍동작 방식

- 송신 측에서 IPv6 패킷을 IPv4 패킷의 데이터(payload)처럼 감싼다.
- IPv4 네트워크를 통해 전달한다.
- 수신 측에서 다시 IPv4 헤더를 제거하고 원래 IPv6 패킷을 복원한다.
✅ 서브넷
: 네트워크의 부분망
IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크
📍CIDR(Classless Inter-Domain Routing)
: 호스트 수에 따라 적당한 크기의 IP주소를 할당하는 방식
클래스 단위로 할당하게 되면, 필요한 호스트 수에 따라 주소공간이 낭비될 수 있다.
따라서 호스트 수에 따라 적당한 크기의 IP주소를 할당하는 서브넷, 즉 CIDR 방식이 등장한다.
203.255.208.222/23
: 앞에서부터 23비트는 네트워크 주소로, 나머지 비트 9비트는 호스트 주소라는 의미이다.
2^9 = 512개의 호스트가 필요한 경우 CIDR 블록 전치부를 `/23`으로 설정하면 된다.
📍서브넷 마스크 (Subnet Mask)
IP 주소에 서브넷 마스크를 AND 연산하면 네트워크 주소이다.
서브넷 마스크의 네트워크 주소 부분은 1이 연속적으로 있어야 하고, 호스트 주소 부분은 0이 연속적으로 있어야 한다.
결국 CIDR 표기법 `/24`는 서브넷 마스크의 비트 수(=왼쪽에서부터 1의 개수)를 의미한다.
각 클래스별 서브넷 마스크는 다음과 같다.
| 클래스 | 이진표현 | 기본 서브넷 마스크 |
| A 클래스 | 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 255.0.0.0 |
| B 클래스 | 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 255.255.0.0 |
| C 클래스 | 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx | 255.255.255.0 |
✅ 게이트웨이 (Gateway)
: 하나의 네트워크에서 다른 네트워크로 나가는 출입구 역할을 하는 장비
- 주로 라우터나 공유기가 게이트웨이 역할을 수행한
- 서로 다른 네트워크 간의 데이터 전송을 중개해줌
- 목적지에 따라 적절한 경로로 패킷을 전달
- 기본 게이트웨이(Default Gateway): 로컬 장치가 목적지 주소가 다른 네트워크에 속할 경우, 해당 패킷을 전달하는 기본 경로
✅ ICMP (Internet Control Message Protocol)
: 네트워크 장치에서 네트워크 통신 문제를 전달하기 위해 사용하는 프로토콜
데이터가 올바른 대상에게 도착했는지, 도달 시간이 적절한지 여부를 확인한다.
- 데이터가 목적지에 도달하지 못했을 때
- 경로 중간에서 TTL(Time-To-Live)이 만료됐을 때
- 목적지에 도달했지만, 해당 포트가 닫혀 있을 때
- 네트워크가 너무 혼잡하거나 라우팅 실패일 때
✨ 추가 질문
[ IPv6는 IPv4의 주소 고갈 문제를 해결하기 위해 만들어졌지만, 아직도 수많은 기기가 IPv4를 사용하고 있습니다. 고갈 문제를 어떻게 해결할 수 있을까요? ]
사설 IP + NAT, 유동 IP 사용, 터널링, 그리고 IPv6로의 점진적 전환 등을 통해 현실적으로 문제를 완화하고 있다.
- 공인 IP / 사설 IP: 사설 IP와 NAT를 활용해 공인 IP 주소의 사용을 줄인다.
- 고정 IP / 유동 IP: 유동 IP를 통해 하나의 IP를 여러 사용자에게 순환 할당한다.
- 터널링: IPv6 패킷을 IPv4 네트워크를 통해 전달할 수 있도록 캡슐화한다.
[ 수많은 사람들이 유동 IP를 사용하고 있지만, 수많은 공유기에서는 고정 주소를 제공하는 기능이 이미 존재합니다. 어떻게 가능한 걸까요? ]
DHCP 예약 기능 덕분이다.
LAN 내부에서는 DHCP 예약을 통해 라우터가 호스트별 MAC 주소를 기반으로 고정 사설 IP주소를 할당할 수 있다.
[ IP가 송신자와 수신자를 정확하게 전송되는 것을 보장해 주나요? ]
보장하지 않는다.
IP 위에서 동작하는 TCP가 순서 보장, 재전송, 흐름 제어 등을 정확한 데이터 전송을 보장한다.
[ IPv4에서 수행하는 Checksum과 TCP에서 수행하는 Checksum은 어떤 차이가 있나요? ]
IPv4의 체크섬은 IP 헤더에만 적용되며 라우터를 지날 때마다 재계산되어 헤더의 오류만 검출한다.
TCP의 체크섬은 헤더와 데이터 전체, 그리고 IP 정보를 포함한 의사 헤더까지 TCP 세그먼트 전체를 검사하여 데이터 전체의 무결성을 검증한다.
즉, TCP 체크섬이 더 넓은 범위와 강한 신뢰성을 제공한다.
[ 255.0.255.0 같은 꼴의 서브넷 마스크도 가능한가요? ]
불가능하다.
서브넷 마스크는 왼쪽부터 연속된 1이 나온 후에, 연속된 0이 나와야 한다.
1과 0이 번갈아 나올 수 없다.
'⚙️ CS > 네트워크' 카테고리의 다른 글
| [네트워크] HTTPS 프로토콜 (1) | 2025.05.18 |
|---|---|
| [네트워크] 소켓 (0) | 2025.05.14 |
| [네트워크] UDP/TCP (0) | 2025.04.03 |
| [네트워크] XSS & CSRF & SQL Injection (1) | 2025.03.28 |