DHCP協議筆記

##簡介 DHCP,即Dynamic Host Configuration Protocol(動態主機設置協議),是一個局域網協議,用於給內部網絡或者網絡服務供應商自動分配IP給用戶。緩存

  • 附加功能
  1. 經過IP地址與MAC地址綁定功能實現靜態IP地址的分配
  2. 自動配置客戶端的DNS服務器
  3. 利用IP排除功能,使已靜態分配給其餘主機的IP的IP地址再也不分配給其它DHCP服務器。

##DHCP原理 DHCP運行分四個階段,分別是服務器

  1. 發現階段
    客戶在物理子網上發送廣播來尋找可用的DHCP服務器。該客戶實現生成一個源地址爲0.0.0.0(還沒分配IP),目的地址爲255.255.255.255(有限廣播地址)或者一個子網廣播地址的UDP包。SA能夠配置一個本地路由來轉發DHCP包給另外一個子網上的DHCP服務器。 客戶也能夠申請它使用的最後一個IP地址。若是該客戶所在的網絡中此IP仍然可用,服務器就能夠准許該申請(續租)。不然,就要看該服務器是受權的仍是非受權的。 受權服務器會拒絕請求,使得客戶馬上申請一個新的IP。非受權服務器僅僅忽略掉請求,致使一個客戶端請求的超時,因而客戶端就會放棄此請求而去申請一個新的IP地址。網絡

  2. 提供階段
    當DHCP服務器收到一個來自客戶的IP租約請求時,它會提供一個IP租約(從IP池之中)。DHCP爲客戶保留一個IP地址,而後經過網絡單播/廣播(取決於BROADCAST爲爲1仍是爲0)一個DHCPOFFER消息給客戶(客戶端接收端口爲UDP 68)。該消息包含客戶的MAC地址(是客戶端的MAC地址才接受)、服務器提供的IP地址、子網掩碼、租期以及提供IP的DHCP服務器的IP。若是收到多個DHCP服務器的offer,客戶端默認只接受第一個到的。併發

  3. 選擇階段 即客戶端選擇IP地址的階段。當客戶端收到一個IP租約提供時,它必須告訴全部其餘的DHCP服務器它已經接受了一個租約提供。所以,該客戶會發送一個DHCP REQUEST消息(從UDP 68端口發送),源地址爲0.0.0.0,目標地址爲255.255.255.255,其中包含提供租約的服務器的IP,已經分配的IP地址。。當其餘DHCP服務器收到了該消息後(從UDP 67端口接收),它們會收回全部可能已提供給客戶的租約。而後它們把曾經給客戶保留的那個地址從新放回到可用地址池中,這樣,它們就能夠爲其餘計算機分配這個地址。任意數量的DHCP服務器均可以響應同一個IP租約請求,可是每個客戶網卡只能接受一個租約提供。tcp

4.確認階段 當DHCP服務器收到來自客戶的REQUEST消息後,它就開始了配置過程的最後階段。這個響應階段包括髮送一個DHCP ACK包給客戶,單播或者廣播,仍是取決於BROADCAST位。這個包包含租期和客戶可能請求的其餘全部配置信息。這時候,TCP/IP配置過程就完成了。 該服務器響應請求併發送響應給客戶。整個系統指望客戶來根據選項來配置其網卡。.net

關於受權DHCP服務器:code

DHCP受權是爲了應對一個網絡中有多臺DHCP服務器的時候,用於肯定接收那一臺DHCP服務器服務。blog

##DHCP續約路由

若是使用動態IP策略,則DHCP服務器在續約期滿後又會收回已分配給客戶端的IP。若是客戶端須要繼續使用原有的IP就須要續約:get

  1. 當DHCP客戶端在租期到達1/2的時候,會以單播方式向DHCP服務器發送DHCP REQUEST請求報文,以其進行IP租約續期。
  2. 若是贊成請求,DHCP服務器向客戶端以單播方式返回DHCP ACK包給客戶端。不然會返回DHCP NAK報文拒絕租約。

若是上述過程失敗,DHCP客戶端仍然會在租期到達7/8時再次以廣播方式發送DHCP。

深刻參考: DHCP包格式

後記: 試圖用tcpdump -i wlan0 -w DHCP.cap 'udp and port 67 and port 68'去抓取DHCP過程當中的四個包(經過斷開wlan0的鏈接,再鏈接),結果抓來抓去只有兩個包(REQUEST和ACK)。看了一下客戶端的IP地址,一直沒有變過。 猜想:彷佛Linux的NetworkManager對於客戶端的網絡有記憶行爲,當網絡斷開以後,這個網絡的IP會被緩存,當再次鏈接到這個網絡以後,並不向DHCP服務器請求,而是直接發送續約請求。因此沒有DISCOVER包和OFFER包。

相關文章
相關標籤/搜索