日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

IPv6的全稱是Internet Protocol Version 6(互聯網協議第6版)的縮寫,是互聯網工程任務組(IETF)設計的用于替代IPv4的下一代IP協議,其地址數量號稱可以為全世界的每一粒沙子編上一個地址 。

IPv6地址結構的詳細探究

 

由于IPv4最大的問題在于網絡地址(公網IP)資源不足,無論是PC電腦,還是移動端的手機和PAD都需要占用IP地址,IPv4面臨著即將被用盡的窘境,嚴重制約了互聯網的應用和發展。IPv6的使用,不僅能解決網絡地址資源數量的問題,而且也解決了多種接入設備連入互聯網的障礙 。

IPv6地址和規范將會逐漸普及。2020年3月23日,工業和信息化部發布《關于開展2020年IPv6端到端貫通能力提升專項行動的通知》,要求到2020年末,IPv6活躍連接數達到11.5 億,較2019年8億連接數的目標提高了43%。隨著IPv6的發展與逐步普及,我們的軟件也要添加對IPv6地址的支持,不再是僅僅支持IPv4了。

本文簡單的梳理一下IPv6的IP地址結構和分配方式,同時也介紹一下基本使用方法,在此分享給大家。

一、IPv6的地址結構定義

節點、鏈路、站點、接口在IPv6里面的概念如下:

節點:具有IPv6地址且接口配置為支持IPV6的任何系統,可以理解為主機和路由器。每個節點上至少要有一個鏈路本地單播地址,另外還可分配任何類型(單播、泛播和多播)或范圍的IPv6地址。

鏈路:單一且連續的網絡介質,其兩端均連接有路由器。節點所在的網絡就是鏈路本地的范圍,通常是不能跨越路由器的,也就是在一條鏈路上。以太網就是一個交換機下的所有設備都在一個鏈路上。

站點:就是一個企業內部的網絡,可以有多個網段,類似IPv4的私網范圍。但目前已經被RFC廢除了,IPv6一般也不需要私網的存在意義。

接口:比如一個網卡的網口、上網的電話線口,一個節點可以被分配多個接口,而每個接口可以有多個ipv6地址。所有類型的IPv6地址都是屬于接口(Interface)而不是節點(node),在單播地址中,IPv6 地址的最后 64 位是對于 IPv6 地址的 64 位前綴而言唯一的接口標識(由mac地址自動生成,或者根據EUI-64規范手動生成)。一個接口在一個子網前綴中唯一。

1、IPv6地址表示

1)冒分十六進制表示法:IPv6地址包括128比特,以16位為一分組,每個16位分組寫成4個十六進制數,中間用冒號分隔。如
21DA:00D3:0000:0000:02AA:00FF:FE28:9C5A

2)表示方法對大小寫不敏感:16比特的十六進制數對大小寫不敏感,如:
21DA:00D3:0000:0000:02aa:00ff:fe28:9C5A 。

3)每組的前導0可簡化表示:IPv6地址中每個16位分組中的前導零位可以去除做簡化表示,如:
21DA:D3:0:0:2AA:FF:FE28:9C5A

4)中間比特連續為0的情況:可以把連續出現的0省略掉,用::代替(注意::只能出現一次,否則不能確定到底有多少省略的0),該符號也能用來壓縮地址中前部和尾部的相鄰的連續零位,如下所示:


21DA:D3:0:0:2AA:FF:FE28:9C5A 等價于 21DA:D3::2AA:FF:FE28:9C5A

FF01:0:0:0:0:0:0:101 等價于 FF01::101

0:0:0:0:0:0:0:1 等價于 ::1

0:0:0:0:0:0:0:0 等價于 ::

5)在IPv4和IPv6混合環境:x:x:x:x:x:x:d.d.d.d,其中x是地址中6個高階16位分組的十六進制值,d是地址中4個低階8位分組的十進制值(標準IPv4表示)。例如地址0:0:0:0:0:0:13.1.68.3,
0:0:0:0:0:FFFF:129.144.52.38 寫成壓縮形式為::13.1.68.3,::FFFF.129.144.52.38。

6)URL中使用文本IPv6地址:文本地址應該用符號‘[’和‘]’來封閉。例如文本IPv6地址
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210寫作URL示例為http://[
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html。

