第15章IPv6簡(jiǎn)介_(kāi)第1頁(yè)
第15章IPv6簡(jiǎn)介_(kāi)第2頁(yè)
第15章IPv6簡(jiǎn)介_(kāi)第3頁(yè)
第15章IPv6簡(jiǎn)介_(kāi)第4頁(yè)
第15章IPv6簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第15章 IPv6簡(jiǎn)介,之前幾章的內(nèi)容都是基于IPv4的協(xié)議進(jìn)行介紹的,由于IPv4協(xié)議IP地址的緊張,目前IPv6協(xié)議正在進(jìn)行研究并逐步趨于成熟。本章介紹IPv6協(xié)議相關(guān)的知識(shí),讀者通過(guò)本章的閱讀,可以了解如下的知識(shí): IPv4的缺點(diǎn)和IPv6的必然性; IPv6的特點(diǎn) IPv6的地址結(jié)構(gòu); IPv6的頭部結(jié)構(gòu); 如何構(gòu)建IPv6的運(yùn)行環(huán)境; IPv6地址結(jié)構(gòu)的代碼定義; IPv6的套接字函數(shù); IPv6的套接字選項(xiàng); IPv6的雜項(xiàng)函數(shù);,15.1 IPv4的缺陷,IPv4的主要缺陷有地址問(wèn)題、安全問(wèn)題、性能問(wèn)題和自動(dòng)配置的不夠人性化等。這些問(wèn)題在IPv4的框架下不能完全有效的進(jìn)行解決,僅

2、能進(jìn)行個(gè)別問(wèn)題的修補(bǔ),例如IPv4的NAT技術(shù)用戶嘗試性的解決IP地址空間問(wèn)題只能獲得局部性的成功。 1IPv4的地址空間危機(jī) 2IPv4的性能 3IPv4的安全 4IPv4的自動(dòng)配置和移動(dòng),15.2 IPv6的特點(diǎn),IPv6就是能夠無(wú)限制地增加IP網(wǎng)址數(shù)量、擁有巨大網(wǎng)址空間和卓越網(wǎng)絡(luò)安全性能等特點(diǎn)的新一代互聯(lián)網(wǎng)協(xié)議。IPv6的技術(shù)特點(diǎn): IPv6提供128位的地址空間,全球可分配地址數(shù)為340282366920938463463374607431768211456個(gè)。 IPv6將自動(dòng)IP地址分配功能作為標(biāo)準(zhǔn)功能。 IPv6對(duì)報(bào)文數(shù)據(jù)報(bào)頭結(jié)構(gòu)作了簡(jiǎn)化,用來(lái)減少處理器的開(kāi)銷并節(jié)省網(wǎng)絡(luò)帶寬。 IP

3、v6的安全性使用了鑒別和加密擴(kuò)展頭部數(shù)據(jù)結(jié)構(gòu)的方法。 IPv4協(xié)議在設(shè)計(jì)之初,采用“盡最大努力”傳輸?shù)姆?wù)質(zhì)量保證方式。 IPv6數(shù)據(jù)包包含了服務(wù)質(zhì)量的特性,能更好的支持多媒體和其他對(duì)服務(wù)質(zhì)量有較高要求的應(yīng)用。,15.3 IPv6的地址,IPv6地址是獨(dú)立接口的標(biāo)識(shí)符,所有的IPv6地址都被分配到接口,而沒(méi)有分配到節(jié)點(diǎn)。IPv6有三種類型地址: 單播地址: 多播地址: 任播地址: 其中單播地址又分為如下三類: 全局可聚集單播地址; 站點(diǎn)本地地址; 鏈路本地地址。,15.3.1 IPv6的單播地址,一個(gè)IPv6單播地址與某個(gè)接口相關(guān)聯(lián)。發(fā)給單播地址的包傳送到由該地址標(biāo)識(shí)的某個(gè)接口上。但是為了滿足

