IPv6系列-初學者的10個常見困擾

IPv6系列-初學者的10個常見困擾

本文是《IPv6系列》文章的第二篇《常見困擾》,緊接《入門指南》,用於解答IPv6的10個常見困擾。php

小慢哥的原創文章,歡迎轉載mysql


目錄

▪ 本文原因
▪ 困擾1. IPv4和IPv6只有地址格式不一樣嗎
▪ 困擾2. IPv4到IPv6對應用程序是透明無感知的嗎
▪ 困擾3. 提供WEB服務,須要每臺服務器都配置IPv6地址嗎
▪ 困擾4. IPv4和IPv6要配在同一張網卡上嗎
▪ 困擾5. 個人網卡有fe80開頭的地址,能夠用來上公網嗎
▪ 困擾6. IPv6地址如何配置
▪ 困擾7. 沒有了ARP,如何解析MAC地址
▪ 困擾8. IPv6使用多播替代廣播,須要作哪些改造
▪ 困擾9. IPv6真的安全嗎
▪ 困擾10. 如何學習IPv6
▪ 後續說明nginx


本文原因

在筆者的上一篇文章《IPv6系列-入門指南》裏,簡要闡述瞭如下內容:算法

▷ 掌握IPv6的必要性
▷ IPv6的3個常見顧慮
▷ IPv6基礎知識
▷ 經常使用測試方法sql

而在進一步的實踐學習中,會遇到不少的困擾。筆者結合本身以及身邊的同行兄弟們遇到的困擾,精心挑選出10個困擾在本文中進行解答。編程

若是沒有閱讀過《IPv6系列-入門指南》,敬請勞神垂閱,以便知識的連貫。centos


困擾1. IPv4和IPv6只有地址格式不一樣嗎

除了地址格式不一樣,IPv4與IPv6協議棧也不一樣,他們在邏輯上是徹底不一樣的2個世界緩存

如下實踐中常常會遇到的4個不一樣之處:安全

基本通信過程:ND替代ARP、多播替代廣播、fe80地址成爲標配、ICMP成爲通信核心
IP配置方式:客戶端以無狀態自動配置IP成爲主流,弱化DHCP
DNS域名解析:AAAA記錄替代IPv4的A記錄、對應用存在優先級問題(優先解析AAAA仍是A)
應用層適應性:socket編程中AF_INET僅支持IPv4,AF_INET6僅支持IPv6服務器


困擾2. IPv4到IPv6對應用程序是透明無感知的嗎

錯,是有感知的,上層應用程序須要進行改造。

舉個例子,當訪問fzxiaomange.com時候,是要優先解析IPv6地址(AAAA)仍是IPv4地址(A),由於總得選一條線路來發送請求。如今許多框架會優先選擇IPv6。

注意:若是解析出AAAA記錄,即便本機沒有可路由IPv6地址,也有可能依然嘗試經過IPv6進行請求,致使請求失敗

還有一個典型的例子,是程序會在應用層裏交互底層IP地址,好比FTP主動模式會在應用層裏交互IPv4地址,而若是實際可用的是IPv6地址,就可能致使後續鏈接的異常。

沒法作到透明無感知,是致使產生IPv4到IPv6的部分過渡方案的緣由之一。


困擾3. 提供WEB服務,須要每臺服務器都配置IPv6地址嗎

如今有一種言論,說「IPv6地址無限多,每臺服務器均可以配一個IP地址,不用作NAT」。

這很容易誤導人,具體如何使用IPv6,還得根據場景而定。好比筆者的我的博客fzxiaomange.com,由nginx->php->mysql組成,分別位於3臺服務器上,那隻須要在nginx上配置IPv6地址,並在DNS上添加一條AAAA記錄指向L7的IPv6地址便可。徹底不必在php、mysql服務器上配置IPv6地址,並且一旦配置了,就直接暴露內網了。

每一個設備都配置IPv6,主要適用於偏客戶端以及地址需求量大的場景,諸如物聯網設備、手機4G、家庭寬帶等。

另外,IPv6有NAT,適用於辦公PC、機房服務器等須要訪問IPv6網絡,而不想被別人主動訪問的場景。


困擾4. IPv4和IPv6要配在同一張網卡上嗎

均可以,首先須要先了解2個詞「單棧」「雙棧」

以節點爲角度(通用的解釋):

▷ 單棧:表示一個IPv6節點,也就是一臺服務器,或一部手機,僅有IPv6地址,或僅有IPv4地址,前者叫作「IPv6單棧」「IPv6-Only」,後者叫「IPv4單棧」「IPv4-Only」
▷ 雙棧:表示一個IPv6節點,同時擁有IPv6地址和IPv4地址

以網卡爲角度

▷ 單棧:表示一張網卡僅有IPv6地址,或僅有IPv4地址,示意圖以下

singlestack

▷ 雙棧:表示一張網卡同時擁有IPv6地址和IPv4地址

dualstack

IPv4和IPv6在邏輯上是兩個徹底不相交的世界。若是終端處位於同一個物理層,好比同一個VLAN,那麼網卡就只能同時配置IPv6地址和IPv4地址;反之,就必須一張網卡配置IPv6,另外一張網卡配置IPv4。因此,關鍵看網絡架構是如何設計,各有利弊。好比放同一張網卡上,就能夠作到帶寬共享,而放不一樣網卡,能夠作到帶寬分別限制與計費。


困擾5. 個人網卡有fe80開頭的地址,能夠用來上公網嗎

win10

centos7

