- RFC 4862 - IPv6 Stateless Address Autoconfiguration
- RFC 5952 - A Recommendation for IPv6 Address Text Representation
- RFC 5969 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) -- Protocol Specification
2018年10月28日 星期日
Table Of Content for tag "IPv6 RFC"
標籤:
- Table Of Content,
IPv6,
RFC
2013年9月28日 星期六
RFC 5969 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd) -- Protocol Specification之筆記
Abstract
描述6rd prefix + IPv4 address的方式定址的優點,如automatic IPv6 prefix delegation to site, statless operation, simple provisioning and service等等。Introduction
6rd機制成功的被商業化,被詳細記錄在RFC 5569。6rd是基於6to4改善而來,主要差異是在IPv6 Prefix的部分,6to4是用2002::/16,6rd是SP(service provider)自訂的prefix。6to4也可以被視為是6rd的subset,因為如果6rd的prefix是2002::/16就是6to4了。Terminology
6rd prefix | 被SP用來給6rd domain的IPv6 prefix。SP可以布署一個以上的6rd domain。 |
6rd CE (Customer Edge) | 在6rd的布置中擔任CPE(Customer Premises Equipment)的角色或稱RG (Residential Gateway)。典型的CE有一個WAN site interface和一個以上的LAN interface,LAN端也稱為Customer-facing。提供IP6能力,WAN端也稱SP-facing。 |
6rd delegated prefix | 由CE計算給Customer site端使用的IPv6 Prefix。 |
6rd domain | 使用相同的virtual 6rd link的CEs和BRs的集合。SP可以有一個以上的6rd doamin。每個6rd domain必須使用不同的6rd prefix。 |
6rd Border Relay | 被佈署在6rd domain的edge位置。IPv4-enabled interface用於6rd的IPv6 in IPv4 tunnel端。IPv6 interface用於連接IPv6網路。 |
BR IPv4 address | 6rd Border Relay的IPv4 address。 |
6rd virtual interface | encapsulation and decapsulation of IPv6 packets inside IPv4。 |
6rd Prefix Delegation
6rd delegated prefix是利用6rd prefix和CE的IPv4計算出來,用於customer site。如圖一:當IPv4 address在6rd domain可以被aggregate,如10.0.0.0/8,則不使用全部的IPv4來計算,因為前面8bit可以被aggregate,所以使用後面24bit(即o bit為24)。
6rd不限於使用public IP,但如果private address會overlap,就應該被切成不同的6rd domain(使用不同的6rd prefix, 可以確保唯一性)。
即使相同的SP,也可能使用不同的IPv4 bit數,比如10.0.0.0/8和192.168.0.1/16之間的差異就可能會使用不同的IPv4MaskLen。
6rd delegated prefix是使用IPv4計算,所以IPv4 address的變動,也會影響6rd delegated prefix,因此建議以IPv4 address的lease time當成prefix的lifetime。
6rd Configuration
6rd有四個重要的configured value:IPv4MaskLen | ignore最高的幾個bit,比如IPv4 address range是10.0.0./8,那麼IPv4MaskLen就是8,使用後面24bit來計算6rd delegated prefix。 |
6rdPrefix | 6rd IPv6 prefix |
6rdPrefixLen | 6rd IPv6 prefix length. |
6rdBRIPv4Address | 6rd Border Relay的IPv4 address. |
Customer Edge Configuration
這四個configured value可透過TR-69,PPP或手動方式設定,這份RFC使用DHCP方式取得參數。
6rd DHCPv4 Option
6rdBRIPv4Address允許一個以上,不過OPTION_6RD只能限制最多只有一個6rd domain,不支援多個6rd domain。當6rd被啟動, CE會設定default route到BR,比如CE IP: 10.100.100.1/8, BR IP: 10.0.0.1, 6rdPrefix: 201:db8/32,那麼CE的routing table會是這樣:
::/0 -> 6rd-virtual-int0 via 2001:db8:0:100:: (default route) 2001:db8::/32 -> 6rd-virtual-int0 (direct connect to 6rd) 2001:db8:6464:100::/56 -> Null0 (delegated prefix null route) 2001:db8:6464:100::/64 -> Ethernet0 (LAN interface)
Border Relay Configuration
BR的位址可以利用anycast address達到loading baalancing和reliability.
IPv6 in IPv4 Encapsulation
IPv6的Traffic class field必須被複製到IPv4的Tos欄位(可以參考RFC 4213/3056/2983/3168等)。Maximum Transmission Unit
6rd的MTU應該被設成CE WAN side的MTU - 20 bytes(IPv4 header),如果IPv4 MTU是1500,那麼6rd Tunnel MTU應該被設成1500-20=1480。如果缺乏資訊,6rd MTU應該被設成1280。
Receiving Rules
為了防止spoofing攻擊,6rd的BR和CE應該根據6rd domain的參數,驗證6rd Tunnel的IPv4 address和IPv6 address的IPv4部分是否相符,不符合就drop。
IPv6 Address Space Usage
基本上就是6rd prefix length和IPv4MaskLen的取捨,如果要給user的6rd delegated prefix是 /60,而IPv4MaskLen是24(根據IPv4 aggregate的程度),那麼6rdPrefixLen就要給60-24=36。2013年9月21日 星期六
RFC 5569 - IPv6 Rapid Deployment on IPv4 Infrastructures (6rd)之筆記
Abstract
6rd是建立在6to4的機制上,提供ISP快速布建IPv6網路的機制,和6to4相似處:
statless IPv6(IPv6 prefix + IPv4 address information),並且將IPv6封裝在IPv4上在IPv4-only網路上傳送。
和6to4不同處:
6to4使用2002::/16的prefix,而6rd使用ISP給的prefix。
Introduction
描述Free這間ISP成功的使用6rd快速布建IPv6網路(5周),而且低成本,變動少。Problem Statement and Purpose of 6rd
ISP/Customer/Application之間的死結,影響IPv6布置的速度。ISP等待Customer有需求才會想布置IPv6,而客戶只有當應程式需要IPv6才會想用IPv6,應用程式卻因為沒有IPv6所以在NAT底下繼續奮鬥。
ISPs wait for customer demand before deploying IPv6; customers don't demand IPv6 as long as application vendors announce that their products work on existing infrastructures (that are IPv4 with NATs); application vendors focus their investments on NAT traversal compatibility as long as ISPs don't deploy IPv6.
Problem
6to4的routing問題,6to4的IPv6 address是由IPv4算出來的,如:ISP給你10.1.1.1,你的6to4 address就是2001:0a01:0101::,另外一個ISP也給他的client相同的IPv4 Addresss,而他也使用了6to4,routing就出問題了。這個問題的癥結點就是相同的prefix,如果由ISP各自給合法的Prefix,就沒這問題了。因為即使是NAT,各自的Prefix還是會不同,IPv6 address仍可保證唯一。
Specification
6rd relay server的IPv4 anycast address可以由ISP自行決定,通常會避免掉192.88.99.1這個6to4專用address。圖中說明,6rd CPE會負責將IPv6的packet封裝在IPv4裡面,並且往6rd relay server傳送,之後就可以送到IPv6的Network去,反過來,目的地是ISP的IPv6 prefix就會經由6RD relay server送到6rd CPE去。
2013年9月7日 星期六
DHCPv6-PD
DHCPv6 Prefix Delegation (DHCPv6-PD)定義在RFC 3633,是DHCPv6的extension (option)。主要是用來和DHCPv6-PD server要求prefix給DHCPv6-PD client其他的interface。
Network layout如下:
Server端是Windows,使用dibber,設定檔如下(server.conf):
# Logging level range: 1(Emergency)-8(Debug) log-level 8 # Don't log full date log-mode short iface "區域連線 35" { # clients should renew every half an hour T1 1800 # In case of troubles, after 45 minutes, ask any server T2 2700 # Addresses should be prefered for an hour prefered-lifetime 3600 # and should be valid for 2 hours valid-lifetime 7200 class { pool 5000:1234::/48 } # the following lines instruct server to grant each client # 1 or 2 prefixes (if you have uncommented second line with pd-pool or not). # For example, client might get # 2222:2222:2222:222:2222:993f:6485:0/112 and # 1111:1111:1111:1111:1111::993f:6485:0/112 pd-class { pd-pool 2222:2222:1234::/48 pd-length 48 T1 11111 T2 22222 } }
pd-pool 2222:2222:1234::/48
DHCPv6-PD server管理的prefix為2222:2222:1234::/48
pd-length 48
切割單位為48,等於全部發送出去。如果pd-length 56,則會切分2^(56-48) = 256個單位分發。也就是client會收到Prefix length = 56,Prefix Address = 2222:2222:1234:xx00::的訊息。
Client端是Linux,使用wide-dhcpv6,設定檔如下(/tmp/dhcp6c.conf):
interface br0 { send ia-pd 1; }; id-assoc pd 1 { prefix-interface usb0 { sla-id 2; }; prefix-interface usb1 { sla-id 3; }; };
send ia-pd 1:
送出id為1的pd請求
sla-len:
這裡省略了sla-len,sla-len的設定原則如下:
64 - (The length of the delegation you are getting)
如Server的pd-length為48,那麼這邊的sla-len就要設16,不過可以省略不設。
sla-id 0:
設定prefix id,範圍為0 ~ 2^sla-len,如 sla-len = 8,那麼範圍就是0~255。
執行結果
root@lte-iad:/ramdisk/tmp# ifconfig usb0 usb0 Link encap:Ethernet HWaddr 11:22:33:E0:E3:B9 inet6 addr: fe80::1122:33ff:fee0:e3b9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:20 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX byt.s:RX1920 (1.8 KiB) root@lte-iad:/ramdisk/tmp# ifconfig usb1 usb1 Link encap:Ethernet HWaddr 11:22:33:07:16:C7 inet6 addr: fe80::1122:33ff:fe07:16c7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1700 (1.6 KiB) root@lte-iad:/ramdisk/tmp# ifconfig br0 br0 Link encap:Ethernet HWaddr 11:22:33:97:F0:E6 inet6 addr: fe80::1122:33ff:fe97:f0e6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:630 errors:0 dropped:0 overruns:0 frame:0 TX packets:14577 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:75873 (74.0 KiB) TX bytes:10922a79 (1.0 MiB) root@lte-iad:/ramdisk/tmp# dhcp6c -c /tmp/dhcp6c.conf br0 Line: 418 *** family: 10, socktype: 1, protocol: 17, flags: 1, (sockaddr) address: ::, address len: 28 *** Line: 502 *** family: 10, socktype: 1, protocol: 17, flags: 0, (sockaddr) addres,s: ff02::1:2, address len: 28 *** root@lte-iad:/ramdisk/tmp# ifconfig usb0 usb0 Link encap:Ethernet HWaddr 11:22:33:E0:E3:B9 inet6 addr: 2222:2222:1234:2:1122:33ff:fee0:e3b9/64 Scope:Global inet6 addr: fe80::1122:33ff:fee0:e3b9/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:51 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:5090 (4.9 KiB) root@lte-iad:/ramdisk/tmp# ifconfig usb1 usb1 Link encap:Ethernet HWaddr 11:22:33:07:16:C7 inet6 addr: 2222:2222:1234:3:1122:33ff:fe07:16c7/64 Scope:Global inet6 addr: fe80::1122:33ff:fe07:16c7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:50 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:4928 (4.8 KiB) root@lte-iad:/ramdisk/tmp# ifconfig br0 br0 Link encap:Ethernet HWaddr 11:22:33:97:F0:E6 inet6 addr: fe80::1122:33ff:fe97:f0e6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1086 errors:0 dropped:0 overruns:0 frame:0 TX packets:30600 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:134671 (131.5 KiB) TX bytes:2324630 (2.2 MiB)
標籤:
IPv6,
tools - net
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
- 不需要手動設定address
- 在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊。
- 在large sites底下沒有DHCPv6也能透過Router的RA進行address的configuration。
- 有renumbering的能力,透過lifetimes達成此目標。
4. Protocol Overview
Autoconfiguration只有在multicast-capable的link上執行,而且當該interface被enable就開始執行link-local的部分,這樣就能符合設計目標之一"在Small sites底下沒有DHCPv6或router也能透過Link-local address進行通訊"。
Autoconfiguration的處理程序
- tentative link-local address自動產生,此時為tentative狀態。
- 執行DAD(Duplicate Address Detection),送出NS(Neighbor Solicitation)。
- 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。
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。
訂閱:
文章 (Atom)
熱門文章
-
轉自 http://www.wretch.cc/blog/redsonoma/14021073 基本概念: 1> tty(終端設備的統稱): tty一詞源於Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱...
-
Work queue提供一個interface,讓使用者輕易的建立kernel thread並且將work綁在這個kernel thread上面,如下圖[1]所示。 由於work queue是建立一個kernel thread來執行,所以是在process context...
-
(V)將介紹file operations中的ioctl。ioctl的prototype為: int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); ...
-
這兩天電腦的word忽然都不能存檔,即便是另存新檔也不行,最後都只能放棄修改檔案,即便重新安裝過或者更新成2007也都不能存檔,最後就乖乖的google一下,原來是暫存的資料夾不存在,按照以下方式就可以解決了。 資料來源: word 2003不能存檔問題 編輯機碼的(reg...
-
System Call在HW和user space提供一層抽象層,主要目的有: 為user space提供硬體抽象層。比如,讀取檔案時,不用管檔案所在的媒體類型與檔案儲存類型。 System call能確保系統的安全與穩定。避免user space的無意或惡意的破壞。 ...
-
在kernel中建立thread可以使用kthread_create(),建立一個task,然後在調用wake_up_process(task)讓task真正的運行,如果要kill一個kthread可以使用kthread_stop()。 在kernel中,將kthread_cr...
-
Linux module練習手札I紀錄如何撰寫一個簡單的module,並且編輯它,以及load和unload一個module。 write a module #include <linux/init.h> #include <linux/module.h...
-
幾乎任何使用 TCP,UDP或UNIX-domain socket的動作都可以用nc來達成,常見的功能如。 simple TCP proxies shell-script based HTTP clients and servers network daemon testi...
-
很多人心中都有過一個問題 What is the difference between Platform driver and normal device driver? ,簡單的來說Platform devices就non-discoverable,也就是device本身沒辦法...
-
組成元件 要能正確顯示資料,必須包含資料倉儲(Store),資料欄位的定義(ColumnModel)。 首先我們先定義資料欄位: var cm = new Ext.grid.ColumnModel({ {header: 'Name', dataIndex...