2013년 6월 27일 목요일

[네트워크] DHCP(Dynamic Host Configuration Protocol)

이 프로토콜은 동적으로 IP주소를 할당해주는 프로토콜입니다.
요즈음 초고속망은 모두 이런 방식으로 IP를 할당해준다고 보시면 됩니다.

가) 개요
디스크가 없는 컴퓨터에게 IP주소를 제공하는 RARP라는 규약은 단지 IP주소만을 제공하고 그 외 나머지 정보를 제공하지 않기 때문에 BOOTP, DHCP 규약을 사용한다.
TCP/IP에 접속되는 각 컴퓨터는 ‘해당 IP주소’, ‘해당 서브넷 마스크’, ‘라우터의 IP주소’, ‘네임서버의 IP주소’와 같은 정보를 알아야 한다.
이 정보는 보통 구성 파일에 저장되고 부팅과정 중에 컴퓨터에 의해 접근된다.
BOOTP 는 동적으로 설정되는 프로토콜이 아니다. 클라이언트가 그 IP주소를 요청하면 BOOTP 서버는 클라이언트의 물리주소에 해당하는 IP주소를 테이블에서 찾게 된다. 이는 테이블에 이미 물리주소와 IP주소간의 연결이 미리 정해져 있어야 한다는 것을 의미한다. 그러나 만약 호스트가 다른 물리 네트워크로 이동하는 경우는 어떻게 되는가? 또한 만약 호스트가 임시의 IP주소를 원한다면 어떻게 되는가? BOOTP는 물리주소와 IP주소간의 연결이 관리자에 의해 변경되기 전까지는 고정적이고 불변하기 때문이다. BOOTP는 고정적으로 설정되는 프로토콜이다.
동적 호스트 설정 프로토콜인 DHCP는 동적인 설정을 제공하기 위해 제안되었다.
DHCP는 일정기간 동안 임시 IP주소를 할당한다.
DHCP서버는 2개의 데이터베이스를 가진다.
  • 정적으로 물리주소와 IP주소를 연결하는 것과
  • DCHP가 가지는 활용 가능한 IP주소의 pool이다.

나)  DHCP 운용 장단점
  • 고정 IP방식에 비해 사용자 IP망 설계변경이 자유롭다.
  • 사용자에게 DHCP IP를 할당해주게 되면 네트워크 정보가 자주 바뀌더라도 DHCP 서버(Router)에서만 네트워크 정보를 변경해주면 되므로 네트워크 정보변경이 유연하다.
  • 사용자중 PC를 켠 사용자만 IP가 할당되어 고정 IP에 비해 IP절약 효과가 있다.
  • DHCP 요구단말은 초기 부팅시 broadcast 트래픽(DHCP DISCOVERY 메시지)을 유발시킨다. -> 한 개의 VLAN의 설정범위에 있는 모든 단말에 전송되므로 네트워크의 성능 저하 발생 가능
  • PC전원만 ON시키면 실제 인터넷을 접속하지 않아도 IP가 할당된다.
  • PC 전원을 OFF할 경우 Lease Time까지 IP가 다른 단말에 할당되지 못하게 되어 IP주소 낭비가 발생하게 된다. <- Win95/98 운영체제의 경우 도스 명령어에 IP release 하는 명령어가 존재함에도 불구하고
  • 네트워크 전체의 설정 정보가 한곳에 집중되어 있어 DHCP 서버에 장애가 발생할 경우 이후의 단말 접속이 불가능해진다.
  • 네트워크의 문제(DHCP Server로의 경로상의 문제)가 DHCP 기능을 마비시킬 수 있으며, DHCP는 보안에 매우 취약하며 개선이 곤란하다.
  • 이용자가 마음만 먹으면 모든 동적 IP를 사용하지 못하게 할 수 있다(Denial of Service)

다)    동작절차
IP주소를 획득하기 위해 클라이언트는 다음 절차를 수행하여야 한다.







①    클라이언트는 DHCP DISCOVER 메시지를 목적지 포트 67로 하여 broadcast한다.
②    서버들은 DHCP OFFER 메시지로 응답한다.
       이 메시지를 통해 서버들은 IP주소 및 임대기간을 제공한다. Default는 1시간이다. DHCP    OFFER를 전송하는 서버는 제공된 IP주소를 잠그고 다른 클라이언트에게 활용 가능하지 않도록 한다.
  • 클라이언트가 DHCP OFFER 메시지를 수신하지 못하면? -> 각각 2초간격으로 4번을 더 시도한다.
  • 이런 모든 DHCP DISCOVER 메시지에 응답이 없으면, 클라이언트는 다시 시도하기 전에 5분간 sleep 상태로 들어간다.
③    클라이언트는 제공된 것 중 하나를 선택하여 선택된 서버로 DHCP REQUEST 메시지를   broadcast 한다.
④    서버는 DHCP ACK 메시지로 응답한다.
  • 클라이언트의 물리주소와 그 IP주소의 연결을 만든다.
  • 클라이언트는 임대기간 동안 IP주소를 사용할 수 있다.
