IPv6简介

一、IPv4的缺陷

IPv4 的主要缺陷有地址问题、安全问题、性能问题和自动配置不够人性化等。这些问题在 IPv4 的框架下不能完全有效地进行解决,仅能进行个别问题的修补,例如 IPv4 的NAT技术用户尝试性地解决 IP 地址空间问题只能获得局部性的成功。

①.IPv4 的地址空间危机

  1. IPv4 的地址以32位数值表示,最多可达40 多亿个地址,如果IP 地址是以递增的方式分配,即第一个主机为 1, 第二个主机的地址为2的方式来分配 IP 地址才能达到预定的40 亿个数据。

  2. 目前 IP 地址的分配策略是按照树状进行划分的,即把地址分配给机构,然后由机构对IP 地址进行再次分配,这造成了IP 地址的分配不足,总有部分IP 地址作为预留或者其他的用途没有分配给主机。

  3. IP 地址分为5 类,其中的 3 类地址用于IP 网络,按照规划,这 3 类地址足够用于网络的构建。

  4. 其中A类地址为 126个,分给了最大的实体,例如政府机关、高校及先入的企业部门,主要分配在美国。这类地址很庞大,但是由于历史原因,利用却很不足。

  5. B类地址有 16000 个,用于一 些大型的机构,如大学和大公司。

  6. C类地址数量比较多,每个网络上的主机数量为 255个,用于IP 网络的其他机构。

  7. A类地址的少数公司并不能高效率地利用IP地址,而获得C类地址的小机构只有几个主机而不能真正使用此类地址,造成B类地址的获得越来越难。

  8. NAT技术将网络分为了内网和外网,主要就是因为IP地址不够造成的。电信网通等运营部门的动态IP分配,也是为了高效地利用IP地址的方法,使得用户的IP可以多人多次使用。

②.IPv4的性能

IPv4的设计最初是一个试验品,当时没有考虑到实现时的某些现实情况,对目前的Internet网络的广泛应用也没有预料到。所以在某些方面存在不足,例如最大传输单元、最大包的长度、校验和、IP的头部设计、IP选路等都没有考虑到其性能。

③.IPv4的安全

由于IPv4将网络安全放在了应用层考虑,没有在协议栈层进行设计,存在很大的隐患。

④.IPv4的自动配置和移动

IPv4的自动配置主要体现在移动方面,在一个主机从一个地点移动到新的地点的时候,需要重新配置,并且由于提供服务的ISP不同,可能的配置千差万别,例如IP、网关、 DNS都要发生变化,甚至还要加上浏览器的代理出口。而原来主机的所在位置,即使足够空闲也不能带到新的IP紧张的新地点。

二、IPv6的特点

IPv6就是能够无限制地增加IP网址数量、拥有巨大网址空间和卓越网络安全性能等特点的新一代互联网协议。IPv6的技术特点如下:

  1. IPv6提供128位的地址空间,全球可分配地址数为340282366920938463463374607431768211456个。IPv6的地址结构采用128位的另一个原因是采用了层次化的地址结构设计,允许对地址进行层次化的划分,提供大量不同类型的IP地址。

  2. IPv6将自动IP地址分配功能作为标准功能。具有网络功能的机器一旦连接上网络便可自动设定地址。它有两个优点:一是最终用户用不着花精力进行地址设定,二是可以大大减轻网络管理者的负担。

  3. IPv6对报文数据报头结构作了简化,用来减少处理器的开销并节省网络带宽。数据报文的头部采用了流线型的设计,IPv6的报头由一个基本报头和多个扩展报头(Extension Header)构成,基本报头具有固定的长度(40字节),放置所有路由器都需要处理的信息。

  4. IPv6的安全性使用了鉴别和加密扩展头部数据结构的方法。作为lPSec的一项重要应用,IPv6集成了**虚拟专用网(VPN)**的功能,使用IPv6可以更容易地实现更为安全可靠的虚拟专用网。

  5. IPv6 协议在设计之初,采用 “尽最大努力” 传输的服务质量保证方式。文本数据、静态图像数据等传输对 QoS 没有要求,随着 IP 网上多媒体业务的增加,如 IP 电话、VoD、电视会议等实时应用,对传输延时和延时抖动均有严格的要求。

  6. IPv6 数据包包含了服务质量的特性,能更好地支持多媒体和其他对服务质量有较高要求的应用。

三、IPv6的地址

IPv6 地址是独立接口的标识符,所有的 IPv6 地址都被分配到接口,而没有分配到节点。IPv6有以下 3种类型地址:

  1. 单播地址:这个地址是和 IPv4 的地址相对应的一 个,每个主机接口有一 个单播地址。
  2. 多播地址:这个地址是 一 个设备组的标识,发往这个地址的数据会被整个设备组上的设备接收到。
  3. 任播地址:报文发往 一 个组内的任意设备而不是所有的设备。
    单播地址又分为如下 3类:
    1. 全局可聚集单播地址;
    2. 站点本地地址;
    3. 链路本地地址。

