IPv6-基础
Pv6與IPv4的區別
Pv6報文與IPv4報文差別就兩個地方:
一個是數據鏈路層(以太網協議)中協議類型,IPv4是0x0800,IPv6是0x86DD
另一個是IPv6 Header是40字節,IPv4只有20字節。
Version一個是4,一個是6
IHL(Internet Header Length)在IPv6中去除了,因為IPv6 Header不支持Option,所以長度是固定的40字節,因此也沒必要表明Header的長度。實際上IPv4 option也很少使用。
Type of Service,在IPv6中改名成為了Traffic Class。不過功能保留了,還是用來標識流量做QoS用。
Total Length,在IPv6中改名成為了Payload Length。并且,IPv4的Total Length是要包含IPv4 Header的,而IPv6 Payload Length直接是IP payload的長度。這樣在IPv6包有效性校驗的時候,不必考慮Total Length必須要大于IHL,能夠提升一丟丟的性能。
Flow Label,IPv6中新增的字段,用來標識一個TCP連接或者一個會話。通過Flow Label可以不看其他的Header,就標識出流量,對于QoS的實現有幫助。
Identification, Flags, and Fragment Offset,這些字段在IPv6中去除了。這些是用來實現IP報文分片的,也就是說IPv6不支持分片。
IPv6的數據只在源端分片,目的端重組,中間路由器收到超過它MTU的數據會發送ICMPv6告訴源主機它的MTU大小,并把數據拋棄. ipv6包發向一個目的地址的第一個包,如果在路由過程中被某個路由器卡住,那個路由器是會向源IP發icmpv6報文告訴源ip的主機,包太大了,同時會附上一個MTU,源主機再調整包大小,重發,然后后面的包就都不會超過這個大小,也就是說,第1個包可能會重發。 再如果過了上面被卡的路由器,報文繼續往下走,又遇到一個路由器,MTU更小,同樣,也會向源主機發個icmpv6的報文,告訴源主機,包大了,要調后重發,就這樣直到數據包到達目的地址。
TTL在IPv6中改名為Hop Limit。功能是一樣的,改名之后更貼近實際的作用。
Protocol Field在IPv6中改名為Next Header。
Checksum在IPv6中移除了。因為更高層的協議自己有錯誤檢測,而更底層的協議通常有CRC校驗也能發現錯誤,所以IPv6放棄了自己的Checksum,這也是能提升一丟丟性能的改動。
Source Address,Destination Address,從IPv4的32bit,改成了IPv6的128bit。
IPv6 地址表示方式
IPv6地址由3種格式。首選格式、壓縮格式和內嵌IPv4地址的IPv6地址格式
1. 首選格式:
IPv6的128位地址是按照每16位劃分為一段,每段被轉換為一個4位十六進制數,并用冒號隔開。這種表示方法就是首選格式,在首選格式后面加上前綴長度就是一個完整的IPv6地址格式:2001:0410:0000:0001:0000:0000:0000:45ff / 64。
2. 壓縮格式:
簡化表示:8段16進制數:
為進一步簡化,每一段地址起始的0可以不用寫(寫出來也合法)。任一段,如果少于4個字符,則認為前面用0補齊至4個字符。如果一段全是0,可以用單個0來表示。因此上面的地址可以表示為:2001:db8:0:0:0:52:0:1
為了進一步簡化,任何全0組成的1個或者多個連續地址段,可以用雙冒號 “::” 表示。但是在IPv6地址中,不能出現兩個雙冒號。雙冒號應當用于盡可能縮短地址。因此上面的地址可以簡化成:2001:db8::52:0:1
一個或多個連續的16比特為0字符時,為了縮短地址長度,用::(兩個冒號)表示,但一個IPv6地址中只允許一個::(如果出現超過一個的::,就無法判斷每個::到底省略了多少個全0段),所以2001:0410:0000:0001:0000:0000:0000:45ff又可以表示為:2001:410:0:1::45ff。
在某些情況下(例如表示一個包含地址的URL時),IPv6地址中的冒號分隔符可能與其它分隔符混淆,例如IP地址和端口號之間使用的冒號。在這種情況下,用括號字符[和]包圍IPv6地址。例如URL:http://[2001:0db8:85a3::7344]:443/ 此外的一些規則如下:
a. 前導的零必須壓縮(例如,2001:0db8::0022變成2001:db8::22)
b. ::只能用于影響最大的地方(壓縮最多的零),但并不是針對16位的塊,如果多個塊中包含等長度的零,則順序靠前的將被替換為::
c .a到f的十六進制數字應該用小寫表示。
3. 內嵌IPv4地址的IPv6地址格式分為如下兩種:
IPv4兼容的IPv6地址: 0:0:0:0:0:0:192.168.1.2或者::192.168.1.2
IPv4映射的IPv6地址: 0:0:0:0:0:ffff:192.168.1.2或者::ffff:192.168.1.2
此外,48位MAC地址轉換64位IPv6網絡ID的方式如下:
一、將48位的MAC地址從中間分開,插入一個固定數值FFFE
0050:3EE4:4C00-->0050:3EFF:FEE4:4C00
二、將首字節第7個比特位取反,如果原來是0,就變為1,如果原來是1,就變為0
0050:3EFF:FEE4:4C00-->0250:3EFF:FEE4:4C00
IPv6地址分類
IPv4地址分為單播地址、組播地址和廣播地址。IPv6中去掉了廣播地址,增加了任播地址,也就是說,IPv6地址被分為單播地址、組播地址和任播地址。
單播地址用于標識一個接口,發往該目的地址的報文會被送到被標識的接口。
組播地址用于標識多個接口,發往該目的地址的報文會被送到被標識的所有接口。
任播地址用于標識多個接口,發往該目的地址的報文會被送到被標識的所有接口中最近的一個接口上。這里關于最近的理解,可以理解為從下標數起,最小的那個。任播地址與單播地址使用同一個地址空間,也就是說,由路由器決定該數據包是做任播轉發還是單播轉發。
單播地址可分為下面幾類:
1. 未指定地址: ::/128,即地址全為0。
2. 環回地址 : ::1/128,相當與IPv4中的127.0.0.1。
3. 全球單播地址,類似于IPv4中的公網地址。
4. 內嵌IPv4地址的IPv6地址 如 :::ffff:192.168.10.1。(::ffff:c6a8:0a0a)當需要將IPv4單播地址與IPv6全球單播地址建立聯系的時候一般使用這種地址,分為兩種。一種是IPv4兼容IPv6地址,另一種是IPv4映射IPv6地址。
IPv4兼容IPv6地址構成形式是96位0加上32位IPv4地址,如 ::192.168.1.1,這種地址最初用于IPv4和IPv6之間的過渡計劃,但現在已經不再需要。
IPv4映射IPv6地址構成形式是80位0加上16位1,再加上IPv4地址,如::ffff:192.168.1.1。
5. 本地鏈路地址,前綴固定fe80::/64,如 fe80::e0:f726:4e68。凡是源地址或目的地址包含由本地鏈路地址的報文,路由器不應當轉發它。這樣的報文只能在LAN中互通。
6. 本地站點地址,前綴fec0::/10,緊接著54位子網ID,作用相當于IPv4中的私網地址,如fec0::e0:f726:4e68。只能在本站內使用,不能在公網上使用。
組播地址:
最重要的字段要屬于最后的組ID(Group-ID)字段了。該字段長度為112位,用以標識組播組,我們知道112位最多可以生成2112個組ID。目前,RFC2373并沒有將所有的112位都定義成組標識,而是建議僅使用該112位的最低32位組ID,將剩余的80位都置0。
任播地址:
這是IPv6特有的地址類型,它用來標識一組網絡接口(通常屬于不同的節點)。目標地址是任播地址的數據包將發送給其中路由意義上最近的一個網絡接口。適合于“One-to-One-of-Many”(一對組中的一個)的通訊場合。接收方只需要是一組接口中的一個即可,如移動用戶上網就需要因地理位置的不同,而接入離用戶最近的一個接收站,這樣才可以使移動用戶在地理位置上不受太多的限制。
任播地址從單播地址空間中進行分配,使用單播地址的任何格式。因而,從語法上,任播地址與單播地址沒有區別。被分配具有任播地址的節點必須得到明確的配置,從而知道它是一個任播地址。目前,任播地址僅被用做目標地址,且僅分配給路由器。
IPv6地址解析原理:
IPv6的地址解析包括兩個過程:一、解析目的IP對應的鏈路層地址,二、鄰居可達性狀態的維護過程。
在IPv4中使用的是ARP協議,在IPv6中使用的是ND(Neighbor discover)協議中的NS和NA報文來實現的。
采用ND協議的優勢在于增加了地址解析協議與底層鏈路的獨立性。對每一種鏈路層系誒都是用相同的地址解析協議,無須再為每一種鏈路層協議定義一個新的地址解析協議。
減小報文的傳播范圍。在IPv4中,ARP使用的是廣播地址,必須泛濫到二層網絡的每臺主機。IPv6的地址解析利用三層的組播尋址限制了地址的傳播范圍,通過將地址解析請求發送到特定解析地址所屬的被請求節點組播組(FF02::1:FF00:0/104+IPv6地址后24位組成),減小了報文的傳播范圍,節省了網絡的帶寬。
在IPv6中,ND協議通過在節點之間交互NS和NA報文完成IPv6地址到鏈路層地址的解析,解析后用得到的鏈路層地址和IPv6地址等信息來建立相應的鄰居緩存表項。
NS報文的主要功能字段包括Target Address和Option字段。
TargetAddress包含待解析的IPv6地址。
NA報文的Option字段只使用鏈路層地址選項(Link layer Address Option)。鏈路層地址選項包括類型、長度和地址三個部分。
當類型為1時,表示源鏈路層地址,在NS、RS、Redirect報文中使用;當類型為2時,表明鏈路層地址為目標鏈路層地址,在NA報文中使用。
IPv6地址解析過程:假如網絡中有主機A和主機B。A的鏈路層地址為MAC1,IPv6地址為IP1;B的鏈路層地址為MAC2,IPv6地址為IP2(假設為2001::1)。則A查詢B的鏈路層地址的過程如下:
1)節點A發送一個NS報文到鏈路上,目的IPv6地址為B對應的被請去節點組播地址(FF02::1:FF00:1),目標地址為IP2,選項字段中攜帶MAC1;
2)節點B接收到該DS報文后,根據NS報文中的源IPv6地址和源鏈路層地址選項更新自己的鄰居緩存表項,并發送一個NA報文來應答NS報文,報文Option字段中的鏈路層地址為自己的鏈路層地址MAC2;
3)節點A收到NA報文后,根據報文中攜帶的節點B的鏈路層創建一個到目標節點B的鄰居緩存表項。
查看鄰居緩存
ip -6 neigh show
查看路由
ip -6 route show
route -A 'inet6'
route -6
添加IPV6地址
ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0
ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
添加默認路由
ip -6 route add <ipv6network>/<prefixlength> via <ipv6address>
ip -6 route add default via 2001:0db8:0:f101::1
route -A inet6 add <ipv6network>/<prefixlength> gw
route -A inet6 add default gw 2001:0db8:0:f101::1
NS報文:
地址ff02::1::ff00:1是1::1被請求節點組播地址。Link-layer包含了自己的鏈路層地址。
NA報文:
Flags標志位字段中三個標志位都置位了,router字段表示發送者是router、solicited字段表示此報文是對NS的回應、override字段表示本次地址解析結果覆蓋以前的結果。NA報文以單播形式發送。
總結
- 上一篇: 常州中医医院(常州中医院朱卫金)
- 下一篇: 工艺美术专业(工艺美术专业学什么)