IPv6
50
概率论与数理统计/第11节 假设检验.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 假设检验
|
||||
|
||||
## 相关定义
|
||||
|
||||
### 原假设与备择假设
|
||||
|
||||
所要检验的假设称为原假设或零假设,记为$H_0$。而与$H_0$不相容的假设称为北泽假设或对立假设,记为$H_1$。对参数分布族$\{p(x;\theta):\theta\in\Theta\}$,原假设和北泽假设这对矛盾统一体,称为假设检验:
|
||||
$$
|
||||
H_0:\theta\in\Theta_0,H_1:\theta\in\Theta_1
|
||||
$$
|
||||
|
||||
### 拒绝域、接受域、检验统计量、检验函数
|
||||
|
||||
假设检验就是根据某一法则,在原假设和备择假设之间做出选择,基于样本做出拒绝$H_0$或接受$H_0$所依赖的法则称为检验。
|
||||
|
||||
检验法则:若$(x_1,\dotsm,x_n)\in W$,则拒绝$H_0$,否则由$(x_1,\dotsm,x_n)\in W^c$,就接受$H_0$。
|
||||
|
||||
称$W$为拒绝域,$W^c$称为接受域。
|
||||
|
||||
|
||||
### 两类错误、势和势函数
|
||||
|
||||
第一类错误:当原假设$H_0$本来成立,样本观察值落入拒绝与$W$,我们错误的拒绝了$H_0$,称为弃真错误,其概率:
|
||||
$$
|
||||
\alpha(\theta)=P_\theta\{x\in W\},\theta\in\Theta_0
|
||||
$$
|
||||
|
||||
第二类错误:当原假设$H_0$本来不成立时,样本观察值落入接受域$W^c$,我们错误的接受了$H_0$,称为取伪错误,其概率为:
|
||||
$$
|
||||
\beta(\theta)=P_\theta\{x\notin W\}=1-P_\theta{x\in W},\theta\in\Theta
|
||||
$$
|
||||
|
||||
$$
|
||||
p(x\in W|H_0为真)=\alpha 接受域放弃 \\
|
||||
p(x\in W^c|H_0为真) 接受域本身错误
|
||||
$$
|
||||
|
||||
\alpha越大,第一类错误发生的错误越小,第二类错误发生的概率越大。
|
||||
不能同时减小,增加了样本容量可以减少两类错误。
|
||||
|
||||
|
||||
## 2 正太总体的假设检验
|
||||
|
||||
|
||||
|
||||
## 3 Pearson检验法
|
||||
|
||||
总体分布的$\chi^2$拟合检验
|
||||
|
||||
|
||||
7
计算机网络实验.md/11 IPv6实验.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# IPv6实验
|
||||
|
||||
1. IPv6基础实验
|
||||
2. ICMPv6分析
|
||||
3. IPv6组网实验
|
||||
4. IPv6地址解析协议
|
||||
5. OSPFv3协议分析实验
|
||||
575
计算机网络实验.md/IPv6-DHCPv6.md
Normal file
@@ -0,0 +1,575 @@
|
||||
# DHCPv6
|
||||
|
||||
> 参考文献
|
||||
> * [DHCPv6](https://blog.csdn.net/qq_38265137/article/details/80466734)
|
||||
|
||||
DHCPv6简介
|
||||
IPv6动态主机配置协议DHCPv6(Dynamic Host Configuration Protocol for IPv6)是针对IPv6编址方案设计,为主机分配IPv6地址/前缀和其他网络配置参数。
|
||||
|
||||
目的:
|
||||
IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。IPv6无状态地址配置方式(参看协议RFC2462)是目前广泛采用的IPv6地址自动配置方式。配置了该协议的主机只需相邻设备开启IPv6路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。
|
||||
|
||||
无状态地址配置方案中设备并不记录所连接的IPv6主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使IPv6主机获取DNS服务器的IPv6地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配IPv6前缀,所以在部署IPv6网络时,只能采用手动配置的方法为设备配置IPv6地址。
|
||||
|
||||
DHCPv6技术解决了这一问题。DHCPv6属于一种有状态地址自动配置协议。
|
||||
|
||||
与其他IPv6地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6具有以下优点:
|
||||
|
||||
更好地控制IPv6地址的分配。DHCPv6方式不仅可以记录为IPv6主机分配的地址,还可以为特定的IPv6主机分配特定的地址,以便于网络管理。
|
||||
DHCPv6支持为网络设备分配IPv6前缀,便于全网络的自动配置和网络层次性管理。
|
||||
除了为IPv6主机分配IPv6地址/前缀外,还可以分配DNS服务器IPv6地址等网络配置参数。
|
||||
DHCPv6原理描述
|
||||
DHCPv6概述:
|
||||
DHCPv6是一种运行在客户端和服务器之间的协议,与IPv4中的DHCP一样,所有的协议报文都是基于UDP的。但是由于在IPv6中没有广播报文,因此DHCPv6使用组播报文,客户端也无需配置服务器的IPv6地址。
|
||||
|
||||
IPv6地址分配类型:
|
||||
IPv6协议具有地址空间巨大的特点,但同时长达128比特的IPv6地址又要求高效合理的地址自动分配和管理策略。
|
||||
|
||||
手动配置。手动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
|
||||
无状态自动地址分配。由接口ID生成链路本地地址,再根据路由通告报文RA(Router Advertisement)包含的前缀信息自动配置本机地址。
|
||||
有状态自动地址分配,即DHCPv6方式。DHCPv6又分为如下两种:
|
||||
DHCPv6有状态自动分配。DHCPv6服务器自动分配IPv6地址/PD前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数)。
|
||||
DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器等参数。
|
||||
DHCPv6基本架构:
|
||||
|
||||
|
||||
图:DHCPv6基本架构
|
||||
DHCPv6基本协议架构中,主要包括以下三种角色:
|
||||
|
||||
DHCPv6 Client:
|
||||
|
||||
DHCPv6客户端,通过与DHCPv6服务器进行交互,获取IPv6地址/前缀和网络配置信息,完成自身的地址配置功能。
|
||||
|
||||
DHCPv6 Relay:
|
||||
|
||||
DHCPv6中继代理,负责转发来自客户端方向或服务器方向的DHCPv6报文,协助DHCPv6客户端和DHCPv6服务器完成地址配置功能。一般情况下,DHCPv6客户端通过本地链路范围的组播地址与DHCPv6服务器通信,以获取IPv6地址/前缀和其他网络配置参数。如果服务器和客户端不在同一个链路范围内,则需要通过DHCPv6中继代理来转发报文,这样可以避免在每个链路范围内都部署DHCPv6服务器,既节省了成本,又便于进行集中管理。
|
||||
|
||||
DHCPv6基本协议架构中,DHCPv6中继代理不是必须的角色。如果DHCPv6客户端和DHCPv6服务器位于同一链路范围内,或DHCPv6客户端和DHCPv6服务器直接通过单播交互完成地址分配或信息配置的情况下,是不需要DHCPv6中继代理参与的。只有当DHCPv6客户端和DHCPv6服务器不在同一链路范围内,或DHCPv6客户端和DHCPv6服务器无法单播交互的情况下,才需要DHCPv6中继代理的参与。
|
||||
|
||||
DHCPv6 Server:
|
||||
|
||||
DHCPv6服务器,负责处理来自客户端或中继代理的地址分配、地址续租、地址释放等请求,为客户端分配IPv6地址/前缀和其他网络配置信息。
|
||||
|
||||
DHCPv6基本概念:
|
||||
组播地址
|
||||
|
||||
在DHCPv6协议中,客户端不用配置DHCPv6 Server的IPv6地址,而是发送目的地址为组播地址的Solicit报文来定位DHCPv6服务器。
|
||||
在DHCPv4协议中,客户端发送广播报文来定位服务器。为避免广播风暴,在IPv6中,已经没有了广播类型的报文,而是采用组播报文。DHCPv6用到的组播地址有两个:
|
||||
FF02::1:2(All DHCP Relay Agents and Servers):所有DHCPv6服务器和中继代理的组播地址,这个地址是链路范围的,用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
|
||||
FF05::1:3(All DHCP Servers):所有DHCPv6服务器组播地址,这个地址是站点范围的,用于中继代理和服务器之间的通信,站点内的所有DHCPv6服务器都是此组的成员。
|
||||
UDP端口号
|
||||
|
||||
DHCPv6报文承载在UDPv6上。
|
||||
客户端侦听的UDP目的端口号是546。
|
||||
服务器、中继代理侦听的UDP端口号是547。
|
||||
DHCP唯一标识符(DUID)
|
||||
|
||||
DHCP设备唯一标识符DUID(DHCPv6 Unique Identifier),每个服务器或客户端有且只有一个唯一标识符,服务器使用DUID来识别不同的客户端,客户端则使用DUID来识别服务器。
|
||||
|
||||
客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样,通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项。
|
||||
|
||||
身份联盟(IA)
|
||||
|
||||
身份联盟IA(Identity Association)是使得服务器和客户端能够识别、分组和管理一系列相关IPv6地址的结构。每个IA包括一个IAID和相关联的配置信息。
|
||||
客户端必须为它的每一个要通过服务器获取IPv6地址的接口关联至少一个IA。客户端用给接口关联的IA来从服务器获取配置信息。每个IA必须明确关联到一个接口。
|
||||
IA的身份由IAID唯一确定,同一个客户端的IAID不能出现重复。IAID不应因为设备的重启等因素发生丢失或改变。
|
||||
IA中的配置信息由一个或多个IPv6地址以及T1和T2生存期组成。IA中的每个地址都有首选生存期和有效生存期。
|
||||
一个接口至少关联一个IA,一个IA可以包含一个或多个地址信息。
|
||||
DHCPv6报文类型
|
||||
DHCPv6报文格式:
|
||||
|
||||
|
||||
图:DHCPv6的报文格式
|
||||
字段 长度 含义
|
||||
msg-type 1字节 表示报文的类型,取值为1~13,具体请参见DHCPv6报文类型。
|
||||
transaction-ID 3字节 DHCPv6交互ID,也叫事务ID,用来标识一个来回的DHCPv6报文交互。例如Solicit/Advertise报文为一个交互。Request/Reply报文为另外一个交互,两者有不同的事务ID。交互ID特点如下:交互ID是DHCPv6客户端生成的一个随机值,DHCPv6客户端应当保证交互ID具有一定的随机性。对于DHCPv6服务器响应报文和相应的请求报文,两者交互ID保持一致。如果是DHCPv6服务器主动发起的会话报文,则交互ID为0。
|
||||
Options 可变 表示DHCPv6的选项字段。此字段包含了DHCPv6服务器分配给IPv6主机的配置信息,如DNS服务器的IPv6地址等信息。
|
||||
DHCPv6报文类型:
|
||||
目前DHCPv6定义了如下十三种类型报文,DHCPv6服务器和DHCPv6客户端之间通过这十三种类型的报文进行通信。
|
||||
|
||||
DHCPv6和DHCPv4报文对比:
|
||||
|
||||
报文类型 DHCPv6报文 DHCPv4报文 说明
|
||||
1 SOLICIT DHCP DISCOVER DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。
|
||||
2 ADVERTISE DHCP OFFER DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。
|
||||
3 REQUEST DHCP REQUEST DHCPv6客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。
|
||||
4 CONFIRM - DHCPv6客户端向任意可达的DHCPv6服务器发送Confirm报文检查自己目前获得的IPv6地址是否适用与它所连接的链路。
|
||||
5 RENEW DHCP REQUEST DHCPv6客户端向给其提供地址和配置信息的DHCPv6服务器发送Renew报文来延长地址的生存期并更新配置信息。
|
||||
6 REBIND DHCP REQUEST 如果Renew报文没有得到应答,DHCPv6客户端向任意可达的DHCPv6服务器发送Rebind报文来延长地址的生存期并更新配置信息。
|
||||
7 REPLY DHCP ACK/NAK DHCPv6服务器在以下场合发送Reply报文:DHCPv6服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。
|
||||
8 RELEASE DHCP RELEASE DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。
|
||||
9 DECLINE DHCP DECLINE DHCPv6客户端向DHCPv6服务器发送Decline报文,声明DHCPv6服务器分配的一个或多个地址在DHCPv6客户端所在链路上已经被使用了。
|
||||
10 RECONFIGURE - DHCPv6服务器向DHCPv6客户端发送Reconfigure报文,用于提示DHCPv6客户端,在DHCPv6服务器上存在新的网络配置信息。
|
||||
11 INFORMATION-REQUEST DHCP INFORM DHCPv6客户端向DHCPv6服务器发送Information-Request报文来请求除IPv6地址以外的网络配置信息。
|
||||
12 RELAY-FORW - 中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
|
||||
13 RELAY-REPL - DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。
|
||||
DHCPv6报文抓包:
|
||||
Solicit报文(类型1):
|
||||
DHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。
|
||||
|
||||
|
||||
|
||||
图:Solicit报文抓包示例
|
||||
Advertise报文(类型2):
|
||||
DHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。
|
||||
|
||||
|
||||
|
||||
图:Advertise报文抓包示例
|
||||
Request报文(类型3):
|
||||
DHCPv6客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。
|
||||
|
||||
|
||||
|
||||
图:Request报文抓包示例
|
||||
Renew报文(类型5):
|
||||
DHCPv6客户端向给其提供地址和配置信息的DHCPv6服务器发送Renew报文来延长地址的生存期并更新配置信息。
|
||||
|
||||
|
||||
|
||||
图:Renew报文抓包示例
|
||||
Rebind报文(类型6):
|
||||
如果Renew报文没有得到应答,DHCPv6客户端向任意可达的DHCPv6服务器发送Rebind报文来延长地址的生存期并更新配置信息。
|
||||
|
||||
|
||||
|
||||
图:Rebind报文抓包示例
|
||||
Reply报文(类型7):
|
||||
DHCPv6服务器在以下场合发送Reply报文:DHCPv6服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。
|
||||
|
||||
|
||||
|
||||
图:Reply报文抓包示例
|
||||
Release(类型8);
|
||||
DHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。
|
||||
|
||||
|
||||
|
||||
图:Release报文抓包示例
|
||||
Reply-forw报文(类型12):
|
||||
中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
|
||||
|
||||
|
||||
图:Relay-Forw报文抓包示例
|
||||
Relay-reply报文(类型13):
|
||||
DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。
|
||||
|
||||
|
||||
|
||||
图:Relay-Reply报文抓包示例
|
||||
DHCPv6工作原理::
|
||||
DHCPv6自动分配分为DHCPv6有状态自动分配和DHCPv6无状态自动分配。
|
||||
|
||||
DHCPv6有状态自动分配。DHCPv6服务器自动配置IPv6地址/前缀,同时分配DNS、NIS、SNTP服务器等网络配置参数。
|
||||
DHCPv6无状态自动分配。主机IPv6地址仍然通过路由通告方式自动生成,DHCP服务器只分配除IPv6地址以外的配置参数,包括DNS、NIS、SNTP服务器地址等参数。
|
||||
DHVPv6有状态自动分配:
|
||||
IPv6主机通过有状态DHCPv6方式获取IPv6地址和其他配置参数(例如DNS服务器的IPv6地址等)。
|
||||
|
||||
DHCPv6服务器为客户端分配地址/前缀的过程分为两类:
|
||||
|
||||
DHCPv6四步交互分配过程
|
||||
DHCPv6两步交互快速分配过程
|
||||
DHCPv6四步交互
|
||||
|
||||
四步交互常用于网络中有多个DHCPv6服务器的情况。DHCPv6客户端首先通过组播发送Solicit报文来定位可以为其提供服务的DHCPv6服务器,在收到多个DHCPv6服务器的Advertise报文后,根据DHCPv6服务器的优先级选择一个为其分配地址和配置信息的服务器,接着通过Request/Reply报文交互完成地址申请和分配过程。
|
||||
|
||||
DHCPv6服务器端如果没有配置使能两步交互,无论客户端报文中是否包含Rapid Commit选项,服务器都采用四步交互方式为客户端分配地址和配置信息。
|
||||
|
||||
DHCPv6四步交互地址分配过程如下:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6四步交互地址分配过程
|
||||
DHCPv6四步交互地址分配过程如下:
|
||||
|
||||
DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。
|
||||
如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的地址和网络配置参数。
|
||||
如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。
|
||||
DHCPv6服务器回复Reply报文,确认将地址和网络配置参数分配给客户端使用。
|
||||
DHCPv6两步交互
|
||||
|
||||
两步交互常用于网络中只有一个DHCPv6服务器的情况。DHCPv6客户端首先通过组播发送Solicit报文来定位可以为其提供服务的DHCPv6服务器,DHCPv6服务器收到客户端的Solicit报文后,为其分配地址和配置信息,直接回应Reply报文,完成地址申请和分配过程。
|
||||
|
||||
两步交换可以提高DHCPv6过程的效率,但在有多个DHCPv6服务器的网络中,多个DHCPv6服务器都可以为DHCPv6客户端分配IPv6地址,回应Reply报文,但是客户端实际只可能使用其中一个服务器为其分配的IPv6地址和配置信息。为了防止这种情况的发生,管理员可以配置DHCPv6服务器是否支持两步交互地址分配方式。
|
||||
|
||||
DHCPv6服务器端如果配置使能了两步交互,并且客户端报文中也包含Rapid Commit选项,服务器采用两步交互方式为客户端分配地址和配置信息。
|
||||
如果DHCPv6服务器不支持快速分配地址,则采用四步交互方式为客户端分配IPv6地址和其他网络配置参数。
|
||||
DHCPv6两步交互地址分配过程如下图:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6两步交互地址分配过程
|
||||
DHCPv6两步交互地址分配过程如下:
|
||||
|
||||
DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。
|
||||
DHCPv6服务器接收到Solicit报文后,将进行如下处理:
|
||||
如果DHCPv6服务器支持快速分配地址,则直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Replay报文中也携带Rapid Commit选项。
|
||||
如果DHCPv6服务器不支持快速分配过程,则采用四步交互方式为客户端分配IPv6地址/前缀和其他网络配置参数。
|
||||
DHCPv6无状态自动分配:
|
||||
IPv6节点可以通过DHCPv6无状态方式获取配置参数(包括DNS、SIP、SNTP等服务器配置信息,不包括IPv6地址)。
|
||||
|
||||
DHCPv6无状态工作过程如下图所示:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6无状态工作过程
|
||||
DHCPv6无状态工作过程如下:
|
||||
|
||||
DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。
|
||||
DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。DHCPv6客户端根据收到Reply报文提供的参数完成DHCPv6客户端无状态配置。
|
||||
DHCPv6 PD工作原理:
|
||||
DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是由Cisco公司提出的一种前缀分配机制,并在RFC3633中得以标准化。在一个层次化的网络拓扑结构中,不同层次的IPv6地址分配一般是手工指定的。手工配置IPv6地址扩展性不好,不利于IPv6地址的统一规划管理。
|
||||
|
||||
通过DHCPv6前缀代理机制,下游网络设备不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上游网络设备提出前缀分配申请,上游网络设备便可以分配合适的地址前缀给下游设备,下游设备把获得的前缀(一般前缀长度小于64)进一步自动细分成64前缀长度的子网网段,把细分的地址前缀再通过路由通告(RA)至与IPv6主机直连的用户链路上,实现IPv6主机的地址自动配置,完成整个系统层次的地址布局。
|
||||
|
||||
DHCPv6 PD工作过程下图所示:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6 PD工作原理
|
||||
DHCPv6 PD四步交互地址分配过程如下:
|
||||
|
||||
DHCPv6 PD客户端发送Solicit报文,请求DHCPv6 PD服务器为其分配IPv6地址前缀。
|
||||
如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的IPv6地址前缀。
|
||||
如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向该服务器发送Request报文,请求服务器确认为其分配地址前缀。
|
||||
DHCPv6 PD服务器回复Reply报文,确认将IPv6地址前缀分配给DHCPv6 PD客户端使用。
|
||||
DHCPv6中继工作原理:
|
||||
DHCPv6客户端通过DHCPv6中继转发报文,获取IPv6地址/前缀和其他网络配置参数(例如DNS服务器的IPv6地址等)。
|
||||
|
||||
DHCPv6中继工作过程如下图所示:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6中继工作原理
|
||||
DHCPv6中继工作交互过程如下:
|
||||
|
||||
DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继发送目的地址为FF02::1:2(组播地址)的请求报文。
|
||||
根据DHCPv6中继转发报文有如下两种情况:
|
||||
如果DHCPv6中继和DHCPv6客户端位于同一个链路上,即DHCPv6中继为DHCPv6客户端的第一跳中继,中继转发直接来自客户端的报文,此时DHCPv6中继实质上也是客户端的IPv6网关设备。DHCPv6中继收到客户端的报文后,将其封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
|
||||
如果DHCPv6中继和DHCPv6客户端不在同一个链路上,中继收到的报文是来自其他中继的Relay-Forward报文。中继构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继。
|
||||
DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文的中继消息选项中,并将Relay-Reply报文发送给DHCPv6中继。
|
||||
DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。如果DHCPv6客户端接收到多个DHCPv6服务器的应答,则根据报文中的服务器优先级选择一个DHCPv6服务器,后续从该DHCPv6服务器获取IPv6地址和其他网络配置参数。
|
||||
IPv6地址/前缀的分配与更新原则:
|
||||
IPv6地址分配的优先次序:
|
||||
DHCPv6服务器按照如下次序为DHCPv6客户端选择IPv6地址/前缀。
|
||||
|
||||
选择IPv6地址池
|
||||
|
||||
DHCPv6服务器的接口可以绑定IPv6地址池,DHCPv6服务器将选择该IPv6地址池为接口下的DHCPv6客户端分配地址/前缀。对于存在中继的场景,DHCPv6服务器的接口可以不绑定IPv6地址池,而是根据报文中第一个不为0的“link-address”字段(标识DHCPv6客户端所在链路范围),选择与地址池中已配置的网络前缀或IPv6地址前缀属于同一链路范围的地址池。
|
||||
|
||||
选择IPv6地址/前缀
|
||||
|
||||
确定地址池后,DHCPv6服务器将按照下面步骤为DHCPv6客户端分配IPV6地址/前缀:
|
||||
|
||||
如果地址池中为客户端指定了地址/前缀,优先从地址池中选择与客户端DUID匹配的地址/前缀分配给客户端。
|
||||
如果客户端报文中的IA选项携带了有效的地址/前缀,优先从地址池中选择该地址/前缀分配给客户端。如果该地址/前缀在地址池中不可用,则另外分配一个空闲地址/前缀给客户端。如果IPV6前缀长度比指定分配长度大,则按指定分配长度来分配。
|
||||
从地址池中选择空闲地址/前缀分配给客户端,保留地址(例如RFC 2526中定义的任播地址)、冲突地址、已被分配的地址不能再分配给客户端。
|
||||
如果没有合适的IPv6地址/前缀可以分配,则分配失败。
|
||||
DHCPv6地址租约更新:
|
||||
DHCPv6服务器为DHCPv6客户端分配的地址是有租约的,租约由生命期(包括地址的首选生命期和有效生命期构成)和续租时间点(IA的T1、T2)构成。地址有效生命期结束后,DHCPv6客户端不能再使用该地址。在有效生命期到达之前,如果DHCPv6客户端希望继续使用该地址,则需要更新地址租约。
|
||||
|
||||
DHCPv6客户端为了延长其与IA关联的地址的有效生命期和首选生命期,在T1时刻,发送包含IA选项的Renew报文给服务器,其中IA选项中携带需要续租的IA地址选项。如果DHCPv6客户端一直没有收到T1时刻续租报文的回应报文,那么在T2时刻,DHCPv6客户端通过Rebind报文向DHCPv6服务器继续续租地址。
|
||||
|
||||
T1时刻地址租约更新过程如下:
|
||||
|
||||
DHCPv6客户端在T1时刻(推荐值为优先生命期的0.5倍)发送Renew报文进行地址租约更新请求。
|
||||
DHCPv6服务器回应Reply报文。
|
||||
如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址租约。
|
||||
如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
|
||||
T2时刻地址租约更新过程如下:
|
||||
|
||||
DHCPv6客户端在T1时刻发送Renew请求更新租约,但是没有收到DHCPv6服务器的回应报文。
|
||||
|
||||
DHCPv6客户端在T2时刻(推荐值为优先生命期的0.8倍),向所有DHCPv6服务器组播发送Rebind报文请求更新租约。
|
||||
|
||||
DHCPv6服务器回应Reply报文。
|
||||
|
||||
如果DHCPv6客户端可以继续使用该地址,则DHCPv6服务器回应续约成功的Reply报文,通知DHCPv6客户端已经成功更新地址/前缀租约。
|
||||
如果该地址不可以再分配给该DHCPv6客户端,则DHCPv6服务器回应续约失败的Reply报文,通知DHCPv6客户端不能获得新的租约。
|
||||
如果DHCPv6客户端没有收到DHCPv6服务器的应答报文,则到达有效生命期后,DHCPv6客户端停止使用该地址。
|
||||
|
||||
IP地址预留:
|
||||
DHCPv6服务器支持预留IPv6地址,即保留部分IPv6地址不参与动态分配。比如预留的IPv6地址可作为DNS服务器的IPv6地址。
|
||||
|
||||
DHCPv6基础配置命令
|
||||
address prefix
|
||||
//IPv6地址池视图下配置网络前缀和生命周期。
|
||||
//infinite:指定生命周期为无穷大。
|
||||
//生命周期默认值为86400,即1天。
|
||||
capwap-ac ipv6-address
|
||||
//在IPv6地址池视图下配置AC的IPv6地址。
|
||||
conflict-address expire-time expire-time
|
||||
//配置IPv6地址池下冲突地址老化时间。
|
||||
//缺省情况下,地址池下的冲突地址老化时间是172800秒,即2天。
|
||||
dhcpv6 client information-request
|
||||
//使能接口以DHCPv6无状态自动分配方式获取网络配置参数
|
||||
//(不包括IPv6地址)的功能。
|
||||
dhcpv6 client pd
|
||||
//配置DHCPv6 PD客户端功能。
|
||||
//hint ipv6-address:指定期望申请的IPv6地址
|
||||
//hint ipv6-prefix/ipv6-prefix-length:
|
||||
// 指定期望申请的IPv6地址前缀和前缀长度。
|
||||
//rapid-commit:指定客户端以两步交互申请IPv6地址前缀。
|
||||
//unicast-option:指定客户端以单播方式申请IPv6地址前缀。
|
||||
//union-mode:指定客户端使用一个报文同时获取IPv6地址和前缀。
|
||||
dhcpv6 duid { ll | llt | duid }
|
||||
//配置DHCPv6设备的唯一标识符DUID。
|
||||
//缺省情况下,设备以ll的方式生成DUID。
|
||||
//ll:指定设备采用链路层地址(即MAC地址)方式生成DUID。
|
||||
//llt:指定设备采用链路层地址(即MAC地址)加时间的方式生成DUID。
|
||||
dhcpv6 client renew
|
||||
//手动更新DHCPv6客户端申请到的IPv6地址/前缀。
|
||||
renew-time-percent rebind-time-percent
|
||||
//配置IPv6地址池的续租时间和重绑定时间占优先生命周期的百分比。
|
||||
//缺省情况下,IPv6地址池的续租时间占优先生命周期的50%
|
||||
//重绑定时间占优先生命周期的80%。
|
||||
dhcpv6 interface-id format { default | user-defined text }
|
||||
//配置DHCPv6报文中Interface-ID选项的格式。
|
||||
dhcpv6 packet-rate
|
||||
//使能DHCPv6报文限速功能,并配置速率抑制值。
|
||||
//缺省情况下,DHCPv6报文限速功能处于未使能状态。
|
||||
dhcpv6 packet-rate drop-alarm enable
|
||||
//使能DHCPv6报文限速丢弃告警功能。
|
||||
dhcpv6 packet-rate drop-alarm threshold 100
|
||||
//配置DHCPv6报文限速丢弃告警阈值.缺省值为100包
|
||||
dhcpv6 pool pool-name
|
||||
//创建IPv6/IPv6 PD地址池或进入IPv6/IPv6 PD地址池视图
|
||||
dhcpv6 relay destination
|
||||
//使能接口的DHCPv6中继代理功能
|
||||
//并配置DHCPv6服务器或下一跳中继代理的IPv6地址。
|
||||
dhcpv6 relay server-select group-name
|
||||
//来配置DHCPv6中继所对应的DHCPv6服务器组。
|
||||
dhcpv6 relay source-interface
|
||||
//配置接口地址作为报文源IPv6地址。
|
||||
dhcpv6 remote-id format
|
||||
//配置DHCPv6报文中Remote-ID选项的格式。
|
||||
dhcpv6 remote-id insert enable
|
||||
//使能在DHCPv6中继报文中插入remote-id选项的功能。
|
||||
dhcpv6 server
|
||||
//使能DHCPv6服务器或DHCPv6 PD服务器功能。
|
||||
dhcpv6-server ipv6-address
|
||||
//配置在DHCPv6服务器组中添加DHCPv6服务器或下一跳中继的成员。
|
||||
dhcpv6 server database
|
||||
//使能DHCPv6数据保存功能。
|
||||
//write-delay :指定DHCPv6数据保存的时间间隔。
|
||||
dhcpv6 server group group-name
|
||||
//创建一个DHCPv6服务器组并进入DHCPv6服务器组视图
|
||||
dns-domain-name
|
||||
//配置DHCPv6服务器为DHCPv6客户端分配的域名后缀。
|
||||
dns-server ipv6-address
|
||||
//配置DNS服务器IPv6地址。
|
||||
excluded-address
|
||||
//配置IPv6地址池中不参与自动分配的IPv6地址范围。
|
||||
information-refresh time
|
||||
//设置无状态DHCPv6方式分配给客户端的配置信息刷新时间。
|
||||
//缺省情况下,IPv6地址池配置信息刷新时间86400秒,即24小时。
|
||||
ipv6 address auto dhcp命
|
||||
//使能接口通过DHCPv6协议自动获取IPv6地址及其他网络配置参数。
|
||||
link-address
|
||||
//在IPv6地址池视图下配置网络前缀。
|
||||
lock
|
||||
//锁定IPv6地址池。
|
||||
nis-domain-name
|
||||
//配置DHCPv6服务器为DHCPv6客户端分配的NIS域名后缀
|
||||
nisp-domain-name
|
||||
//配置DHCPv6服务器为DHCPv6客户端分配的NISP域名后缀。
|
||||
prefix-delegation
|
||||
//配置地址池视图下的代理前缀。
|
||||
static-bind prefix
|
||||
//在DHCPv6地址池下静态绑定地址前缀与DHCPv6 PD客户端。
|
||||
import all
|
||||
//使能设备向DHCPv6客户端动态分配DNS服务器和SNTP服务器配置信息的功能。
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
25
|
||||
26
|
||||
27
|
||||
28
|
||||
29
|
||||
30
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
35
|
||||
36
|
||||
37
|
||||
38
|
||||
39
|
||||
40
|
||||
41
|
||||
42
|
||||
43
|
||||
44
|
||||
45
|
||||
46
|
||||
47
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
59
|
||||
60
|
||||
61
|
||||
62
|
||||
63
|
||||
64
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
71
|
||||
72
|
||||
73
|
||||
74
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
87
|
||||
DHCPv6服务器、中继配置示例
|
||||
实验拓扑:
|
||||
|
||||
|
||||
|
||||
图:DHCPv6实验拓扑
|
||||
实验要求:
|
||||
在AR1为DHCPv6服务器,AR2为DHCP中继。通过配置,为主机分配IPv6地址。
|
||||
|
||||
配置文件:
|
||||
AR1:
|
||||
|
||||
<DHCPv6>dis current-configuration
|
||||
#
|
||||
sysname DHCPv6
|
||||
#
|
||||
ipv6
|
||||
#
|
||||
dhcp enable
|
||||
#
|
||||
dhcpv6 pool pool1
|
||||
address prefix 2000::/64
|
||||
//配置IPv6地址前缀
|
||||
excluded-address 2000::1
|
||||
#
|
||||
interface GigabitEthernet0/0/0
|
||||
ipv6 enable
|
||||
ipv6 address 3000::1/64
|
||||
dhcpv6 server pool1
|
||||
#
|
||||
ipv6 route-static :: 0 3000::2
|
||||
#
|
||||
return
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
AR2:
|
||||
|
||||
<Realy>dis current-configuration
|
||||
#
|
||||
sysname Realy
|
||||
#
|
||||
ipv6
|
||||
#
|
||||
dhcp enable
|
||||
#
|
||||
interface GigabitEthernet0/0/0
|
||||
ipv6 enable
|
||||
ipv6 address 3000::2/64
|
||||
#
|
||||
interface GigabitEthernet0/0/1
|
||||
ipv6 enable
|
||||
ipv6 address 2000::1/64
|
||||
undo ipv6 nd ra halt
|
||||
//使能路由器向主机发送路由通告信息
|
||||
ipv6 nd autoconfig managed-address-flag
|
||||
//使M和O标志位置位。实现主机通过DHCPv6方式获取地址
|
||||
ipv6 nd autoconfig other-flag
|
||||
dhcpv6 relay destination 3000::1
|
||||
//指明DHCP服务器的地址
|
||||
#
|
||||
return
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
16
|
||||
17
|
||||
18
|
||||
19
|
||||
20
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
|
||||
|
||||
图:DHCPv6服务器地址分配状况
|
||||
88
计算机网络实验.md/IPv6-ICMPv6.md
Normal file
@@ -0,0 +1,88 @@
|
||||
|
||||
# ICMPv6
|
||||
|
||||
## 1 ICMPv6基本概念
|
||||
ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。
|
||||
|
||||
在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。
|
||||
|
||||
## 2 ICMPv6报文格式
|
||||
|
||||
ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58。ICMPv6的报文格式下图所示:
|
||||
|
||||

