前言
IPv4
大家都不陌生, 就是我們平常使用的32位網絡地址. 但是, 因爲可能在其發展初期, 並沒有考慮的十分全面, 故而其存在一些缺陷:
- 32位二進制僅支持約43億個設備, 還不到全球的人口數量. (故而現在依賴於各種局域網轉換技術, 比如 NAT. 否則地址早就不夠用了. 但是 NAT 轉換, 可以讓你訪問互聯網的設備, 但是外面的設備不能訪問你. )
- 不支持 Qos. 簡單說就是語音通話的數據包優先級要高於文件下載數據包的優先級. 不同的數據流採用不同的優先級來保證信息的及時到達.
- ARP 欺騙. 因爲需要知道
mac
地址到IP
地址的映射, 所以這中間就給了攻擊者可乘之機. - 等等...
其他方面倒都可以通過技術來解決, 但是地址不夠的問題已經愈發嚴重, 尤其是這個萬物互聯的時代. 所以, IPv6
的提出主要是爲了解決地址數量的問題.
不要問我IPv1
IPv2
IPv3
IPv5
都哪去了, 估計是都腹死胎中了, 還沒來得及推廣就被 pass 了.
那IPv4
我們已經比較熟悉了, IPv6
是什麼呢? 難道只是簡單的進行地址的擴充嗎? 我也很好奇.
IPv6
IPv6
協議最顯而易見的變動, 就是其地址長度增加到了128位. 可容納約 3.4*10^38
, 數不過來了, 反正很多就是了. 據說給地球上每一粒沙子都分配一個地址都綽綽有餘.
表示
既然是這麼大的數字, 在用原來的地址表示方式就不合適了, IPv6
的地址的書寫一般使用16進制, 每16位分爲一組並用冒號隔開, 共8段. 大概就長這樣:
F00A:1234:7759:1239:EFAC:B976:9923:2946
這麼長度數字, 爲了能夠少寫一些, 有些約定的規則.
壓縮表示
允許壓縮0
某一組前面的0可以省略不寫. 既:
8
=>0008
80
=>0080
若出現連續的0, 可以用一對冒號表示
F00A:0:0:0:EFAC:B976:9923:2946
可以表示成 F00A::EFAC:B976:9923:2946
也就意味着兩個冒號中間全是0. 但是, 注意, 一個地址不能出現兩對雙冒號, 否則會造成意思不清晰, 不知道應該對應的補多少組0 .
網絡地址表示
IPv4
的網絡地址通過子網掩碼來標識. 有時也使用/10
這種形式. IPv6
使用後者表示網絡地址.
地址分類
IPv4
地址不是分了 A,B,C,D,E 五類地址嘛(雖然實際使用中感覺並沒有區分 ABC). 那麼IPv6
有它自己的分類麼?
單播地址
既點到點通信使用的, 用來標識通信的對象. 就相當於IPv4
的公網地址. 其地址爲:
- 1-3組: 全球路由前綴. 用來標識具體的運營商地址, 比如北京電信.
- 4組: 組織標識. 全球路由下的細分標識符. 比如某個小區, 某個公司.
- 5-8組: 主機標識. 主機的唯一標識, 由
mac
地址填充組成
單播地址規定前三位必須是001
.
本地鏈路地址
用來與同一個網絡中的主機進行通信. 不會被路由的. 本地鏈路地址與單播地址是同時存在的.
多播地址
用來標識一組主機. 以FF
開頭. 將一個數據包發送給多個目標地址.
任播地址
現象: 爲了提高訪問速度, 一些比較大的公司都會在全國各地設置多個機房, 在對域名進行解析的時候, DNS
服務器會將域名對應的IP
按照由遠及近的順序返回給你, 這樣就可以優先連接距離較近的服務器. 但是有些時候, 可能DNS
服務器判斷的也沒有那麼精準.
任播地址: IPv6
協議提供了一個任播地址, 就是說你在全國各地設置的服務器使用同一個IPv6
地址, 然後有沿途的路由器來進行選擇, 將數據包送到較近的服務器那裏. 再下載文件, 再也不用選擇網通還是電信線路了, 丟給路由器決定吧.
這這這, 現象就是這麼個現象, 具體是如何做到的呢? 我十分好奇的去查了資料, 越查越糊塗, 沒搞懂...
本機地址
::1
其作用就相當於IPv4
中的127.0.0.1
.
網絡層協議
隨着網絡層的IP
協議升級, 與IP
協議配套的就一起升級了. 其中一些協議就是換湯不換藥, 就是添加了對IPv6
的支持, 其本質和IPv4
時代一毛一樣.
- ICMP: 由
ICMPv6
取代. 在原基礎上做了些內容擴充 - ARP: 由
ND
取代(鄰居發現協議). 原來深受其害的ARP 欺騙, 我以爲在v6
版本能得到改善, 然而並沒有從根本解決. 不過現在的解決方案倒是與HTTPS
有些相似. - DHCP: 由
DHCPv6
取代. 分配網絡號. - IGMP: 由
MLD
取代(多播偵聽器發現協議)
我原以爲IPv6
會在現有基礎上有很大的改變, 但是發現整套的方案基本不變, 不過每個對應的協議升級都做了一些相應的改進與擴充. 而工作在網絡層的IP
協議升級, 下面的物理層以及上面的傳輸層不需要做出任何改變, 這就是面向接口編程的優秀之處, 可以局部升級而不會對上下造成影響, 否則協議升級想都不要想了.
不過再一想, 以後買服務器, 有公網 IP 就不用在多掏錢了, 嘿嘿, 畢竟標配嘛.
出於對IPv6
的好奇, 簡單看了一下升級後的IP
協議, 並沒有特別深入的瞭解各個協議工作機制, 此致