번 역 : 백현관 http://blog.naver.com/termi17

      DHCP

: internet Host에 설정 prameter를 제공, 광대한 네트웍 IP address를 네트웍 관리자가 수동으로 관리하는게 아니라 자동으로 관리, 한정된 IP subnet에서 효율적 주소관리.

가)    구성

       DHCP server에서 host로 설정 paramter를 전달하기 위한 protocol

       Host에 network address를 할당하기 위한 mechanism

나)    DHCP 3가지 mechanism

       자동할당

i.   영구적인 IP를 client에 할당

       동적할당

i.   IP address를 한정된 시간 내에서만 할당.

       수동할당

i.    네트워크 관리자의 설정에 의한 할당.

 

      DHCP designed goal

 

가)    일반적

       DHCP는 정책이 아니라 mechanism이 되어야 한다.

i.   Local 시스템 관리자가 설정파라미터를 통해 제어가 가능해야 한다.

       client들은 자동설정 되어야한다.

i.   client는 적당한 local 설정 parameter들을 사용자 중재 없이 설정하고 그 설정을 가지고 작동하여야 한다.

       네트웍은 개별 클라이언트에게 수동적인 설정을 요구하지 않는다.

i.   일반적인 상황에서 네트웍매니저가 각 클라이언트 마다 설정을 하지 않아야 한다.

       DHCP server를 각 subnet마다 없어도 된다.

i.   DHCP는 라우터들나 relay agent를 통하여 subnet간 통신해야 한다.

       DHCP client는 자신의 요청에 대해 하나이상의 respense를 받을수 있어야 한다.

i.   신뢰성과 성능향상을 위해 DHCP서버가 중복될수 있으므로

       DHCP는 static하게 dhcp가 아닌 호스트나 기존의 network protocol구현들과 함께 존재 해야한다.

       BOOTP relay agent과 함께 동작해야한다.

       기존의 BOOTP client에게 서비스를 제공해야 한다.

 

나)    Network layer parameter의 전송에서

       Network address가 중복되지 않아야 한다.

       DHCP 클라이언트는 각 request에 대해 같은 설정 parameter를 할당 받아야 한다.

i.   DHCP server나 client가 reboot이 되어도

       새로운 클라이언트에 대해 자동으로 설정 parameter가 할당될 수 있어야 한다.

       특정 client에는 fix 또는 반영구적인 설정 parameter를 지원해야 한다.

 

      DHCP msg

+———————————————+

| IP Header(20bytes)     |   UDP header(8bytes)      |

+———————————————+

|             DHCP message(548 bytes)                        |

+———————————————+

|     UDP datagram        |      IP Datagram                 |

+———————————————+

가)    DHCP msg format

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         op (1)       |       htype (1)       |      hlen (1)        |       hops (1)      |
+—————+—————+—————+—————+
|                                                  xid (4)                                                   |
+——————————-+——————————-+
|                     secs (2)                    |                     flags (2)                     |
+——————————-+——————————-+
|                                                ciaddr  (4)                                              |
+—————————————————————+
|                                                yiaddr  (4)                                              |
+—————————————————————+
|                                                siaddr  (4)                                              |
+—————————————————————+
|                                                giaddr  (4)                                              |
+—————————————————————+
|                                                                                                              |
|                                              chaddr  (16)                                             |
|                                                                                                              |
|                                                                                                              |
+—————————————————————+
|                                                                                                              |
|                                               sname   (64)                                           |
+—————————————————————+
|                                                                                                              |
|                                                 file    (128)                                             |
+—————————————————————+
|                                                                                                              |
|                                               options (312)                                           |
+—————————————————————+

 

      DHCP 서비스

가)    설정 parameter 저장소

나)    key-value 구조로 network 설정 parameter를 관리

       key후보군

i.    IP-subnet-number + h/w-address(*)

ㄱ.    연속적 또는 동시적으로 h/w address가 다른 서브넷에서 사용가능. 하드웨어 address는 unique하지 않게 된다.(bit ordering)

ii.                           IP-subnet-number + hostname

ㄱ.    Client가 다른 서브넷으로 이동하거나 h/w address가 바뀌어도 서버가 지능적으로 할당 가능

ㄴ.    클라이언트가 명시적으로 client identifier option을 사용 해야함.

 

다)    Network address를 동적으로 할당

 

      Client-Server Protocol

가)    DHCPDISCOVER

나)    DHCPOFFER

