2013年8月4日 星期日

RFC 4862 - IPv6 Stateless Address Autoconfiguration之筆記


1. Introduction


這份文件主要是在規範如何自動組態(autoconfigure)host的interface的IPv6 address,以及DAD(Duplicate Address Detection)驗證address的唯一性程序。
自動組態(autoconfigure)一詞有時候也稱為無狀態自動組態(stateless autoconfigure),也僅用於host,router則不在此RFC範圍內,而之所以稱為stateless autoconfigure是因為相較於statefull DHCPv6而言,網路上並沒有像DHCP server一樣的機器記錄address使用情況,所以稱為stateless。
"autoconfigure" = "prefix" + "interface ID",router會發出RA(Router Advertisement),RA通常會攜帶Prefix information,Host收到就會根據此Prefix information再加上"interface ID"組出IPv6 address。


IPv6 address有幾個狀態,當開始autoconfigure到DAD完成前,address是不能被指定到interface的,此時稱為tentative,當唯一性確認,並指定到interface開始到Preferred Lifetime結束前稱為"preferred",之後到Valid Lifetime結束前稱為"Deprecated",Valid Lifetime結束後就稱為Invalid。
如圖:



2. Terminology


tentative address、preferred address、deprecated address、invalid address分別被標是在上圖(IPv6 Address status)綠色線(time)以上的部分。preferred lifetime、valid lifetime則是分別被標示在綠色線(time)以下的部分。



3. Design Goals

  1. 不需要手動設定address
  2. 在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊。
  3. 在large sites底下沒有DHCPv6也能透過Router的RA進行address的configuration。
  4. 有renumbering的能力,透過lifetimes達成此目標。



4. Protocol Overview


Autoconfiguration只有在multicast-capable的link上執行,而且當該interface被enable就開始執行link-local的部分,這樣就能符合設計目標之一"在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊"。
Autoconfiguration的處理程序
  1. tentative link-local address自動產生,此時為tentative狀態。
  2. 執行DAD(Duplicate Address Detection),送出NS(Neighbor Solicitation)。
  3. DAD成功(隔一段時間沒有收到Neighbor Advertisement),將該address指定給該interface,相關的solicited-node multicast link-layer address也會被註冊到interface中。
    DAD失敗,需要手動設定IPv6 Address。



5. Protocol Specification


5.5.3 Router Advertisement Processing
  • 如果Autonomous flag沒被設定,忽略該Prefix Information。
  • 如果Prefix是Link-Local prefix,忽略該Prefix Information。
  • 如果Preferred lifetime大於Valid lifetime,忽略該Prefix Information。



Note
RFC 2464 - Transmission of IPv6 Packets over Ethernet Networks
    4. Stateless Autoconfiguration
        An IPv6 address prefix used for stateless autoconfiguration 
        of an Ethernet interface must have a length of 64 bits.



在XP上顯示IPv6 Address


在XP中可以使用指令"ipv6"操作IPv6相關設定,也可以使用netsh指令來操作。
以下圖是顯示IPv6的information:

其中第二條紅線, 是因為privacy為enable,XP自動產生位置。
第三條紅線, 則是根據網卡資訊,自動產生,後面的時間為 valid time / preferred time,因為preffered還大於0,所以這個Address處於preffered狀態(顯示於最前面的preferred)。
第四行紅線,則是會根據指定的IPv6 address,會註冊相對應的Solicited-node multicast address。


    參考資料:
  1. RFC 4862
  2. IPv6 Address Autoconfiguration
  3. RFC 2462 IPv6 Stateless Address Autoconfiguration




2013年7月28日 星期日

ubuntu 13.04英文版裝中文輸入(注音)


apt-get install scim-chewing scim-modules-table
System Settings > Language Support > Install / Remove Languages… 選Chinese

System Settings > Language Support > keyboard input method system 選SCIM

接著啟動SCIM刪除不必要的輸入法


增加切換下一個輸入法的組合鍵




2013年6月8日 星期六

RFC 5952 - A Recommendation for IPv6 Address Text Representation 之筆記


1. Introduction

