随着IPv6技術的普及,DHCPv6 作為基礎技術是每一位IT人或多或少都需要了解的。本文将依托騰訊雲CVM來詳細剖析 DHCPv6 的工作原理,希望可以讓更多小夥伴掌握 DHCPv6 協定。什麼是 DHCPv6 協定?用戶端如何首次自動擷取一個 IPV6 位址?CVM重新開機又如何自動擷取到上次使用的 IPv6 位址?本文作者:騰訊雲售後架構師 李彬文。
一、DHCPv6簡介
DHCPv6 (Dynamic Host Configuration Protocol for IPv6)是一個用來配置設定 IPv6 位址、字首以及DNS等配置的網絡協定。
DHCPv6 是一種運作在用戶端和服務端之間的協定,與 IPv4 中的 DHCP 一樣,所有的協定封包都是基于 UDP 的(用戶端使用UDP 端口号546,服務端使用端口号547)。但是由于在 IPv6中 沒有廣播封包,是以 DHCPv6 使用多點傳播(預設所有DHCPv6伺服器都會加入并偵聽該多點傳播組:FF02::1:2)封包,用戶端也無需配置服務端的IPv6位址。
1. DHCPv6協定的優勢
相對其他配置設定IPV6位址的方式而言,DHCPv6具備以下優勢:
- 更好控制 IPv6 位址的配置設定,DHCPv6 方式不僅可以記錄為 IPv6 主機配置設定的位址,還可以為特定的 IPv6 主機配置設定特定的位址,以便于網絡管理。
- DHCPv6 支援為網絡裝置配置設定 IPv6 字首,便于全網絡的自動配置和網絡層次性管理。
- 除了為 IPv6 主機配置設定 IPv6 位址和字首外,還可以配置設定DNS伺服器 IPv6 位址等網絡配置參數。
2. DHCPv6封包格式
DHCPv6 屬于 OSI 七層協定棧的應用層,是以需要先封裝網絡層 IPv6 頭部以及傳輸層UDP頭部。
3. DHCPv6字段注釋
- msg-type:長度8比特,表示封包的類型,總共定義了13種消息類型。
- transaction-id:長度24比特,表示 DHCPv6 用戶端随機生成的互動ID(服務端發起的封包互動ID為0),用來辨別一次來回互動的 DHCPv6 封包。例如Solicit/Advertise封包為一次互動,Request/Reply封包為另外一次互動,兩者有不同的互動ID。
- options:根據消息類型不一樣長度可變,表示 DHCPv6 的可選字段。此字段包含了 DHCPv6 伺服器配置設定給 IPv6 主機的配置資訊,如用戶端辨別、伺服器辨別或有效生命周期等資訊。
4. DHCPv6定義的幾種常見消息類型
(1)Solicit,DHCPv6 用戶端使用Solicit封包來發現 DHCPv6 伺服器的位置。
(2)Advertise,DHCPv6 伺服器發送Advertise封包來對Solicit封包進行回應,通告用戶端能夠提供哪些 DHCPv6 服務。
(3)Request,DHCPv6 用戶端發送Request封包來向DHCPv6伺服器請求IPv6位址和其它配置資訊。
(4)Confirm,DHCPv6 用戶端向任意可達的 DHCPv6 伺服器發送Confirm封包檢查自己目前獲得的 IPv6 位址是否适用與它所連接配接的鍊路。
(5)Reply,DHCPv6伺服器在以下場合發送Reply封包:
- DHCPv6 伺服器發送攜帶了位址和配置資訊的Reply消息來回應從 DHCPv6 用戶端收到的Solicit、Request、Renew、Rebind封包。
- DHCPv6 伺服器發送攜帶配置資訊的Reply消息來回應收到的Information-Request封包。
- 用來回應 DHCPv6 用戶端發來的Confirm、Release、Decline封包。
(6)Decline,DHCPv6 用戶端向 DHCPv6 伺服器發送 Decline 封包,聲明 DHCPv6 伺服器配置設定的一個或多個位址在 DHCPv6 用戶端所在鍊路上已經被其他用戶端使用。
二、首次擷取IPV6位址解析
CVM首次接入騰訊雲 IPv6 網絡,通過 DHCPv6 自動擷取 IPv6 位址的互動封包如下所示:
1. 發現階段
用戶端CVM(雲伺服器)發送Solicit封包來發現 DHCPv6 伺服器,并請求DHCPv6 伺服器(騰訊雲虛拟元件)為其配置設定 IPv6 位址和網絡配置參數。
由于CVM不知道 DHCPv6 伺服器的 IPv6 位址,是以CVM用多點傳播位址:FF02::1:2向同一鍊路範圍内的所有DHCPv6伺服器發送Solicit封包。
Solicit封包中攜帶了用戶端的DUID、需要請求的非臨時位址、以及其他網絡配置參數等資訊。
2. 提供階段
DHCPv6 伺服器接收到Solicit封包後,選擇按照 IPv6 位址從小到大的順序采用循環查找方式,選擇最新找到的可供配置設定的 IPv6 位址,然後通過Advertise封包以單點傳播方式回應給CVM。
Advertise封包裡面攜帶了伺服器的DUID、用戶端的DUID、配置設定給用戶端的IPv6位址及租期等資訊。
3. 選擇階段
因為Solicit封包是多點傳播發送的,是以如果同一鍊路範圍記憶體在多個 DHCPv6 伺服器,則接收到Solicit封包的伺服器都會回應Advertise封包。
如果有多個 DHCPv6 伺服器向DHCPv6用戶端回應Advertise封包,則 DHCPv6 用戶端選擇伺服器優先級最高的Advertise封包(DHCPv6 伺服器可以在Advertise消息中包含Preference選項,以便控制用戶端對伺服器的選擇),然後用戶端以多點傳播方式向同一鍊路範圍内的所有 DHCPv6 伺服器發送Request封包,該封包中包含用戶端選擇的 DHCPv6 伺服器(高優先級)的DUID、用戶端的DUID、用戶端IPv6位址。
4. 确認階段
當 DHCPv6 伺服器收到Request封包後,對封包中攜帶的服務端DUID資訊進行判斷:
- 若封包中攜帶的服務端DUID不是本服務端的DUID,則對該Request封包不回應,同時将Request封包中請求的IPv6位址進行回收。
- 若封包中攜帶的服務端DUID是本服務端的DUID,則以單點傳播方式回應Reply封包,确認Request封包中請求的IPv6位址配置設定給用戶端使用。
5. 用戶端CVM處理階段
用戶端CVM收到Reply封包後會發送位址沖突探測封包(Neighbor Solicitation),檢查本鍊路範圍内是否有其他用戶端使用相同的IPv6位址,如果在指定時間内沒有收到回應,表示用戶端可以使用此位址。
注意事項:如果發的位址沖突探測封包(Neighbor Solicitation)收到了回應,說明有其他用戶端使用了此位址,CVM會以單點傳播方式向服務端發送Decline(聲明位址沖突)封包,并重新發送Solicit封包請求新的可用IPv6位址。服務端收到Decline封包後,會将封包中攜帶的IPv6位址列為沖突位址。
三、重新開機後擷取IPV6位址解析
CVM非首次接入騰訊雲IPv6網絡,通過 DHCPv6 自動擷取 IPv6 位址的互動封包如下所示:
第一步,當用戶端CVM(雲伺服器)非首次接入 IPv6 網絡時(比如重新開機、網卡禁用後再啟用等),CVM會通過多點傳播位址:FF02::1:2,發送Confirm封包确認該CVM之前的IPv6位址是否仍然可用。
第二步,DHCPv6 伺服器(騰訊雲虛拟元件)收到Confirm封包後,确認Confirm封包中所有的位址是否适用于該CVM。
若Confirm封包中所有的IPv6位址都通過了确認,伺服器回應确認成功的Reply封包(如果用戶端收到确認失敗的Reply封包,則發送Solicit封包,重新請求IPv6位址;)。
第三步,用戶端CVM收到确認成功的Reply封包後會發送位址沖突探測封包(Neighbor Solicitation),檢查本鍊路範圍内是否有其他用戶端使用相同的IPv6位址,如果在指定時間内沒有收到回應,表示該CVM可以使用此位址。
至此,用戶端通過DHCPv6協定首次和非首次自動擷取IPv6位址的原理就解釋清楚了,通過該文章也闡述了DHCPv6的6種常用類型封包的作用,希望小夥伴們多多嘗試,加深了解。
海量技術實踐經驗,盡在雲加社群!
https://cloud.tencent.com/developer