IPv6

網際協議第6版是網際協議的最新版本，用作網際網路的協議。用它來取代IPv4主要是為了解決IPv4地址枯竭問題，同時它也在其他方面對於IPv4有許多改進。IPv6的設計目的是取代IPv4，然而長期以來IPv4在網際網路流量中仍佔據主要地位，IPv6的使用增長緩慢。在2022年4月，透過IPv6使用Google服務的使用者百分率首次超過40%。背景與目標.現今的網際網路發展蓬勃，截至2018年1月，全球上網人數已達40.21億，IPv4僅能提供約42.9億個IP位置。雖然目前的網路地址轉換及無類別域間路由等技術可延緩網路位置匱乏之現象，但為求解決根本問題，從1990年開始，網際網路工程工作小組開始規劃IPv4的下一代協定，除要解決即將遇到的IP位址短缺問題外，還要發展更多的擴充功能，為此IETF小組建立IPng，以讓後續工作順利進行。1994年，各IPng領域的代表們於多倫多舉辦的IETF會議中，正式提議IPv6發展計劃，該提議直到同年的11月17日才被認可，並於1996年8月10日成為IETF的草案標準，最終IPv6在1998年12月由網際網路工程工作小組以網際網路標準規範的方式正式公佈。IPv6的計劃是建立未來網際網路擴充的基礎，其目標是取代IPv4，雖然IPv6在1994年就已被IETF指定作為IPv4的下一代標準，由於早期的路由器、防火牆、企業的企業資源計劃系統及相關應用程式皆須改寫，所以在世界範圍內使用IPv6部署的公眾網與IPv4相比還非常的少，技術上仍以雙架構並存居多。預計在2025年以前IPv4仍會被支援，以便給新協議的修正留下足夠的時間。與IPv4比較.在Internet上，資料以分組的形式傳輸。IPv6定義了一種新的分組格式，目的是為了最小化路由器處理的訊息標頭。由於IPv4訊息和IPv6訊息標頭有很大不同，因此這兩種協議無法互操作。但是在大多數情況下，IPv6僅僅是對IPv4的一種保守擴充套件。除了嵌入了網際網路地址的那些應用協議以外，大多數傳輸層和應用層協議幾乎不怎麼需要修改就可以在IPv6上執行。無狀態地址自動配置.當連線到IPv6網路上時，IPv6主機可以使用鄰居發現協議對自身進行自動配置。當第一次連線到網路上時，主機發送一個鏈路本地路由器請求報文進行回應。在不適合使用IPv6無狀態地址自動配置的場景下，網路可以使用有狀態配置，或者使用靜態方法手動配置。IPv6編碼.IPv6具有比IPv4大得多的編碼地址空間。這是因為IPv6採用128位元的地址，而IPv4使用的是32位元。因此新增的地址空間支援2128可以取24=16個不同的值。網路地址轉換是目前減緩IPv4地址耗盡最有效的方式，而IPv6的地址消除了對它的依賴，被認為足夠在可以預測的未來使用。就以地球人口70億人計算，每人平均可分得約4.86×1028個IPv6位址。從IPv4到IPv6最顯著的變化就是網路地址的長度。RFC 2373和RFC 2374定義的IPv6地址有128位長；IPv6地址的表達形式一般採用32個十六進位制數。在很多場合，IPv6地址由兩個邏輯部分組成：一個64位的網路字首和一個64位的主機地址，主機地址通常根據物理地址自動生成，叫做EUI-64。IPv6格式.IPv6二進位制下為128位元長度，以16位元為一組，每組以冒號「:」隔開，可以分為8組，每組以4-{位}-十六進位制方式表示。例如：codice_1 是一個合法的IPv6位址。類似於IPv4的點分十進位制，同樣也存在點分十六進位制的寫法，將8組16位十六進位制地址的冒號去除後，每位以點號“.”分組，例如：codice_2則記為codice_3，其倒序寫法用於ip6.arpa子域名記錄IPv6地址與域名的對映。同時IPv6在某些條件下可以省略：另外，::ffff:1.2.3.4 格式叫做IPv4對映位址。IPv4位址可以很容易的轉化為IPv6格式。舉例來說，如果IPv4的一個位址為135.75.43.52，它可以被轉化為0000:0000:0000:0000:0000:FFFF:874B:2B34 或者::FFFF:874B:2B34。同時，還可以使用混合符號，則位址可以為::ffff:135.75.43.52。由於同一非全域性地址可能在同一範圍的多個區域中使用。作用域ID僅用於本地連結，使用百分號追加在地址後面。其內容特定於作業系統，例如Windows使用數字 fe80::2%3 ，Linux使用網絡卡名字 fe80::2%eth0 。 在URI中使用時，百分號需要進行編碼，例如 fe80::a%en1 應顯示為 http://[fe80::a%25en1] 。IPv6位址的分類.IPv6位址可分為三種：單播位址標示一個網路介面。協議會把送往位址的封包送往給其介面。IPv6的單播位址可以有一個代表特殊位址名字的範疇，如鏈路本地位址。單播地址包括可聚類的全球單播地址、鏈路本地地址等。任播像是Unicast的綜合。單點廣播在目的地間直接進行通訊；多點廣播存在於單一多個目的地進行通訊。而Anycast則在以上兩者之間，它像多點廣播的其中一個接收位址，當該接收位址收到封包並進行回應，且加入後續的傳輸。該接收列表的其他節點，會知道某個節點位址已經回應了，它們就不再加入後續的傳輸作業。以目前的應用為例，Anycast位址只能分配給中間裝置，而且不能作為傳送端的位址。多播地址也稱組播地址。多播位址也被指定到一群不同的介面，送到多播位址的封包會被傳送到所有的位址。多播位址由皆為一的位元組起始，亦即：它們的前置為FF00::/8。其第二個位元組的最後四個位元用以標明"範疇"。一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播位址中的最低112位元會組成多播群組識別碼，不過因為傳統方法是從MAC位址產生，故只有群組識別碼中的最低32位元有使用。定義過的群組識別碼有用於所有節點的多播位址0x1和用於所有路由器的0x2。另一個多播群組的位址為"solicited-node多播位址"，是由前置FF02::1:FF00:0/104和剩餘的群組識別碼來解譯連結層位址，因而不用幹擾到在區網內的所有節點。特殊位址.IANA維護官方的IPv6位址空間列表。全域的單播位址的分配可在各個區域網際網路註冊管理機構或 GRH DFP 頁面找到。IPv6中有些位址是有特殊含義的：IPv6封包.IPv6封包由兩個主要部分組成：頭部和負載。包頭是包的前320位元，並且包含有源和目的地址，協議版本，通訊類別。後面是負載。MTU至少1280位元組長，在常見的乙太網環境中為1500位元組。負載在標準模式下最大可為65535位元組，如果擴充套件報頭設定了"jumbo payload"選項，則長度值被置為0。IPv6曾有兩個有著細微差別的版本；在 RFC 1883 中定義的原始版本和 RFC 2460 中描述的現在提議的標準版本。兩者主要在通訊類別這個選項上有所不同，它的位數由4位變為了8位。其他的區別都是微不足道的。由於分片只在IPv6的主機中處理，而IPv6也要求實現“MTU路徑發現”來避免資料包需要被中間裝置分片，所以IPv4頭涉及分片的欄位從IPv6基本頭移出至專用的分片擴充套件報頭中。在IPv6中，可選項都被從標準頭部中移出並在協議欄位中指定，類似於IPv4的協議欄位功能。IPv6和域名系統.IPv6地址在域名系統中為執行正向解析表示為AAAA記錄下進行，在這裡地址空間為半位元組16進位制數字格式。這種模式在RFC 3596給與了定義。AAAA模式是IPv6結構設計時的兩種提議之一。另外一種正向解析為A6記錄。也有一些其他的創新像二進位制串標籤和DNAME記錄等。RFC 2874和它的一些引用中定義了這種模式。AAAA模式只是IPv6域名系統的簡單概括，A6模式使域名系統中檢查更全面，也因此更復雜：2002年8月的RFC 3363中對AAAA模式給予了有效的標準化。IPv6部署與應用.2004年7月時ICANN聲稱網際網路的根域名伺服器已經經過改進以同時支援IPv6和IPv4。缺點：工作：部署進度：網路層安全.網際網路安全協議原本為IPv6開發，但是在IPv4中已經大量部署。IPsec最初是IPv6協議的強制要求，但後來改為可選項。轉換機制.在IPv6完全取代IPv4前，需要一些轉換機制使得只支援IPv6的主機可以連絡IPv4服務，並且允許孤立的IPv6主機及網路可以藉由IPv4設施連絡IPv6網際網路。在IPv6主機和路由器與IPv4系統共存的時期時，RFC2893。包含：許多轉換機制使用隧道來把IPv6交通包封在IPv4網路中。這個解決方案並不完美，可能會增加延時以及引起路徑最大傳輸單元發現會需要軟體更新或硬體更新來支援IPv6。這意味著線纜網路運營商必須調整適應隧道直至主幹裝置支援內部雙堆疊。雙堆疊.雙堆疊是將IPv6視為一種IPv4的延伸，以共享程式碼的方式去實作網路堆疊，其可以同時支援IPv4和IPv6，如此是相對較為容易的。如此的實作稱為“雙堆疊”，並且，一個實作雙堆疊的主機稱為“雙堆疊主機”。這步驟描述於RFC 4213。目前大部分IPv6的實現使用雙堆疊。一些早期實驗性實作使用獨立的IPv4和IPv6堆疊。隧道.隧道是另一個用來連結IPv4與IPv6的機制。為了連通IPv6網際網路，一個孤立主機或網路需要使用現存IPv4的基礎設施來攜帶IPv6封包。這可由將IPv6封包裝入IPv4封包的隧道協議來完成，實際上就是將IPv4當成IPv6的連結層。IP協議號碼的41號用來標示將IPv6資料訊框直接裝入IPv4封包。IPv6亦能加入UDP封包，如為了跨過一些會阻擋協議41流量的路由器或NAT裝置。其它流行的封裝機制則有AYIYA和GRE。自動隧道.自動隧道指路由設施自動決定隧道端點的技術。RFC 3056建議使用6to4穿隧技術來自動隧道，其會使用41協議來封裝。 隧道端點是由遠端知名的IPv4任播位址所決定，並在本地端嵌入IPv4位址資訊到IPv6中。現今6to4是廣泛佈署的。Teredo是使用UDP封裝的隧道技術，據稱可跨越多個NAT裝置。Teredo並非廣泛用於佈署的，但一個實驗性版本的Teredo已安裝於Windows XP SP2 IPv6堆疊中。IPv6，包含6to4隧道和Teredo隧道，在Windows Vista中預設是啟動的。許多Unix系統只支援原生的6to4，但Teredo可由如Miredoo的第三方軟體來提供。ISATAP藉由將IPv4位址對應到IPv6的鏈路本地位址，從而將IPv4網路視為一種虛擬的IPv6區域連線。不像6to4和Teredo是"站點間"的隧道機制，ISATAP是一種"站點內"機制，意味著它是用來設計提供在一個組織內節點之間的IPv6連線性。組態隧道.在"組態隧道"中，如6in4隧道隧，隧道端點是要明確組態過的，可以是藉由管理員手動或作業系統的組態機制，或者藉由如tunnel broker等的自動服務。組態隧道通常比自動隧道更容易去除錯，故建議用於大型且良好管理的網路。組態隧道在IPv4隧道上，使用網際協議中號碼的41號。用於只支援IPv6主機的代理和轉譯.在-{zh-hans:區域網際網路註冊管理機構;zh-hant:區域網際網路註冊管理機構}-耗盡所有可使用的IPv4位址後，非常有可能使新加入網際網路的主機只具有IPv6連線能力。對這些須要向後相容以能存取IPv4資源的客戶端，須要佈署合適的轉換機制。一種轉換技術是使用雙堆疊的應用層代理，如網頁代理伺服器。一些對於應用程式無法得知但在其低層使用類NAT轉換技術也曾被提出。但因為一般應用層協議所要求的能力其應用太廣，其中大部分都被認定在實際上太不可靠，並且被認為應刪除。