916|7

1430

帖子

2

资源

纯净的硅(高级)

给小白的IPv6知识 [复制链接]

IPv6与网络互联

一、简介

目前广泛使用的IPv4版本的互联网协议由于网络地址资源的枯竭,严重制约了互联网的应用和发展。除了地址枯竭巨量设备的联网需求也加速了网络带宽和数据实时性的矛盾。以及带来的组网、节点管理等等的各种网络问题。互联网工程任务组(IETF)设计了用于替代IPv4的下一代IP协议。该协议的版本为IPv6IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写。

IPv6不仅仅是增加了IP地址的容量,地址长度达到了128位,其地址数量号称可以为全世界的每一粒沙子编上一个地址。而且还解决了IPv4网络互联中的一些问题。IPv6不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的一些问题。如:数据传输实时性与带宽的矛盾、降低网络节点管理难度、降低了设备联网的成本等等。本文的主要内容就是在阐述IPv6联网的一些优势和介绍IPv6的组网方法。

互联网数字分配机构(IANA)在2016年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持IPv6,不再兼容IPv4

二、IPv6地址结构

IPv6地址有128位组成,为了在使用中能够很好的表述也制定了类似IPv4那样的分段结构,下面我们就来介绍一下这个128位的表述方法,主机地址的形成方法。

1、地址的表示方法

IPv6的地址长度为128位,是IPv4地址长度的4倍。IPv4点分十进制格式不再适用,因而采用十六进制表示。IPv6有三种表示方法。

(1)、冒号分十六进制表示法

格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16位,以十六进制表示,例如:ABCD:EF01:2345:6789:ABCD:2345:6789:ABCD

这种表示法中,每个X的前导0是可以省略的,

例如:2001:0AB8:0000:0023:0008:0800:200C:127A

缩写后:2001:AB8:0:23:8:800:200C:127A

(2)、压缩表示法

在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中“::”只能出现一次,例如:

  FF01:0:0:0:0:0:0:1E06 FF01::1E06

  0:0:0:0:0:0:0:1 ::1

  0:0:0:0:0:0:0:0 ::

(3)、内嵌IPv4地址表示法

为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒号分隔十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用

2、主机地址的形成

IPv6中的地址结构也有分成“网络段和“主机段”。网络段用来表示该主机所在的网络,主机段用来制定一台主机。

128位地址的前64位为网络段,后64位为主机段。那么一个网络内的主机规模可以达到264次方的数量。同样IPV6的网络数量也同样是264次方的数量。

对于用户来说一台设备最好是不需要任何的配置就可以使用是最好的体验。IPV6的设计者的目标也是尽可能的减少设备的配置与网络的管理成本。主机的地址最好是由设备制造商来定义。对于以太网设备的MAC地址就是一种非常不错的主机地址定义方案。

接下来就介绍EUI-48位的MAC地址如何形成64位的IPV6主机地址。

EUI-48地址是IEEE 802或类IEEE 802网络设备的硬件地址。这一地址是设备制造商为设备定义的物理地址。理论上要求全球唯一。EUI-48地址由一个24的组织唯一标识符(OUI)和 24位扩展标识符组成。目前被广泛使用。但是随着设备数量的不断增加出现了EUI-64 地址这一代表网络接口寻址的新标准。

EUI-64标识符的前段为一个24位的组织唯一标识符(OUI),接着是一个由组织分配的40位扩展标识符共64位长。

EUI-48EUI-64的前三个字节的OUI的长度都是24位,所以定义没有什么太大的变化。这些地址的第一个字节的低两位分别是U位和G位,当U位被设置时(U=1),表示该地址是本地管理。但G位被设置时(G=1),表示该地址是一组或组播类型的地址。

 

XXXXXXUG

X为:01

