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.0
向255.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)
- 區域網中的主機收到網路包判斷如果不是發給自己的則丟棄,DHCP伺服器發現了dhcp型別的包,於是接收並解開分析,發現有一個新主機向自己申請IP地址,於是DHCP server會保留一個IP地址(期間不會分配給別人)。
- 新主機還沒有分配到IP地址,DHCP server仍然需要使用⁄廣播包的方式傳送,在資料鏈路層新增自己的MAC地址,設定廣播MAC地址。填充自己的IP地址到網路層,設定UDP埠資訊,在Boot reply中設定Boot request請求的內容,並附加租約時間。
- 傳送廣播包
三、新主機選擇DHCP Offer(DHCP request)
為什麼叫選擇DHCP Offer?因為如果有多個DHCP server,他們都會傳送DHCP Offer廣播包,此時新主機(DHCP client)會收到多個包,通常會選擇最先到達的DHCP Offer。選擇好offer之後此時的客戶端仍然沒有IP地址,繼續傳送廣播包,稱為DHCP request。
- 設定MAC地址資訊,設定IP資訊(0.0.0.0和255.255.255.255),設定UDP資訊
- 設定Boot request接受的DHCP offer中的IP地址、DHCP server的IP地址、以及要下一次收到ACK的廣播或單播模式。
- 透過廣播包告訴所有DHCP server,我接受了那個DHCP server的Offer,請其他DHCP server撤銷提供的IP地址
四、最終確認(DHCP ACK)
DHCP server收到DHCP request後會使用廣播或單播的模式傳送一個ACK包作為最終確認,完成這一步新機器的IP地址就設定完成了。
- 組裝MAC頭,根據request要求用單播還是廣播(Bootp flags:BROADCAST設1為廣播,設0為單播),單播設定新機器的MAC地址,廣播則仍然是
ff:ff:ff:ff:ff:ff
,同理組裝IP頭,UDP頭 - 組裝應用層BOOTP頭,包含要分配給主機的IP地址,主機網路卡的MAC地址,以及子網掩碼、閘道器、DNS、租期、續約時間等。
DHCP租約更新
透過以上內容我們知道DHCP分配的IP地址有租約一說,租期到了就需要收回地址,如果主機IP在租期到期後還需要繼續使用,那麼就要主動向DHCP server以單播的形式傳送DHCP request來請求續租。
- 一般在租期過去1/2時傳送請求DHCP request請求。
- 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安裝過程
- 配置DHCP的
next-server
指向PXE server的地址,再配置filename
指向啟動檔案pxelinux.0 - 主機拿到IP地址的同時也會收到PXE server的IP地址和啟動檔案pxelinux.0路徑,主機的PXE client透過TFTP下載pxelinux.0並執行,拿到pxelinux.cfg,該配置檔案有核心、initramfs的路徑。
- PXE client讀取配置檔案後逐個請求,完成安裝後重啟並從硬碟啟動作業系統。
如果需要一些定製化的配置可以使用kickstart配置檔案。
學習自:
《趣談網路協議》劉超
《圖解TCP/IP》
《圖解HTTP》
《網路是怎樣連線的》