4、負(fù)載平衡系統(tǒng),在RFC2373中允許多個(gè)接口使用同一地址。,15.3.2 可聚集全球單播地址,IPv6為端對(duì)端通信設(shè)計(jì)了一種可分級(jí)的地址結(jié)構(gòu),這種地址被稱為可聚集全球單播地址(Aggregatable Global Unicast Address)??删奂騿尾サ刂罚强梢栽谌蚍秶鷥?nèi)進(jìn)行路由轉(zhuǎn)發(fā)的地址,格式前綴為001,與IPv4公共地址相似。,15.3.3 本地使用單播地址,本地單播地址的傳送范圍限于本地,又分為鏈路本地地址和站點(diǎn)本地地址兩類,分別適用于單條鏈路和一個(gè)站點(diǎn)內(nèi): 1鏈路本地地址 2站點(diǎn)本地地址,15.3.4 兼容性地址,在從IPv4地址向IPv6地址的遷移過(guò)渡期,兩類地址并

5、存,所以還有一些特殊的地址類型: 1IPv4兼容地址 2IPv4映射地址 36to4地址,15.3.5 IPv6多播地址,IPv6的多播與IPv4運(yùn)作相同。多播可以將數(shù)據(jù)傳輸給組內(nèi)所有成員。組的成員是動(dòng)態(tài)的,成員可以在任何時(shí)間加入或者退出一個(gè)組。,15.3.6 IPv6任播地址,IPv6的任播地址是一組接口的集合,這些接口通常屬于不同的節(jié)點(diǎn)。數(shù)據(jù)向任播地址發(fā)送的時(shí)候,會(huì)發(fā)送到路由算法中距離最近的一個(gè)接口。多播地址是一對(duì)多的通信,即接收方是多個(gè)接口,任播地址是一對(duì)一組中的任一個(gè)的長(zhǎng)和,接收方可以從一組接收方中人選一個(gè)。路由器任播地址必須經(jīng)過(guò)預(yù)定義,該地址從子網(wǎng)前綴中產(chǎn)生。,15.3.7 主機(jī)的多

6、個(gè)IPv6地址,即使一個(gè)主機(jī)只有一個(gè)單接口,該主機(jī)也可以有多個(gè)IPv6地址。即可以同時(shí)擁有以下幾種單點(diǎn)傳送地址: 每個(gè)接口的鏈路本地地址; 每個(gè)接口的單播地址(可以是一個(gè)站點(diǎn)本地地址和一個(gè)或多個(gè)可聚集全球地址); 回環(huán)(loopback)接口的回環(huán)地址(:1)。 此外,每臺(tái)主機(jī)還需要時(shí)刻保持收聽(tīng)以下多播地址上的信息: 節(jié)點(diǎn)本地范圍內(nèi)所有節(jié)點(diǎn)組播地址(FF01:1); 鏈路本地范圍內(nèi)所有節(jié)點(diǎn)組播地址(FF02:1); 請(qǐng)求節(jié)點(diǎn)(solicited-node)組播地址(如果主機(jī)的某個(gè)接口加入請(qǐng)求節(jié)點(diǎn)組); 組播組組播地址(如果主機(jī)的某個(gè)接口加入任何組播組)。,15.4 IPv6的頭部,IPv6的包

7、頭共40個(gè)字節(jié),其中包含了IPv6的主要概念。主要有版本號(hào)、業(yè)務(wù)流類別、流標(biāo)簽、負(fù)載長(zhǎng)度、下一個(gè)頭、跳限、原始IP地址和目的IP地址等選項(xiàng)。相對(duì)于IPv4的頭部,IPv6的頭部要簡(jiǎn)單一些,這方便路由和網(wǎng)關(guān)等設(shè)備的大數(shù)據(jù)量計(jì)算。,15.4.1 IPv6頭部格式,15.4.2 與IPv4頭部的對(duì)比,IPv6協(xié)議的頭部與IPv4的頭部結(jié)構(gòu)不同。,15.4.3 IPv6的TCP頭部,IPv6協(xié)議的TCP頭部如圖,包含發(fā)送數(shù)據(jù)主機(jī)的源端口號(hào)、接收數(shù)據(jù)主機(jī)的目的段口號(hào)、發(fā)送數(shù)據(jù)的序列號(hào)、上一個(gè)報(bào)文的應(yīng)答號(hào)、窗口大小、當(dāng)前報(bào)文分片前的偏移量。、校驗(yàn)和及緊急數(shù)據(jù)的偏移量指針等。,15.4.4 IPv6的UDP