EUI-48 EUI-64 之间的显著区别是它们的长度,一个EUI-64地址由EUI-48地址形成,将EUI地址的24OUI复制到EUI-64地址,并将EUI-64的第四,第五个字节的16位填充为1111 1111 1111 1110 (十六进制FFFE 后面跟剩余位的24位。

例如:

EUI-48地址 00-11-22-33-44-55EUI64地址中变成00-11-22-ff-ee-33-44-55

EUI-64如何形成IPV6的主机地址呢?其实非常的简单,只要将EUI-64地址中的U位置位(U=1)就是IPv6中的主机地址。如:太网硬件地址 00:30:48:2A:19:89,首先它被转换成EUI-64地址00:30:48:ff:fe:21:19:89,接着U位被取反,就形成了主机地址02:30:48:ff:fe:21:19:89

对于非以太网设备也可以使用其他的规则,如手机等设备也可以使用其他的方案。原则上有设备的物理特征来设置。

IPv6中的网络地址的形成通常是根据网络的类型来定义。后面专门开辟一个章节来介绍网络类型。

三、IPv6网络类型

IPv6地址分为单播地址、任播地址(Anycast Address)、组播地址三种类型。和IPv4相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。分类如3-1所示

3-1  IPv6地址分类

image.png

任播地址和组播地址增加了网络数据包的实时性,降低了网络数据传播的开销。

1、IPv6单播地址

IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文,由此地址标识的接口接收。

这里只是为了表述的严格使用了接口的概念。因为一台主机可以有多块网卡,也就是所谓的多个接口。

IPv6定义了多种单播地址,目前常用的单播地址有:未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址ULAUnique Local Address)等。

1)未指定地址

IPv6中的未指定地址即 0:0:0:0:0:0:0:0/128 或者::/128。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是::的报文不会被路由设备转发。

2)环回地址

IPv6中的环回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。IPv4使用了整个127.0.0.0网段而IPv6只定义了这一个地址。

3)全球单播地址

全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。

全球单播地址由全球路由前缀(Global routing prefix)、子网IDSubnet ID)和接口标识(Interface ID)组成,其格式如3-2所示:

3-2  全球单播地址格式
https://download.huawei.com/mdl/image/download?uuid=45587a20359841e0a079c460e7602413

Global routing prefix:全球路由前缀。由提供商(Provider)指定给一个组织机构,通常全球路由前缀至少为48位。目前已经分配的全球路由前缀的前3bit均为001

Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络(Site)。子网ID通常最多分配到第64位。子网IDIPv4中的子网号作用相似。

Interface ID:接口标识。用来标识一个设备(Host)。

4)链路本地地址

链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时将接口标识添加在后面作为地址的低64比特。

当一个节点使用IPv6协议栈时,节点的每个接口会自动配置一个链路本地地址(通常其固定的格式:前缀+EUI-64规则形成的接口标识)。这种机制使得连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现,无状态地址配置等应用。

链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。链路本地地址的格式如3-3所示:

3-2  链路本地地址格式
https://download.huawei.com/mdl/image/download?uuid=72bac83d9091480cb73480de62fc2282

5)唯一本地地址

唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用。由于本地站点地址的废除(RFC3879),唯一本地地址被用来代替本地站点地址。

唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址格式如3-3所示:

3-3  唯一本地地址格式
https://download.huawei.com/mdl/image/download?uuid=07252d0397c549e08f5d45e5141952fa

Prefix:前缀;固定为FC00::/7

LL标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留,用于以后扩展。

Global ID:全球唯一前缀;通过伪随机方式产生。

Subnet ID:子网ID;划分子网使用。

Interface ID:接口标识。

唯一本地地址具有如下特点:

具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。

可以进行网络之间的私有连接,而不必担心地址冲突等问题。

具有知名前缀(FC00::/7),方便边缘设备进行路由过滤。

如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。

应用中,上层应用程序将这些地址看作全球单播地址对待。

独立于互联网服务提供商ISPInternet Service Provider)。

2、IPv6组播地址

IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点,组播地址FF02::2表示链路本地范围的所有路由器。

一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组IDGlobal ID4个部分组成:

前缀:IPv6组播地址的前缀是FF00::/8

标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。

范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围,该字段取值和含义的对应关系如6-5所示。

组播组IDGroup ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该段地址112位的最低32位作为组播组ID,将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址(RFC2464)。

IPv6组播地址格式如6-5所示:

6-5  IPv6组播地址格式
https://download.huawei.com/mdl/image/download?uuid=a62e2104bd3140658fbf443df3bac2e4

被请求节点组播地址

被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。

IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求NSNeighbor Solicitation)报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。

被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。

3、IPv6任播地址

任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。

