[네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리

2025. 6. 5. 11:21·네트워크
728x90
반응형

우리가 흔히 "인터넷에 자동으로 연결된다"고 느끼는 건, 대부분 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이 숫자놀음이 아니라는 걸 체감했다.

728x90
반응형

'네트워크' 카테고리의 다른 글

[네트워크 기초] 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
'네트워크' 카테고리의 다른 글
  • [네트워크 기초] OSI 7계층과 TCP/IP 모델 정리
  • [DNS 개념과 실습] 내부망 구성부터 레코드 이해까지
  • [리눅스 NFS] NFS? 우분투 서버/클라이언트 설정까지
  • [가상화와 네트워크 구조] NAT, bridges, 호스트 전용 네트워크 개념 정리
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    네트워크
    Linux
    githib action
    Chat GPT
    IP
    nestjs
    springboot
    Java
    E2E
    vercel
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리
상단으로

티스토리툴바