
우리가 흔히 "인터넷에 자동으로 연결된다"고 느끼는 건, 대부분 DHCP(Dynamic Host Configuration Protocol) 덕분이다.
예전엔 수동으로 IP, 서브넷 마스크, DNS까지 다 넣어야 했는데, 이걸 전부 자동으로 처리해주는 게 바로 DHCP다.
근데 이 DHCP가 내부적으로는 여러 단계의 통신 흐름, 그리고 방송처럼 쏘는 브로드캐스트 패킷이 뒤섞인 꽤 복잡한 프로토콜이라는 걸 이번에 실습하면서 제대로 느꼈다.
통신 방식 먼저 짚고 가자
DHCP를 이해하려면 기본적인 통신 방식 3가지 개념을 먼저 정리하고 가야한다.
| 방식 | 설명 |
|---|---|
| Unicast | 특정 IP 한 대에게 보내는 통신 (1:1) |
| Multicast | 특정 그룹(IP 범위)에만 보내는 통신 (1:다수) |
| Broadcast | 같은 네트워크 전체에 다 뿌리는 통신 (1:전체) |
DHCP의 초기 통신은 브로드캐스트 방식이다. 처음엔 IP가 없기 때문에 "나 여기 있는데 누가 IP 좀 줄래요?" 하고 전체에 외치는 구조다.
DHCP 프로토콜의 4단계 – DORA
이건 꼭 외우자: DORA (Discover → Offer → Request → Acknowledge)
| 단계 | 설명 | 통신 방식 |
|---|---|---|
| Discover | 클라이언트가 브로드캐스트로 IP 요청 | Broadcast |
| Offer | DHCP 서버가 IP 제안 | Unicast or Broadcast |
| Request | 클라이언트가 "나 이 IP 쓸게요"라고 요청 | Broadcast |
| Acknowledge | 서버가 "좋아, 써도 돼" 하고 승인 | Unicast |
DHCP 확인과 재요청
윈도우에서
ipconfig /all # 전체 네트워크 정보
ipconfig /release # 현재 IP 반환
ipconfig /renew # 새로운 IP 요청
리눅스에서는
ip a # 현재 IP 확인
sudo dhclient -r # IP 반환
sudo dhclient -v # IP 재요청 (로그 출력)
IP 장애 상황 – APIPA란?
169.254.x.x
- ➖ 이런 주소가 잡히면, DHCP 서버와 통신이 안 된 상태다.
- ➖ 이 주소대역은 APIPA (Automatic Private IP Addressing) 라고 해서, 윈도우/리눅스가 임시로 잡아주는 주소다.
실제로는 네트워크에 연결 안 된 상태이기 때문에 인터넷이 안 됨.
이런 경우 DHCP 서버가 안 뜨거나, 서브넷/브로드캐스트 설정이 꼬인 경우가 많다.
DHCP 서버 설정 예제 (Ubuntu 기준)
리눅스에서 isc-dhcp-server 설치 후 설정 파일 /etc/dhcp/dhcpd.conf에 다음처럼 작성했다:
sudo apt update
sudo apt install isc-dhcp-server
subnet 10.0.8.0 netmask 255.255.255.0 {
range 10.0.8.200 10.0.8.220;
option domain-name-servers ns1.labs.local;
option domain-name "labs.local";
option subnet-mask 255.255.255.0;
option routers 10.0.8.2;
option broadcast-address 10.0.8.255;
default-lease-time 600;
max-lease-time 7200;
}
여기서
option subnet-mask,option broadcast-address가 실제 네트워크 대역과 안 맞으면 DHCP가 아예 무시된다.
꼭 맞춰야 할 3가지
| 항목 | 설명 | 예시 값 |
|---|---|---|
| subnet + netmask | 실제 네트워크 대역과 정확히 맞아야 함 | 10.0.8.0/24 |
| option subnet-mask | 클라이언트에게 알려줄 서브넷 마스크 | 255.255.255.0 |
| option broadcast-address | 해당 서브넷의 브로드캐스트 주소 | 10.0.8.255 |
번외) 자주 접하는 dns 주소
| DNS | 설명 |
|---|---|
| 8.8.8.8 | Google Public DNS |
| 8.8.4.4 | Google Secondary DNS |
| 168.126.63.1 | KT DNS |
| 168.126.63.2 | KT Secondary DNS |
| 210.220.163.82 | SKT DNS |
| 219.250.36.130 | SKT Secondary DNS |
마무리
이번 실습에서 느낀 건, 단순히 "IP가 자동으로 잡힌다"는 말 뒤에는 생각보다 많은 메커니즘이 숨어 있다는 거였다.
특히 서브넷 마스크와 브로드캐스트 주소를 잘못 입력해 제대로 ip를 받지못하는 상황이 발생하고 DHCP 작동에 직접적인 영향을 준다는 걸 직접 확인하면서, /24, /27 이런 CIDR이 숫자놀음이 아니라는 걸 체감했다.
'네트워크' 카테고리의 다른 글
| [네트워크 기초] IP 주소와 서브넷, 그리고 클래스와 CIDR (0) | 2025.06.13 |
|---|---|
| [네트워크 기초] OSI 7계층과 TCP/IP 모델 정리 (1) | 2025.06.13 |
| [DNS 개념과 실습] 내부망 구성부터 레코드 이해까지 (0) | 2025.06.09 |
| [리눅스 NFS] NFS? 우분투 서버/클라이언트 설정까지 (0) | 2025.06.04 |
| [가상화와 네트워크 구조] NAT, bridges, 호스트 전용 네트워크 개념 정리 (0) | 2025.05.30 |