|
||||
|
||||
|字段|字段说明|
|
||||
|-|-|
|
||||
|Type|表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。|
|
||||
|Code|表示此消息类型细分的类型。|
|
||||
|Checksum|表示ICMPv6报文的校验和。|
|
||||
|
||||
## 3 ICMPv6报文示例
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
## 4 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:扩展头中出现未知的选项。
|
||||
|
||||
|
||||
## 5 ICMPv6信息报文
|
||||
|
||||
* 回送请求报文:回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。回送请求报文的Type字段值为128,Code字段的值为0。
|
||||
* 回送应答报文:当收到一个回送请求报文时,ICMPv6会用回送应答报文响应。回送应答报文的Type字段的值为129,Code字段的值为0。
|
||||
|
||||
* 邻居发现ND:
|
||||
|
||||
Type=133 路由器请求 RS(Router Solicitation)
|
||||
Type=134 路由器公告 RA(Router Advertisement)
|
||||
Type=135 邻居请求 NS(Neighbor Solicitation)
|
||||
Type=136 邻居通告 NA(Neighbor Advertisement)
|
||||
Type=137 重定向(Redirect)
|
||||
|
||||
|
||||
* 多播侦听发现协议MLD:
|
||||
|
||||
Type=130 多播听众查询
|
||||
Type-131 多播听众报告
|
||||
Type=132 多播听众退出
|
||||
177
计算机网络实验.md/IPv6-NS.md
Normal file
@@ -0,0 +1,177 @@
|
||||
# 邻居发现协议NDP
|
||||
|
||||
> 参考文献
|
||||
> * [邻居发现协议](https://blog.csdn.net/qq_38265137/article/details/80466128)
|
||||
|
||||
## 1 NDP简介
|
||||
邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
|
||||
|
||||
## 2 地址解析
|
||||
在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应答报文。
|
||||
|
||||
### IPv6地址解析过程
|
||||
|
||||
|
||||

|
||||
|
||||
1. 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的链路层地址。
|
||||
2. 当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路层地址进行单播),Host B的链路层地址被放在Options字段中。这样就完成了一个地址解析的过程。
|
||||
|
||||
|
||||
### 邻居通告报文中Flags字段解释:
|
||||
|
||||
* R:路由器标记。当置1时,R位指出发送者是路由器。R位由Neighbor Unreachability Detection使用,用于检测改变为主机的路由器。
|
||||
* S:请求标记。当置1时,S位指出通告被发送以响应来自目的地地址的Neighbor Solicitation。S位用作Neighbor Unreachability Detection的可达性确认。在多播通告和非请求单播通告中置0。
|
||||
* O:替代标记。替代标志,1表示通告中的信息替代缓存,如更新链路层地址时,对于任播的回应则不应置位。在针对任播地址的请求通告中,以及在请求的前缀通告中它不能被置1。在其他请求通告中和在非请求通告中它应当被置1。
|
||||
* Target Address:对于请求的通告,是在Neighbor Solicitation消息(该消息催促这个通告)中的Target Address字段。对于非请求通告,是其链路层地址已经改变的地址。Target Address必须不是多播地址。
|
||||
|
||||
|
||||
## 2 跟踪邻居状态
|
||||
通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
|
||||
|
||||
RFC2461中定义了5种邻居状态,分别是:
|
||||
|
||||
1. 未完成(Incomplete)
|
||||
2. 可达(Reachable)
|
||||
3. 陈旧(Stale)
|
||||
4. 延迟(Delay)
|
||||
5. 探查(Probe)
|
||||
|
||||
邻居状态的具体迁移过程如下图所示:
|
||||
|
||||