1.IPv6的单播地址

IPv6 单播地址与某个接口相关联。发给单播地址的包传送到由该地址标识的某个接口上。但是为了满足负载平衡系统,在 RFC2373 中允许多个接口使用同一 地址。IPv6的单点传送 IP 地址包括:可聚集全球单点传送地址、链路本地地址、站点本地地址和其他特殊的单点传送地址。
在这里插入图片描述

如果一 个单播IP 地址所有位均为0, 那么该地址称为未指定的地址。以文本形式表示为 "::"。单播地址 "::1" "0:0:0:0:0:0:0:1" 称为环回地址。节点向自已发送数据包时采用环回地址。

2.可聚集全球单播地址

IPv6为端对端通信设计了 一 种可分级的地址结构,这种地址被称为可聚集全球单播地址 (AggregatableGlobal Unicast Address)。可聚集全球单播地址,是可以在全球范围内进行路由转发的地址,格式前缀为 001, 与IPv4 公共地址相似。
在这里插入图片描述

字段格式前缀 FP 之后,分别是 13 位的TLAID、8位的RES、24位的NLA ID、16位 SLA ID 和 64位主机接口IDTLA (Top Level Aggregator, 顶级聚合体)、 NLA (Next Level Aggregator, 下级聚合体)、 SLA (Site Level Aggregator,节点级聚合体)三者构成了自顶向下排列的3个网络层次。

  1. FP (Fonnat prefIX) : 格式前缀,值为001, 用于区别其他地址类型。
  2. TLA ID (Top-level Aggregation Identifier) : 顶级聚集标识符,是与长途服务供应商和电话公司相互连接的公共骨干网络接入点,其ID的分配由国际Internet注册机构lANA严格管理。
  3. RES (Reserved for future use) : 8位保留位,将来用做扩充。
  4. NLA ID (Next-Level Aggregation Identifier) : 下一 级聚集标识符。
  5. SLA ID (Site-Level Aggregation Identifier) : 站点级聚集标识符,它可以是 一 个机构或一 个小型ISP。分层结构的最底层是网络主机。
  6. Interface ID : 接口标识符,IPv6单播地址中的接口标识符用千在链路中标识接口。

3.本地使用单播地址

本地单播地址的传送范围限于本地,又分为链路本地地址站点本地地址两类,分别适用于单条链路和一个站点内。

①.链路本地地址

链路本地地址,格式前缀为1111111010, 用于同一 链路的相邻节点间通信。链路本地地址用于邻居发现,且总是自动配置的,包含链路本地地址的包不会被IPv6路由器转发。
在这里插入图片描述

②.站点本地地址

站点本地地址,格式前缀为1111111011,相当于10.0.0.0/8、172.16.0.0/12和192.168.0.0/16等IPv4私用地址空间。

例如企业专用局域网,如果没有连接到IPv6 Internet上,在企业内部可以使用本地站点地址,其他站点不能访问站点本地地址,包含站点本地地址的包不会被路由器转发到企业专用局域网之外。
一个站点通常是位于同一地理位置的机构网络或子网。与链路本地地址不同的是,站点本地地址不是自动配置的,而必须使用无状态或全状态地址配置服务。
在这里插入图片描述

4.兼容性地址

①.IPv4 兼容地址

为了与IPv4地址地址相兼容,IPv6支持一种 IPv4兼容地址,这种地址在原有IPv4 地址的基础上构造 IPv6 地址。通过在 IPv6 的低 32 位上携带 IPv4 的 IP 地址,使具有IPv4和 IPv6 两种地址的主机可 以在IPv6 网络上进行通信 。这种地址 的表示格式为 "0:0:0:0:0:0:a.b.c.d" 或者 "::a.b.c.d ", 其中 "a.b.c.d "是点分十进制表示的 IPv4地址。

在这里插入图片描述
例:一 个主机的IPv4 地址为 "192.168.0.1", 其 IPv6 的兼容地址为 "::192.168.0.1"

②.IPv4 映射地址

IPv4 兼容地址用于具有 IPv4和 IPv6双栈的主机在IPv6 网络上的通信,而今支持IPv4协议栈的主机可以使用IPv4 映射地址在IPv6 网络上进行通信。IPv4 映射地址是另一 种内嵌IPv4地址的IPv6地址,它的表示格式为"0:0:0:0:0:FFFF:a.b.c.d ""::FFFF:a.b.c.d "。使用这种地址时,需要应用程序支持 IPv6 地址和IPv4 地址。这种 “映射 IPv4 的 IPv6 地址” 的表示方式如下所示。
在这里插入图片描述

