2011-02-06 119 views
8

我目前正試圖瞭解IPv6地址如何工作。分別用於小型和組織網絡的鏈接本地和本地本地地址。但是,如果其中一個客戶也可以訪問互聯網,則需要兩個IP,對嗎?一個鏈接/網站本地和一個全球地址。接口和路由器是如何管理的?一個接口需要兩個IP,因爲IPv6中沒有NAT。IPv6接口上的本地鏈接和全局IP

+2

這相當屬於http://serverfault.com/;也許版主會轉移這個問題,或者你可以在那裏重新提問。 – 9000 2011-02-06 11:46:18

+1

這個問題當然有與編程有關的方面。某些應用程序可能需要將接口地址列表摺疊爲某種算法,並且當您從getifaddrs()返回時,它有助於瞭解您正在處理的地址類型。 – 2011-02-07 06:04:24

回答

14

在一般情況下,接口有一個鏈路本地範圍單播地址和零個或多個全局範圍單播地址。 (它們也可能是一些有限數量的多播組的成員。)地址可以像在IPv4中一樣手動或通過DHCPv6分配,但當路由器通告允許時,它們有時(並非總是)會自動生成。一些主機實現會自動爲路由器通告的每個前綴生成一個永久性全局地址,併爲其附帶一個輔助隱私地址,c.f. RFC 4191。在使用DHCPv6分配地址的情況下,主機可能會請求一個或多個臨時地址而不是隱私地址。

請勿使用站點本地地址。它們被RFC 3879棄用,主要是因爲sin6_scope_id字段沒有爲站點本地地址定義好。從getifaddrs()返回的列表中看到它們的應用程序可能會將它們帶有標準錯誤流的診斷消息丟棄。應用程序應該期望網絡管理員將使用唯一的本地地址(ULA),而不是站點本地地址,c.f. RFC 4941

ULA地址的可達性通常不能由應用軟件決定。您唯一能確定的是,它們無法通過全局公共無缺省區域的任何路徑訪問。它們可以從互聯網上的任何地方到達,ULA前綴的路由在自治系統之間的雙邊協議中交換。另一方面,它們通常會通過IPv6本地網關進行廣告,僅供用戶本地使用,並且在家庭以外任何地方都無法到達,c.f. I-D.ietf-v6ops-ipv6-cpe-router

9

每個接口都有一個鏈路本地地址和一個或多個公共或站點本地地址。看起來是這樣的:

$ ip -o -6 addr show dev eth0 
eth0 inet6 2001:abcd:ef::1/64 scope global (..) 
eth0 inet6 fe80::1234:5678:2/64 scope link (...) 

當發送的東西,一切都發送到鏈路本地地址(即fe80::/64)從本地鏈接地址發送的,一切從全球其他人。

(選擇並不總是可能的。例如,如果回答ping命令,則答案的源IP將是請求的目的IP,不管哪一個地址)

相關問題