奔涌的IPv6背后,DHCPv6協(xié)議你了解多少?
隨著IPv6技術(shù)的普及,DHCPv6 作為基礎(chǔ)技術(shù)是每一位IT人或多或少都需要了解的。本文將依托騰訊云CVM來詳細剖析 DHCPv6 的工作原理,希望可以讓更多小伙伴掌握 DHCPv6 協(xié)議。什么是 DHCPv6 協(xié)議?客戶端如何首次自動獲取一個 IPV6 地址?CVM重啟又如何自動獲取到上次使用的 IPv6 地址?
一、DHCPv6簡介
DHCPv6 (Dynamic Host Configuration Protocol for IPv6)是一個用來分配 IPv6 地址、前綴以及DNS等配置的網(wǎng)絡(luò)協(xié)議。
DHCPv6 是一種運行在客戶端和服務(wù)端之間的協(xié)議,與 IPv4 中的 DHCP 一樣,所有的協(xié)議報文都是基于 UDP 的(客戶端使用UDP 端口號546,服務(wù)端使用端口號547)。但是由于在 IPv6中 沒有廣播報文,因此 DHCPv6 使用組播(默認所有DHCPv6服務(wù)器都會加入并偵聽該組播組:FF02::1:2)報文,客戶端也無需配置服務(wù)端的IPv6地址。
1. DHCPv6協(xié)議的優(yōu)勢
相對其他分配IPV6地址的方式而言,DHCPv6具備以下優(yōu)勢:
· 更好控制 IPv6 地址的分配,DHCPv6 方式不僅可以記錄為 IPv6 主機分配的地址,還可以為特定的 IPv6 主機分配特定的地址,以便于網(wǎng)絡(luò)管理。
· DHCPv6 支持為網(wǎng)絡(luò)設(shè)備分配 IPv6 前綴,便于全網(wǎng)絡(luò)的自動配置和網(wǎng)絡(luò)層次性管理。
· 除了為 IPv6 主機分配 IPv6 地址和前綴外,還可以分配DNS服務(wù)器 IPv6 地址等網(wǎng)絡(luò)配置參數(shù)。
2. DHCPv6報文格式
DHCPv6 屬于 OSI 七層協(xié)議棧的應(yīng)用層,所以需要先封裝網(wǎng)絡(luò)層 IPv6 頭部以及傳輸層UDP頭部。
3. DHCPv6字段注釋
· msg-type:長度8比特,表示報文的類型,總共定義了13種消息類型。
· transaction-id:長度24比特,表示 DHCPv6 客戶端隨機生成的交互ID(服務(wù)端發(fā)起的報文交互ID為0),用來標識一次來回交互的 DHCPv6 報文。例如Solicit/Advertise報文為一次交互,Request/Reply報文為另外一次交互,兩者有不同的交互ID。
· options:根據(jù)消息類型不一樣長度可變,表示 DHCPv6 的可選字段。此字段包含了 DHCPv6 服務(wù)器分配給 IPv6 主機的配置信息,如客戶端標識、服務(wù)器標識或有效生命周期等信息。
4. DHCPv6定義的幾種常見消息類型
(1)Solicit,DHCPv6 客戶端使用Solicit報文來發(fā)現(xiàn) DHCPv6 服務(wù)器的位置。
(2)Advertise,DHCPv6 服務(wù)器發(fā)送Advertise報文來對Solicit報文進行回應(yīng),通告客戶端能夠提供哪些 DHCPv6 服務(wù)。
(3)Request,DHCPv6 客戶端發(fā)送Request報文來向DHCPv6服務(wù)器請求IPv6地址和其它配置信息。
(4)Confirm,DHCPv6 客戶端向任意可達的 DHCPv6 服務(wù)器發(fā)送Confirm報文檢查自己目前獲得的 IPv6 地址是否適用與它所連接的鏈路。
(5)Reply,DHCPv6服務(wù)器在以下場合發(fā)送Reply報文:
· DHCPv6 服務(wù)器發(fā)送攜帶了地址和配置信息的Reply消息來回應(yīng)從 DHCPv6 客戶端收到的Solicit、Request、Renew、Rebind報文。
· DHCPv6 服務(wù)器發(fā)送攜帶配置信息的Reply消息來回應(yīng)收到的Information-Request報文。
· 用來回應(yīng) DHCPv6 客戶端發(fā)來的Confirm、Release、Decline報文。
(6)Decline,DHCPv6 客戶端向 DHCPv6 服務(wù)器發(fā)送 Decline 報文,聲明 DHCPv6 服務(wù)器分配的一個或多個地址在 DHCPv6 客戶端所在鏈路上已經(jīng)被其他客戶端使用。
二、首次獲取IPV6地址解析
CVM首次接入騰訊云 IPv6 網(wǎng)絡(luò),通過 DHCPv6 自動獲取 IPv6 地址的交互報文如下所示:
1. 發(fā)現(xiàn)階段
客戶端CVM(云服務(wù)器)發(fā)送Solicit報文來發(fā)現(xiàn) DHCPv6 服務(wù)器,并請求DHCPv6 服務(wù)器(騰訊云虛擬組件)為其分配 IPv6 地址和網(wǎng)絡(luò)配置參數(shù)。
由于CVM不知道 DHCPv6 服務(wù)器的 IPv6 地址,所以CVM用組播地址:FF02::1:2向同一鏈路范圍內(nèi)的所有DHCPv6服務(wù)器發(fā)送Solicit報文。
Solicit報文中攜帶了客戶端的DUID、需要請求的非臨時地址、以及其他網(wǎng)絡(luò)配置參數(shù)等信息。
2. 提供階段
DHCPv6 服務(wù)器接收到Solicit報文后,選擇按照 IPv6 地址從小到大的順序采用循環(huán)查找方式,選擇最新找到的可供分配的 IPv6 地址,然后通過Advertise報文以單播方式回應(yīng)給CVM。
Advertise報文里面攜帶了服務(wù)器的DUID、客戶端的DUID、分配給客戶端的IPv6地址及租期等信息。
3. 選擇階段
因為Solicit報文是組播發(fā)送的,所以如果同一鏈路范圍內(nèi)存在多個 DHCPv6 服務(wù)器,則接收到Solicit報文的服務(wù)器都會回應(yīng)Advertise報文。
如果有多個 DHCPv6 服務(wù)器向DHCPv6客戶端回應(yīng)Advertise報文,則 DHCPv6 客戶端選擇服務(wù)器優(yōu)先級最高的Advertise報文(DHCPv6 服務(wù)器可以在Advertise消息中包含Preference選項,以便控制客戶端對服務(wù)器的選擇),然后客戶端以組播方式向同一鏈路范圍內(nèi)的所有 DHCPv6 服務(wù)器發(fā)送Request報文,該報文中包含客戶端選擇的 DHCPv6 服務(wù)器(高優(yōu)先級)的DUID、客戶端的DUID、客戶端IPv6地址。
4. 確認階段
當(dāng) DHCPv6 服務(wù)器收到Request報文后,對報文中攜帶的服務(wù)端DUID信息進行判斷:
· 若報文中攜帶的服務(wù)端DUID不是本服務(wù)端的DUID,則對該Request報文不回應(yīng),同時將Request報文中請求的IPv6地址進行回收。
· 若報文中攜帶的服務(wù)端DUID是本服務(wù)端的DUID,則以單播方式回應(yīng)Reply報文,確認Request報文中請求的IPv6地址分配給客戶端使用。
5. 客戶端CVM處理階段
客戶端CVM收到Reply報文后會發(fā)送地址沖突探測報文(Neighbor Solicitation),檢查本鏈路范圍內(nèi)是否有其他客戶端使用相同的IPv6地址,如果在指定時間內(nèi)沒有收到回應(yīng),表示客戶端可以使用此地址。
注意事項:如果發(fā)的地址沖突探測報文(Neighbor Solicitation)收到了回應(yīng),說明有其他客戶端使用了此地址,CVM會以單播方式向服務(wù)端發(fā)送Decline(聲明地址沖突)報文,并重新發(fā)送Solicit報文請求新的可用IPv6地址。服務(wù)端收到Decline報文后,會將報文中攜帶的IPv6地址列為沖突地址。
三、重啟后獲取IPV6地址解析
CVM非首次接入騰訊云IPv6網(wǎng)絡(luò),通過 DHCPv6 自動獲取 IPv6 地址的交互報文如下所示:
第一步,當(dāng)客戶端CVM(云服務(wù)器)非首次接入 IPv6 網(wǎng)絡(luò)時(比如重啟、網(wǎng)卡禁用后再啟用等),CVM會通過組播地址:FF02::1:2,發(fā)送Confirm報文確認該CVM之前的IPv6地址是否仍然可用。
第二步,DHCPv6 服務(wù)器(騰訊云虛擬組件)收到Confirm報文后,確認Confirm報文中所有的地址是否適用于該CVM。
若Confirm報文中所有的IPv6地址都通過了確認,服務(wù)器回應(yīng)確認成功的Reply報文(如果客戶端收到確認失敗的Reply報文,則發(fā)送Solicit報文,重新請求IPv6地址;)。
第三步,客戶端CVM收到確認成功的Reply報文后會發(fā)送地址沖突探測報文(Neighbor Solicitation),檢查本鏈路范圍內(nèi)是否有其他客戶端使用相同的IPv6地址,如果在指定時間內(nèi)沒有收到回應(yīng),表示該CVM可以使用此地址。
至此,客戶端通過DHCPv6協(xié)議首次和非首次自動獲取IPv6地址的原理就解釋清楚了,通過該文章也闡述了DHCPv6的6種常用類型報文的作用,希望小伙伴們多多嘗試,加深理解。