8、頭部,IPv6的UDP頭部與TCP相似,包含發(fā)送端的源端口號(hào)、接收端的目的端口號(hào)、UDP數(shù)據(jù)的長(zhǎng)度和校驗(yàn)和。,15.4.5 IPv6的ICMP頭部,如圖15-5所示,IPv6的ICMP頭部基本結(jié)構(gòu)與IPv4的相同,但是其含義發(fā)生了很大的變化。,15.5 IPv6運(yùn)行環(huán)境,在Linux下運(yùn)行和配置IPv6網(wǎng)絡(luò)協(xié)議棧十分容易,在Linux的2.4版本的內(nèi)核中已經(jīng)加入了對(duì)IPv6的支持。配置IPv6的運(yùn)行環(huán)境主要包含內(nèi)核模塊和應(yīng)用層的交互兩個(gè)方面。,15.5.1 加載 IPv6 模塊,要在Linux下運(yùn)行IPv6的程序,需要先查看本系統(tǒng)中是否已經(jīng)加載了IPv6的協(xié)議棧,使用ifconfig命令看一下

9、網(wǎng)卡的設(shè)置狀況:,15.5.2 查看是否支持IPv6,使用命令ping來(lái)檢測(cè)網(wǎng)卡的IPv6地址 IPv4地址類型的網(wǎng)絡(luò)ping的使用不需要指定網(wǎng)絡(luò)接口,系統(tǒng)會(huì)自動(dòng)選擇。在IPv6中,使用命令ping6時(shí)必須指定一個(gè)網(wǎng)卡接口,否則系統(tǒng)將不知道將數(shù)據(jù)包發(fā)送到那個(gè)網(wǎng)絡(luò)設(shè)備,I表示Interface、eth0是第一個(gè)網(wǎng)卡、c表示回路,3表示ping6操作三次。 #ping6 -I eth0 -c 1 fe80:200:e8ff:fea0:2586,15.6 IPv6的結(jié)構(gòu)定義,網(wǎng)絡(luò)協(xié)議棧的結(jié)構(gòu)定義是對(duì)協(xié)議進(jìn)行的的說(shuō)明,IPv6的結(jié)構(gòu)定義在文件sys/socket.h中,主要有地址族、協(xié)議族、IPv6的

10、套接字結(jié)構(gòu)等結(jié)構(gòu)。這些結(jié)構(gòu)有的和IPv4兼容,有的是全新進(jìn)行定義的結(jié)構(gòu),在進(jìn)行程序設(shè)計(jì)的時(shí)候需要注意。,15.6.1 IPv6的地址族和協(xié)議族,IPv6新定義了一個(gè)地址族和協(xié)議族常量來(lái)表示其地址族和協(xié)議族,常量在文件中定義。地址族為常量AF_INET6,用來(lái)表示與IPv4的不同。同時(shí)定義了PF_INET6表示協(xié)議族,這個(gè)變量也在中定義,這兩個(gè)常量的值是相同的,因?yàn)橛校?#define PF_INET6 AF_INET6,15.6.2 套接字地址結(jié)構(gòu),IPv6的地址為128位,與IPv4的32為地址顯著不同,所以定義了一個(gè)新的結(jié)構(gòu)表示IPv6的地址。 1新的IPv6地址結(jié)構(gòu)in6_addr 2新

11、的IPv6套接字地址結(jié)構(gòu)sockaddr_in6 3IPv4地址結(jié)構(gòu)和IPv6地址結(jié)構(gòu)的對(duì)比,15.6.3 地址兼容考慮,為了與之前的IPv4地址兼容,IPv6的地址可以將IPv4的地址映射到IPv6地址的一部分。把IPv4的地址放到IPv6地址的低32位,并且高96位為0:0:0:0:FFFF,這樣IPv4到IPv6的映射為如下的方式: :FFFF:,15.6.4 IPv6通用地址,在頭文件中定義了一個(gè)通用的IPv6地址,起作用與IPv4的INADDR_ANY相似,可以用于綁定任意的本地地址: extern const struct in6_addr in6addr_any;,15.7 IP

