[Network] DHCP에 대해서

HyeJin Jeon·2020년 5월 28일
1
post-thumbnail

1. DHCP의 역할

Dynamic Host Configuration Protocol

네트워크에 연결되는 다양한 어플리언스에 IP 주소를 자동으로 할당하는 프로토콜.
일반적으로 IP주소, 서브넷 마스크, 디폴트 게이트웨이(라우터IP)라는 기본 3종 세트와 DNS 서버 IP 주소, 도메인 이름 같은 정보를 함께 제공합니다.

1-1. DHCP의 사용처

DHCP의 용도는 IP 주소 자동 할당에 그치지 않고, 데이터 센터에서 수천 대의 서버에 '고정 IP 주소'를 설정할 때도 이용할 수 있습니다.
이외에도 서버 자동 설치 기능(ex. KickStart)이나, 모바일 핫스팟 기능에도 DHCP가 사용됩니다.

2. DHCP 프로토콜

DHCP 프로토콜은 DHCP 클라이언트와 DHCP 서버가 주고받는 메시지 입니다.
DHCP 서버는 UDP 포트 67, DHCP 클라이언트는 UDP 포트 68로 패킷을 수신합니다.

2-1. DHCP 메시지

메시지 이름보낸 곳설명
DHCP-DISCOVER클라이언트DHCP 서버를 찾아서 IP 주소 할당을 요청
DHCP-OFFER서버할당 후보 IP 주소를 제시
DHCP-REQUEST클라이언트후보로 제시된 IP 주소 사용을 요청, 혹은 IP 주소 유효기한 연장을 요청
DHCP-ACK서버클라이언트의 요청을 받아들임
DHCP-RELEASE클라이언트IP 주소 해제 통지
DHCP-NAK서버클라이언트의 요청 거부
DHCP-INFORM클라이언트IP 주소 이외의 설정 정보 요청

2-2. DHCP에 의한 IP 주소 자동 할당 흐름

DHCP 클라이언트가 DHCP 서버에 IP 주소 할당을 요청하면 다음과 같은 흐름으로 처리됩니다.
DHCP Protocol

DHCP 클라이언트에서 DHCP 서버로 패킷을 전송할 때에는 브로드캐스트 방식으로 전송됩니다.
DHCP 서버에서 DHCP 클라이언트로의 패킷 전송에는 보통 유니캐스트 방식이 사용됩니다.

그러나 일부 클라이언트(ex. IP전화기)는 IP 주소가 설정되지 않은 상태에서 유니캐스트 패킷을 받아들일 수 없는 것도 있습니다.
그런 클라이언트는 DHCP-REQUEST를 보낼 때 회신 패킷도 브로드캐스트로 보내도록 DHCP 서버에 요청합니다.

2-3. DHCP 릴레이 구조 (DHCP Relay Agent)

일반적으로 라우터는 브로드캐스트 패킷을 폐기하기 때문에, DHCP 서버는 서브넷 마다 존재해야 합니다.

그러나 다수의 서브넷이 있는 오피스 환경에서 서브넷 별로 DHCP 서버를 준비해서 관리하기는 번거롭습니다. 그래서 업무용 라우터(L3 스위치) 기기에는 'DHCP 릴레이'라는 기능이 있습니다.

DHCP relay agent

DHCP 릴레이는 DHCP 서버로 가는 브로드캐스트 패킷을 수신한 라우터가 사전에 설정된 특정 DHCP 서버를 향해 그 패킷을 전송하는 기능입니다.
DHCP 서버가 보내는 응답은 다시 원래 서브넷으로 돌려보냅니다. 이 기능은 각 기기에서 독자적으로 구현되므로 제품마다 설정 방법이나 자세한 동작 구조가 다를 수 있습니다.

3. DDNS: Dynamic DNS

DDNS

DHCP는 어느 클라이언트에 어느 IP를 할당했는지 추적이 까다로워 클라이언트를 특정하기 곤란합니다. 그래서 Dynamic DNS로 DHCP 서버와 DNS 서버를 연계시켜, 클라이언트에 할당한 IP 주소와 호스트 이름을 DNS에 등록하고 호스트 이름으로 엑세스 로그를 기록할 수 있게 합니다.

또한, 최근에는 클라우드 환경의 보급으로 서버의 생성과 삭제가 빈번히 일어납니다. 그래서 고정 IP 주소 사용이 일반적이던 서버에서도 DHCP로 설정하는 일이 드물지 않습니다. DHCP 서버와 DNS 서버의 연계로 IP 주소가 바뀌어도 같은 호스트 이름으로 계속 엑세스 할 수 있게 됩니다.

출처:
인프라 엔지니어의 교과서 - 네트워크 관리편
https://www.netmanias.com/ko/post/blog/5366/dhcp-ip-allocation-network-protocol/what-is-a-dhcp-relay-agent

profile
Backend Developer

0개의 댓글