IPv6 地址類型

unicast

在單播尋址模式下, 一個IPv6 接口(host)在一個網絡裏是唯一的。 IPv6 報文包含源地址和目的地址。 當一個網關或路由器收到一個unicast IP 報文,目標是一臺主機,它把報文從與該主機相連的接口發出去。 如圖:

unicast

multicast
目的地爲多個主機的報文由多播地址發送。 所有對該多播信息感興趣的主機要事先加入多播組。 所有加入該組的接口接收這個多播報文並處理它, 其它不感興趣的主機忽略該多播報文。 如圖:

multicase

anycast
在這種地址模式下,多個接口(主機)被賦予相同的anycast IP地址。 當一個主機希望與配備anycast 的主機聯繫,它發送一個 unicast 消息。 在複雜的路由機制的幫助下,這個unicast 消息被送到離發送者最近(路由成本最低)的主機上。如圖:

anycast

address structure
IPv6 地址是128位的,分成8塊(block),每塊16位。每塊可以表示成四個16進制數,用冒號“:”隔開。 下面是一個128位的IPv6地址,用二進制表示,分成8塊,每塊16位:

0010000000000001 0000000000000000 0011001000111000 1101111111100001
0000000001100011 0000000000000000 0000000000000000 1111111011111011

我們把每塊表示成16進制數:

2001:0000:3238:DFE1:0063:0000:0000:FEFB

規則1 去掉前導的0
在第五塊,0063 的前兩個0可以去掉,成爲:

2001:0000:3238:DFE1:63:0000:0000:FEFB

規則2 如果兩個以上的塊含有連續的0,則省去所有的塊並代之以“::” , 如果還有全0的塊,它們可以縮寫爲一個0(比如第二塊):

2001:0:3238:DFE1:63::FEFB

Interface ID
IPv6 有3種不同的unicast 地址體系。地址的第二部分(後64位)總是用來表示 interface ID。 我們注意到,MAC 地址是48位的,並且是全球唯一的。 Interface ID 利用了MAC這種唯一性。 一個主機可以用IEEE 的 Extended Unique Identifier (EUI-64)格式來自動配置它的Interface ID。 首先,主機把它的MAC地址分成各24位的兩部分。 然後把16位16進制數0xFFFE 插入這兩部分中間:

eui

然後把第7位取反,得到 IPv6 的interface ID:

eui_to_ipv6

Global Unicast Address
這種地址類型相當於IPv4 的公共地址。 它是全球可尋址且是唯一的:

global unicast address

Global Routing Prefix的最高3位必須是001,這樣,global unicast address 都是這樣的形式: 2xxx:xxxx:…. 或 3xxx:xxxx:… 。

Link-Local Address
自動配置的IPv6 地址叫做 Link-Local Address。 這種地址總是以FE80開頭, 後面的48位全是0:

link-local address

Link-local address 只能在鏈路範圍內傳播。 這種地址是無法路由的,因此路由器永遠不會把這種地址轉發到鏈路之外。Link local address 在使能IPv6的時候就自動配置好了。 這是我的機器上的link local address:
my link local address

我們可以看到, link local address 是怎樣從MAC地址派生出來的。

Unique-Local Address
這種地址是全球唯一的,但它只應該在本地通訊裏使用。 地址的第二部分是Interface ID, 第一部分由 Prefix, Local Bit, Global ID 和 Subnet ID組成:

unique local address

Prefix 總是1111110, L 位設爲1表示地址是本地賦值的,到目前爲止,L爲0 還沒有定義。 所以, unique local IPv6 地址總是以FD開頭。

這是這三種地址的使用範圍:

address scope

link-local address 只能在鏈路範圍裏使用; unique local address 在一個單位或組織中使用;而 global unicast address 在全球範圍內使用。

IPv6 特殊地址
special addresses

在表中我們可以看到,0:0:0:0:0:0:0:0/128 不指定任何地址,只能作爲尚未獲得正式地址的主機的源地址,不能作爲目的地址,不能分配給真實的網絡接口。 在IPv4 中, 掩碼爲0.0.0.0 的地址0.0.0.0 表示默認路由,在IPv6裏也是類似的, ::/0 表示默認路由。 在IPv4裏,從127.0.0.1 到127.255.255.255 都可以表示迴環地址; 而在IPv6裏,只有0:0:0:0:0:0:0:1/128 表示 迴環地址,縮寫爲 ::1/128。

爲路由協議保留的多播地址
reserved routing protocols

爲路由器/節點保留的多播地址
這些地址用來幫助主機和路由器在還沒有配置IPv6地址的時候相互通信。 主機先基於EUI-64 自配置地址一個地址,然後用這些地址來表示網絡上的路由器或其它主機。
reserved_multicast_routers_nodes_addresses

這是兩臺配置了IPv6地址的主機間的抓包:

captured packets

前兩條是鄰居發現協議(NDP, 取代了IPv4 的ARP),我們看到92條用到了ff02::1 (All nodes in link-local) 向整個鏈路層廣播,問它需要的地址信息。 93條是相關主機的回覆。 94、95是ping及其回覆,用的都是ffd0 開頭的 unique local address。這是我事先設好的。

在第一臺主機上:

ifconfig eth0 inet6 add fd00::f21f:afff:fe23:48c/64

在第二臺主機上:

ifconfig eth0 inet6 add fd00::20e:cff:fe5e:4606/64

然後在第一臺上ping 第二臺:

ping6 -c1 fd00::20e:cff:fe5e:4606

抓包,就得到了以上結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章