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