DHCP 임대 시간
개요
DHCP Client는 DHCP Server로부터 IP를 할당받을때 임대시간(lease time)도 할당받는다. 임대시간(lease time)은 DHCP Client가 IP를 사용할수 있는 기간이다. 임대시간이 끝나면 해당 IP는 DHCP Server로 반환되며, Client는 IP가 미할당된 상태가 된다. 임대시간이 만료(expire)된다면 DHCP Client는 다시 DHCP Broadcast로 DHCP Dicover를 진행할까? DHCP는 이와 관련하여 임대 갱신(lease renewal)의 프로세스가 존재한다. 임대 만료가 되기전 주기적으로 임대시간을 연장하는 작업을 진행한다. 이 임대 갱신 과정으로 인해 한번 임대한 IP 주소를 지속적으로 사용할수 있게 된다.
임대 갱신 과정
아래의 경우는 임대시간(lease time)을 8시간으로 할당한 예이다. (8은 시간 계산의 편의성을 위해서다.)
Renewal (T1)
DHCP Server로부터 8시간동안 임대시간을 할당받았다면, DHCP Client는 4시간이 지난후에(임대시간 1/2 지점, 50%) Renewal을 시도한다. 만료(expire)시간을 늘리는것이다. 이 Renewal은 Discover, Offer과정을 진행하지 않는다. 이미 DHCP 서버의 주소를 파악한 상태이기에 Request, ACK 과정을 DHCP Server와 Unicast로 진행한다. 따라서 DHCP Server와 정상적으로 통신이 된다면, DHCP 만료시간은 4시간 마다 재갱신이 된다. 만약 DHCP Server가 죽거나 통신이 끊겨 Renewal이 실패했다면? Rebinding이 있다.
Rebinding (T2)
Rebinding은 임대의 7/8 지점(87.5%)인 7시간이 지난뒤에 진행된다. 이때는 해당 DHCP로 Unicast가 아닌 Broadcast로 Request, ACK 과정을 진행한다. 만약 응답할 서버가 없다면 DHCP Dicover를 broadcast로 날려 새로운 DHCP Server를 찾게된다. 이때는 초기 DHCP 요청과 동일한 과정으로 진행된다. 만약 이 Rebinding도 실패한다면? 만료시간이 끝나면 IP가 없는 상태가 된다.
isc dhcp server에서의 설정
isc-dhcp-server에서는 lease time관련하여 3개의 옵션이 존재한다.
- default-lease-time : 말그대로 기본 임대시간(초)이다. DHCP Client(linux의 경우라면 dhclient)에 따라 DHCP 요청시 lease time을 설정할수 있는데, 이때 lease time을 지정하지 않을 경우 이 시간으로 임대시간을 할당한다.
- max-lease-time : 최대 임대 시간(초)이다. Client의 lease time 요청이 이 max-lease-time보다 클 경우 할당되게 된다.
- min-lease-time : 최소 임대 시간(초). max와 반대로 client의 lease time이 min-lease-time보다 작을경우 할당되게 된다.
3개의 옵션 모두 기한없이 임대하고 싶을경우 -1을 설정하면 된다. 그러나 -1로 설정했을때 client에서 lease-time은 4294967295초가 할당되었다. 그러니까 -1은 임대 시간의 최대치, 즉 2^32임을 알수 있다. 년(year)로 계산하면 136년이 조금 넘는다. 68년에 한번씩 renew 작업을 하는꼴이니 사실상 영구임대로 봐도 될듯 싶다.
dhcp client에서 임대 시간 확인
linux라면 /var/lib/dhcp/dhclient.leases 파일에서 확인할수 있다.
# tail /var/lib/dhcp/dhcpclient.leases
....
option dhcp-lease-time 28800;
renew 4 2016/11/03 21:44:23;
rebind 5 2016/11/04 00:51:05;
expire 5 2016/11/04 01:51:05;
renew, rebind, expire에서 날짜 앞에 숫자는 요일(day of week)이다. 1을 월요일로 시작하여 4는 목, 5는 금이다.
windows는 임대 시작과 만료 시간만 확인할수 있다.
C:\> ipconfig /all
....
임대 시작 날짜 . . . . . . . : 2016년 11월 3일 목요일 오전 10:56:44
임대 만료 날짜 . . . . . . . : 2016년 12월 11일 월요일 오전 12:22:44