DHCP
노트북을 카페 와이파이에 연결하거나 스마트폰을 새 공유기에 붙이면, 따로 설정하지 않아도 곧바로 인터넷을 쓸 수 있습니다. 네트워크에서 통신하려면 IP 주소, 서브넷 마스크, 기본 게이트웨이, DNS 서버 주소 같은 설정이 필요한데, 장치마다 이를 손으로 입력하게 하면 번거롭고 주소가 겹치는 실수도 생깁니다. 이 설정을 서버가 대신 나눠 주는 프로토콜이 DHCP(Dynamic Host Configuration Protocol)입니다. DHCP 서버는 사용할 수 있는 주소 범위(풀)를 가지고 있다가, 요청한 장치에 주소 하나를 정해진 기간 동안 빌려 줍니다(임대, lease).
흥미로운 점은 DHCP를 받는 시점의 클라이언트에게 IP 주소도, 서버가 어디 있는지도 없다는 것입니다. 그래서 첫 메시지는 브로드캐스트로 보내야 합니다. 이 토픽에서는 주소를 받는 네 단계(Discover → Offer → Request → Acknowledge, 앞 글자를 따 DORA), 임대 시간이 지나기 전 연장하는 방법(갱신 T1과 재바인딩 T2), 서버가 주소와 함께 알려 주는 설정 항목을 단계별로 봅니다.
핵심 개념
DHCP 서버와 주소 풀
서버가 나눠 줄 수 있는 주소의 범위(풀)를 관리합니다. 클라이언트의 요청에 풀에서 주소를 골라 설정과 함께 제안하고, 누구에게 빌려 줬는지를 기록합니다.
핵심 개념
DORA 4단계
클라이언트가 서버를 찾는 Discover, 서버의 제안인 Offer, 클라이언트가 제안을 받아들이는 Request, 서버가 확정하는 Acknowledge로 이루어집니다. 이 네 단계가 끝나면 주소를 쓸 수 있습니다.
핵심 개념
브로드캐스트로 시작
처음에는 클라이언트의 IP가 0.0.0.0이고 서버 위치도 몰라서, Discover를 목적지 255.255.255.255로 브로드캐스트합니다. DHCP는 UDP를 쓰며 서버는 포트 67, 클라이언트는 포트 68을 씁니다.
핵심 개념
임대(lease)
주소는 영구 할당이 아니라 정해진 시간 동안 빌려 주는 것입니다. 쓰지 않는 장치의 주소는 임대가 끝나면 다시 풀로 돌아가 다른 장치가 쓸 수 있습니다.
핵심 개념
갱신(T1)과 재바인딩(T2)
기본값으로 임대 시간의 50%가 지나면 원래 서버에게 연장을 요청하고(T1), 응답이 없으면 87.5%에서 아무 서버에게나 브로드캐스트로 요청합니다(T2). 끝까지 연장하지 못하면 주소를 포기합니다.
핵심 개념
DHCP 옵션
IP 주소 외의 설정은 메시지의 옵션 필드에 담깁니다. 서브넷 마스크(옵션 1), 게이트웨이(옵션 3), DNS 서버(옵션 6), 임대 시간(옵션 51), 서버 식별자(옵션 54) 같은 것들입니다.
DHCP의 배경
DHCP는 RFC 2131(1997)로 정의되었고, 이보다 앞선 부트스트랩 프로토콜 BOOTP를 확장한 것입니다. BOOTP가 정해 둔 메시지 형식을 바탕으로 하면서, 주소를 한 번 고정해 주는 대신 풀에서 동적으로 빌려 주고 임대를 갱신하는 기능을 더했습니다. 옵션의 종류는 RFC 2132에 정리되어 있습니다. IPv6에서는 DHCPv6(RFC 8415)나 라우터 광고를 이용한 자동 설정(SLAAC)이 쓰입니다.
숫자로 확인하기
자주 하는 오해
면접에서 이렇게 물어요
면접 질문
DHCP가 IP를 할당하는 과정을 설명해 주세요
클라이언트가 Discover를 브로드캐스트하면 서버가 Offer로 주소를 제안하고, 클라이언트가 Request로 수락하면 서버가 Acknowledge로 확정합니다. 앞 글자를 따 DORA라고 합니다.
면접 질문
Discover를 왜 브로드캐스트로 보내나요?
이 시점의 클라이언트는 자기 IP 주소도, DHCP 서버의 위치도 모르기 때문입니다. 같은 네트워크 전체에 보내 응답할 서버를 찾습니다.
면접 질문
DHCP가 IP 외에 알려 주는 정보는 무엇인가요?
서브넷 마스크, 기본 게이트웨이, DNS 서버 주소, 임대 시간, 서버 식별자 등이며, 이 값이 있어야 별도 설정 없이 인터넷을 쓸 수 있습니다.
면접 질문
임대 시간이 끝나면 어떻게 되나요?
임대의 절반쯤에 클라이언트가 서버에게 연장을 요청하고, 응답이 없으면 더 늦게 브로드캐스트로 요청합니다. 끝까지 연장하지 못하면 주소를 포기하고 처음부터 DORA를 다시 합니다.
실제 시스템에서는
함께 보면 좋은 토픽
참고 자료
리눅스 셸 — DHCP로 받은 주소와 설정 확인
# 받은 IPv4 주소와 남은 임대 시간 (dynamic 표시, valid_lft) ip -4 addr show eth0 # NetworkManager가 DHCP로 받은 설정 보기 nmcli -f DHCP4 device show eth0 # DHCP 메시지(포트 67, 68) 캡처 (root 권한) sudo tcpdump -i eth0 -n -v port 67 or port 68
ip -4 addr show는 인터페이스에 붙은 IPv4 주소를 보여 주며, DHCP 클라이언트는 임대 시간을 주소의 수명으로 설정하므로 dynamic 표시와 남은 수명(valid_lft)이 나옵니다. 임대 시간이 줄어들다가 갱신되면 다시 늘어납니다. nmcli의 DHCP4 항목에는 NetworkManager가 서버에서 받은 주소, 서브넷 마스크, 게이트웨이(routers), DNS 서버, 임대 시간(dhcp_lease_time)과 만료 시각(expiry) 같은 항목이 나옵니다. tcpdump로 포트 67, 68을 잡으면 DHCP 메시지가 오가는 모습을 볼 수 있고, -v를 붙이면 메시지 종류(Discover, Offer 등)가 함께 출력됩니다. 인터페이스 이름 eth0은 환경에 맞게 바꿔야 합니다.
dnsmasq — DHCP 서버 설정 (개념 예시)
# 주소 풀: 시작, 끝, 서브넷 마스크, 임대 시간 dhcp-range=192.168.0.100,192.168.0.200,255.255.255.0,8h # 클라이언트에 알려 줄 옵션 dhcp-option=option:router,192.168.0.1 dhcp-option=option:dns-server,8.8.8.8 # 특정 MAC에는 항상 같은 IP 주기 (고정 할당) dhcp-host=02:00:00:00:00:0c,192.168.0.50
dnsmasq는 작은 네트워크에서 DHCP와 DNS 캐시를 함께 제공하는 서버이고, dhcp-range가 서버가 나눠 줄 주소 풀과 임대 시간을 정합니다. 위 예시는 192.168.0.100부터 200까지를 8시간 임대로 나눠 줍니다. dhcp-option은 옵션 3(게이트웨이)과 옵션 6(DNS 서버)처럼 주소 외의 설정을 정하고, dhcp-host는 특정 MAC 주소에 항상 같은 IP를 예약합니다. 실제 환경에서는 풀 범위가 고정 IP를 쓰는 장치의 주소와 겹치지 않게 해야 하며, 위 코드는 설정 형식을 보이는 최소 예시입니다.
Python — 임대 시간에서 T1, T2 계산
lease_h = 8 # 임대 시간(시간) t1 = lease_h * 0.5 # 갱신 타이머 기본값 t2 = lease_h * 0.875 # 재바인딩 타이머 기본값 print(f"임대 {lease_h}시간: T1={t1}시간, T2={t2}시간") # 임대 8시간: T1=4.0시간, T2=7.0시간
RFC 2131은 갱신 타이머 T1의 기본값을 임대 시간의 0.5배, 재바인딩 타이머 T2의 기본값을 0.875배로 정합니다. 임대 시간이 8시간이면 4시간에 서버에게 연장을 요청하고, 7시간까지 응답이 없으면 브로드캐스트로 요청합니다. 서버는 옵션으로 T1과 T2를 직접 지정할 수도 있어서, 위 계산은 기본값이 쓰일 때의 예시입니다. 이 값은 시각화의 임대와 갱신 탭에서 쓰는 숫자와 같은 방식으로 계산됩니다.
Q1
DHCP가 IP 주소를 할당하는 4단계의 올바른 순서는?
Q2
DHCP Discover 메시지의 특징은?
Q3
DHCP 서버가 IP 주소 외에 클라이언트에 함께 알려주는 정보는?