12、v6的套接字函數(shù),IPv6的套接字函數(shù)與IPv4的套接字函數(shù)基本是一致的,所發(fā)生的改變主要集中在地址結(jié)構(gòu)上。例如像connect函數(shù)、send函數(shù)、recv函數(shù)、bind函數(shù)等等,而像socket函數(shù),雖然函數(shù)的形式是一致的,但是建立IPv6和建立IPv4類型的套接字的參數(shù)是不一樣的。,15.7.1 socket()函數(shù),函數(shù)socket()的原型沒(méi)有發(fā)生改變,但是在建立IPv6協(xié)議族的套接字時(shí)的選項(xiàng)發(fā)生了變化。 例如,建立一個(gè)IPv4流式套接字的代碼為: s = socket(PF_INET, SOCK_STREAM, 0); 建立IPv4數(shù)據(jù)報(bào)套接字,應(yīng)用層采用如下的方式: s = soc

13、ket(PF_INET, SOCK_DGRAM, 0); 建立IPv6的TCP和UDP套接字的方式是直接把IPv4中的PF_INET替換成PF_INET6。例如建立IPv6/TCP套接字為: s = socket(PF_INET6, SOCK_STREAM, 0); 建立IPv6/UDP套接字為: s = socket(PF_INET6, SOCK_DGRAM, 0);,15.7.2 沒(méi)有發(fā)生改變的函數(shù),當(dāng)建立一個(gè)PF_INET6套接字后,必須使用地址結(jié)構(gòu)sockaddr_in6傳遞給其他調(diào)用的參數(shù),如下的函數(shù)由于沒(méi)有包含地址結(jié)構(gòu),所以其原型沒(méi)有發(fā)生變化: bind() connect() s

14、endmsg() sendto(),15.7.3 發(fā)生改變的函數(shù),由于如下的函數(shù)傳入傳出了地址結(jié)構(gòu),在使用的時(shí)候注意地址的改變: accept() recvfrom() recvmsg() getpeername() getsockname() 其實(shí)這些函數(shù)的原型不用發(fā)生改變,這是因?yàn)榈刂方Y(jié)構(gòu)的傳入傳出是通過(guò)struct sockaddr來(lái)傳送的,需要進(jìn)行強(qiáng)制轉(zhuǎn)換。,15.8 IPv6的套接字選項(xiàng),IPv6中新增加了一些套接字選項(xiàng)和ioctl的控制命令,本節(jié)對(duì)其進(jìn)行簡(jiǎn)要介紹。在IPv6的通用協(xié)議選項(xiàng)中有一簇IPV6_xx的選項(xiàng)名,用于進(jìn)行IPv6的套接字進(jìn)行控制。其他部分主要是ICMPV6部分

15、,即IPv6的ICMP協(xié)議控制部分。,15.8.1 IPv6的套接字選項(xiàng),套接字選項(xiàng)分別增加了級(jí)別IPPROTO_IPV6和IPPROTO_ICMP6的部分。,15.8.2 單播跳限IPV6_UNICAST_HOPS,套接字選項(xiàng)單播跳限IPV6_UNICAST_HOPS用于控制IPv6外出數(shù)據(jù)的跳限。其設(shè)置方式如下: int hoplimit = 10; if (setsockopt(s, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (char *) ,15.8.3 發(fā)送和接收多播包,IPv6發(fā)送多播的UDP包與IPv4有很大的不同,在IPv6協(xié)議中可以指定發(fā)送的多播地址

16、,直接使用函數(shù)sendto()發(fā)送。 設(shè)置和獲取發(fā)送多播包的選項(xiàng)如下: IPV6_MULTICAST_IF,設(shè)置發(fā)送多播包的網(wǎng)絡(luò)接口,參數(shù)為使用中的網(wǎng)絡(luò)接口的序號(hào)。 IPV6_MULTICAST_HOPS,設(shè)置發(fā)送多播包的跳限,參數(shù)的含義如單播跳限設(shè)置選項(xiàng)的含義一致。 IPV6_MULTICAST_LOOP,當(dāng)多播包發(fā)送的對(duì)象包含本地的網(wǎng)絡(luò)接口時(shí),這個(gè)設(shè)置才有效。此選項(xiàng)用于設(shè)置當(dāng)多播發(fā)送到本地時(shí)是否將數(shù)據(jù)的復(fù)制返回。參數(shù)為1時(shí),數(shù)據(jù)會(huì)返回本地,0時(shí),不返回,其他值可能出錯(cuò)。此項(xiàng)的默認(rèn)值為發(fā)送數(shù)據(jù)返回本地。 接收多播的選項(xiàng)有下面兩個(gè),當(dāng)操作失敗時(shí),返回EOPNOTSUPP。 IPV6_JOIN_

17、GROUP,加入某個(gè)多播對(duì)象,并和某個(gè)網(wǎng)絡(luò)接口綁定。當(dāng)網(wǎng)絡(luò)接口序號(hào)設(shè)置為0,則內(nèi)核選定本地網(wǎng)絡(luò)接口。例如,某些內(nèi)核在多播對(duì)象中查找IPv6的路由以決定使用的網(wǎng)絡(luò)接口。 IPV6_LEAVE_GROUP,將某個(gè)主機(jī)從群組總?cè)〕?,取消?duì)其的廣播。 廣播的選項(xiàng)參數(shù)為struct ipv6_mreq,其定義在頭文件中。 struct ipv6_mreq struct in6_addr ipv6mr_multiaddr; /* IPv6 multicast addr */ unsigned int ipv6mr_interface; /* interface index */ ;,15.8.4 IPv6