|
||||
|
||||
|
||||
下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。
|
||||
|
||||
1. A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
|
||||
2. 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
|
||||
3. 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
|
||||
4. 如果在Reachable状态,A收到B的非请求NA报文(MAC地址修改),且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
|
||||
5. 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
|
||||
6. 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
|
||||
7. 在Probe状态,A每隔一定时间间隔z(1s)发送单播NS,发送固定次数(3)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
|
||||
|
||||
|
||||
|
||||
## 3 重复地址检测
|
||||
### 重复地址检测说明
|
||||
|
||||
重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
|
||||
|
||||
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
|
||||
|
||||
### 重复地址检测原理
|
||||
|
||||

|
||||
|
||||
Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:
|
||||
|
||||
1. 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
|
||||
2. 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。
|
||||
|
||||
|
||||
当两端同时检测时情况如下:
|
||||
|
||||

|
||||
|
||||
|
||||
* 若2个节点配置相同地址,同时作重复地址检测时,该地址处于Tentative状态,当一方收到对方发出的DAD NS,则接收方将不启用该地址
|
||||
* 一种极端的情况,如果同时收到NS报文,则两端都放弃改地址
|
||||
|
||||
|
||||
### IPv6地址生命周期
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
在preferred time和valid lifetime之间叫做deprecated(弃用)状态,当地址达到这个时间段的时候,地址不能主动的发起连接只能是被动的接受连接,过了valid lifetime时间,地址就变为invalid,这时任何连接就会down掉。
|
||||
|
||||
|
||||
## 4 路由器发现
|
||||
路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
|
||||
|
||||
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
|
||||
|
||||
* 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
|
||||
|
||||

