Linux DHCP原理

来源:https://www.cnblogs.com/xiaoyafei/archive/2018/01/20/8321155.html
-Advertisement-
Play Games

DHCP作用 DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址、子網掩碼、網關以及DNS、(網路批量安裝)等tcp/ip信息,給用戶或者內部網路 ...


DHCP作用

  DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個區域網的網路協議,使用UDP協議工作, 主要有兩個用途:給內部網路或網路服務供應商自動分配IP地址、子網掩碼、網關以及DNS、(網路批量安裝)等tcp/ip信息,給用戶或者內部網路管理員作為對所有電腦作中央管理的方法。

DHCP原理

DHCP租約四部曲

A:客戶端進行IP請求

  當一個DHCP客戶機啟動時,會自動將自己的IP地址配置成0.0.0.0,由於使用0.0.0.0不能進行正常通信,所以客戶機就必須通過DHCP伺服器來獲取一個合法的地址。由於客戶機不知道DHCP伺服器的IP地址,所以它使用0.0.0.0的地址作為源地址,使用UDP68埠作為源埠,使用255.255.255.255作為目標地址,使用UDP67埠作為目的埠來廣播請求IP地址信息廣播信息中包含了DHCP客戶機的MAC地址和電腦名,以便使DHCP伺服器能確定是哪個客戶機發送的請求。

B:伺服器響應

 

  當DHCP伺服器接收到客戶機請求IP地址的信息時,它就在自己的IP地址池中查找是否有合法的IP地址提供給客戶機。如果有,DHCP伺服器就將此IP地址做上標記,加入到DHCPOFFER的消息中,然後DHCP伺服器就廣播一則包括下列信息的DHCPOFFER消息:DHCP客戶機的MAC地址;DHCP伺服器提供的合法IP地址;子網掩碼;預設網關(路由);租約的期限;DHCP伺服器的IP地址。因為DHCP客戶機還沒有IP地址,所以DHCP伺服器使用自己的IP地址作為源地址,使用UDP67埠作為源埠,使用255.255.255.255作為目標地址,使用UDP68埠作為目的埠來廣播DHCPOFFER信息。

C:客戶機選擇IP  

  DHCP客戶機從接收到的第一個DHCPOFFER消息中選擇IP地址,發出IP地址的DHCP伺服器將該地址保留,這樣該地址就不能提供給另一個DHCP客戶機。當客戶機從第一個DHCP伺服器接收DHCPOFFER並選擇IP地址後,DHCP租約的第三過程發生。客戶機將DHCPREQUEST消息廣播到所有的DHCP伺服器,表明它接受提供的內容。DHCPREQUEST消息包括為該客戶機提供IP配置的伺服器的服務標識符(IP地址)。DHCP伺服器查看伺服器標識符欄位,以確定它自己是否被選擇為指定的客戶機提供IP地址,如果那些DHCPOFFER被拒絕,則DHCP伺服器會取消提供並保留其IP地址以用於下一個IP租約請求。

  在客戶機選擇IP的過程中,雖然客戶機選擇了IP地址,但是還沒有配置IP地址,而在一個網路中可能有幾個DHCP伺服器,所以客戶機仍然使用0.0.0.0的地址作為源地址,使用UDP68埠作為源埠,使用255.255.255.255作為目標地址,使用UDP67埠作為目的埠來廣播DHCPREQUEST信息。

D:伺服器確認租約

 

  DHCP伺服器接收到DHCPREQUEST消息後,以DHCPACK消息的形式向客戶機廣播成功的確認,該消息包含有IP地址的有效租約和其他可能配置的信息。雖然伺服器確認了客戶機的租約請求,但是客戶機還沒有收到伺服器的DHCPACK消息,所以伺服器仍然使用自己的IP地址作為源地址,使用UDP67埠作為源埠,使用255.255.255.255作為目標地址,使用UDP68埠作為目的埠來廣播DHCPACK信息。當客戶機收到DHCPACK消息時,它就配置了IP地址,完成了TCP/IP的初始化。

 

伺服器確認租約:DHCPNACK(DHCPNAK)

 

  如果DHCPREQUEST不成功,例如客戶機試圖租約先前的IP地址,但該IP地址不再可用,或者因為客戶機移到其他子網,該IP無效時,DHCP伺服器將廣播否定確認消息DHCPNACK。當客戶機接收到不成功的確認時,它將重新開始DHCP租約過程。

DHCP續租

 

 

  DHCP客戶機會在租期過去50%的時候,直接向為其提供IP地址的DHCP伺服器發送DHCPREQUEST消息包。如果客戶機接收到該伺服器回應的DHCPACK消息包,客戶機就根據包中所提供的新的租期以及其它已經更新的TCP/IP參數,更新自己的配置,IP租用更新完成。如果沒有收到該伺服器的回覆,則客戶機繼續使用現有的IP地址,因為當前租期還有50%。

  如果在租期過去50%的時候沒有更新,則DHCP客戶機將在租期過去75%的時候再次向為其提供IP地址的DHCP伺服器聯繫。如果還不成功,到租約的100%時候,DHCP客戶機必須放棄這個IP地址,重新申請。如果此時無DHCP伺服器可用,DHCP客戶機會使用169.254.0.0/16中隨機的一個地址,並且每隔5分鐘再進行嘗試。

 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這篇文章介紹了 NEST 中是如何實現 Elasticsearch 中的時間段的 ...
  • RGB顏色感測器。感測器晶元不知道是TCS230,或是TCS3200。二者pinout及電氣性能一樣。左邊的模塊有8個引腳,LED常亮。S0, S1 預設上拉為高電平,/OE下拉低電平。S2, S3, OUT 三個引腳供單片機介面。如下: 照片中右邊的模塊有10個引腳,原理與8pin相同,只是多了一 ...
  • centos install vsftpd with SSL support ...
  • 是一款跨windows/linux/MAC OS平臺的文件同步工具,不僅支持本地對本地同步,也支持通過SSH、RSH和Socket等網路協議進行同步。更棒的是, 支持雙向同步操作,你既可以從A同步到B,也可以從B同步到A,這些都不需要額外的設定。 是一個 Linux 內核特性,它監控文件系統,並且及 ...
  • CM3 的堆棧分為兩個:主堆棧和進程堆棧。 那麼,這兩個棧分別在什麼情況下使用呢? 這時,我們看一下CM3的控制寄存器(CONTROL):控制寄存器用於定義特權級別,還用於選擇當前使用哪個堆棧指針。 CONTROL[1] 在 Cortex‐M3 的 handler 模式中, CONTROL[1]總是 ...
  • 超聲測距模塊 HC-SR04P。工作電壓3-5V,有效距離2-400cm,解析度1mm。註意型號末尾的“P”:有另一個外觀、介面、工作方式一樣的型號 HC-SR04,但工作電壓為5V。我這個模塊 PCB正面印刷的是HC-SR04,反面印刷 HC-SR04P: 有4個引腳,VCC/GND供電,TRIG ...
  • 1、關閉iptables和selinux 2、安裝yum源 3、安裝LAMP 3.1、安裝MySQL 3.2、安裝apache 3.3、安裝PHP 4、安裝zabbix 5、修改配置文件 6、登陸zabbix,賬號Admin,密碼zabbix ...
  • 一般庫的標準名稱是libxxx.so或者libxxx.a, 如果沒有, 也可以搞個linkname出來, 那就可以直接用 "-lxxx" 來鏈接了, 但要是你想直接用realname, 就不能直接這麼用了, 但也很簡單, 用 "-l:" 後面接庫名, 至於什麼是realname, linkname, ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...