DHCP和PXE是怎麼工作的

佟暉發表於2023-10-12

dhcp(Dynamic Host Configuration Protocol):配置一段共享IP地址,為新上線的機器分配IP地址,回收下線機器的IP地址。

正常情況下主機(DHCP client)和DHCP server互動透過四個資料包完成IP的配置,分為DHCP Discover、DHCP Offer、DHCP request、DHCP ACK四步:

如何為新機器分配IP

不完整的包是無法在網路上傳輸的

一、客戶端申請地址(DHCP Discover)

新的機器上線還沒有合法的IP地址時,會使用0.0.0.0255.255.255.255這個地址傳送廣播包,廣播包封裝了UDP,UDP封裝了BOOTP(Bootstrap Protocol)。這個包發出Boot request,意在告訴區域網中的主機,我還沒有IP地址,我的MAC地址是xx:xx:xx:xx:xx:xx,誰能給我一個IP地址?

物理層:包含網路卡資訊、使用了DHCP協議的UDP包等資訊
資料鏈路層:包含主機MAC地址,廣播MAC地址ff:ff:ff:ff:ff:ff等資訊
網路層:包含TTL、主機IP地址、廣播地址等資訊
傳輸層:udp的埠號等資訊
應用層:Boot request中包含當前主機IP地址、DNS伺服器地址(此時的主機一無所知,置為0.0.0.0),需要獲取的子網掩碼、閘道器、DNS等資訊

後續主機和DHCP傳輸的四個包都是一步一步對以上資訊的填補。

二、DHCPserver分配地址(DHCP Offer)

  1. 區域網中的主機收到網路包判斷如果不是發給自己的則丟棄,DHCP伺服器發現了dhcp型別的包,於是接收並解開分析,發現有一個新主機向自己申請IP地址,於是DHCP server會保留一個IP地址(期間不會分配給別人)。
  2. 新主機還沒有分配到IP地址,DHCP server仍然需要使用⁄廣播包的方式傳送,在資料鏈路層新增自己的MAC地址,設定廣播MAC地址。填充自己的IP地址到網路層,設定UDP埠資訊,在Boot reply中設定Boot request請求的內容,並附加租約時間
  3. 傳送廣播包

三、新主機選擇DHCP Offer(DHCP request)

為什麼叫選擇DHCP Offer?因為如果有多個DHCP server,他們都會傳送DHCP Offer廣播包,此時新主機(DHCP client)會收到多個包,通常會選擇最先到達的DHCP Offer。選擇好offer之後此時的客戶端仍然沒有IP地址,繼續傳送廣播包,稱為DHCP request。

  1. 設定MAC地址資訊,設定IP資訊(0.0.0.0和255.255.255.255),設定UDP資訊
  2. 設定Boot request接受的DHCP offer中的IP地址、DHCP server的IP地址、以及要下一次收到ACK的廣播或單播模式。
  3. 透過廣播包告訴所有DHCP server,我接受了那個DHCP server的Offer,請其他DHCP server撤銷提供的IP地址

四、最終確認(DHCP ACK)

DHCP server收到DHCP request後會使用廣播或單播的模式傳送一個ACK包作為最終確認,完成這一步新機器的IP地址就設定完成了。

  1. 組裝MAC頭,根據request要求用單播還是廣播(Bootp flags:BROADCAST設1為廣播,設0為單播),單播設定新機器的MAC地址,廣播則仍然是ff:ff:ff:ff:ff:ff,同理組裝IP頭,UDP頭
  2. 組裝應用層BOOTP頭,包含要分配給主機的IP地址,主機網路卡的MAC地址,以及子網掩碼、閘道器、DNS、租期、續約時間等。

DHCP租約更新

透過以上內容我們知道DHCP分配的IP地址有租約一說,租期到了就需要收回地址,如果主機IP在租期到期後還需要繼續使用,那麼就要主動向DHCP server以單播的形式傳送DHCP request來請求續租。

  1. 一般在租期過去1/2時傳送請求DHCP request請求。
  2. DHCP server收到請求後會傳送DHCP ACK,如果續約成功則返回新的租期給主機;如果DHCP server不允許主機繼續使用IP,則DHCP ACK應答會告訴主機。申請失敗後主機繼續使用該IP,直到7/8時主機再次傳送DHCP request請求,如果失敗則該地址被釋放。

HDCP與PXE

透過DHCP server和PXE server(Pre-boot Execution Environment)、TFTP server可以做到批次安裝作業系統。

主機啟動是透過BIOS讀取MBR(Master Boot Record)來啟動GRUB -> 透過GRUB載入核心、initramfs檔案 -> 再由核心啟動初始化作業系統。所以將PXE client放在BIOS裡面,BIOS將PXE client調入記憶體,透過PXE client與PXE server傳輸資料和執行指令可以完成作業系統的自動安裝

PXE安裝過程

  1. 配置DHCP的next-server指向PXE server的地址,再配置filename指向啟動檔案pxelinux.0
  2. 主機拿到IP地址的同時也會收到PXE server的IP地址和啟動檔案pxelinux.0路徑,主機的PXE client透過TFTP下載pxelinux.0並執行,拿到pxelinux.cfg,該配置檔案有核心、initramfs的路徑。
  3. PXE client讀取配置檔案後逐個請求,完成安裝後重啟並從硬碟啟動作業系統。

如果需要一些定製化的配置可以使用kickstart配置檔案。

學習自:
《趣談網路協議》劉超
《圖解TCP/IP》
《圖解HTTP》
《網路是怎樣連線的》

相關文章