|
||||
|
||||
* 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。RS报文的Tpye字段值为133。
|
||||
|
||||

|
||||
|
||||
### RA报文字段说明
|
||||
|
||||
* Cur Hop Limit:默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。
|
||||
* M:M位为0表示无状态自动配置生成IPv6地址,如果M=1表示需要通过有状态(DHCPv6)方式获取ipv6地址。
|
||||
* O:O位为0表示除了IPv6地址以外的其他参数需要通过无状态自动配置获取,如果O=1表示除了IPv6地址以外的其它需要通过有状态(DHCPv6)方式进行获取。
|
||||
* Router Lifetime:与默认路由器关联的生存期,以秒为单位。最大值18.2小时。取0值的Lifetime指出路由器不是默认路由器并且不应当出现在默认路由器列表中。Router Lifetime仅适用于作为默认路由器的路由器应用;对包括在其他消息字段或选项中的信息不适用。需要对它们的信息规定时间限制的选项有它们自己的生存期字段。
|
||||
* Reachable time:此时间以毫秒计,在收到可达性确认后节点假定该邻居是可到达的。它由Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
|
||||
* Retrans Timer:重发的Neighbor Solicitation消息间隔时间,以毫秒计。由地址解析和Neighbor Unreachability Detection算法使用。此值为0意味着没有(由此路由器)作出规定。
|
||||
* ICMP Prefix Option中的flag字段:
|
||||
* aoto-config:如果该位为1表示该前缀可以用于无状态自动配置,如果为0不能用于无状态自动配置。
|
||||
* on-link:指定0-flag标识位。若配置该参数,则只会本地链路内的主机RA报文中的前缀不是分配给本地链路的。主机若想该前缀指定的地址发送报文时,需要经过默认路由器转发。
|
||||
|
||||
### 路由器发现功能
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
RA在华为中的通告时间有两种:
|
||||
|
||||
* min-interval=200s。
|
||||
* max-interval=600s。
|
||||
|
||||
|
||||
### 地址自动配置
|
||||
IPv4使用DHCP实现自动配置,包括IP地址,缺省网关等信息,简化了网络管理。IPv6地址增长为128位,且终端节点多,对于自动配置的要求更为迫切,除保留了DHCP作为有状态自动配置外,还增加了无状态自动配置。无状态自动配置即自动生成链路本地地址,主机根据RA报文的前缀信息,自动配置全球单播地址等,并获得其他相关信息。
|
||||
|
||||
IPv6主机无状态自动配置过程:
|
||||
|
||||
1. 根据接口标识产生链路本地地址。
|
||||
2. 发出邻居请求,进行重复地址检测。
|
||||
3. 如地址冲突,则停止自动配置,需要手工配置。
|
||||
4. 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
|
||||
5. 主机会发送RS报文(或接收到设备定期发送的RA报文)。
|
||||
6. 根据RA报文中的前缀信息和接口标识得到IPv6地址。
|
||||
|
||||
### 默认路由器优先级和路由信息发现
|
||||
|
||||
当主机所在的链路中存在多个设备时,主机需要根据报文的目的地址选择转发设备。在这种情况下,设备通过发布默认路由优先级和特定路由信息给主机,提高主机根据不同的目的地选择合适的转发设备的能力。
|
||||
|
||||
在RA报文中,定义了默认路由优先级和路由信息两个字段,帮助主机在发送报文时选择合适的转发设备。
|
||||
|
||||
主机收到包含路由信息的RA报文后,会更新自己的路由表。当主机向其他设备发送报文时,通过查询该列表的路由信息,选择合适的路由发送报文。
|
||||
|
||||
主机收到包含默认设备优先级信息的RA报文后,会更新自己的默认路由列表。当主机向其他设备发送报文时,如果没有路由可选,则首先查询该列表,然后选择本链路内优先级最高的设备发送报文;如果该设备故障,主机根据优先级从高到低的顺序,依次选择其他设备。
|
||||
|
||||
## 5 重定向
|
||||
当网关设备发现报文从其它网关设备转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。
|
||||
|
||||
|
||||