RFC 5952主要在定義IPv6 address的表示法的標準化,主要原因是因為RFC 4291 - IP Version 6 Addressing Architecture定義了IPv6 address,且提供了一些彈性表示法,卻也因為彈性導致相同的address卻有不同的表示法(換言之,不同的表示法卻是指向同一address),這會導致一些問題產生。

以下的IPv6 address都是相同的:
2001:db8:0:0:1:0:0:1
2001:0db8:0:0:1:0:0:1 
2001:db8::1:0:0:1
2001:db8::0:1:0:0:1 
2001:0db8::1:0:0:1
2001:db8:0:0:1::1 
2001:db8:0000:0:1::1
2001:DB8:0:0:1::1 



2. Text Representation Flexibility of RFC 4291


2.1. Leading Zeros in a 16-Bit Field
'It is not necessary to write the leading zeros in an individual field.'
以0為開頭的字沒必要寫,因為這樣,所以0開頭的字母可寫可不寫,如:
2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001
2001:db8:aaaa:bbbb:cccc:dddd:eeee:001
2001:db8:aaaa:bbbb:cccc:dddd:eeee:01
2001:db8:aaaa:bbbb:cccc:dddd:eeee:1


2.2. Zero Compression
'A special syntax is available to compress the zeros. The use of "::" indicates one or more groups of 16 bits of zeros.'
'The "::" can only appear once in an address.'
可以將1個或多個的"0000"用::這個特殊寫法表示,不過只能出現一次如:
2001:db8:0:0:0::1
2001:db8:0:0::1
2001:db8:0::1
2001:db8::1


2.3. Uppercase or Lowercase
RFC 4291並沒有特別指明說要用大寫或小寫表示之。


3. Problems Encountered with the Flexible Model


簡單來說,就是比對會有問題,比如對eth0指定IPv6網址2001:db8:0:0:1::1,之後用ifconfig eth0| grep 來找卻找不到,因為ifconfig顯示的是2001:db8::1:0:0:1這個IPv6 address。大小寫的差異在UNIX系統更是常見,比如2001:db8:0:0:1:0:0:1和2001:DB8:0:0:1:0:0:1在比對沒有特別指明case insensitive參數就會視為不同。


4. A Recommendation for IPv6 Text Representation


4.1. Handling Leading Zeros in a 16-Bit Field
Leading zeros MUST be suppressed.0開頭的字母都必須被省略,如2001:0db8::0001這是不行的,必須寫成2001:db8::1。

4.2. "::" Usage
The use of the symbol "::" MUST be used to its maximum capability. The symbol "::" MUST NOT be used to shorten just one 16-bit 0 field.
表示式必須盡可能的簡化,而且只有一個"0000"時不能簡化。所以2001:db8:0:0:0:0:2:1是不正確的,應該被寫成2001:db8::2:1。而2001:db8::1:1:1:1:1卻是不正確的,應該被寫成2001:db8:0:1:1:1:1:1。
When there is an alternative choice in the placement of a "::", the longest run of consecutive 16-bit 0 fields MUST be shortened. When the length of the consecutive 16-bit 0 fields are equal, the first sequence of zero bits MUST be shortened.
簡而言之,就是如果有兩個可以簡化::的地方,挑表示式最小,如果都是最小,則挑第一個位置。如2001:0:0:1:0:0:0:1必須被簡化為2001::1:0:0:0:1。

4.3. Lowercase
用小寫表示之。


5. Text Representation of Special Addresses


IPv4-Mapped IPv6 addresses [RFC5214]的寫法要符合前面的規則,且後面為IPv4寫法,如0:0:0:0:0:ffff:192.0.2.1應該被寫成::ffff:192.0.2.1。


6. Notes on Combining IPv6 Addresses with Port Numbers


以下是一般結合port的寫法:
  • [2001:db8::1]:80
  • 2001:db8::1:80
  • 2001:db8::1.80
  • 2001:db8::1 port 80
  • 2001:db8::1p80
  • 2001:db8::1#80

建議使用第一種寫法[2001:db8::1]:80





熱門文章