IPV6 HOW TO
2. 什麼是IPv6?
IPv6是新的第三層傳輸協議(參考http://www.linuxports.com/howto/
intro_to_networking/c4412.htm#PAGE103HTML),它將用來取代IPv4(也叫做IP).
IPv4是很早以前設計的,現在對IPv4提供更多的地址和性能方面有著更高的要求.
在IPv6中主要的變革是重新設計了報頭. 包括將地址位的大小從32 bits 增加到
128 bits. 因為第三層傳輸主要負責end-to-end(端對端)基於地址的數據包路由.
它必需包含新的IPv6地址(來源和目標),這點就像IPv4一樣.
下面這個連結提供了更多有關IPv6的資訊, 和RFC 的例表等等:
http://www.switch.ch/lan/ipv6/references.html
2.1 IPv6在Linux作業系統上的歷史
將要做的: 更好的時間排列, 更多的內容...
2.2 開始
第一次將與IPv6有關的代碼加入 Linux kernel 2.1.8 的工作是由Pedro Roque
在1996年11月完成的. 它基於BSD API:
---------------------------------------------------------------------------
diff -u --recursive --new-file v2.1.7/linux/include/linux/in6.h
linux/include/linux/in6.h
--- v2.1.7/linux/include/linux/in6.h Thu Jan 1 02:00:00 1970
+++ linux/include/linux/in6.h Sun Nov 3 11:04:42 1996
@@ -0,0 +1,99 @@
+/*
+ * Types and definitions for AF_INET6
+ * Linux INET6 implementation
+ * + * Authors:
+ * Pedro Roque <******>
+ *
+ * Source:
+ * IPv6 Program Interfaces for BSD Systems
+ * <draft-ietf-ipngwg-bsd-api-05.txt>
---------------------------------------------------------------------------
以上的代碼來自patch-2.1.8 (e-mail 地址在複製&貼上時漏掉了)
2.3 其間
因為缺少人手, 在核心加入IPv6的計劃不能按照討論的或新的RFCs執行.
在2000年的10月, 一個叫做USAGI(http://www.linux-ipv6.org/)的計劃在日本正式啟動.
目標是執行所有不見了的, 擱淺的(IPv6 support in Linux)計劃. 計劃緊隨
KAME project (http://www.kame.net/) 的腳步. 依據 vanilla Linux 核心源
代碼進行遂步的改動.
2.4 現在
不幸的是 USAGI 的 patch(補丁)很大, Linux networking 維護人員無法將它包含
進現在Linux 2.4.x 系列的源代碼當中去. 因此2.4.x 失去了一些(多數)括展性,
並且不支持所有當前的設計和RFCs. 這導致了它和其它作業系統會產生一些協同問題.
2.5 將來
USAGI 現在正在將當前的括展加入到 Linux 2.5.x 核心當中.
希望2.6.x 系列核心能有一個真正和最新的IPv6功能.
2.6 IPv6 的地址會是什麼樣 ?
剛才提過, IPv6 的地址有128 bits 長. 這樣的 bits 可以產生39個十進字數字:
--------------------------------------------------------------------------------
2^128-1: 340282366920938463463374607431768211455
--------------------------------------------------------------------------------
這樣的地址很難記得住. IPv6的地址是逐位定位的(就像IPv4, 但這個觀點不是公認的).
所以十六進制能更好地代表這些數字, 4 bits(也叫做"nibble")表現為數字(0-9)或字符
a-f(10-15). 這種格式將IPv6的地址長度縮減到個32字符.
--------------------------------------------------------------------------------
2^128-1: 0xffffffffffffffffffffffffffffffff
---------------------------------------------------------------------------
這種表現形式仍然很不方便. (可能混淆或遺漏單個十六進制數字), 所以IPv6的設計者
將地址形式定為每16bit就用":"區分開來. 開頭的"0x"(在程式設計當中用來表示十六
進制數值)被移除了:
---------------------------------------------------------------------------
2^128-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
---------------------------------------------------------------------------
一個有效的地址(稍後請看地址類型)如下:
---------------------------------------------------------------------------
3ffe:ffff:0100:f101:0210:a4ff:fee3:9566
---------------------------------------------------------------------------
為了簡化, 每個16bit開頭的0可以被省略:
---------------------------------------------------------------------------
3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 ->
3ffe:ffff:100:f101:210:a4ff:fee3:9566
---------------------------------------------------------------------------
連續的並且數值為0的16bit地址段可以用"::"表示. 但是一個IPv6地址當中只能出現
一次, 不然這種方法保持不了多久.
---------------------------------------------------------------------------
3ffe:ffff:100:f101:0:0:0:1 -> 3ffe:ffff:100:f101::1
---------------------------------------------------------------------------
簡化得最短的IPv6 localhost地址:
---------------------------------------------------------------------------
0000:0000:0000:0000:0000:0000:0000:0001 -> ::1
---------------------------------------------------------------------------
這種方法也叫做 compact (base85 coded) representation defined RFC 1924 / A
IPv6緊湊地址表示法(定於1996), 但沒有提起過, 例如:
---------------------------------------------------------------------------
# ipv6calc --addr_to_base85 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566
Itu&-ZQ82s>J%s99FJXT
---------------------------------------------------------------------------
資訊: ipv6calc 是一個IPv6地址格式的計算和轉換的計劃, 您可以在這裡找到:
http://www.bieringer.de/linux/IPv6/ipv6calc/
2.7 FAQ(基礎)
為什麼叫IPv6,而不能成為IPv4之後的IPv5 ?
在任何IP頭, 前4bits 是為協議版本號所保留的. 所以理論上一個協議的版本號在
0和15之間是有效的:
4 己經為IPv4所使用.
5 為 Stream 協議所保留(STP, RFC 1819 http://rfc.net/rfc1819.html 沒有公開過)
IPv4之後可用的版本號是6, 因此 IPv6 就這樣旦生了!
IPv6 地址: 為什麼會有這麼長的bits
在設計IPv4的時候,人們認為32bit的長度足夠全世界使用. 看一看這些年, 32bit
就現在和未來幾年來說是足夠的. 然而, 32bits 不能在將來滿足全球各種網路設備
對IP地址的需求.想一想將來要連結網路的移動電話, 汽車(包括電子總控系統),
烤麵包機,冰箱, 照明開關...
所以設計者採用了128bits, 是今天IPv4 大小(2^96)與長度的4倍.
實際使用的大小可能比它看起來的還要小. 因為現在的定義地址設計, 64bits 用於
interface identifiers(界面標識). 另外64bits用於路由. 寄於現在嚴格的層數集
合(/48, /35, ...), IPv6 所能提供的地址空間還是可能不夠, 希望這種情況不要在
往後的幾年裡發生.
IPv6 地址: 為什麼在新的設計裡bits這麼小?
雖然, (可能)有些人(在Internet裡)考慮IPv8和IPv6, 設計無論從接受和執行都是
那麼的遙遠. 在此其間128bit對於報頭和數據傳輸來說是最佳的選擇.
考慮到在IPv4里和IPv6里的最大/最小傳輸單位(MTU,它們分別是576byte 和 1280 byte),
IPv4 的報頭是20 byte(最小值,可以通過調節IPv4的選項增大到60byte), IPv6 的報頭
是48 byte(固定不變的), 報頭分別占它們MTU的3.4%和3.8%, 這意昧著報頭佔了很大一
部分開銷.更大bits的地址需要更大的報頭,因而佔據更大的開銷.
同樣,顧及到MTU正常連結的最大值(像現在的以太網): 1500byte(除了特別的列子:
9k byte 應用在 Jumbo frames 當中). 最終,如果要傳輸在第三層數據包中占10%或
20%報頭, 這樣的IP地址在設計上也就沒有意義了.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.168.214
※ 編輯: iLucifer 來自: 61.229.168.214 (02/24 09:22)
IPv6 近期熱門文章
PTT數位生活區 即時熱門文章