18、中獲得時(shí)間戳的ioctl命令,在IPv4中獲得時(shí)間戳的命令為SIOCGSTAMP,返回的是數(shù)據(jù)報(bào)到達(dá)的時(shí)間,時(shí)間的精度是微妙,在IPv6中新增加了一個(gè)命令請(qǐng)求SIOCGSTAMPNS,用戶返回?cái)?shù)據(jù)報(bào)文到達(dá)的以納秒為精度的時(shí)間戳。參數(shù)為一個(gè)struct timespec類型的變量,在頭文件中定義,如下所示。 struct timespec time_t tv_sec; /* 秒 */ long tv_nsec; /* 納秒*/ ;,15.9 IPv6的庫(kù)函數(shù),IPv4與IPv6在某些庫(kù)函數(shù)之間存在差別,主要包含地址轉(zhuǎn)換函數(shù)、地址解析函數(shù)和主機(jī)服務(wù)器信息獲取函數(shù)。在使用這些函數(shù)的時(shí)候要注意IPv6

19、和IPv4函數(shù)的參數(shù)之間的含義不同。,15.9.1 地址轉(zhuǎn)換函數(shù)的差異,在IPv4協(xié)議族中,通常使用inet_nto()、inet_aton()和inet_addr()進(jìn)行十進(jìn)制字符串和32位的點(diǎn)分4段式網(wǎng)絡(luò)字節(jié)序之間的轉(zhuǎn)化,其原型如下: int inet_aton(const char *strptr, struct in_addr *addrptr); /* 字符串轉(zhuǎn)換為點(diǎn)分四段式 */ in_addr_t inet_addr(const char * strptr); /* 字符串轉(zhuǎn)換為點(diǎn)分四段式 */ char *inet_ntoa(struct in_addr inaddr); /*

20、 點(diǎn)分四段式的字符串轉(zhuǎn)換為*/,15.9.2 域名解析函數(shù)的差異,IPv4通過(guò)下列函數(shù)完成主機(jī)名或域名到IPv4地址的解析: struct hostent *gethostbyname(const char *hostname);,15.9.3 測(cè)試宏,IPv6中有一些用于測(cè)試的宏,用于方便進(jìn)行判斷,例如判定是否會(huì)換、是否IPv4地址映射的地址、是否全局的IPv6地址等,這些宏在文件中定義,代碼如下: int IN6_IS_ADDR_UNSPECIFIED (const struct in6_addr *); int IN6_IS_ADDR_LOOPBACK (const struct in6

21、_addr *); int IN6_IS_ADDR_MULTICAST (const struct in6_addr *); int IN6_IS_ADDR_LINKLOCAL (const struct in6_addr *); int IN6_IS_ADDR_SITELOCAL (const struct in6_addr *); int IN6_IS_ADDR_V4MAPPED (const struct in6_addr *); int IN6_IS_ADDR_V4COMPAT (const struct in6_addr *); int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_ORGLOCAL (const struct in6_addr *); int IN6_IS_ADDR_MC_GLOBAL (const struct in6_addr *);,15.10 IPv6的編程的一個(gè)簡(jiǎn)單例子,本節(jié)中介紹一個(gè)簡(jiǎn)單的IPv6編程的例子,演示如何進(jìn)行IPv6的編

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論