DHCP基礎知識彙總以及DHCP Snooping的簡單介紹

DHCP基礎知識彙總

主要是關於DHCP報文類型、報文結構、同網段通信原理以及幀中繼的基礎內容

DHCP報文種類

DHCP有八種報文種類,其中常見的是前7種報文,比較重要的是前4種報文,如下:

  1. DHCP DISCAVER報文:DHCP客戶端在本地網絡以廣播的形式發送discover請求報文(源IP:0.0.0.0 目的IP:255.255.255.255),用於發現網絡中的DHCP服務器;
  2. DHCP OFFER報文:DHCP服務器收到discover請求報文後,會查找地址池裏可用IP地址,並將租期、子網掩碼、網關、DNS等信息一同封裝在offer請求報文(源IP:DHCP服務器 目的IP:255.255.255.255)以廣播的方式發送出去並且在服務器上添加租約記錄;
  3. DHCP REQUEST報文:客戶端用於請求收到offer報文裏的IP地址所發送的request請求報文(源IP:0.0.0.0 目的IP:255.255.255.255);在租期時間只剩1/2時,也會發送該報文用於請求延長租期,如果DHCP沒有回覆ACK應答報文,就會在租期時間只剩7/8時,也會再次發送該報文用於請求延長租期;
  4. DHCP ACK報文:服務器收到客戶端的request報文,請求的IP地址及參數無誤就會發送ACK應答報文(源IP:DHCP服務器 目的IP:255.255.255.255)同意客戶端的請求;根據該報文的用戶Mac地址查找是否有相應的租約記錄,如果有就發送ACK報文同意續租(收到續租時發送request報文);
  5. DHCP NAK報文:如果服務器收到的request報文中請求的IP地址及參數有誤或沒有相應的租約記錄就會發送NAT應答報文,通知客戶端無法分配IP地址或者續約;
  6. DHCP RELEASE報文:客戶端主動釋放IP地址時就會發送該報文,用於告知服務器不再使用該IP地址,服務器就能快速收回地址;
  7. DHCP DELINE報文:客戶端獲得IP地址後,發送免費ARP發現服務器分配的IP地址已經被使用或者由於某種原因使得該IP不能正常使用,就會發送該報文通告DHCP服務器地址不可用,希望獲取新的IP地址;
  8. DHCP INFORM報文:客戶端有IP地址但沒有其他參數就會向DHCP發送inform報文請求獲取其他參數(很少見);

注:在客戶端獲取IP地址過程中,所有報文都是採用廣播形式發送(同網段);如果有DHCP中繼器,那麼中繼器與客戶端發送的報文都是廣播形式,中繼器與DHCP服務器之間發送的報文都爲單播形式;

報文結構分析

DHCP報文結構

報文字段 說明
OP 指定DHCP報文的類型,請求報文置爲1,應答報文置爲2(請求報文包含:discover報文,request報文,decline報文,release報文,inform報文;應答報文包括:offer報文,ack報文,nak報文)
Hype 指定客戶端MAC地址類型,該字段置爲1表示最常見的以太網類型
Hlen 指定客戶端MAC地址的長度
Hops 指定DHCP經過DHCP中繼器的數量,請求報文經過一個DHCP中繼器該字段就會增加1,沒有經過置爲0
Xid 在客戶端發送discover報文時隨機產生的標識符,用於標識IP地址請求過程,整個IP地址的請求過程使用的都是一樣的,簡單來說,整個IP地址請求的過程都使用discover報文產生的XID值,便於區分不同客戶端的IP地址請求過程(一個DHCP服務器有多個客戶端,便於區分不同客戶端的IP地址請求過程)
Secs 指客戶端獲取到IP地址後已使用的時間或者續約成功後IP地址已使用時間(定時器,確定IP地址租期是否過期)單位爲秒,沒有獲取IP地址之前置爲0
Flags 標識應答報文是採用單播還是廣播發送,置爲0是單播發送,置爲1是廣播發送(只使用第一位,其餘位未使用)
Ciaddr DHCP客戶端的IP地址;在沒有獲取到IP地址之前該字段都置爲0.0.0.0
Yiaddr DHCP服務器分配給客戶端的IP地址,除offer和ACK報文,其他報文該字段爲0.0.0.0(只有應答報文才有該字段)
Siaddr DHCP服務器的IP地址,除offer和ACK報文,其他報文該字段爲0.0.0.0(只有應答報文才有該字段)
Giaddr DHCP客戶端發送的報文經過的第一個DHCP中繼器的IP地址,沒有經過中繼器就置爲0.0.0.0
Chaddr 記錄DHCP客戶端的MAC地址,每個報文中都有
Sname 記錄爲DHCP客戶端分配IP地址的DHCP服務器名稱(DNS域名格式),除了offer和ACK報文(應答報文),其餘報文均爲空
File 記錄DHCP服務器爲DHCP客戶端啓動的配置文件以及文件路徑信息;僅在offer報文中存在,其餘報文爲空
Options 可選字段,長度可變,最多爲312字節;該字段包含了報文類型、有效租約時間、網關、子網掩碼、DNS服務器、域名稱、續約時間等