7)前綴表示方法:
ipv6-address/prefix-length 其中,ipv6-address為16進制表示的128比特地址;prefix-length為10進制表示的地址前綴長度。和IPv4類似,IPv6的子網前綴和鏈路關聯,多個子網前綴可分配給同一鏈路。

例如,2001:0DB8:0:CD30::/60

當書寫節點地址和該節點地址的前綴(例如,節點的子網前綴)時,二者合并寫法如下:

節點地址
2001:0DB8:0:CD30:123:4567:89AB:CDEF

和它的子網號 2001:0DB8:0:CD30::/60

二者能夠縮寫為
2001:0DB8:0:CD30:123:4567:89AB:CDEF/60

2、EUI-64格式

EUI-64格式:擴展惟一標識符

在IPV6中,無狀態自動配置機制使用EUI-64格式來自動配置IPV6地址。所謂無狀態自動配置是指在網絡中沒有DHCP服務器的情況下,允許節點自行配置IPV6地址的機制。

EUI-64的構造規則:根據接口的MAC地址再加上固定的前綴來生成一個IPV6的地址。

工作原理:自動將48bit的以太網MAC地址擴展成64bit,再掛在一個64bit的前綴后面,組成一個IPV6地址

步驟一、將48位的MAC地址從中間分開,插入一個固定數值FFFE

0050:3EE4:4C00-->0050:3EFF:FEE4:4C00

步驟二、將第7個比特位反轉,如果原來是0,就變為1,如果原來是1,就變為0

0050:3EFF:FEE4:4C00-->0250:3EFF:FEE4:4C00

步驟三、加上前綴:比如加上鏈路本地地址前綴FE80,FE80::0250:3EFF:FEE4:4C00 這就是一個完整的IPV6地址。

反轉的原因:在MAC地址中,第7比特為1表示本地管理,為0表示全球管理;在EUI-64格式中,第7位為1表示全球惟一,為0表示本地惟一

3、 IPv6地址分類

IPv6地址結構的詳細探究

 

1) IPv6地址分為單播地址、任播地址、多播地址。和IPv4相比,取消了廣播地址類型,以更豐富的多播地址代替,同時增加了任播地址類型。任播地址取自(具有任何范圍的)單播地址空間,在句法上任播地址與單播地址難以區分。

2)“未指定的地址”(全0)、環回地址(::1)和嵌入IPv4地址的IPv6地址從0000 0000格式前綴中分配。

3) 除多播地址(格式前綴1111 1111)外,格式前綴從001到111的地址都必須有64比特的EUI-64格式的接口標識符。

4) 所有格式前綴不是多播格式前綴(1111 1111)的IPv6地址都是IPv6單播格式(任播和IPv6單播格式相同)。IPv6單播地址和IPv4單播地址一樣可聚合。

4、IPv6單播地址

單一接口的標識符,用于一對一的連接。

IPv6地址結構的詳細探究

 

IPv6單播地址由子網前綴和接口ID兩部分組成。子網前綴由IANA、ISP和各組織分配。接口標識符目前定義為64比特,可以由本地鏈路標識MAC生成或采用EUI-64格式隨機算法生成以保證唯一性。

有以下六種類型:

1)可聚合全球單播地址

IPv6地址結構的詳細探究

 

目前已分配的地址前綴:2001::/3, 2000::
~3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

目前實際用于IPV6 因特網運作的前綴:2001::/16;

2002::/16為使用6to4過渡機制節點保留;

3ffe::/16由于6bone測試目的前綴。

2)本地鏈路地址

IPv6地址結構的詳細探究

 

節點啟用ipv6,每個接口自動會生成一個本地鏈路地址。其前綴64bit是固定的,其后64bit的接口ID根據EUI-64格式來構造。

鏈路本地地址只能在本地鏈路通信,不能過路由。

3)站點本地地址

IPV6私網地址,就像IPV4的私網地址一樣。只能在站點內使用,不能用于公網。

IPv6地址結構的詳細探究

 

最初設計站點本地地址是用于不需要全球前綴的站點內部尋址。現在,站點本地地址已經過時了,在新的實現中,必須不再支持由[RFC3513]定義的這個前綴的特殊性質(即,新的實現必須將此前綴看作是全球單播)。