當網卡啓動的時候,會自動生成「鏈路本地地址」(Link-Local Address),這是一個fe80::/10的單播地址。「鏈路本地地址」用於IP自動配置鄰居發現等。

注意事項

▷ 核心:每張網卡都會存在「鏈路本地地址」,這是IPv6協議通信的核心,不該當刪掉
▷ 範圍:僅在同一個二層範圍內進行傳播,不會被路由器作轉發
▷ 地址:「鏈路本地地址」的算法不統一,有的操做系統會根據mac地址計算而來(EUI-64),而有的則是隨機或其餘某種算法計算而來
▷ 服務:「鏈路本地地址」雖然能夠在二層內互通,但主要用於核心通信以及某些網絡高級協議。不適用於上層應用業務之間的通信。所以不能用來上公網,也不能用於對外提供服務


困擾6. IPv6地址如何配置

公網地址和私網地址

▷ 公網地址:「全球單播地址」(Global Unicast Address,2000::/3)
▷ 私網地址:「惟一本地地址」(Unique-Local Address,fc00::/7)

細心的人可能會發現,爲何這裏叫作「全球單播地址」,而「惟一本地地址」卻不叫作「惟一本地單播地址」,好吧,其實都是簡稱,在RFC裏是這麼定義的:「Global Unicast Addresses」、「Link-Local IPv6 Unicast Addresses」。其實「全球單播地址」是能夠叫作「全球地址」的,只是這樣顯得有點彆扭。

自動生成仍是固定IP

在IPv6裏,任何單播地址均可以自動生成,也能夠手工配置固定IP,具體看應用場景:

▷ 客戶端:若是我想訪問ipv6互聯網,而不對外提供服務,那麼使用自動生成便可,無需使用固定的ip地址
▷ 服務端:若是須要對外提供服務,那麼ip地址就須要固定了,不能使用自動生成

自動配置IP

在ipv6裏還分爲2種方法:「有狀態」與「無狀態」

▷ 有狀態(Stateful):地址由DHCPv6 Server統一管理,DHCPv6 Client從中得到一個可用的IP地址
▷ 無狀態(Stateless,簡稱SLAAC):路由器發出「路由通告」報文(Router Advertisement,簡稱RA),報文內包含了IPv6地址的前綴信息。當收到RA包後,就會根據其中前綴信息,自動生成一個或多個IP地址


困擾7. 沒有了ARP,如何解析MAC地址

ARP協議是IPv4用於解析目標MAC地址的協議,而在IPv6裏,解析地址採用的是鄰居發現(Neighbor Discovery Protocol,簡稱NDP或ND)

ND不是一個具體協議,而是用來描述多個相關功能的協議的抽象集合,所涵蓋的全部協議均是基於ICMPv6。其中有2種報文與解析MAC地址有關:

鄰居請求報文NS(Neighbor Solicitation):請求解析
鄰居通告報文NA(Neighbor Advertisement):響應解析

這與ping是很是相似的:

▷ ping:發送icmp的echo request報文,對端響應icmp的echo reply報文
▷ 地址解析:發送icmp的ns報文,對端響應icmp的na報文


困擾8. IPv6使用多播替代廣播,須要作哪些改造

IPv6使用多播替代了廣播,多播的特色是不會像廣播那樣徹底泛洪,而是數據包只發送給加入了多播組的機器。

可是,這有個前提,就是交換機要能識別並維護多播組的信息,主流交換機都具有此功能,然而並不都是默認開啓的。對於二層交換機來講,須要開啓MLDv2 Snooping

顧名思義,就是交換機會識別「MLDv2成員報告」報文從哪一個端口發來的,並記錄下來,以後當交換機收到多播包後,會先查找其多播地址是否能在緩存裏匹配上

▷ 匹配成功:僅會將數據包從相應的端口發出
▷ 匹配失敗:就會泛洪,此時和廣播毫無差別


困擾9. IPv6真的安全嗎

理想很美好,IPv6從設計之初,就進行了大量的安全方面的設計,「完整的」IPv6在安全方面有至少如下3個優點:

▷ 原生支持的端到端加密
▷ 安全的鄰居發現(Secure Neighbor Discovery,簡稱SEND
▷ 更大的地址空間

現實很殘酷,只有第3點發揮了做用,更大的地址空間,減小了被非法掃描到的機率。而第一、2點並沒真正普及起來,由於協議自己就很複雜、學習難度很大、實現起來也很不容易。所以IETF爲了加速IPv6的普及,對安全性再也不強制要求。這也致使了IPv6實際上並無預期中的那麼安全,在IPv4裏存在的地址欺騙、虛假網關等狀況,在IPv6裏依然存在。


困擾10. 如何學習IPv6

網上能找到很是多的IPv6教程,其中有不少教程都是通篇講IPv6地址、IP包格式、ICMP包格式,這很容易讓初學者打退堂鼓。筆者雖然不是專業的網工,希望能拋磚引玉,推薦的學習步驟以下:

1️⃣ IPv6的歷史、設計理念2️⃣ IPv6的地址格式、分類、前綴計算,以及與IPv4的對比3️⃣ IP地址、網關路由的配置與查看4️⃣ 服務端實踐,嘗試給本身的網站增長IPv65️⃣ 客戶端實踐,讓本身的PC訪問IPv6互聯網6️⃣ 應用層實踐,本身寫一對C/S程序,能同時支持IPv4與IPv67️⃣ IPv6通信原理,抓包分析每一個包,熟悉ND、DHCPv6等8️⃣ IPv4與IPv6的互訪、過渡9️⃣ IPv6安全

相關文章
相關標籤/搜索