任播地址设计用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前,任播地址的使用通过共享单播地址方式来完成。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地址路由,当发送者发送以任播地址为目的IP的数据报文时,发送者无法控制哪台设备能够收到,这取决于整个网络中路由协议计算的结果。这种方式可以适用于一些无状态的应用,例如DNS等。

IPv6中没有为任播规定单独的地址空间,任播地址和单播地址使用相同的地址空间。目前IPv6中任播主要应用于移动IPv6

 说明:IPv6任播地址仅可以被分配给路由设备,不能应用于主机。任播地址也不能作为IPv6报文的源地址。

子网路由器任播地址

子网路由器任播地址是已经定义好的一种任播地址(RFC3513)。发送到子网路由器任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都必须支持子网任播地址。子网路由器任播地址用于节点需要和远端子网上所有设备中的一个(不指定具体是哪一个)通信时使用。例如,一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。

子网路由器任播地址由n bit子网前缀标识子网,其余用0填充。格式如6-6所示:

6-6  子网路由器任播地址格式

https://download.huawei.com/mdl/image/download?uuid=37632e13d8684ec39ecf2409af98a510

任播地址可以理解为网络地址(网段地址),指定发给某一网络的数据包。在IPv4时网络地址是不能作为数据包的目标地址的,只作为路由表中的题目设置。IPv6中可以将任播地址作为数据包的目标地址发给任意的“网段”。这样可以作为网站群集的地址。改善群集系统中对外服务的主机必须有一个公网单播地址的弊端。也降低了路由寻址的开销。

四、ICMPv6

ICMPv6Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。ICMPv6在组网和网络管理中起着重要的作用。

IPv4中,Internet控制报文协议ICMPInternet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。

ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58ICMPv6的报文格式如4-1所示:

图4-1  ICMPv6报文格式
https://download.huawei.com/mdl/image/download?uuid=7bacb3f878ba42498c6e814889d04a83

报文中字段解释如下:

  • Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。
  • Code:表示此消息类型细分的类型。
  • Checksum:表示ICMPv6报文的校验和。

ICMPv6错误报文的分类

ICMPv6错误报文用于报告在转发IPv6数据包过程中出现的错误。ICMPv6错误报文可以分为以下4种:

  • 目的不可达错误报文

在IPv6节点转发IPv6报文过程中,当设备发现目的地址不可达时,就会向发送报文的源节点发送ICMPv6目的不可达错误报文,同时报文中会携带引起该错误报文的具体原因。

目的不可达错误报文的Type字段值为1。根据错误具体原因又可以细分为:

    • Code=0:没有到达目标设备的路由。
    • Code=1:与目标设备的通信被管理策略禁止。
    • Code=2:未指定。
    • Code=3:目的IP地址不可达。
    • Code=4:目的端口不可达。
  • 数据包过大错误报文

在IPv6节点转发IPv6报文过程中,发现报文超过出接口的链路MTU时,则向发送报文的源节点发送ICMPv6数据包过大错误报文,其中携带出接口的链路MTU值。数据包过大错误报文是Path MTU发现机制的基础。

数据包过大错误报文的Type字段值为2,Code字段值为0。

  • 时间超时错误报文

在IPv6报文收发过程中,当设备收到Hop Limit字段值等于0的数据包,或者当设备将Hop Limit字段值减为0时,会向发送报文的源节点发送ICMPv6超时错误报文。对于分段重组报文的操作,如果超过定时时间,也会产生一个ICMPv6超时报文。

时间超时错误报文的Type字段值为3,根据错误具体原因又可以细分为:

    • Code=0:在传输中超越了跳数限制。
    • Code=1:分片重组超时。
  • 参数错误报文

当目的节点收到一个IPv6报文时,会对报文进行有效性检查,如果发现问题会向报文的源节点回应一个ICMPv6参数错误差错报文。

参数错误报文的Type字段值为4,根据错误具体原因又可以细分为:

    • Code=0:IPv6基本头或扩展头的某个字段有错误。
    • Code=1:IPv6基本头或扩展头的NextHeader值不可识别。
    • Code=2:扩展头中出现未知的选项。

ICMPv6信息报文的分类

ICMPv6信息报文提供诊断功能和附加的主机功能,比如多播侦听发现和邻居发现。常见的ICMPv6信息报文主要包括回送请求报文(Echo Request)和回送应答报文(Echo Reply),这两种报文也就是通常使用的Ping报文。

  • 回送请求报文:回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的Type字段值为128,Code字段的值为0。
  • 回送应答报文:当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的Type字段的值为129,Code字段的值为0。

