如來神掌第一式----DHCP詳解,一式----dhcp

來源:互聯網
上載者:User

如來神掌第一式----DHCP詳解,一式----dhcp

DHCP:Dynamic Host Configuration Protocol  區域網路的網路通訊協定,使用UDP協議工作,通常被應用在大型的區域網路絡環境中,主要作用是集中的管理、分配IP地址,使網路環境中的主機動態獲得IP地址、Gateway地址、DNS伺服器位址等資訊,並能夠提升地址的使用率。在RFC 2131中有詳細的描述。DHCP有3個連接埠,其中UDP67和UDP68為正常的DHCP服務連接埠,分別作為DHCP Server和DHCP Client的服務連接埠;546號連接埠用於DHCPv6 Client,而不用於DHCPv4,是為DHCP failover服務,這是需要特別開啟的服務,DHCP failover是用來做“雙機熱備”的。


DHCP協議採用用戶端/伺服器模型,主機地址的動態分配任務由網路主機驅動。當DHCP伺服器接收到來自網路主機申請地址的資訊時,才會向網路主機發送相關的地址配置等資訊,以實現網路主機地址資訊的動態配置。

DHCP具有以下功能:
1. 保證任何IP地址在同一時刻只能由一台DHCP客戶機所使用。
2. DHCP應當可以給使用者指派永久固定的IP地址。
3. DHCP應當可以同用其他方法獲得IP地址的主機共存(如手工配置IP地址的主機)。
4. DHCP伺服器應當向現有的BOOTP用戶端提供服務。


DHCP有三種機制分配IP地址:(三種地址分配方式中,只有動態分配可以重複使用用戶端不再需要的地址。)
1) 自動分配方式(Automatic Allocation),DHCP伺服器為主機指定一個永久性的IP地址,一旦DHCP用戶端第一次成功從DHCP伺服器端租用到IP地址後,就可以永久性的使用該地址。
2) 動態分配方式(Dynamic Allocation),DHCP伺服器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
3) 手工分配方式(Manual Allocation),用戶端的IP地址是由網路系統管理員指定的,DHCP伺服器只是將指定的IP地址告訴用戶端主機。

簡單來說下DHCP工作原理:
1)客戶機尋找伺服器:廣播發送discover包,尋找dhcp伺服器
2)伺服器響應請求:單播發送offer包,對客戶機做出響應。提供用戶端網路相關的租約以供選擇其中伺服器在收到用戶端的請求後,會針對用戶端的mac地址與本身的設定資料進行一下工作:
    a)到伺服器的登入檔案中尋找該使用者之前曾經使用過的ip,若有且該ip目前沒有人使用,這提供此ip為客戶機
    b)若設定檔中有針對該mac提供額外的固定ip,且該ip沒有被使用,則提供此ip給客戶機
    c)如果沒有符合以上兩個條件,則隨機取用目前沒有被使用的ip參數給客戶機並記錄到leases檔案中。
3)客戶機發送ip請求:廣播request包,選擇一個伺服器提供的網路參數租約回報伺服器。此外,客戶機會發送一個廣播封包給區域網路內的所有主機,告知自己已經接受伺服器的租約。
4)伺服器確認租約:單播Ack包,伺服器與客戶機確認租約關係並記錄到伺服器的leases檔案中 。


接著說下DHCP幾個概念:
DHCP Client:DHCP用戶端,通過DHCP協議請求IP地址的用戶端。DHCP用戶端是介面級的概念,如果一個主機有多個以太介面,則該主機上的每個介面都可以配置成一個DHCP 用戶端。交換器上每個Vlan介面也可以配置成一個DHCP用戶端。
DHCP Server:DHCP 服務端,負責為DHCP用戶端提供IP地址,並且負責管理分配的IP地址。
DHCP Relay:DHCP中繼器,DHCP用戶端跨網段申請IP地址的時候,實現DHCP報文的轉寄功能。
DHCP Security:DHCP安全特性,實現合法使用者IP地址表的管理功能
DHCP Snooping:DHCP監聽,記錄通過二層裝置申請到IP地址的使用者資訊

DHCP的封包格式如右圖所示,各欄位定義如下:報文格式