다)    DHCPREQUEST(opt 54: siaddr를 반드시 포함, opt50: yiaddr에 requested ip도)

       Relay agent를 이용하여 forward할 경우 DHCPDISCOVER와 같은 set의 DHCPREQUEST를 구분하는 방법 – DHCPDISCOVER의 SECS filed와 같은 IP broadcast address를 복사하여 전송.

       DHCPACK를 받은 client는 수신 파라미터이 검사를 수행하여야 하며(예, 할당된 network address에 대한 ARP) lease 타임을 기록해야 한다.

라)    DHCPACK

       이 시점의  설정 parameter들은 이전에 보낸 DHCPOFFER 메시지와 충돌하지 말아야 하며 이 시점에서 제공된 network address를 검사하지 않는다.

마)    DHCPNAK(client의 network 주소가 정확하지 않거나 lease expire)

       선택받은 서버가 DHCPREQUEST를 만족시키지 못한다면 DHCPNAK로 응답해야 한다.

       해당 message를 받은 client는 설정 process를 다시 시작한다.

바)    DHCPDECLINE(C->S, network 주소 이미 사용중)

       DHCPACK를 받은 client가 설정 parameter를 검사하는 과정에서 해당 network 주소가 이미 network의 어떤 host에 할당되어 있는 경우.

       설정 process를 다시 시작.(DISCOVER). Client는 다시 시작하기 전에 최소 10초간 대기하여야 한다.(과도한 network traffic방지)

사)    DHCPRELEASE

아)    DHCPNIFORM

       C->S로 요청. Server의 DHCPACK는 Unicast

       local 설정 parameter를 서버에 요구

       이미 network주소는 할당

       서버의 DHCPACK msg생성시 address 할당, binding check, yiaddr 채우기, lease time 채우기등이 일어나지 않는다.

       서버는 DHCPINFORM의 일관성을 위해 msg의 network address를 체크하지만 기존에 lease가 되어 있는지 체크를 해서는 안된다.

자)    DHCP 갱신 과정에서의 DHCPREQUEST 또는 DHCPREQUEST에 대한 무응답.

       서버에 DHCPACK나 DHCPNAK가 없으면 재 전송한다.

       응답이 없는 경우 1분의 시간 동안 4번의 DHCPREQUEST를 보내수 있다.

       위의 경우가 모두 실패한 경우 client는 사용자에게 이 사실을 알리고 초기 상태로 돌아간다.

 

      이전 할당된 network를 재 사용하기 위한 client와 서버의 상호작용.

client가 이전에 할당된 network address를 기억하고 그 network address를 사용하고자 할 때

가)    client는 DHCPREQUEST를 local subnet에 broadcast

       해당 message는 requested ip addrss option을 포함하고 있다.

       아직 network address를 할당 받지 못한 경우에는 ciaddr filed를 반드시 채우지 말아야 한다.

       Address를 받기위해 client identifier를 사용하였다면 DHCPREQUEST message에는 같은 client identifier를 반드시 사용하여야 한다.

 

나)    Client가 보낸 설정 parameter로 서버는 DHCPACK를 응답.

       서버는 client의 network address가 이미 사용되고 있는지 검사하지 않는다.

       만일 client가 잘못된 요청을 하면 서버는 DHCPNAK를 client에게 반환. Giaddr이 ‘0x0’이면 서버는 DHCPNAK를 broadcast한다.

다)    Client가 설정 parameter와 같이 DHCPACK를 수신.

       DHCPACK의 ip address가 이미 사용 중이면 DHCPDECLINE을 서버에 반드시 보내야 한다.

라)    DHCPRELEASE로 network address를 서버에 양도.

 

      Release Time

가)    OPTION CODE 52의 4byte value를 사용하며 0xffffffff는 infinity를 의미.(0-100year)

나)    Server와 client간의 clock를 고려하여 서버의 database의 lease보다 적은 시간을 client에게 전송할 수 있다.


      Client가 network address를 수동으로 설정된 경우.

가)    서버에 DHCPINFORM을 사용하여 설정 parameter를 요구.

나)    서버는 network address할당 없이 설정 parameter를 제공.

다)    이때 서버는 client로 unicast로 DHCPACK를 전송.

라)    서버는 DHCPINFORM의 일관성은 조사해야 하나 해당 network주소가 이미 lease된 주소인지는 검사하면 안된다.

 

      DHCP Server msg전달규칙

가)    Client로부터 수신한 DHCP msg의 giaddr이 0이 아니면 DHCP Server port로 해당 relay agent로 응답을 보낸다.

나)    Giaddr=0이고 ciaddr=0이 아니면 client로 DHCPOFFER과 DHCPACK를 ciaddr로 unicast한다.

다)    Giaddr=0, ciaddr=0이고 broadcast bit가 셋이 되어 있으면 DHCPOFFER, DHCPACK를 0xffffffff로 broadcast한다.