例:一 个 主 机 的 1Pv4 地 址 为 " 192.168.0.1 ", 其 1Pv6 的 映 射 地 址 "::FFFF:192.168.0.1"

③.6to4 地址

IPv6地址中嵌入IPv4地址的表示方法用于在IPv6的地址上进行通信,如果网络是IPv4协议,则需要使用 6to4地址。6to4地址用于在IPv4地址上支待IPv4和IPv6两种协议的节点间的通信。
6to4 方式通过多种技术在主机和路由器间传递IPv6数据分组。

5.IPv6多播地址

IPv6 的多播与IPv4 运作相同。多播可以将数据传输给组内所有成员。组的成员是动态的,成员可以在任何时间加入或者退出 一 个组。IPv6 多播地址格式前缀为 11111111, 此外还包括标志(Flags)、范围域和组1D等字段,
在这里插入图片描述

  1. 前缀为8位,值为0xFF, 表示地址为IPv6多播地址。
  2. 标志为4位,表示为000T。其中高三位保留,必须初始化成0。T=0表示一 个被ANA永久分配的多播地址; T=1表示一个临时的多播地址。
  3. 范围为4位,表示一 个多播范围域,用来限制多播的范围。下表列出了范围字段值及其含义。
    在这里插入图片描述
  4. 组ID为112位,标识一 个给定范围内的多播组。例如,地址"FF02:0:0:0:0:0:0:1 "表示链路地址的所有节点地址,地址"FF02:0:0:0:0:0:0:2"表示链路地址的所有路由器地址,地址"FF05:0:0:0:0:0:0:2"表示站点本地的所有路由器地址。
6.IPv6任播地址

IPv6的任播地址是一组接口的集合,这些接口通常属于不同的节点。数据向任播地址发送的时候,会发送到路由算法中距离最近的一 个接口。
多播地址是一 对多的通信,即接收方是多个接口,任播地址是一 对一 组中的任一 个的场合,发送方可以从一 组接收方中选一 个。
路由器任播地址必须经过预定义,该地址从子网前缀中产生。为构造一 个子网一路由器任播地址,子网前缀必须固定,余下的位数置为全0。
在这里插入图片描述

7.主机的多个IPv6地址

即使一 个主机只有一 个单接口,该主机也可以有多个IPv6地址。即可以同时拥有以下J几种单点传送地址:

  1. 每个接口的链路本地地址;

  2. 每个接口的单播地址(可以是一 个站点本地地址和一 个或多个可聚集全球地址);

  3. 回环(loopback)接口的回环地址(::1)

此外,每台主机还需要时刻保持收听以下多播地址上的信息:

  1. 节点本地范围内所有节点组播地址(FF01::1)
  2. 链路本地范围内所有节点组播地址(FF02::1)
  3. 请求节点 (solicited-node) 组播地址(如果主机的某个接口加入请求节点组);
  4. 组播组组播地址(如果主机的某个接口加入任何组播组)。

四、IPv6的头部

IPv6 的包头共 40个字节,其中包含了IPv6 的主要概念。

1.IPv6头部格式

IPv6包头格式:
在这里插入图片描述
IPv4 中,所有包头以32位为单位,即以4 个字节为长度单位。在 IPv6 中的头部中,长度是以 64位为单位

下面是 IPv6协议的包含字段含义:

  1. 版本字段:表示协议版本号,长度为4位,对于IPv6, 该字段必须为 6。

  2. 类别字段:表示报文的类别和优先级,它与 IPv4 的服务类型字段的含义类似。字段的长度为 8位,该字段的默认值是全 0。

  3. 流标签字段:用于标识属于同一业务流的包,是IPv6 的新增字段,长度为20 位。

  4. 净荷长度字段:表示报文中的有效载荷的长度,它与 IPv4头部的总长度字段不同,这个字段的值不包含头部的长度。它没有将 IPv6 的 40 位报头计算在内,只计算报头后面的扩展和数据部分的长度。字段的长度为16位,最多可以表示长度为64KB 有效数据载荷。

  5. 下一 个头字段:与 IPv4 头部的协议字段相似,但略有不同。IPv4 的 IP 协议的上层协议, TCP 和 UDP 协议始终在 IP 包头后面,而 IPv6 的扩展部分可以放在包头部分。扩展部分字段可以用来表示验证、加密和分片等功能。

  6. 跳限字段:与IPv4 中的生存时间字段含义类似,它表示经过的路由器个数。包在转发的过程中,每经过 一 个路由器,这个字段的值就会减去 1, 如果这个字段的值为0后,报文就会被丢弃。这个字段的长度为8位。

  7. 源地址字段:表示发送数据报文主机的 IP地址,字段的长度为128位。

  8. 目的地址字段:表示接受数据的目的主机的 IP地址,这个地址可以使一 个单播、组播或任意点播地址,字段的长度为 128位。