已有的實現和部署可以繼續使用這個前綴。

4)不確定地址

單播地址0:0:0:0:0:0:0:0稱為不確定地址。它不能分配給任何節點。它的一個應用示例是初始化主機時,在主機未取得自己的地址以前,可在它發送的任何IPv6包的源地址字段放上不確定地址。不確定地址不能在IPv6包中用作目的地址,也不能用在IPv6路由頭中;

5)回環地址

單播地址0:0:0:0:0:0:0:1稱為回環地址。節點用它來向自身發送IPv6包。它不能分配給任何物理接口。

6)帶有嵌入ipv4地址的ipv6地址

分兩類:Ipv4兼容的ipv6地址 和 Ipv4映射的ipv6地址。

IPv6地址結構的詳細探究

 

Ipv4兼容的ipv6地址:ipv4地址必須全球唯一。像::13.1.68.3這種前96比特全0的地址,主要用在一種自動隧道技術,目的地址為這種地址的報文會被自動IPv4隧道封裝,由于這種技術不能解決地址耗盡問題,已經逐漸被廢棄。

IPv6地址結構的詳細探究

 

Ipv4映射的ipv6地址:像::FFFF.129.144.52.38這種最前80比特為全0,中間16比特為全1,最后32比特為IPv4地址,這種地址用來把只支持IPv4的節點用IPv6地址表示。在支持雙棧的IPv6節點上,IPv6應用發送目的報文是這種地址時,實際上發出的報文為IPv4報文(目的地址是“IPv4映射的IPv6地址”中的IPv4地址)。

5、IPv6任播地址

一到近模式,多個設備共享一個地址。

IPv6任播地址是分配給一套屬于不同節點的接口的全球地址,地址格式和IPv6單播地址相同,用來標識一組接口的地址,一般這些接口屬于不同的節點。

分配相同的ipv6地址給擁有相同功能的設備,發送方發送一個以任播地址為目標的包,路由器接收到這個包后,就轉發給具有這個地址的離它最近的設備。當一個單播地址被分配給多個接口時,單播地址自動變成任播地址。

如下邊兩個圖所示,第一個配置沒有沖突的地址,第二個配置了另外一臺主機一樣的地址。同一鏈路的兩個主機配置了相同的ipv6地址后,后邊的地址標注就是“復制”。

IPv6地址結構的詳細探究

 


IPv6地址結構的詳細探究

 

用途:

IPv6任播地址的用途之一是用來標識屬于同一提供因特網服務的組織的一組路由器。這些地址可在IPv6路由頭中作為中間轉發路由器,以使報文能夠通過特定一組路由器進行轉發。

另一個用途就是標識特定子網的一組路由器,報文只要被其中一個路由器接收即可。

其中有些任播地址是已經定義好的,如子網路由器任播地址,格式如下。

IPv6地址結構的詳細探究

 

任播地址中“子網前綴”用來標識一個特定鏈路。此任播地址在句法上,與該鏈路上接口標識符設置為0的接口的單播地址相同。發送到子網路由器任播地址的報文會被送到子網中的一個路由器。所有路由器都必須支持子網任播地址。

子網路由器任播地址用于節點需要和遠端子網上所有路由器中的一個(不關心具體是哪一個)通信時使用。例如,一個移動節點需要和它的“家鄉”子網上的所有移動代理中的一個進行通信。

任播地址具有以下限制:

任播地址不得用作IPv6 數據包的源地址;

任播地址不得分配給IPv6 主機,但是可以分配給IPv6 路由器。

6、IPv6多播地址

一對多模式。

IPv6多播地址用來標識一組接口,一般這些接口屬于不同的節點。一個節點可能屬于0到多個多播組。發往多播地址的報文被多播地址標識的所有接口接收。

1)IPv6多播地址格式定義:

FF00::/8

IPv6地址結構的詳細探究

 

其中:

① 11111111:8比特。標識此地址為多播地址

② Flags:4比特。flag域中定義如下:

IPv6地址結構的詳細探究

 

最高的3比特標記為保留域,必須為0

T = 0表示為永久分配(“公認”)多播地址(由IANA分配);

T = 1表示為多播,表示用戶可使用的臨時多播地址

③ Scope:4比特。用來標記此多播組的應用范圍。