五、邻居发现

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,邻居不可达性检测,重复地址检测,路由器发现以及重定向等功能。

地址解析

在IPv4中,当主机需要和目标主机通信时,必须先通过ARP协议获得目的主机的链路层地址。在IPv6中,同样需要从IP地址解析到链路层地址的功能。邻居发现协议实现了这个功能。

ARP报文是直接封装在以太网报文中,以太网协议类型为0x0806,普遍观点认为ARP定位为第2.5层的协议。ND本身基于ICMPv6实现,以太网协议类型为0x86DD,即IPv6报文,IPv6下一个报头字段值为58,表示ICMPv6报文,由于ND协议使用的所有报文均封装在ICMPv6报文中,一般来说,ND被看作第3层的协议。在三层完成地址解析,主要带来以下几个好处:

  • 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
  • 可以使用三层的安全机制避免地址解析攻击。
  • 使用组播方式发送请求报文,减少了二层网络的性能压力。

地址解析过程中使用了两种ICMPv6报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor Advertisement)。

  • NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
  • NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。

地址解析的过程如图5-1所示:

图5-1  IPv6地址解析过程
https://download.huawei.com/mdl/image/download?uuid=1b2aab09e33b47b4a47f37d7c28cf253

Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地址。

当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。

邻居不可达性检测

通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。

邻居状态有5种,分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。

邻居状态之间具体迁移过程如图5-2所示,其中Empty表示邻居表项为空。

图5-2 邻居状态迁移示例
https://download.huawei.com/mdl/image/download?uuid=de9bce1f9dec4191a84b45af93f3ff84

下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。

  1. A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
  2. 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
  3. 经过邻居可达时间,邻居状态由Reachable变为Stale,即未知是否可达。
  4. 如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
  5. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
  6. 在经过一段固定时间后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。
  7. 在Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。

重复地址检测

重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。 一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。

IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

重复地址检测原理如图5-3所示:

图5-3 重复地址检测示例
https://download.huawei.com/mdl/image/download?uuid=f8336fa1c8aa426eb080c54b7a7b11b1

Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:

  • 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
  • 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。

路由器发现

路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。

在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

  • 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
  • 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Tpye字段值为133。

路由器发现功能如图5-4所示:

图5-4  路由器发现示例
https://download.huawei.com/mdl/image/download?uuid=4a17101e0acf4eac9f1079ab2d196933

地址自动配置

IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且终端节点多,对于自动配置的要求更为迫切,除保留了DHCP作为有状态自动配置外,还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址等,并获得其他相关信息。

IPv6主机无状态自动配置过程:

  1. 根据接口标识产生链路本地地址。
  2. 发出邻居请求,进行重复地址检测。
  3. 如地址冲突,则停止自动配置,需要手工配置。
  4. 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
  5. 主机会发送RS报文(或接收到设备定期发送的RA报文)。
  6. 根据RA报文中的前缀信息和接口标识得到IPv6地址。

默认路由器优先级和路由信息发现

当主机所在的链路中存在多个设备时,主机需要根据报文的目的地址选择转发设备。在这种情况下,设备通过发布默认路由优先级和特定路由信息给主机,提高主机根据不同的目的地选择合适的转发设备的能力。

在RA报文中,定义了默认路由优先级和路由信息两个字段,帮助主机在发送报文时选择合适的转发设备。

主机收到包含路由信息的RA报文后,会更新自己的路由表。当主机向其他设备发送报文时,通过查询该列表的路由信息,选择合适的路由发送报文。

主机收到包含默认设备优先级信息的RA报文后,会更新自己的默认路由列表。当主机向其他设备发送报文时,如果没有路由可选,则首先查询该列表,然后选择本链路内优先级最高的设备发送报文;如果该设备故障,主机根据优先级从高到低的顺序,依次选择其他设备。

重定向

当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。

图5-5为一次重定向的过程:

图5-5  重定向示例
https://download.huawei.com/mdl/image/download?uuid=594a6ddd4eb34833ad821e8c53cfa2e7