|
||||
|
||||
Host A需要和Host B通信,Host A的默认网关设备是Router A,当Host A发送报文给Host B时报文会被送到Router A。Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好,它将发送一个重定向报文给主机A,其中报文中更好的路径下一跳地址为Router B,Destination Address为Host B。Host A接收到了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往Host B的报文就直接发送给Router B。
|
||||
|
||||
当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:
|
||||
|
||||
* 报文的目的地址不是一个组播地址。
|
||||
* 报文并非通过路由转发给设备。
|
||||
* 经过路由计算后,路由的下一跳出接口是接收报文的接口。
|
||||
* 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
|
||||
* 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。
|
||||
0
计算机网络实验.md/IPv6-OSPFv3.md
Normal file
272
计算机网络实验.md/IPv6.md
Normal file
@@ -0,0 +1,272 @@
|
||||
# IPv6
|
||||
|
||||
> 参考文献
|
||||
> * [IPv6基础笔记](https://blog.csdn.net/qq_38265137/article/details/80439611)
|
||||
|
||||
## 1 IPv6简介
|
||||
IPv6(Internet Protocol Version 6)是网络层协议的第二代标准协议,也被称为IPng(IP Next Generation)。它是Internet工程任务组IETF(Internet Engineering Task Force)设计的一套规范,是IPv4(Internet Protocol Version 4)的升级版本。
|
||||
|
||||
### 目的
|
||||
|
||||
IPv4协议是目前广泛部署的因特网协议。在因特网发展初期,IPv4以其协议简单、易于实现、互操作性好的优势而得到快速发展。但随着因特网的迅猛发展,IPv4设计的不足也日益明显,IPv6的出现,解决了IPv4的一些弊端。相比IPv4,IPv6具有如下优势:
|
||||
|
||||
|
||||
|问题 |IPv4的缺陷| IPv6的优势|
|
||||
|-|-|-|
|
||||
|地址空间 |IPv4地址采用32比特标识,理论上能够提供的地址数量是43亿(由于地址分配的原因,实际可使用的数量不到43亿)。另外,IPv4地址的分配也很不均衡:美国占全球地址空间的一半左右,而欧洲则相对匮乏;亚太地区则更加匮乏。与此同时,移动IP和宽带技术的发展需要更多的IP地址。目前IPv4地址已经消耗殆尽。针对IPv4的地址短缺问题,也曾先后出现过几种解决方案。比较有代表性的是无类别域间路由CIDR(Classless Inter-Domain Routing)和网络地址转换NAT(Network Address Translator)。但是CIDR和NAT都有各自的弊端和不能解决的问题,由此推动了IPv6的发展。 |IPv6地址采用128比特标识。128位的地址结构使IPv6理论上可以拥有(43亿×43亿×43亿×43亿)个地址。近乎无限的地址空间是IPv6的最大优势。|
|
||||
|报文格式 |IPv4报头包含可选字段Options,内容涉及Security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。携带这些Options的IPv4报文在转发过程中往往需要中间路由转发设备进行软件处理,对于性能是个很大的消耗,因此实际中也很少使用。 |IPv6和IPv4相比,去除了IHL、Identifier、Flag、Fragment Offset、Header Checksum、 Option、Padding域,只增加了流标签域,因此IPv6报文头的处理较IPv4更为简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有结构,理论上可以无限扩展,体现了优异的灵活性。|
|
||||
|自动配置和重新编址 |由于IPv4地址只有32比特,并且地址分配不均衡,导致在网络扩容或重新部署时,经常需要重新分配IP地址,因此需要能够进行自动配置和重新编址,以减少维护工作量。目前IPv4的自动配置和重新编址机制主要依靠DHCP协议。 |IPv6协议内置支持通过地址自动配置方式使主机自动发现网络并获取IPv6地址,大大提高了内部网络的可管理性。|
|
||||
|路由聚合 |由于IPv4发展初期的分配规划问题,造成许多IPv4地址分配不连续,不能有效聚合路由。日益庞大的路由表耗用大量内存,对设备成本和转发效率产生影响,这一问题促使设备制造商不断升级其产品,以提高路由寻址和转发性能。 |巨大的地址空间使得IPv6可以方便的进行层次化网络部署。层次化的网络结构可以方便的进行路由聚合,提高了路由转发效率。|
|
||||
|对端到端的安全的支持 |IPv4协议制定时并没有仔细针对安全性进行设计,因此固有的框架结构并不能支持端到端的安全。 |IPv6中,网络层支持IPSec的认证和加密,支持端到端的安全。|
|
||||
|对QoS(Quality of Service)的支持 |随着网络会议、网络电话、网络电视迅速普及与使用,客户要求有更好的QoS来保障这些音视频实时转发。IPv4并没有专门的手段对QoS进行支持。 |IPv6新增了流标记域,提供QoS保证。|
|
||||
|对移动特性的支持 |随着Internet的发展,移动IPv4出现了一些问题,比如:三角路由,源地址过滤等。 |IPv6协议规定必须支持移动特性。和移动IPv4相比,移动IPv6使用邻居发现功能可直接实现外地网络的发现并得到转交地址,而不必使用外地代理。同时,利用路由扩展头和目的地址扩展头移动节点和对等节点之间可以直接通信,解决了移动IPv4的三角路由、源地址过滤问题,移动通信处理效率更高且对应用层透明。|
|
||||
|
||||
|
||||
## 2 IPv6地址
|
||||
|
||||
### IPv6地址的表示方法
|
||||
IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,这是IPv6地址的首选格式。
|
||||
|
||||
为了书写方便,IPv6还提供了压缩格式,以上述IPv6地址为例,具体压缩规则为:
|
||||
|
||||
* 每组中的前导“0”都可以省略,所以上述地址可写为:FC00:0:130F:0:0:9C0:876A:130B。
|
||||
* 地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,所以上述地址又可以进一步简写为:FC00:0:130F::9C0:876A:130B。
|
||||
* 需要注意的是,在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128位时,无法确定每个“::”代表0的个数。
|
||||
|
||||
|
||||
### IPv6地址的结构:
|
||||
一个IPv6地址可以分为如下两部分:
|
||||
|
||||
* 网络前缀:n比特,相当于IPv4地址中的网络ID
|
||||
* 接口标识:128-n比特,相当于IPv4地址中的主机ID
|
||||
|
||||
对于IPv6单播地址来说,如果地址的前三bit不是000,则接口标识必须为64位;如果地址的前三位是000,则没有此限制。
|
||||
|
||||
接口标识可通过三种方法生成:手工配置、系统通过软件自动生成或IEEE EUI-64规范生成。其中,EUI-64规范自动生成最为常用。
|
||||
|
||||
IEEE EUI-64规范是将接口的MAC地址转换为IPv6接口标识的过程。如下图所示,MAC地址的前24位(用c表示的部分)为公司标识,后24位(用m表示的部分)为扩展标识符。从高位数,第7位是0表示了MAC地址本地唯一。转换的第一步将FFFE插入MAC地址的公司标识和扩展标识符之间,第二步将从高位数,第7位的0改为1表示此接口标识全球唯一。
|
||||
|
||||

|
||||
|
||||
例如:MAC地址:000E-0C82-C4D4;转换后020E:0CFF:FE82:C4D4。
|
||||
|
||||
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点是任何人都可以通过二层MAC地址推算出三层IPv6地址。
|
||||
|
||||
### IPv6的地址分类
|
||||
IPv6地址分为单播地址、任播地址(Anycast Address)、组播地址三种类型。和IPv4相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。
|
||||
|
||||
### IPv6单播地址:
|
||||
IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文,由此地址标识的接口接收。
|
||||
|
||||
IPv6定义了多种单播地址,目前常用的单播地址有:未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址ULA(Unique Local Address)。
|
||||
|
||||
* 未指定地址
|
||||
|
||||
IPv6中的未指定地址即 0:0:0:0:0:0:0:0/128 或者::/128。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是::的报文不会被路由设备转发。
|
||||
|
||||
* 环回地址
|
||||
|
||||
IPv6中的环回地址即 0:0:0:0:0:0:0:1/128 或者::1/128。环回与IPv4中的127.0.0.1作用相同,主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。
|
||||
|
||||
* 全球单播地址
|
||||
|
||||
全球单播地址是带有全球单播前缀的IPv6地址,其作用类似于IPv4中的公网地址。这种类型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。
|
||||
|
||||
全球单播地址由全球路由前缀(Global routing prefix)、子网ID(Subnet ID)和接口标识(Interface ID)组成,其格式如下如所示:
|
||||
|
||||

|
||||
|
||||
Global routing prefix:全球路由前缀。由提供商(Provider)指定给一个组织机构,通常全球路由前缀至少为48位。目前已经分配的全球路由前缀的前3bit均为001。
|
||||
|
||||
Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络(Site)。子网ID通常最多分配到第64位。子网ID和IPv4中的子网号作用相似。
|
||||
|
||||
Interface ID:接口标识。用来标识一个设备(Host)。
|
||||
|
||||
* 链路本地地址
|
||||
|
||||
链路本地地址是IPv6中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时将接口标识添加在后面作为地址的低64比特。
|
||||
|
||||
当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址(其固定的前缀+EUI-64规则形成的接口标识)。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现,无状态地址配置等应用。
|
||||
|
||||
以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。链路本地地址的格式如下如所示:
|
||||
|
||||

|
||||
|
||||
* 唯一本地地址
|
||||
|
||||
唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用。由于本地站点地址的废除(RFC3879),唯一本地地址被用来代替本地站点地址。
|
||||
|
||||
唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址格式如下如所示:
|
||||
|
||||

|
||||
|
||||
|字段|含义|
|
||||
|-|-|
|
||||
|Prefix|前缀;固定为FC00::/7。|
|
||||
|L|L标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留,用于以后扩展。|
|
||||
|Global ID|全球唯一前缀;通过伪随机方式产生。|
|
||||
|Subnet ID|子网ID;划分子网使用。|
|
||||
|Interface ID|接口标识。|
|
||||
|
||||
唯一本地地址具有如下特点:
|
||||
|
||||
* 具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
|
||||
* 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
|
||||
* 具有知名前缀(FC00::/7),方便边缘设备进行路由过滤。
|
||||
* 如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。
|
||||
* 应用中,上层应用程序将这些地址看作全球单播地址对待。
|
||||
* 独立于互联网服务提供商ISP(Internet Service Provider)。
|
||||
|
||||
### IPv6组播地址
|
||||
|
||||
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点,组播地址FF02::2表示链路本地范围的所有路由器。
|
||||
|
||||
一个IPv6组播地址由前缀,标志(Flag)字段、范围(Scope)字段以及组播组ID(Global ID)4个部分组成:
|
||||
|
||||
* 前缀:IPv6组播地址的前缀是FF00::/8。
|
||||
* 标志字段(Flag):长度4bit,目前只使用了最后一个比特(前三位必须置0),当该位值为0时,表示当前的组播地址是由IANA所分配的一个* 永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
|
||||
* 范围字段(Scope):长度4bit,用来限制组播数据流在网络中发送的范围。
|
||||
* 组播组ID(Group ID):长度112bit,用以标识组播组。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址(RFC2464)。
|
||||
* IPv6组播地址格式如下图:
|
||||
|
||||

|
||||
|
||||
**被请求节点组播地址**:
|
||||
|
||||
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。
|
||||
|
||||
IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求NS(Neighbor Solicitation)报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。
|
||||
|
||||
被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。
|
||||
|
||||
### IPv6任播地址
|
||||
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
|
||||
|
||||
任播地址设计用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前,任播地址的使用通过共享单播地址方式来完成。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地址路由,当发送者发送以任播地址为目的IP的数据报文时,发送者无法控制哪台设备能够收到,这取决于整个网络中路由协议计算的结果。这种方式可以适用于一些无状态的应用,例如DNS等。
|
||||
|
||||
IPv6中没有为任播规定单独的地址空间,任播地址和单播地址使用相同的地址空间。目前IPv6中任播主要应用于移动IPv6。
|
||||
|
||||
注:IPv6任播地址仅可以被分配给路由设备,不能应用于主机。任播地址不能作为IPv6报文的源地址。
|
||||
|
||||
* 子网路由器任播地址
|
||||
|
||||
子网路由器任播地址是已经定义好的一种任播地址(RFC3513)。发送到子网路由器任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都必须支持子网任播地址。子网路由器任播地址用于节点需要和远端子网上所有设备中的一个(不关心具体是哪一个)通信时使用。例如,一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。
|
||||
|
||||
子网路由器任播地址由n bit子网前缀标识子网,其余用0填充。格式如下如所示:
|
||||
|
||||

|
||||
|
||||
## 3 IPv6报文格式
|
||||
IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。
|
||||
|
||||
上层协议数据单元一般由上层协议报头和它的有效载荷构成,有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。
|
||||
|
||||
### IPv6基本报头
|
||||
|
||||

|
||||
|
||||
IPv6报头格式中主要字段解释如下:
|
||||
|
||||
|字段|说明|
|
||||
|-|-|
|
||||
|Version|版本号,长度为4bit。对于IPv6,该值为6。|
|
||||
|Traffic Class|流类别,长度为8bit。等同于IPv4中的TOS字段,表示IPv6数据报的类或优先级,主要应用于QoS。|
|
||||
|Flow Label|流标签,长度为20bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。|
|
||||
|Payload Length|有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)。该字段只能表示最大长度为65535字节的有效载荷。如果有效载荷的长度超过这个值,该字段会置0,而有效载荷的长度用逐跳选项扩展报头中的超大有效载荷选项来表示。|
|
||||
|Next Header|下一个报头,长度为8bit。该字段定义紧跟在IPv6报头后面的第一个扩展报头(如果存在)的类型,或者上层协议数据单元中的协议类型。|
|
||||
|Hop Limit|跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个设备,该数值减去1,当该字段的值为0时,数据报将被丢弃。|
|
||||
|Source Address|源地址,长度为128bit。表示发送方的地址。|
|
||||
|Destination Address|目的地址,长度为128bit。表示接收方的地址。|
|
||||
|
||||
|
||||
IPv6和IPv4相比,去除了IHL、identifiers、Flags、Fragment Offset、Header Checksum、 Options、Paddiing域,只增了流标签域,因此IPv6报文头的处理较IPv4大大简化,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展头的概念,新增选项时不必修改现有结构就能做到,理论上可以无限扩展,体现了优异的灵活性。下面为读者介绍IPv6扩展报头的一些信息。
|
||||
|
||||
### IPv6报文示例
|
||||
|
||||
|
||||