IPv6地址結構的詳細探究

 

④ group ID

標識多播組(可能是永久的,也可能是臨時的,范圍由scope定義)

2) IPv6永久分配的多播地址

目前的永久分配(“周知”)多播組如下:

保留的多播地址:

FF00::---FF0F::(共16個地址)

所有節點的地址:

FF01:0:0:0:0:0:0:1 (節點本地)

FF02:0:0:0:0:0:0:1 (鏈路本地,在本地鏈路范圍內的所有節點)

所有路由器地址:

FF01:0:0:0:0:0:0:2 (節點本地)

FF02:0:0:0:0:0:0:2 (鏈路本地,在本地鏈路范圍內的所有路由器)

FF05:0:0:0:0:0:0:2 (站點本地)

被請求節點的地址:

FF02:0:0:0:0:1:FFXX:XXXX/104

上述地址由被請求節點的單播或任播地址形成:取被請求節點單播或泛播地址的低24比特,在前面增加前綴FF02:0:0:0:0:1:FF00::/104構成。

對于節點或路由器的接口上配置的每個單播地址或者任播地址,都會自動生成一個對應的被請求節點的組播地址。只在本地鏈路范圍有效。

特點:

① 在本地鏈路上,被請求的節點的組播地址通常只包含一個用戶

② 只要知道一個節點的IPV6地址,就能計算出它的被請求節點的組播地址,例如,和IPv6地址4037::01:800:200E:8C6C對應的被請求節點多播地址是FF02::1:FF0E:8C6C。

作用:

① 在IPV6中沒有ARP,ICMP替代了ARP的功能,被請求節點的組播地址用IPv6鄰居發現協議中,用在鄰居請求報文中,由于只有后24比特單播地址相同的節點才會接收目的地址為此地址的報文,因此減少了通信流量(和IPv4 ARP相比)。

② 用于重復地址檢測(DAD:Duplicate address Detection),無狀態配置時,節點利用DAD驗證在其本地鏈路此地址是否被使用。

IPv6地址結構的詳細探究

 

7、必須支持的Ipv6地址

1) 節點必須支持的IPv6地址

• 每個主機必須把下列地址作為自身的地址

• 自身接口的鏈路本地地址

• 分配的單播地址

• 環回地址

• 所有節點多播地址

• 每個分配的單播或多播地址對應的被請求節點多播地址

• 此主機所屬的其它多播組地址

2) 路由器必須支持的IPv6地址

• 接口配置為路由器接口的子網路由器泛播地址

• 任何其它路由器配置的泛播地址

• 所有路由器多播地址

• 此路由器所屬的其它多播組地址

二、IPv6地址分配

1、地址配置

IPv6支持無狀態地址自動配置和狀態地址自動配置兩種地址自動配置方式。

無狀態地址自動配置:

無狀態自動配置不需要手動配置主機,只需對路由器進行很少的配置(如果需要的話),而且不需要其他服務器。無狀態機制允許主機生成其本身的地址。無狀態機制使用本地信息以及由路由器通告的非本地信息來生成地址。

需要配置地址的網絡接口先使用鄰居發現機制獲得一個鏈路本地地址。網絡接口得到這個鏈路本地地址之后,再接收路由器宣告的地址前綴,結合接口標識得到一個全球地址。IPv6節點通過地址自動配置得到IPv6地址和網關地址。

在自動配置過程中,主機將執行以下操作:

① 為每個接口創建鏈路本地地址,該操作不要求鏈路上有路由器。

② 檢驗地址在鏈路上是否唯一,該操作不要求鏈路上有路由器。

③ 確定全局地址是應通過無狀態機制、有狀態機制還是這兩種機制來獲取。(要求鏈路上有路由器。)

狀態地址自動配置:如動態主機配置協議(DHCP),需要一個DHCP服務器,通過客戶機/服務器模式從DHCP服務器處得到地址配置的信息。

2、地址分配

① 全球單播地址空間分配

因特網分配地址權威機構(IANA)負責IPv6地址空間的分配。目前IANA從整個可聚合全球單播地址空間(格式前綴為001)中取2001::/16進行分配。

② IPv6實驗網絡地址分配(6BONE)