Host A需要和Host B通信,Host A的默认网关设备是Switch A,当Host A发送报文给Host B时报文会被送到Switch A。Switch A接收到Host A发送的报文以后会发现实际上Host A直接发送给Switch B更好,它将发送一个重定向报文给主机A,其中报文中更好的路径下一跳地址为Switch B,Destination Address为Host B。Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送给Switch B。

当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:

  • 报文的目的地址不是一个组播地址。
  • 报文并非通过路由转发给设备。
  • 经过路由计算后,路由的下一跳出接口是接收报文的接口。
  • 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
  • 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。

附录、常见见问题

1、IPv6的地址资源十分的充足是不是就不需要NAT了?

答:不是,在一些场合下还是需要的。如:接入互联网时你公司的网络设备不能直接暴露在公网上时,可以使用 NAT技术将这些设备隔离起来。

2、什么是有状态地址和无状态地址?

无状态(Stateless):根据路由通告报文RARouter Advertisement)包含的prefix前缀信息自动配置IPv6地址,组成方式是Prefix + (EUI64 or 随机)Stateless也可以称为SLAACStateless address autoconfiguration)地址。

有状态(Stateful):通过DHCPv6方式获得的IPv6地址。IPv6地址是根据参数(如DNS等)获取的。

DHCPv6提供的地址也不都是有状态地址。也可以提供无状态地址。

无状态地址,不可控、难管理。在网络中只有网关,没有IP地址管理者。因此无法识别客户端,每个客户端根据网关发送的相同的RA报文内容自行配置IPv6地址。

有状态地址, 可控、可管理。在网络中存在一个IP地址管理者,通过地址可以识别客户端,根据分配列表识别对应的IPv6地址和客户端。


回复

1430

帖子

2

资源

纯净的硅(高级)

内容的大部分资料来源于华为的网站

回复

2万

帖子

337

资源

版主

感谢分享


回复

3244

帖子

1

资源

五彩晶圆(初级)

ipv6这都多少年了。。。我读书的时候就在推,现在大家最熟悉的还是192.168.1.1

个人签名人已离开,无事别找,找也找不到。

回复

1430

帖子

2

资源

纯净的硅(高级)

原因慢是因为漂亮国的资源较为丰富,而且不愿意放弃领导权的缘故。IPv6可以实现互联网的管理权真正国际化和平等化。物联网时代应该可以加速IPV6的发展。


回复

1430

帖子

2

资源

纯净的硅(高级)

IPV6改善了网络广播和数据的实时性。理解IPV6协议主要是理解IPV6的三种地址(单播地址、任播地址、组播地址三种类型)例如:IPv6放弃了ARP广播的使用,取而代之的是ICMPv6的邻居请求消息(ICMPv6消息类型135)、邻居公告消息(ICMPv6消息类型136)来完成对MAC地址的解析。在传统的IPv4网络中,主机通过ARP协议解析目标IP地址与目标MAC地址的对应关系。IPV6在这个过程中需要使用一个请求节点组播地址(FF02::1FFxx:xxxx),请求节点组地址在上面详细的描述。在设备启用IPV6协议时就获得了一个链路本地地址(Link-local address)的地址。这个地址就是如:fe80::开头的地址。这个地址就可以用来与本地的设备互相通讯。在不知道对方的MAC的时候可以先向请求节点组播地址发送一个NS报文,当节点回复了NA报文(单播)后就获得了MAC地址。

 

 


回复

47

帖子

0

资源

一粒金砂(中级)

之前研究IPV6 看的是contiki 里面原型,但是目前感觉实际用处不大吧,客户端支持IPV6 后,连接到互联网还是需要 转IPV4,才能正常使用吧,估计需要等完全普及之后,才能直接访问服务器

点评

不需要转换,ipv6目前大部分地区都支持的可以自接使用。我目前就能使用ipv6上网 [attachimg]521901[/attachimg]  详情 回复 发表于 2021-1-19 15:39

回复

1430

帖子

2

资源

纯净的硅(高级)

kirk 发表于 2021-1-19 09:35 之前研究IPV6 看的是contiki 里面原型,但是目前感觉实际用处不大吧,客户端支持IPV6 后,连接到互联网还是 ...

不需要转换,ipv6目前大部分地区都支持的可以自接使用。我目前就能使用ipv6上网

53754.jpg


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表