報文中各欄位的描述如下:    op,報文類型,1表示請求報文,2表示回應報文。    htype,硬體地址類型,1表示10Mb/s的乙太網路的硬體地址。    hlen,硬體地址長度,乙太網路中該值為6。    hops,跳數。用戶端設定為0,也能被一個Proxy 伺服器設定。    xid,事務ID,由用戶端選擇的一個隨機數,被伺服器和用戶端用來在它們之間交流請求和響應,用戶端用它對請求和應答進行匹配。該ID由用戶端設定並由伺服器返回,為32位整數。    secs,由用戶端填充,表示從用戶端開始獲得IP地址或IP地址續借後所使用了的秒數。    flags,標誌欄位。這個16位元的欄位,目前只有最左邊的一個位元有用,該位為0,表示單播,為1表示廣播。    ciaddr,用戶端的IP地址。只有用戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。    yiaddr,"你自己的"或用戶端的IP地址。    siaddr,表明DHCP協議流程的下一個階段要使用的伺服器的IP地址。    giaddr,DHCP中繼器的IP地址。//注意:不是位址集區中定義的網關    chaddr,用戶端硬體地址。用戶端必須設定它的"chaddr"欄位。UDP資料包中的乙太網路幀首部也有該欄位,但通常通過查看UDP資料包來確定乙太網路幀首部中的該欄位擷取該值比較困難或者說不可能,而在UDP協議承載的DHCP報文中設定該欄位,使用者進程就可以很容易地擷取該值。    sname,可選的伺服器主機名稱,該欄位是空結尾的字串,由伺服器填寫。    file,開機檔案名,是一個空結尾的字串。DHCP Discover報文中是"generic"名字或Null 字元,DHCP Offer報文中提供有效目錄路徑全名。    options,選擇性參數域,格式為"代碼+長度+資料"。DHCP共有八種報文,分別為DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各報文類型功能如表1所述。描述DHCP DiscoverDHCP用戶端請求地址時,並不知道DHCP伺服器的位置,因此DHCP用戶端會在本網內以廣播方式發送請求報文,這個報文成為Discover報文,目的是發現網路中的DHCP伺服器,所有收到Discover報文的DHCP伺服器都會發送回應報文,DHCP用戶端據此可以知道網路中存在的DHCP伺服器的位置。DHCP OfferDHCP伺服器收到Discover報文後,就會在所配置的位址集區中尋找一個合適的IP地址,加上相應的租約期限和其他配置資訊(如網關、DNS伺服器等),構造一個Offer報文,發送給使用者,告知使用者本伺服器可以為其提供IP地址。< 只是告訴client可以提供,是預分配,還需要client通過ARP檢測該IP是否重複>
DHCP Request DHCP用戶端可能會收到很多Offer,所以必須在這些回應中選擇一個。Client通常選擇第一個回應Offer報文的伺服器作為自己的目標伺服器,並回應一個廣播Request報文,通告選擇的伺服器。DHCP用戶端成功擷取IP地址後,在地址使用租期過去1/2時,會向DHCP伺服器發送單播Request報文續延租期,如果沒有收到DHCP ACK報文,在租期過去3/4時,發送廣播Request報文續延租期。DHCP ACKDHCP伺服器收到Request報文後,根據Request報文中攜帶的使用者MAC來尋找有沒有相應的租約記錄,如果有則發送ACK報文作為回應,通知使用者可以使用分配的IP地址。
DHCP NAK如果DHCP伺服器收到Request報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分配IP地址,則發送NAK報文作為回應,通知使用者無法分配合適的IP地址。DHCP Release當使用者不再需要使用分配IP地址時,就會主動向DHCP伺服器發送Release報文,告知伺服器使用者不再需要分配IP地址,DHCP伺服器會釋放被綁定的租約。DHCP DeclineDHCP用戶端收到DHCP伺服器回應的ACK報文後,通過地址衝突檢測探索服務器分配的地址衝突或者由於其他原因導致不能使用,則發送Decline報文,通知伺服器所分配的IP地址不可用。DHCP InformDHCP用戶端如果需要從DHCP伺服器端擷取更為詳細的配置資訊,則發送Inform報文向伺服器進行請求,伺服器收到該報文後,將根據租約進行尋找,找到相應的配置資訊後,發送ACK報文回應DHCP用戶端。

 

1、搭建過程

yum -y install dhcp* 