6BONE網絡是全球范圍的IPv6實驗網絡,使用網絡前綴3ffe:0000::/16。每個偽頂級聚合分配3ffe:0800::/28范圍內的/28前綴,最多支持2048個偽頂級聚合。處于末端的站點從上游提供者得到/48前綴,每個站點內還可細分為多個/64前綴。

6BONE網絡按層次化結構分配地址,地址空間由IANA定義配,分配策略在RFC2921(6BONE偽頂級聚合和網絡層聚合格式)中定義。

三、IPv6的使用

1) 首先啟用ipv6,方法如下:

本地測試使用windows環境。

IPv6地址結構的詳細探究

 

或者命令行形式:ipv6 install

XP系統下可以使用netsh-->interface-->ipv6-->install來安裝ipv6協議。

也可以如下圖所示,協議部分添加,后邊會有ipv6的安裝。

IPv6地址結構的詳細探究

 

啟用ipv6后,主機就會自動生成一個ipv6鏈路本地地址。

2) 也可以手動配置ipv6地址

可以使用界面配置:

IPv6地址結構的詳細探究

 

也可以命令行配置:

cmd

netsh

i ipv6

show i 記住 本地連接 中的索引值

add address int=索引值 ipv6地址

show address int=索引值

3) ipv6地址查看

ipconfig

IPv6地址結構的詳細探究

 

查看時會發現有隧道地址如下:

IPv6地址結構的詳細探究

 

Ipv6和ipv4通過隧道通訊,是要有特別的協議和設備來支持,比如上圖的teredo,這個有機會下一篇案例再介紹。

啟用teredo就會有teredo的隧道地址,一般用來和外部主機對通。本地測試使用本地鏈路地址或者手動配置的地址就可以了。

注:一般鏈路本地自動生成是根據MAC地址使用EUI-64格式作為接口ID,但是我電腦上的卻不是,查看其他幾個電腦的就是根據MAC生成的,像是使用隨機碼生成方式,只要地址在鏈路內唯一就可以。

4) 關于ipv6的幾個點簡介

① PfcNtop 和 PfcPton

PFC模塊提供的PfcNtop、 PfcPton封裝了inet_ntop和 inet_pton的功能,主要用來做ip地址和其字符串表示形式的轉換。

② 結構體PFC_IPADDR

typedef struct PROTO_API tagPFC_IPADDR

{

PFC_TRANSPORT_TYPE m_emType; ///< transport type

PFC_IPADDR_UNION m_tAddr; ///< IP address

u16 m_wPort; ///< port number, host format

PFC_DISTRIBUTION_TYPE m_emDistribution;

}

協議組件提供的用來表示ipv4 or ipv6的結構體。

m_emType指示是ipv4還是ipv6,默認值是無效值none。

m_tAddr是union類型,表示ipv4 oripv6的具體ip地址。其中ipv6的具體表示如下:

/// PFC IPv6 address

typedef struct

{

u8 m_abyIP[PFC_IPV6_ADDR_SIZE]; ///< 16 byte IP address

u16 m_wScopeId; ///< scope

} PFC_IPADDRv6;

PFC_IPV6_ADDR_SIZE 為16個字節的宏。所以ipv6地址使用16個字節的u8數組表示。m_wScopeId主要是給鏈路本地地址使用,因為鏈路本地地址在一個鏈路上唯一,而一個主機可以使用相同的鏈路本地地址接入兩個不同的鏈路,那么就要用scopeid來區分。此字段對應sockaddr_in6結構體里的uint32_t sin6_scope_id。經測試,如果系統只有一個鏈路本地地址,win7、win10不用填此字段對通鏈路上的機器也沒有問題,但是和xp系統的對通就有問題。

③ getaddrinfo函數

獲取ip地址,gethostbyname和gethostbyaddr這兩個函數僅僅支持IPv4,getaddrinfo可以支持ipv4和ipv6,返回的是一個sockaddr結構的鏈表而不是一個地址清單。這個方法,協議組件暫未提供封裝,有需求自己歡快使用吧。

最后

IPv6涉及的東西特別多,有些概念上的東西有時很不容易理解,必須查資料啊查資料然后理解它們。本篇只根據rfc4291 介紹了IPv6的部分內容,以后還需要查閱更多的資料IPv6的其他方面的內容。

分享到:
標簽:IPv6
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定