虽然 IPv6报头的字节长度两倍于Ipv4报头(40个字节与20个字节),但IPv6对报头结构进行了精简。 IPv6 的报头丢弃了IPv4字段中的几个,从而使得数据的处理更有效率。

2.与IPv4头部的对比

IPv6协议的头部与IPv4的头部结构不同,IPv4的头部如图如下所示:
在这里插入图片描述

两种协议的头部主要有如下不同:

  1. 版本字段在两种协议中没有变化, IPv4中为4,IPv6 中为6,表示两种不同的协议类型。

  2. IPv6 丢弃了IPv4的首部长度、服务类型、标识、标志、片偏移和头部校验和字段。总长度、生存时间和协议类型字段在 IPv6 中有了新名字,功能稍微进行了重新定义。

  3. IPv4 中的选项字段已从报头中消失,改为扩展功能。

  4. IPv6 加入了两个新字段:流量类别和流标记。

3.IPv6的TCP头部

如下所示包含发送数据主机的源端口号、接收数据主机的目的端口号、发送数据的序列号、上 一 个报文的应答号、窗口大小、当前报文分片前的偏移量、校验和及紧急数据的偏移量指针等。
在这里插入图片描述

4.IPv6的UDP头部

IPv6 的UDP头部与TCP相似,包含发送端的源端口号、接收端的目的端口号、UDP数据的长度和校验和。如下图所示,它的含义与IPv4相同。
在这里插入图片描述

5.IPv6的ICMP头部

如下所示IPv6 的ICMP头部基本结构与IPv4的相同,但是其含义发生了很大的变化。IPv6的ICMP 叫做ICMPv6 , 主要包含IPv6 的控制信息。在这里插入图片描述
具体值和含义下表所示:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、IPv6运行环境

1.加载IPv6模块

查看是否加载IPv6协议栈:
在这里插入图片描述

没有inet6,加载,并设置本地IPv6:

modprobe ipv6
ifconfig ens33 inet6 and fe80::20c:29ff:felt:35/64

2.查看是否支持IPv6

①.使用命令ping来检测网卡的IPv6地址

IPv4地址类型的网络ping的使用不需要指定网络接口,系统自动选择。IPv6使用命令ping6时必须指定网卡接口,I表示Interface、ens33第一个网卡。
在这里插入图片描述

②.使用ip命令

使用IP命令查看IPv6的路由表:
在这里插入图片描述

使用route命令添加一个路由表:
在这里插入图片描述

IPv6的网络邻居发现继承了IPv4的ARP(地址解析协议)可以重新得到网络邻居的信息,并且可以编辑/删除它。
IP命令查看邻居设定:(00:01:24:45:67:89为网络设备的数据链路层的MAC地址)
在这里插入图片描述

六、IPv6的结构定义

IPv6的结构定义在文件sys/socket.h中。

1.IPv6的地址族和协议族

IPv6新定义了地址族协议族常量,常量在文件<sys/socket.h>中定义。地址族为常量AF_INET6,用来表示与IPv4的不同。同时定义了PF_INET6表示协议族,这个变量也在<sys/socket.h>中定义,这两个常量的值是相同的,因为有:

#define PF_INET6 AF_INET6

2.套接字地址结构

IPv6的地址为128位,与IPv4的32位地址显著不同,所以定义了一个新的结构表示IPv6的地址。

①.新的IPv6地址结构in6_addr

//这个结构在文件<netinet/in.h>中定义,它包含16个8位的元素,表示IPv6的地址,以网络字节序保存。
struct in6_addr{
   
	Uint_t s6_addr[16]; //IPv6地址
	};

联合定义方式:

struct in6_addr{
   
		union{
   
				uint8_t 		_S6_u8[16];//16个8位变量
				uint32_t 	    _S6_u32[4];//4个32 位变量
				uint64_t 		_S6_u64[2];//2个64 位变量
				}_S6_un;
};
#define s6_addr _S6_un._S6_u8

②.新的IPv6 套接字地址结构 sockaddr_in6

与IPv4 的地址结构 struct sockaddr _ in 相对应,IPv6 定义了新的地址结构表示IPv6的套接字地址,型如下:

//<netinet/in.h>
// sin6_family 必须定义为AF_INET6, 表示IPv6 地址族。
struct sockaddr_in6{
   
    sa_family_t sin6_family;AF INET6协议族
    in_port_t sin6_prot;//端口地址
    uint32_t sin6_flowinfo;//IPv6 传输类信息
    struct in6_addr sin6_addr;//IPv6地址
    uint32_t sin_scope_id;//网络接口范围
};

③.IPv4 地址结构和IPv6 地址结构的对比

IPv4 的地址结构通过 struct in_ addrstruct sockaddr _ in 定义,结构定义分别如下:


                
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值