1. DHCP 아키텍처 소개

DHCP 아키텍처가 원래 아래와 같습니다.
DHCP는 원래 4가지 단계로 구성됩니다.

– DHCP discover : client –> server
– DHCP offer : server –> client
– DHCP request : client –> server
– DHCP ack : server –> client   

2. Client가 IP를 전혀 받은 경우가 없는 상황

말 그대로 Client(PC)가 단 한번도 DHCP 서버에게 IP를 요청한 적이 없는 경우입니다.
또한 이 경우는 Client PC에서, 관리자가 STATIC하게도 IP를 설정한 적이 없는 경우도 포함합니다.

– discover : 최초에 client는 DHCP 서버에게 Broadcast로 IP를 요청합니다.
– offer : DHCP 서버가 request를 받아 자신의 IP pool중에 가용한 IP를 client에게 던집니다.
– request : 만약 2대 이상의 DHCP 서버가 client에게 offer를 던졌다면, client는 이중에 가장 먼저 offer를 던져준 DHCP서버에게만 request를 날립니다.
– ack : request를 받은 DHCP server는, client에게 선택되었음을 행복해 하면서(^^;) 최종적으로 client에게 IP 사용을 허가하고… 자신의 pool에 client의 MAC와 할당한 IP를 기록합니다. 그리고 dhcp rease time을 카운트 다운하기 시작합니다.   

3. Client가 IP를 DHCP서버로부터 받은 적이 있는 경우

현재 client가 dhcp 서버로부터 IP를 1시간 임대받았다고 하겠습니다.
만약에… IP를 받은지 1시간이 지나 IP를 회수당했다고 하면 어떻게 될까요?

PC는 IP가 없어져서 통신이 끊어지고… 다시 DHCP 서버에 IP를 요청해야 합니다.

그래서 DHCP는 이에 대한 대안은 이미 만들어 두었습니다.

Lease 받은 IP의 임대 시간의 1/2가 되었을때 DHCP client는 서버에게 IP 사용에 대한 재요청을 하게 됩니다.
즉, 1시간동안 IP를 임대했다고 하면, 1시간이 다 된 다음에 IP에 대한 재사용 요청을 하는게 아니라…

1/2의 시간 즉, 30분의 시간이 지나면 client는 server에게 IP에 대한 재 사용 요청을 합니다.
이게 실패하면 다시 1/2의 시간이 지나 즉, 최초 사용부터 45분(30분+15분)이 되었을때 IP 재사용 요청을 합니다.

이때 단계별로 보겠습니다.

<1시간 IP 임대후, 30분이 지나서 DHCP 동작>
– discover : client가 server에게 IP 사용에 대한 기간 연장을 요청합니다.
   다만 다른 것은, broadcast 하는게 아니라 이전에 자신에게 IP를 준 서버를 지정해서 unicast로 요청합니다. 또한 중요한 것은 기존에 자신이 사용중인 IP(예를들어 1.1.1.2/24)를 꼭 지정해서, 이것을 쓰게 해달라고 요청합니다.
– offer : server가 client가 요청한 내용을 체크합니다.
  이놈이 아까 내게 IP를 받아간 그 client인지, 그리고 요청한 IP(1.1.1.2/24)가 딴놈이 쓰는지, 아니면 할당 가능한지 확인 합니다. 만약 이놈외에 딴놈이 그 IP를 사용하고 있지 않으면, 그놈에게 다시 똑같은 IP를 던져줍니다. client에서 IP 변경으로 인한 통신 단절이 발생하지 않게 하기 위해서 입니다.
– request : client가 server에게 기존 IP 사용에 대한 허가가 떨어지면 그대로 사용하겠다고 재차 확인합니다.
– ack : server가 최종적으로 확인하고, client의 MAC와 IP를 leases pool에 기록합니다.
   이때 중요한 것은 leases time이 30분(1/2기간)으로 기록되는게 아니라, 다시 1시간 임대의 시작으로 기록됩니다.

4. Client가 IP를 DHCP서버로부터 받은 적이 있는 경우 –> leases time이 많이 지났을 경우.

만약에 PC나 공유기를 껐다가 하루정도 지나서 다시 켠다면?
이때는 내가 사용하던 IP를 DHCP 서버가 다른 PC나 다른 공유기에 줬을 가능성도 있습니다.

<하루가 지나서 DHCP 재요청>
– discover : client가 server에게 IP를 요청합니다.
   client는 자신이 가장 최근에 사용했던 IP와 DHCP 서버를 기록해 둡니다.
   그리고 가장 최근에 자신에게 IP를 준 서버를 지정해서 unicast로 IP를 요청합니다.
   또한 중요한 것은 기존에 자신이 사용중인 IP(예를들어 1.1.1.2/24)를 꼭 지정해서, 이것을 쓰게 해달라고 요청합니다.
– offer : server가 client가 요청한 내용을 체크합니다.
   client가 요청한 IP가 free하다면 같은 IP를 할당해 줍니다.
   만약 이놈외에 다른 PC나 공유기가 그 IP를 사용하고 있다면, pool에서 가용한 다른 IP를 던져 줍니다.
– request : client에게 server가 변경된 IP를 던져준다면, client는 별 수 없이 변경된 IP를 사용해야 합니다.
– ack : server가 최종적으로 확인하고, client의 MAC와 IP를 leases pool에 기록합니다.
  leases time에서 countdown이 시작됩니다. ^^;

결론은…

DHCP 아키텍처상으로 Client는 자신이 가장 최근에 사용한 IP와 DHCP 서버를 기억하고 있다는 겁니다.
그래서 Client는 IP를 요청할 때, 항상 가장 최근에 사용한 IP를 그 DHCP 서버에게 요청한다는 것이죠.

다른 PC들도 마찬가지 입니다.
그래서 DHCP 서버의 IP pool이 넉넉하다면, 대부분의 PC들은 이전에 자기가 사용했었던 IP들을 계속 사용하는 경향이 있습니다.

그렇기 때문에 몇일이 지나 PC를 켜도…

내 PC나 공유기가 예전에 사용했던 IP를 지정해서 예전의 그 DHCP 서버에 요청하므로, IP가 바뀌지 않는 것입니다.

출 처 : http://cafe.naver.com/neteg/35972 크레지우