前文我們瞭解了STP的埠狀態、計時器以及埠狀態切換和網路拓撲變化相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15140672.html;今天我們來聊一下DHCP相關話題;
DHCP(Dynamic Host Configure Protocol,動態主機配置協議)是應用層協議,使用UDP封裝,服務端工作在UDP的67號埠,客戶端工作在68號埠;它是BOOTP(Bootstrap Protocol)協議發展而來;主要作用是動態分配TCP/IP資訊(ip地址,子網掩碼,閘道器,DNS等等),分配出去的資訊是由一個時間使用期限,這個期限我們叫租期;我們知道在大型網路環境中,會有大量的主機和裝置需要獲取ip地址等網路引數;如果採用手工配置,工作量大且容易出錯,導致ip地址衝突;使用DHCP來分配ip地址等網路引數,可以極大減少網路管理員的工作量,同時也使用者手動配置網路引數時導致的ip地址衝突等問題;
提示:主機A和主機B要動態獲取ip地址等網路引數,首先它會向dhcp伺服器傳送ip地址分配的請求,服務收到請求,就分配ip地址,然後對應主機就會收到對應的ip地址等網路引數;
DHCP系統組成
提示:DHCP Client (客戶端) ,需要動態獲取ip地址的主機;DHCP Server(伺服器)是能提供DHCP功能的伺服器或網路裝置;DHCP Relay (中繼),一般為路由器或三層交換機等網路裝置,中繼裝置的主要作用是arp代理和dhcp資訊轉發;
DHCP報文結構
先來看一個實驗,如下拓撲主機A和主機B分別使用DHCP動態獲取ip地址資訊,我們抓包看看對應資料包長什麼樣?
配置s1
sys sys s1 vlan batch 10 20 int eth0/0/1 p l a p d v 10 int eth0/0/2 p l a p d v 20 int eth0/0/3 p l t p t a v 10 20
配置s2
sys sys s2 vlan batch 10 20 dhcp en int g0/0/1 p l t p t a v 10 20 int vlanif 10 ip add 192.168.10.254 24 dhcp select interface int vlanif 20 ip add 192.168.20.254 24 dhcp select interface
在pc1上開啟dhcp,並在pc1上抓包
提示:可以看到在pc1開啟dhcp以後,對應在pc上就能抓到4個DHCP的包;從上面的抓包資訊可以看到,在pc1啟動dhcp客戶端時,首先它會傳送DHCP discover包,該包的員源ip是0.0.0.0(原因是pc1目前沒有ip地址)源埠是68,目標ip是255.255.255.255(全網廣播),目標埠是67;這種型別的DHCP包主要作用是尋找DHCP服務端;如果有DHCP服務端收到此類訊息,那麼DHCP服務端會向該客戶端傳送DHCP offer型別的包,該包主要作用就是給客戶端ip地址等網路引數資訊;隨後,客戶端收到服務端的offer以後,又會廣播傳送dchp request型別的包,該型別包的主要作用是告訴其他服務端(可能不止一個服務端)有服務端給我發offer,你們發的offer我就不要了;除此之外,也告訴發offer服務端,我就要使用這個ip地址等網路資訊;最後當服務端收到客戶端傳送的廣播dhcp request包以後,服務端傳送ACK,意思就是告訴客戶端,服務端已經知曉這個事情,你把地址拿去使用吧;
DHCP報文型別
DHCP工作流程
提示:首先客戶端傳送DHCP discover型別的包,作用就是尋找DHCP服務端;如果有服務端響應客戶端,此時服務端就會傳送DHCPoffer型別的包,就是告訴客戶端,我是DHCP服務端,我這裡有ip地址等等資訊;如果沒有服務端響應客戶端,則客戶端會一直髮送DHCP discover型別的包;當服務端響應客戶端併傳送DHCP offer 以後,對應客戶端收到服務端傳送的offer,此時客戶端會傳送DHCP request型別的包,其目的是告訴其他dhcp服務端,有服務端給我發offer,你們就不要再傳送offer給我了;其次就是告訴服務端,我要用這個ip地址等網路資訊;如果其他dhcp服務端收到此類訊息,一看報文裡的dhcp server identifier 不是自己的ip地址,此時該服務端就不會再回應客戶端;只有報文裡的dhcp server identifier 是自己ip地址的服務端會傳送ack,表示確認客戶端資訊;
DHCP租期更新
提示:DHCP動態獲取的IP 地址等網路資訊是有租期的,華為預設是1天;這個租期還剩下50%時,客戶端會想服務端請求續租;如果服務端收到,此時服務端就會恢復一個ack,表示同意續租;此後,該客戶端的租期就會向後延續對應租期的一半;
實驗:如下拓撲,我們把上述拓撲橋接在物理迴環網路卡上,然後把對應dhcp服務端租期修改為1分鐘,在雲上抓包,看看對應續租的過程
橋接cloud1到本地loop網路卡
把s1的eth0/0/4口加入到vlan 20裡
修改DHCP服務端的租期為1分鐘
提示:租期最小單位是分鐘,如果租期是day 0 hour 0 minute 0 表示無限期;
驗證:檢視loop網路卡的是否獲取到ip地址,看看租期是多少?
提示:可以看到對應物理loop網路卡獲取到對應的ip地址,並且租期也是一分鐘;
在雲上抓包
提示:可以看到在雲上抓包,可以抓到很多dhcp requset和ack的包;這些包就是客戶端向服務端申請續租的報文,每當租期還剩下租期的一半時,客戶端就會向服務端發起續租請求,只有服務端回覆確認ack,對應租期又會往後延期租期的一半;
驗證:再次檢視loop網路卡的租期情況
提示:可以看到經過一段時間以後,租期結束時間從14:26:11變成了14:31:12,這意味著客戶端續租了的;
DHCP重繫結
提示:如果在租期還剩下50%時,客戶端向服務端傳送續租請求,如果服務端沒有響應,此時對於客戶端來說,它的ip地址等網路資訊還是可以正常使用的;如果租期還剩下租期的1/8時,如果此時還是沒有服務端響應,此時客戶端就會申請重新繫結ip地址;重新繫結ip地址,客戶端又會傳送dhcp discover報文,和最開始的流程一樣;
IP地址釋放
提示:如果ip租約到期前都沒有服務端響應客戶端的續租請求,客戶端會停止使用此ip地址;如果DHCP客戶端不再使用分配的ip地址,也可以主動向DHCP服務端傳送DHCP RELEASE報文,告訴服務端釋放該ip地址;這裡注意一點主動釋放ip地址是客戶端告知服務端,讓服務端做好記錄對於ip地址已經釋放,可再分配給其他客戶端;服務端並不會傳送什麼報文給客戶端;
DHCP地址池(Pool)
什麼是地址池?所謂地址池就是所有能分配地址的集合;在DHCP中我們可以建立地址池,讓DHCP客戶端,在地址池中獲取任意ip地址進行使用;
提示:介面地址池的優先順序高於全域性地址池;預設介面地址池會把對應介面地址當作閘道器資訊傳送給客戶端;全域性地址池一般用於對應閘道器不是自己介面地址的場景,比如專用的DHCP伺服器;
DHCP配置命令
1、全域性開啟dhcp功能
[s2]dhcp en Info: The operation may take a few seconds. Please wait for a moment.done. [s2]
2、關聯介面和介面地址池
提示:DHCP必須在三層介面上關聯地址池;
3、配置介面地址池的DNS伺服器地址
提示:dns可以是多個;
4、配置介面地址池的租期,預設1天
提示:租期最小時長單位為秒;配置永不過期就是0天0小時0秒;
5、配置介面地址池的排除地址範圍
提示:如果要排除一個範圍的ip地址,必須前邊開始地址小於後面結束地址;該命令可以執行多次,如果排除單個ip地址,直接後面接ip地址即可;
6、建立全域性地址池
7、配置全域性地址池的可分配的網段地址
8、配置全域性地址池的閘道器地址
9、配置全域性地址池的DNS伺服器地址
10、配置全域性地址池下的租期,預設1天
11、配置全域性地址池下的排除地址範圍
12、關聯介面和全域性地址池
提示:對應三層介面必須要有一個同dhcp分配地址裡同網段的地址;否則對應三層介面起不來;
13、檢視地址池的屬性
提示:該命令用於檢視一個裝置上的所有地址池資訊,不區分介面地址池和全域性地址池;
14、檢視指定介面地址池資訊
檢視指定全域性地址池資訊
提示:不管是檢視介面地址池還是全域性地址池,後面都可以跟過濾條件,如下
提示:如果後面接一個ip地址,是用於查詢對應地址所屬地址池相關資訊;all表示顯示對應地址池所有ip地址分配情況;expired用於過濾過期的ip地址,used用於過濾已經使用的ip地址;conflict用於過濾衝突的ip地址;
15、在介面地址池下靜態繫結ip地址
提示:後面的mac地址必須是4位一組;這樣繫結以後,對應mac地址的裝置來拿ip,此時就會把對於ip地址分配出去況且沒有租期限制;
16、在全域性地址池下靜態繫結ip地址