Options字段可以包含的內容(僅供瞭解),如下

Options代碼號 長度/字節 說明
1 4 子網掩碼
3 長度可變,必須是4字節的倍數 默認網關(可以是路由器IP地址列表)
6 長度可變,必須是4字節的倍數 DNS服務器地址(可以是DHS服務器地址列表)
15 長度可變 域名稱(注DNS服務器名稱)
44 長度可變,必須是4字節的倍數 WINS服務器(可以是WINS服務器地址列表)
51 4 有效租約時間,單位秒
53 1 報文類型,數值從1-8依次表示的報文爲:Discover報文、Offer報文、Request報文、Decline報文、ACK報文、NAK報文、Release報文和Inform報文
58 4 續約時間,單位秒

DHCP同網段的通信原理

客戶端在請求獲取IP的過程中,以廣播的形式發送DHCP Discover請求報文(OP置爲1,Ciaddr置爲0.0.0.0;Yiaddr置爲0.0.0.0;Siaddr置爲0.0.0.0;Chaddr置爲客戶端的MAC地址;Options字段爲基礎信息)用於發現本地網絡的DHCP服務器

當DHCP服務器收到discover報文後,會以廣播的形式回覆DHCP Offer應答報文(OP置爲2;Ciaddr置爲0.0.0.0;Yiaddr置爲DHCP可分配的IP地址;Siaddr置爲DHCP服務器IP;Chaddr置爲客戶端的MAC地址;Sname置爲DHCP服務器的名稱;Options字段裏含有相應的子網掩碼、默認網關、DNS服務器IP、有效租約期、服務器IP地址)用於通告客戶端,DHCP服務器可以分配的一個IP地址以及相應相應的參數

客戶端只會接收第一個收到的Offer報文,後續的Offer報文(其他DHCP服務器)丟棄,收到discover報文之後,客戶端會以廣播的形式發送DHCP Request請求報文(OP置爲1;Ciaddr置爲0.0.0.0;Yiaddr置爲0.0.0.0;Siaddr置爲0.0.0.0;Sname置爲空;Options字段包含服務器主機名、請求的IP地址、服務器的IP地址等)用於告訴服務器,客戶端需要申請的IP地址

服務器收到Request報文,如果請求的IP地址以及參數無誤並同意分配,就會以廣播的形式發送DHCP ACK應答報文(OP置爲2;Ciaddr置爲0.0.0.0;Yiaddr置爲被分配的IP;Siaadr置爲服務器的IP地址;Sname置爲服務器的名稱;Options字段包含子網掩碼、默認網關、DNS服務器IP地址、有效租約期等)用於通知客戶端,服務器同意該IP地址後的申請;如果服務器不同意IP地址的申請,會以廣播形式發送NAK應答報文(OP置爲2;Ciaddr置爲0.0.0.0;Yiaddr置爲被請求的IP地址;Siaddr置爲服務器IP地址;Options字段包含相應參數)

客戶端收到ACK報文,就會使用該IP地址,在使用之前會以廣播形式發送免費ARP(源MAC:客戶端的Mac、目的Mac:廣播Mac;源IP:請求的IP地址、目的IP:請求的IP地址)[源/目IP的IP地址是相同的]用於探測本地網絡中該IP地址是否被使用,如果有設備回覆,就會發送DHCP Decline請求報文(OP置爲1;Ciaddr置爲0.0.0.0;Yiaddr置爲0.0.0.0;Siaddr置爲0.0.0.0;Options字段包含服務器IP、服務器名稱、請求的IP地址等),請求服務器重新分配IP地址;如果在規定時間裏沒有收到回覆,客戶端使用該IP地址;

如果客戶端不再使用該IP地址,就會以單播形式發送DHCP Release請求報文(OP置爲1;Ciaddr置爲0.0.0.0;Yiaddr置爲0.0.0.0;Siaddr置爲0.0.0.0;Options字段包含服務器IP、服務器名稱、請求的IP地址等)用於客戶端釋放被請求的IP地址;服務器收到Release報文,會以廣播形式發送ACK應答報文;