(1/4): dhclient-4.1.1-53.P1.el6.centos.x86_64.rpm                       | 322 kB     00:00  ###  DHCP (Dynamic Host Configuration Protocol) is a protocol which allowsindividual devices on an IP network to get their own networkconfiguration information (IP address, subnetmask, broadcast address,etc.) from a DHCP server. The overall purpose of DHCP is to make iteasier to administer a large network.  The dhcp package includes theISC DHCP service and relay agent.在ISC DHCP中繼代理和服務。(2/4): dhcp-4.1.1-53.P1.el6.centos.x86_64.rpm                           | 823 kB     00:00    ###DHCP (Dynamic Host Configuration Protocol) is a protocol which allowsindividual devices on an IP network to get their own networkconfiguration information (IP address, subnetmask, broadcast address,etc.) from a DHCP server. The overall purpose of DHCP is to make iteasier to administer a large network.  The dhcp package includes theISC DHCP service and relay agent.To use DHCP on your network, install a DHCP service (or relay agent),and on clients run a DHCP client daemon.  The dhcp package providesthe ISC DHCP service and relay agent.(3/4): dhcp-common-4.1.1-53.P1.el6.centos.x86_64.rpm                    | 144 kB     00:00     ###管理組件DHCP (Dynamic Host Configuration Protocol) is a protocol which allowsindividual devices on an IP network to get their own networkconfiguration information (IP address, subnetmask, broadcast address,etc.) from a DHCP server. The overall purpose of DHCP is to make iteasier to administer a large network.(4/4): dhcp-devel-4.1.1-53.P1.el6.centos.x86_64.rpm                     | 158 kB     00:00    ##Header files and API documentation for using the ISC DHCP libraries.  Thelibdhcpctl and libomapi static libraries are also included in this package.

配置過程

1、查看dhcpd.conf 設定檔,提示需要參考模板設定檔。

 cat /etc/dhcp/dhcpd.conf## DHCP Server Configuration file.#   see /usr/share/doc/dhcp*/dhcpd.conf.sample#   see 'man 5 dhcpd.conf'#
cat /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  > /etc/dhcp/dhcpd.conf

2、編輯設定檔

[root@dhcp dhcp]# cat /etc/dhcp/dhcpd.conf ddns-update-style interim;ignore client-updates;subnet 192.168.1.0 netmask 255.255.255.0 {# --- default gatewayoption routers                  192.168.1.0;option subnet-mask              255.255.255.0;option time-offset              -18000; # Eastern Standard Time#       option ntp-servers              192.168.1.1;#       option netbios-name-servers     192.168.1.1;# --- Selects point-to-point node (default is hybrid). Don't change # -- you understand Netbios very well                        #      option netbios-node-type 2;range dynamic-bootp 192.168.1.200 192.168.1.230;default-lease-time 21600;max-lease-time 43200;# we want the nameserver to appear at a fixed address }

3、啟動服務;service dhcpd restart

4、設定檔說明

dhcpd.conf參數說明/etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。1.DHCP設定檔中的parameters(參數):表明如何執行任務,是否要執行任務,或將哪些網路設定選項發送給客戶ddns-update-style               配置DHCP-DNS 互動更新模式。 default-lease-time              指定確省租賃時間的長度,單位是秒。 max-lease-time                  指定最大租賃時間長度,單位是秒。 hardware                        指定網卡介面類型和MAC地址。 server-name                     通知DHCP客戶服務器名稱。 get-lease-hostnames flag        檢查用戶端使用的IP地址。 fixed-address ip                分配給用戶端一個固定的地址。 authritative                    拒絕不正確的IP地址的要求。2.DHCP設定檔中的declarations (聲明):用來描述網路布局、提供客戶的IP地址等shared-network                              用來告知是否一些子網路分享相同網路。 subnet                                      描述一個IP地址是否屬於該子網。 range                                       起始IP 終止IP 提供動態分配IP 的範圍。 host                                        主機名稱 參考特別的主機。 group                                       為一組參數提供聲明。 allow unknown-clients;deny unknown-client   是否動態分配IP給未知的使用者。 allow bootp;deny bootp                      是否響應啟用查詢。 allow booting;deny booting                  是否響應使用者查詢。 filename                                    開始開機檔案的名稱. 應用於無盤工作站。 next-server                                設定伺服器從引導檔案中裝如主機名稱,應用於無盤工作站。3. DHCP設定檔中的option(選項):用來配置DHCP選擇性參數,全部用option關鍵字作為開始subnet-mask           為用戶端設定子網路遮罩。 domain-name           為用戶端指明DNS名字。 domain-name-servers   為用戶端指明DNS伺服器IP地址。 host-name             為用戶端指定主機名稱。 routers               為用戶端設定預設閘道。 broadcast-address     為用戶端設定廣播位址。 ntp-server            為用戶端設定網路時間伺服器IP地址。 time-offset          為用戶端設定和格林威治時間的位移時間,單位是秒。注意:如果用戶端使用的是視窗作業系統,不要選擇"host-name"選項,即不要為其指定主機名稱

 

工作原理:

DHCP協議採用UDP作為傳輸協議,主機發送請求訊息到DHCP伺服器的67號連接埠,DHCP伺服器回應應答訊息給主機的68號連接埠。詳細的互動過程如。 

 


 

 
  1. 即DHCP用戶端尋找DHCP服務端的過程,對應於用戶端發送DHCP Discovery,因為DHCP Server對應於DHCP用戶端是未知的,所以DHCP 用戶端發出的DHCP Discovery報文是廣播包,源地址為0.0.0.0目的地址為255.255.255.255。網路上的所有支援TCP/IP的主機都會收到該DHCP Discovery報文,但是只有DHCP Server會響應該報文。
    如果網路中存在多個DHCP Server,則多個DHCP Server均會回複該DHCP Discovery報文。
    如果同一個vlan內沒有DHCP Server,而該VlanIf配置了DHCP Relay功能,則該Vlanif即為DHCP中繼,DHCP中繼會將該DHCP報文的源IP地址修改為該Vlanif的IP地址,而目的地址則為DHCP Relay配置的DHCP Server的IP地址。同時修改DHCP報文中,giaddress為VlanIf的IP地址。並以單播將DHCP Discovery發送到DHCP Server端。
  2. DHCP Server提供階段,即為DHCP Server響應DHCP Discovery所發的DHCP Offer階段
    DHCP Server收到DHCP Discovery報文後,解析該報文請求IP地址所屬的Subnet。並從dhcpd.conf檔案中與之匹配的subnet中取出一個可用的IP地址(從可用位址區段選擇一個IP地址後,首先發送ICMP報文來ping該IP地址,如果收到該IP地址的ICMP報文,則拋棄該IP地址,重新選擇IP地址繼續進行ICMP報文測試,直到找到一個網路中沒有人使用的IP地址,用以達到防治動態分配的IP地址與網路中其他裝置IP地址衝突,這個IP地址衝突檢測機制,可配置),設定在DHCP Discovery報文中yiaddress欄位中,表示為該用戶端分配的IP地址,並且為該Lease設定該Subnet配置的Option,例如預設leases租期,最大租期,router等資訊。
    DHCP從位址集區中選擇IP地址,以如下優先順序進行選擇:
        1)當前已經存在的Ip Mac的對應關係
        2)Client以前的IP地址
        3)讀取Discovery報文中的Requested Ip Address Option的值,如果存在並且IP地址可用
        4)從配置的Subnet中選擇IP地址:
    DHCP Server解析DHCP Discovery請求的IP所屬的Subnet,首先看該DHCP Discovery報文中giaddress是否有DHCP Relay,如果有,則從giaddress所述的subnet中可用IP位址區段中擷取,並分配IP。如果giaddress沒有IP地址,則從該DHCP Server綁定的介面的IP地址所屬的網段分配IP地址。
  3. DHCP Client收到若干個DHCP Server響應的DHCP Offer報文後,選擇其中一個DHCP Server作為目標DHCP Server。選擇策略通常為選擇第一個響應的DHCP Offer報文所屬的DHCP Server。
    然後以廣播方式回答一個DHCP Request報文,該報文中包含向目標DHCP請求的IP地址等資訊。之所以是以廣播方式發出的,是為了通知其他DHCP Server自己將選擇該DHCP Server所提供的IP地址。
  4. 當DHCP Server收到DHCP Client發送的DHCP Request後,確認要為該DHCP Client提供的IP地址後,便想該DHCP Client響應一個包含該IP地址以及其他Option的報文,來告訴DHCP Client可以使用該IP地址了。然後DHCP Client即可以將該IP地址與網卡綁定。另外其他DHCP Server都將收回自己之前為DHCP Client提供的IP地址。
  5. 當DHCP Client重新登入後,發送一個以包含之前DHCP Server分配的IP地址資訊的DHCP Request報文,當DHCP Server收到該請求後,會嘗試讓DHCP用戶端繼續使用該IP地址。並回答一個ACK報文。
    但是如果該IP地址無法再次分配給該DHCP Client後,DHCP回複一個NAK報文,當DHCP Client收到該NAK報文後,會重新發送DHCP Discovery報文來重新擷取IP地址。
  6. DHCP擷取到的IP地址都有一個租約,租約到期後,DHCP Server將回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新器租約。更新的方式就是,噹噹前租約期限過了一半後,DHCP Client都會發送DHCP Renew報文來續約租期。
      在使用租期超過50%時刻處,DHCP Client會以單播形式向DHCP Server發送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server發送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server發送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址。      在使用租期超過87.5%時刻處,DHCP Client會以廣播形式向DHCP Server發送DHCPRequest報文來續租IP地址。如果DHCP Client成功收到DHCP Server發送的DHCP ACK報文,則按相應時間延長IP地址租期;如果沒有收到DHCP Server發送的DHCP ACK報文,則DHCP Client繼續使用這個IP地址,直到IP地址使用租期到期時,DHCP Client才會向DHCP Server發送DHCP Release報文來釋放這個IP地址,並開始新的IP地址申請過程。需要說明的是:DHCP用戶端可以接收到多個DHCP伺服器的DHCPOFFER資料包,然後可能接受任何一個DHCPOFFER資料包,但用戶端通常只接受收到的第一個DHCPOFFER資料包。另外,DHCP伺服器DHCPOFFER中指定[1]  的地址不一定為最終分配的地址,通常情況下,DHCP伺服器會保留該地址直到用戶端發出正式請求。      正式請求DHCP伺服器分配地址DHCPREQUEST採用廣播包,是為了讓其它所有發送DHCPOFFER資料包的DHCP伺服器也能夠接收到該資料包,然後釋放已經OFFER(預分配)給用戶端的IP地址。      如果發送給DHCP用戶端的地址已經被其他DHCP用戶端使用,用戶端會向伺服器發送DHCPDECLINE資訊包拒絕接受已經分配的地址資訊。      在協商過程中,如果DHCP用戶端發送的REQUEST訊息中的地址資訊不正確,如用戶端已經遷移到新的子網或者租約已經到期,DHCP伺服器會發送DHCPNAK訊息給DHCP客戶 端,讓用戶端重新發起地址請求過程。

 擷取過程

 

 