|
||||
|
||||
### IPv6扩展头部
|
||||
在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用设备很大的资源,因此实际中也很少使用。
|
||||
|
||||
IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要设备或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,这样便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展报头总是8字节长度的整数倍。
|
||||
|
||||
当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。如下图所示,IPv6基本报头中的Next Header字段指明了第一个扩展报头的类型,而第一个扩展报头中的Next Header字段指明了下一个扩展报头的类型(如果不存在,则指明上层协议的类型)。
|
||||
|
||||

|
||||
|
||||
|字段|说明|
|
||||
|-|-|
|
||||
|Next Header|下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。|
|
||||
|Extension Header Len|报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。|
|
||||
|Extension Head Data|扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。|
|
||||
|
||||
目前,RFC 2460中定义了6个IPv6扩展头:逐跳选项报头、目的选项报头、路由报头、分段报头、认证报头、封装安全净载报头.
|
||||
|
||||
* 逐跳选项报头
|
||||
|
||||
(代表该报头的Next Header字段值=0)
|
||||
|
||||
该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。逐跳选项报头目前的主要应用有以下三种:
|
||||
|
||||
用于巨型载荷(载荷长度超过65535字节)。
|
||||
用于设备提示,使设备检查该选项的信息,而不是简单的转发出去。
|
||||
用于资源预留(RSVP)。
|
||||
目的选项报头:
|
||||
|
||||
(代表该报头的Next Header字段值=60)
|
||||
|
||||
目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主要应用于移动IPv6。
|
||||
|
||||
* 路由报头:
|
||||
|
||||
(代表该报头的Next Header字段值=43)
|
||||
|
||||
路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被IPv6源节点用来强制数据包经过特定的设备。
|
||||
|
||||
* 分段报头:
|
||||
|
||||
(代表该报头的Next Header字段值=44)
|
||||
|
||||
同IPv4一样,IPv6报文发送也受到MTU的限制。当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段报头。
|
||||
|
||||
* 认证报头:
|
||||
|
||||
(代表该报头的Next Header字段值=51)
|
||||
|
||||
该报头由IPsec使用,提供认证、数据完整性以及重放保护。它还对IPv6基本报头中的一些字段进行保护。
|
||||
|
||||
* 封装安全净载报头:
|
||||
|
||||
(代表该报头的Next Header字段值=50)
|
||||
|
||||
该报头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据报的保密,类似于认证报头。
|
||||
|
||||
### IPv6扩展报头规约
|
||||
当超过一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现:
|
||||
|
||||
1. IPv6基本报头
|
||||
2. 逐跳选项扩展报头
|
||||
3. 目的选项扩展报头
|
||||
4. 路由扩展报头
|
||||
5. 分段扩展报头
|
||||
6. 认证扩展报头
|
||||
7. 封装安全有效载荷扩展报头
|
||||
8. 目的选项扩展报头
|
||||
9. 上层协议数据报文
|
||||
|
||||
路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。
|
||||
|
||||
除了目的选项扩展报头可能出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。
|
||||
|
||||
|
||||
## 4 Path MTU
|
||||
在IPv4中,报文如果过大,必须要分片进行发送,所以在每个节点发送报文之前,设备都会根据发送接口的最大传输单元MTU(Maximum Transmission Unit)来对报文进行分片。但是在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃;同时将转发接口的MTU值通过ICMPv6报文的“Packet Too Big”消息发给源端主机,源端主机以该值重新发送IPv6报文,这样带来了额外流量开销。PMTU发现协议可以动态发现整条传输路径上各链路的MTU值,减少由于重传带来的额外流量开销。
|
||||
|
||||
PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了。
|
||||
|
||||