當客戶端IP地址的租期期限只剩1/2時,就會以單播形式發送Request請求報文通告服務器自己想重新續約,如果服務器不同意續約,就會以單播形式發送NAK應答報文,告訴客戶端不同意續約,如果同意就以單播形式發送ACK應答報文;當客戶端IP地址的租期期限到了7/8時,會再次發送Request請求報文,與上述相同

上述過程,如下圖所示:

客戶端服務器廣播發送Discover報文廣播響應Offer報文廣播發送Request報文廣播響應ACK報文或NAK報文客戶端服務器

服務器IP地址分配順序

  • 服務器的數據庫與客戶端綁定的IP地址
  • 客戶端以前使用過的IP地址
  • 在DHCP地址池裏按照順序查找,最先找到的IP地址
  • 如果在地址池中未找到可分配的IP地址,則依次查找查過租期、發生地址衝突的IP地址,仍沒找到可用IP地址就報錯

DHCP中繼器的介紹和注意點

Option82是DHCP報文中的中繼代理信息選項,該選項記錄了客戶端的物理位置信息;該選項最多支持255個子選項,目前設備主要支持的是sub-option1(Ciruit ID,電路ID子選項)、sub-option2(Remote ID,遠端ID子選項)

Sub-option1的內容用於接收DHCP客戶端請求報文的端口所屬的VLAN編號(對應“VLAN ID”字段)以及端口索引(取值爲端口的物理編號減一,對應“Port Index”字段)
Sub-option1字段信息
Sub-option2的內容用於接收客戶端請求報文的DHCP中繼器的MAC地址(對應“MAC”字段)
Sub-option1字段信息
跨網段和同網段的DHCP獲取IP地址過程基本相同,只是多了DHCP中繼器,報文的Options字段裏會添加一個Option82字段;

當DHCP中繼器收到客戶端發送的請求報文後,會檢測該報文是否含有Option82字段,如果含有該字段,DHCP中繼器會根據預先配置的策略對報文進行處理(丟棄或保持原有Option82或使用DHCP中繼器自身的Option82代替),同時根據Sub-option1的VLAN ID和Port Index字段,找到爲對應網段分配地址的服務器,將報文中的Giaddr字段置爲DHCP中繼器的IP地址;

如果不含有Option82字段,就會將DHCP中繼器自身的Option82填充進報文,以單播形式發送給DHCP服務器;

DHCP中繼收到服務器發送的應答報文就會剝離Option82字段,以廣播形式轉發出去。

跨網段通信,如下圖所示:

客戶端DHCP中繼器服務器廣播發送Discover報文單播發送Discover報文單播響應Offer報文廣播發送Offerr報文廣播發送Request報文單播發送Request報文廣播響應ACK報文或NAK報文廣播發送ACK報文或NAK報文客戶端DHCP中繼器服務器

DHCP Snooping介紹

DHCP Snooping是一種DHCP安全技術,能夠有效防止網絡中仿冒DHCP服務器的攻擊,保證客戶端從合法的服務器獲取IP地址,而且能夠記錄DHCP客戶端IP地址與MAC地址等參數的對應關係而生成綁定表,同時還可以防範各種基於DHCP服務器攻擊。

信任功能:信任端口(正常轉發DHCP應答報文)、非信任端口(丟棄接收的DHCP應答報文,offer報文、ACK報文、NAK報文);

基本監聽功能:通過監聽DHCP的請求和應答報文,生成DHCP Snooping綁定表,綁定表項包括,客戶端的MAC地址、IP地址、端口號以及端口所屬的VLAN號等

注:DHCP Snooping綁定表根據IP地址的DHCP租用期進行老化,或根據用戶釋放IP地址所發送的release報文自動刪除對應項;DHCP Snooping一般在接入網絡的二層設備上或中繼設備上開啓

DHCP Snooping的應用場景

  • 防止DHCP服務器仿冒攻擊:開啓DHCP Snooping信任端口功能。對於真實的DHCP服務端口方向開啓信任端口,其他開啓非信任端口;
  • 防止DHCP報文泛洪攻擊(通過改變CHADDR字段發送大量的Request報文):在開啓DHCP Snooping功能的同時,開啓對DHCP報文上送DHCP報文處理單元的速率進行檢測的功能,超過速率範圍的報文就丟棄(設置設備或者接口允許的最大接入用戶數,超過該用戶數就不允許申請IP地址);
  • 通過支持的option82實現對客戶端的控制:根據option82的兩個子項獲取客戶端的詳細地理信息,根據客戶端精確物理詳細信息上已配置的分配IP策略或安全策略爲用戶分配合適的IP地址和其他配置信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章