라)    Giaddr=0, ciaddr=0, broadcast bit=0 이면 DHCPOFFER과 DHCPACK를 client의 hardware address와 yiaddr address로 unicast한다.

마)    Giaddr=0인 상황에서 서버는 DHCPNAK 메시지를 0xffffff로 broadcast한다.

 

10          DHCP client msg 재전송 algorithm(모든 메시지에 대하여)

가)    Msg 재전송 delay를 위한 algorithm

나)    첫 전송은 4초에 -1에서 +1사이의 random 값이 더해진 값이 된다.(4초는 default)

다)    그 이후의 재전송은 이전의 결과값 * 2에 -1에서 +1사이의 random값이 더해진 값이 된다.

라)    최고 64초까지 이러한 과정을 반복적으로 계산한다.

 

11          DHCP Server의 행동

가)    DHCPDISCOVER msg를 수신한경우

       Network address를 선택한다. 새로운 address를 선택하는 과정은 다음과 같다.

i.   binding으로 기록된 client의 현재 address

ii.  binding으로 기록된(실제로는 expire나 release된) client 의 이전 address중 서버의 pool에서 유효하고 아직 allocate되지 않은 address

iii.  Requested IP Address 옵션의 주소가 유효하면 해당 주소.

iv.      서버의 pool중 사용가능한 주소. 해당 주소는 msg를 수신한 subnet을 base로 하거나(giaddr = 0) msg를 forward한 relay agent의 subnet을 base로 하여 선택.

 

       서버는 lease expire time을 아래와 같은 방법으로 선택

i.      client의 DHCPDISCOVER msg에 lease request가 없고 이미 할당된 주소가 있는 경우 서버는 해당 주소에 할당된 lease expire time을 client에 return한다.

ii.  client의 DHCPDISCOVER msg에 lease request가 없고 이미 할당된 주소가 없는 경우 서버는 서버에 설정된 default lease time을 return한다.

iii. Client의 DHCPDISCOVER msg에 특정 lease time option이 포함되어 있다면 client가 network 주소가 할당 되어 있거나 그렇지 않은 경우에도 서버는 해당 요구를 받아들이거나 다른 lease time을 return(policy에 부응하지 못할 때)

       Network address와 lease time이 결정되면 DHCPOFFER msg를 작성. 서버는 설정 parameter를 선택하는데 있어서 아래의 것들을 client에게 반드시 return해야 한다.

i.        Client network address.

ii.     Expire time

iii. Requested parameter를 다음의 rule에 의해 포함

ㄱ.    서버에 명시적으로 설정된 default parameter

ㄴ.    서버가 parameter를 “Host Requirements Document”에 정의된 parameter로 인식하면 “Host Requirements Document”에 정의된 default value를 적합한 option에 포함.

ㄷ.    위 두가지 사항이 아니라면 서버는 parameter value를 포함하면 안된다.

       서버는 가능한 많은 요청 parameter를 제공해야 하고 제공하지 못할 경우 해당 parameter를 삭제한다. 각 request parameter는 한번만 포함이 되어야 하고 그렇지 못할 경우 “DHCP Options and BOOTP Vendor Extension”를 따른다.

i.   “Host Requirements Document”의 parameter와 기존
 binding의 parameter가 다른 경우

ii.    msg의 client에게 특화된 parameter(client identifier등)

iii.client class에 특화된 parameter

iv.    client subnet의 default value가 아닌 parameter

나)    DHCPREQUEST

       Msg에 server identifier option을 포함하고 있다면 DHCPOFFER의 응답 메시지이다. 그렇지 않은 DHCPREQUEST는 lease expire를 갱신하기 위한 REQUEST이다.

       Client는 server identifier와 ciaddr을 0으로 채우고 requested ip address에 yiaddr의 값을 채워야 한다.

다)    DHCPDECLINE

       해당 network address는 이미 사용중 이므로 unavailable 상태로 표시.

라)    DHCPRELEASE

       해당 network address를 미할당 상태로 변경. Client의 init parameter를 다음의 재사용의 가능성을 위해 기억.

마)    DHCPINFORM

       INFORM msg 안의 ciaddr로 DHCPACK를 보낸다. 이때 lease expire time과 yiaddr은 채우지 않는다.

 

12          DHCP client의 lease 갱신을 위한 DHCPREQUEST 시간설정.

가)    두가지 시간의 전재 T1, T2

       T1 : lease를 연장하기 위해 서버에게 메시지를 보내기 시작하는 시간.

i.   T1 = 0.5*duration_of_lease

       T2 : renewing expire되는 시간(client는 rebinding상태로 변경)

i.   T2 = 0.875*duration_of_lease