태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
 

 
블로그 이미지
[www.netrain.co.kr]에서 네트워크/보안을 공부하시는 분들을 위해 서비스를 제공하는 블로그입니다 넷트레인
Follow silpir  on Twitter


DHCP 서비스 파헤치기

네트워크 심화 | 2010.04.01 01:00 | Posted by 넷트레인

DHCP 서비스가 뭐죠? 그렇죠! IP address를 자동으로 부여하는 것이 'DHCP'죠. 자동으로 IP를 할당받는 방법은 많습니다. DHCP 말고 다른 방법도 있냐구요?

예전에 Multi-Access 망에서 많이 사용하던 RARP, PPP Protocol의 IPCP 기능을 이용한 IP address 할당 (RFC1332) 등 다양한 Protocol이 통신을 위해 IP address를 할당하고 있습니다. 그 중에서 가장 보편적으로 사용되는 DHCP 서비스를 오늘 자세히 파헤쳐 보도록 하겠습니다.

DHCP는 Bootstrap protocol(Bootp)을 사용하여 IP address를 할당하는 서비스입니다. 어떻게 IP address 정보를 상호간에 전달하는지 살펴보도록 할까요?

다음은 DHCP packet을 Capture한 화면입니다.

공유기와 Router에서 DHCP를 구동시키고 capture를 해봤는데 결과에 차이가 좀 있군요.

[Cisco Router]

[공유기]

웃긴건 CCNA 책에는 Cisco Router 형식으로 쓰여 있고, BSCI 책에는 공유기 형식으로 쓰여 있다는 겁니다. 뭐가 정답일까요? 정답을 모를 때는 RFC를 찾아봐야겠죠. RFC2131 입니다.

RFC보면 뭐가 많이 써 있는데 중간부분에 이렇게 쓰여 있습니다.

If 'giaddr' is zero and 'ciaddr' is zero, and the broadcast bit is set, then the server broadcasts DHCPOFFER and DHCPACK messages to 0xffffffff. If the broadcast bit is not set and 'giaddr' is zero and 'ciaddr' is zero, then the server unicasts DHCPOFFER and DHCPACK messages to the client's hardware address and 'yiaddr' address.  In all cases, when 'giaddr' is zero, the server broadcasts any DHCPNAK messages to 0xffffffff.

무슨 말인지 모르시겠다고요? 조금 다르기는 해도 쉽게 설명을 드리면 이미 Client가 Server의 DHCP table에 등록이 되어 있는 경우라면 Server는 Clinet에게 packet을 Unicast로 전달하고, 그렇지 않은 경우에는 Broadcast로 전달한다는 이야기입니다.

DHCP Discover, Offer, Request, ACK가 뭐냐구요? DHCP는 다음 4단계를 처려 IP address를 할당받습니다.


1. DHCP Dicover : '누가 나 IP address 좀 줘라!' IP address를 요청하는 Packet
2. DHCP Offer : '여기 IP address 있다.' IP address를 할당하는 Packet (아직 DHCP table에 등록하지 않음)
3. DHCP Request : '이 IP address 쓰면 되냐?' 할당받은 IP address를 사용해도 되냐고 요청하는 Packet
※ DHCP Request Packet을 받았을 때 Client가 IP address를 받았음을 확인하고 DHCP table에 등록함
4. DHCP Ack : '그래, 그 IP 너 써라' IP address 사용을 허가하는 Packet

Packet을 하나씩 볼까요?

[DHCP Dicover]

UDP를 사용하고 Port 번호는 2개를 사용하는군요.
- bootpc(bootp clinet) - 68
- bootps(bootp server) - 67

[DHCP Offer]


[Your IP address]를 통하여 IP address를 할당해 주었군요. DNS 정보, Default-gateway 정보 등 다양한 정보를 option에 넣어서 전달을 해 주는군요.

[DHCP Request]


자기가 받은 IP address를 확인하기 위해 Requested IP address에 넣어서 사용해도 되냐고 문의를 하고, Host name 등 자세한 정보를 Server에게 알려주네요. DHCP Server가 Table에 등록하는데 필요한 추가 정보를 보낸다고 보시면 됩니다.

[DHCP Ack]


마지막으로 써도 된다는 메세지를 던지면 해당 IP address를 사용할 수 있게 되는 거랍니다.

별로 어렵지 않죠? 그런데, 잘 보시면 DHCP Server는 IP address를 할당해줄 때, 수동으로 설정한 IP address와 같은 IP address를 줘서 충돌나는 경우가 많지 않다는 사실을 발견하게 됩니다. 어떻게 된 일일까요? 수동으로 IP address를 설정한 PC에서 DHCP한테 자신의 정보를 보내지 않을텐데요.

DHCP는 IP address를 할당할 때, ICMP나 SNMP message 등을 던져서 자신이 할당할 IP address를 누군가 사용하고 있는지를 확인하고 IP address를 할당하는 Option이 있습니다. 대부분 DHCP Server에 이 기능이 enable되어 있습니다. 물론, 요즘은 OS 방화벽 기능 때문에 제대로 동작하지 않는 경우가 많지만요.

오늘은 DHCP에 대하여 알아보았습니다. 향후에 'Router를 이용한 DHCP Server 만들기', 'Router를 이용한 DHCP agent 만들기', 'DHCP client가 된 Router' 등을 통하여 보다 자세하게 알아보도록 하겠습니다. 내일은 DNS에 대해서 알아보도록 하시죠. ^^
 

티스토리 툴바