|
||||
|
||||
整条传输路径需要通过4条链路,每条链路的MTU分别是1500、1500、1400、1300,当源节点发送一个分片报文的时候,首先按照PMTU为1500进行分片并发送分片报文,当到达MTU为1400的出接口时,设备返回Packet Too Big错误,同时携带MTU值为1400的信息。源节点接收到之后会将报文重新按照PMTU为1400进行分片并再次发送一个分片报文,当分片报文到达MTU值为1300的出接口时,同样返回Packet Too Big错误,携带MTU值为1300的信息。之后源节点重新按照PMTU为1300进行分片并发送分片报文,最终到达目的地,这样就找到了该路径的PMTU。
|
||||
|
||||
由于IPv6要求链路层所支持的最小MTU为1280,所以PMTU的值必须大于1280。建议您用1500作为链路的PMTU值。
|
||||
BIN
计算机网络实验.md/image/ICMPv6报文实例.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
计算机网络实验.md/image/ICMPv6报文格式.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
计算机网络实验.md/image/IPV6 PMTU原理.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
计算机网络实验.md/image/IPv6两端同时重复检测.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
计算机网络实验.md/image/IPv6全球单播地址.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
计算机网络实验.md/image/IPv6唯一本地地址.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
计算机网络实验.md/image/IPv6地址生命周期.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
计算机网络实验.md/image/IPv6地址生成.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
计算机网络实验.md/image/IPv6地址解析过程.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
计算机网络实验.md/image/IPv6基本报文头.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
计算机网络实验.md/image/IPv6子网路由器任播地址.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
计算机网络实验.md/image/IPv6扩展头包.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
计算机网络实验.md/image/IPv6报文实例.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
计算机网络实验.md/image/IPv6组播地址格式.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
计算机网络实验.md/image/IPv6路由发现功能.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
计算机网络实验.md/image/IPv6路由通告RA报文.png
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
计算机网络实验.md/image/IPv6路由通告RS报文.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
计算机网络实验.md/image/IPv6邻居状态迁移.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
计算机网络实验.md/image/IPv6重定向.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
计算机网络实验.md/image/IPv6链路本地地址.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
计算机网络实验.md/image/ipv6重复地址检测原理.png
Normal file
|
After Width: | Height: | Size: 64 KiB |