⑤    임대기간의 50%가 지나게 되면 클라이언트는 다른 DHCP REQUEST를 전송 하여 재사용 가능한지를 요청한다.
⑥    서버가 DHCP ACK로 응답하면 클라이언트는 새로운 임대 계약을 얻게 되므로 그 타이머를 새로 시작하게 된다.
  • 이 때 서버가 DHCP NACK로 응답하면 클라이언트는 즉시 IP 사용을 중지하고 새로운 서버를 찾아야 한다.(과정 1)
  • 서버가 응답하지 않으면 클라이언트는 임대기간의 87.5%에 달할 때 DHCP REQUEST를 보내게 된다.
    - 임대 기간이 끝나기 전에 응답을 받으면 이에 따른 처리를 하나
    - 그렇지 않으면 임대 기간이 끝날 때까지 기다린 후 과정1부터 다시 반복하게 된다.
    - 클라이언트가 임대를 미리 종료할 수 있는데 이 경우 DHCP RELEASE 메시지를 서버로 전송한다.
  • 라)    패킷구조





















  • Operation Code (8bits) : request시 1, response의 경우 2
  • Hardware type (8bits) : 물리 네트워크의 종류를 나타낸다. 이더넷의 경우 1이다.
  • Operation Code (8bits) : request시 1, response의 경우 2
  • Hardware type (8bits) : 물리 네트워크의 종류를 나타낸다. 이더넷의 경우 1이다.
  • Hardware length (8bits) : 하드웨어 주소의 길이를 바이트 단위로 나타내며 이더넷의 경우 이 값은 6이다.
  • Hop count (8bits) : 패킷이 갈 수 있는 최대 홉 개수를 나타낸다.
  • Transaction ID (4bytes) : 클라이언트 IP주소를 포함한다. 이 필드는 요청을 받은 서버에 의해 응답 메시지에 기록된다.
  • Number of seconds (16bits) : 클라이언트가 부팅된 후 경과된 시간(초)
  • Flag (1bit) : 클라이언트가 서버한테 unicast 대신에 broadcast 형태의 응답을 요청하기 위해 기존에 사용되지 않는 필드의 처음 비트에 추가적인 1비트짜리 플래그를 사용하였다.  만약 응답이 클라이언트에게 전송되면, IP패킷의 목적지 주소는 클라이언트에 할당된 주소가 된다. 이 때 클라이언트는 그 주소를 알지 못하므로 이 패킷을 버리게 될 것이다. 그러나 IP패킷이 broadcast 형태로 전해지면 모든 호스트는 그 메시지를 받아 처리할 수 있게 되는 것이다.
  • Client IP address (4bytes) : 클라이언트 IP 주소를 포함한다. 만약 클라이언트가 이 정보를 가지고 있지 않다면 모두 0으로 지정하게 된다.
  • Your IP address (4bytes) : 이 필드는 요청을 받은 서버에 의해 응답 메시지에 기록된다. 클라이언트 IP주소를 포함한다.
  • Server IP address (4bytes) : 서버는 이 값을 응답 메시지에 기록한다.
  • Gateway IP address (4bytes) : 라우터의 IP주소를 나타내고 서버에 의해 응답 메시지에 기록된다.
  • Client hardware address : 클라이언트의 하드웨어 주소를 나타낸다. 비록 서버는 이 주소값을 클라이언트가 보낸 주소에서 추출하지만, 명시적으로 클라이언트가 이 값을 요청 메시지에 기록해 보낸다면 이 값을 사용하는 것이 효율적이다.
  • Server name(64bytes) : 서버가 응답 메시지에 기록하는 선택 항목으로 64 바이트를 차지하며 null string으로 끝나는 서버의 도메인 이름을 포함한다.
  • Boot file name (128bytes) : 이 필드는 서버가 응답 메시지에 기록하는 선택항목으로 null string로 끝나는 부트 파일의 전체 경로명을 포함한다.
  • Option (64bytes) : 이 필드는 2가지 목적을 가진다. 네트워크 마스크 또는 기본 라우터 주소와 같은 추가적 정보를 전달하거나 특정 제조업체의 해당 정보를 전달하기 위해서이다. 이 필드는 응답 메시지에서만 사용한다.
  • Options for BOOTP


  • 
    Options for DHCP












    마)    DHCP Relay Agent
    • DHCP 는 일반적으로 broadcast를 사용하므로 DHCP 서버는 subnet마다 존재하여야 하고  대규모 네트워크에서는 subnet이 무수히 존재하고 각 subnet마다 DHCP 서버를 구축하여 관리하는 것은 대단히 어려운 문제
    • DHCP Relay Agent는 이러한 네트워크 간의 packet forwarding을 제공함으로써 물리적으로 동일하지않은 subnet  DHCP 서버의 서비스가 가능
    • 클라이언트의 DHCP 메시지가 서버로 적절히 전달되기 위해서는 모든 subnet은 Relay Agent를 포함하여야 클라이언트가 broadcast하는 DHCP 메시지를 Relay Agent가 수신하여 서버로 forwarding
    • Relay Agent는 DHCP 메시지를 서버와 클라이언트 간에 forwarding 야하므로 자신의 존재를 서버에게 알릴 필요가 있음
    • Relay Agent는 자신의 위치를 서버에게 알리기 위해 클라이언트가 broadcast하는 DHCP 메시지의 ‘giaddr’ 필드에 자신의 네트워크 주소를 삽입
    • Relay Agent는 서버로부터 unicast되는 DHCP 메시지를 수신하여 클라이언트가  이것을 수신할 수 있도록 로컬 subnet에 broadcast

    도움이 되셨다면 공감이나 댓글 부탁드립니다.

    댓글 없음:

    댓글 쓰기