1、查看用戶端message 日誌;

首次擷取
May 29 12:27:38 66 dhclient[26828]: DHCPDISCOVER on eth2 to 255.255.255.255 port 67 interval 8 (xid=0x3acc5b99)May 29 12:27:38 66 dhclient[26828]: DHCPOFFER from 192.168.1.2May 29 12:27:38 66 dhclient[26828]: DHCPREQUEST on eth2 to 255.255.255.255 port 67 (xid=0x3acc5b99)May 29 12:27:38 66 dhclient[26828]: DHCPACK from 192.168.1.2 (xid=0x3acc5b99)May 29 12:27:40 66 NET[26875]: /sbin/dhclient-script : updated /etc/resolv.confMay 29 12:27:40 66 dhclient[26828]: bound to 192.168.1.47 -- renewal in 39792 seconds.

斷開後重新擷取May 29 13:26:40 66 dhclient[41297]: DHCPREQUEST on eth3 to 255.255.255.255 port 67 (xid=0x207c094c)May 29 13:26:40 66 dhclient[41297]: DHCPACK from 192.168.1.2 (xid=0x207c094c)May 29 13:26:42 66 NET[41351]: /sbin/dhclient-script : updated /etc/resolv.confMay 29 13:26:42 66 dhclient[41297]: bound to 192.168.1.157 -- renewal in 38792 seconds.

2、抓包分析;

tcpdump -i any -w dhcp.pcap 'udp and port 67 and port 68'

首次擷取資訊抓包;

 

1、Discover包分析

 

2、OFFER

 

(1)DHCP伺服器仍然使用廣播位址作為目的地址,因為此時請求分配IP的Client並沒有自己ip,而可能有多個Client在使用0.0.0.0這個IP作為源IP向DHCP伺服器發出IP分配請求,DHCP也不能使用0.0.0.0這個IP作為目的IP地址,於是依然採用廣播的方式,告訴正在請求的Client們,這是一台可以使用的DHCP伺服器。

(2)DHCP伺服器提供了一個可用的IP,在資料包的Your (client) IP Address欄位可以看到DHCP伺服器提供的可用IP。

(3)除此之外,中紅色矩形框的內容所示,伺服器還發送了子網路遮罩,路由器,DNS,網域名稱,IP地址租用期等資訊。

 

3 REQUEST包

 

4、ACK包

 

 

 

 在資料包中包含以下資訊,表示將這些資源資訊分配給Client.
 Your(client) IP address:分配給Client的可用IP。
 後面有許多項option資訊,前兩項是DHCP伺服器發送的訊息類型(ACK)和伺服器的身份標識,後面幾項是:
 Subnet Mask:Client端分配到的IP的子網路遮罩;
 Router:路由器
 Domain Name Server:DNS,網域名稱伺服器
 Domain Name:網域名稱
 IP Address Lease Time:IP租用期。

 

 類比重啟主機抓包

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.