This commit is contained in:
estomm
2019-10-24 17:06:51 +08:00
parent 648e2ae110
commit fd72a7a9c3
28 changed files with 1169 additions and 0 deletions

View 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$拟合检验

View File

@@ -0,0 +1,7 @@
# IPv6实验
1. IPv6基础实验
2. ICMPv6分析
3. IPv6组网实验
4. IPv6地址解析协议
5. OSPFv3协议分析实验

View 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生成链路本地地址再根据路由通告报文RARouter 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:2All DHCP Relay Agents and Servers所有DHCPv6服务器和中继代理的组播地址这个地址是链路范围的用于客户端和相邻的服务器及中继代理之间通信。所有DHCPv6服务器和中继代理都是该组的成员。
FF05::1:3All DHCP Servers所有DHCPv6服务器组播地址这个地址是站点范围的用于中继代理和服务器之间的通信站点内的所有DHCPv6服务器都是此组的成员。
UDP端口号
DHCPv6报文承载在UDPv6上。
客户端侦听的UDP目的端口号是546。
服务器、中继代理侦听的UDP端口号是547。
DHCP唯一标识符DUID
DHCP设备唯一标识符DUIDDHCPv6 Unique Identifier每个服务器或客户端有且只有一个唯一标识符服务器使用DUID来识别不同的客户端客户端则使用DUID来识别服务器。
客户端和服务器DUID的内容分别通过DHCPv6报文中的Client Identifier和Server Identifier选项来携带。两种选项的格式一样通过option-code字段的取值来区分是Client Identifier还是Server Identifier选项。
身份联盟IA
身份联盟IAIdentity 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字节 表示报文的类型取值为113具体请参见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服务器地址分配状况

View File

@@ -0,0 +1,88 @@
# ICMPv6
## 1 ICMPv6基本概念
ICMPv6Internet Control Message Protocol for the IPv6是IPv6的基础协议之一。
在IPv4中Internet控制报文协议ICMPInternet Control Message Protocol向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中ICMPv6除了提供ICMPv4常用的功能之外还是其它一些功能的基础如邻接点发现、无状态地址配置包括重复地址检测、PMTU发现等。
## 2 ICMPv6报文格式
ICMPv6的协议类型号即IPv6报文中的Next Header字段的值为58。ICMPv6的报文格式下图所示
![](image/ICMPv6报文格式.png)
|字段|字段说明|
|-|-|
|Type|表明消息的类型0至127表示差错报文类型128至255表示消息报文类型。|
|Code|表示此消息类型细分的类型。|
|Checksum|表示ICMPv6报文的校验和。|
## 3 ICMPv6报文示例
![ICMPv6报文抓包示例](image/ICMPv6报文实例.png)
## 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字段值为2Code字段值为0。
* 时间超时错误报文
在IPv6报文收发过程中当设备收到Hop Limit字段值等于0的数据包或者当设备将Hop Limit字段值减为0时会向发送报文的源节点发送ICMPv6超时错误报文。对于分段重组报文的操作如果超过定时时间也会产生一个ICMPv6超时报文。
时间超时错误报文的Type字段值为3根据错误具体原因又可以细分为
* Code=0在传输中超越了跳数限制。
* Code=1分片重组超时。
* 参数错误报文
当目的节点收到一个IPv6报文时会对报文进行有效性检查如果发现问题会向报文的源节点回应一个ICMPv6参数错误差错报文。
参数错误报文的Type字段值为4根据错误具体原因又可以细分为
* Code=0IPv6基本头或扩展头的某个字段有错误。
* Code=1IPv6基本头或扩展头的NextHeader值不可识别。
* Code=2扩展头中出现未知的选项。
## 5 ICMPv6信息报文
* 回送请求报文回送请求报文用于发送到目标节点以使目标节点立即发回一个回送应答报文。回送请求报文的Type字段值为128Code字段的值为0。
* 回送应答报文当收到一个回送请求报文时ICMPv6会用回送应答报文响应。回送应答报文的Type字段的值为129Code字段的值为0。
* 邻居发现ND
Type=133 路由器请求 RSRouter Solicitation
Type=134 路由器公告 RARouter Advertisement
Type=135 邻居请求 NSNeighbor Solicitation
Type=136 邻居通告 NANeighbor Advertisement
Type=137 重定向Redirect
* 多播侦听发现协议MLD
Type=130 多播听众查询
Type-131 多播听众报告
Type=132 多播听众退出

View File

@@ -0,0 +1,177 @@
# 邻居发现协议NDP
> 参考文献
> * [邻居发现协议](https://blog.csdn.net/qq_38265137/article/details/80466128)
## 1 NDP简介
邻居发现协议NDPNeighbor Discovery Protocol是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARPAddress 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报文邻居请求报文NSNeighbor Solicitation和邻居通告报文NANeighbor
Advertisement
* NS报文Type字段值为135Code字段值为0在地址解析中的作用类似于IPv4中的ARP请求报文。
* NA报文Type字段值为136Code字段值为0在地址解析中的作用类似于IPv4中的ARP应答报文。
### IPv6地址解析过程
![IPv6地址解析过程](image/IPv6地址解析过程.png)
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
邻居状态的具体迁移过程如下图所示:
![邻居状态迁移的具体过程](image/IPv6邻居状态迁移.png)
下面以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 重复地址检测
### 重复地址检测说明
重复地址检测DADDuplicate Address Detect是在接口使用某个IPv6单播地址之前进行的主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址Tentative Address。此时该接口不能使用这个试验地址进行单播通信但是仍然会加入两个组播组ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文就证明该地址已被网络上使用节点将不能使用该试验地址通讯。
### 重复地址检测原理
![重复地址检测原理](image/ipv6重复地址检测原理.png)
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状态。
当两端同时检测时情况如下:
![](image/IPv6两端同时重复检测.png)
* 若2个节点配置相同地址同时作重复地址检测时该地址处于Tentative状态当一方收到对方发出的DAD NS则接收方将不启用该地址
* 一种极端的情况如果同时收到NS报文则两端都放弃改地址
### IPv6地址生命周期
![IPv6地址生命周期](image/IPv6地址生命周期.png)
在preferred time和valid lifetime之间叫做deprecated弃用状态当地址达到这个时间段的时候地址不能主动的发起连接只能是被动的接受连接过了valid lifetime时间地址就变为invalid这时任何连接就会down掉。
## 4 路由器发现
路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
在IPv6中IPv6地址可以支持无状态的自动配置即主机通过某种机制获取网络前缀信息然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础主要通过以下两种报文实现
* 路由器通告RARouter Advertisement报文每台设备为了让二层网络上的主机和设备知道自己的存在定时都会组播发送RA报文RA报文中会带有网络前缀信息及其他一些标志位信息。RA报文的Type字段值为134。
![RA报文](image/IPv6路由通告RA报文.png)
* 路由器请求RSRouter Solicitation报文很多情况下主机接入网络后希望尽快获取网络前缀进行通信此时主机可以立刻发送RS报文网络上的设备将回应RA报文。RS报文的Tpye字段值为133。
![RS报文](image/IPv6路由通告RS报文.png)
### RA报文字段说明
* Cur Hop Limit默认值应当放置在发出IP分组的IP首部的Hop Count字段中。 取0值意味着未(由该路由器)规定。
* MM位为0表示无状态自动配置生成IPv6地址如果M=1表示需要通过有状态DHCPv6方式获取ipv6地址。
* OO位为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报文中的前缀不是分配给本地链路的。主机若想该前缀指定的地址发送报文时需要经过默认路由器转发。
### 路由器发现功能
![路由器发现功能示例](image/IPv6路由发现功能.png)
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报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。
![重定向示例](image/IPv6重定向.png)
Host A需要和Host B通信Host A的默认网关设备是Router A当Host A发送报文给Host B时报文会被送到Router A。Router A接收到Host A发送的报文以后会发现实际上Host A直接发送给Router B更好它将发送一个重定向报文给主机A其中报文中更好的路径下一跳地址为Router BDestination Address为Host B。Host A接收到了重定向报文之后会在默认路由表中添加一个主机路由以后发往Host B的报文就直接发送给Router B。
当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:
* 报文的目的地址不是一个组播地址。
* 报文并非通过路由转发给设备。
* 经过路由计算后,路由的下一跳出接口是接收报文的接口。
* 设备发现报文的最佳下一跳IP地址和报文的源IP地址处于同一网段。
* 设备检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地址或链路本地地址的邻居存在。

View File

View File

@@ -0,0 +1,272 @@
# IPv6
> 参考文献
> * [IPv6基础笔记](https://blog.csdn.net/qq_38265137/article/details/80439611)
## 1 IPv6简介
IPv6Internet Protocol Version 6是网络层协议的第二代标准协议也被称为IPngIP Next Generation。它是Internet工程任务组IETFInternet Engineering Task Force设计的一套规范是IPv4Internet Protocol Version 4的升级版本。
### 目的
IPv4协议是目前广泛部署的因特网协议。在因特网发展初期IPv4以其协议简单、易于实现、互操作性好的优势而得到快速发展。但随着因特网的迅猛发展IPv4设计的不足也日益明显IPv6的出现解决了IPv4的一些弊端。相比IPv4IPv6具有如下优势
|问题 |IPv4的缺陷| IPv6的优势|
|-|-|-|
|地址空间 |IPv4地址采用32比特标识理论上能够提供的地址数量是43亿由于地址分配的原因实际可使用的数量不到43亿。另外IPv4地址的分配也很不均衡美国占全球地址空间的一半左右而欧洲则相对匮乏亚太地区则更加匮乏。与此同时移动IP和宽带技术的发展需要更多的IP地址。目前IPv4地址已经消耗殆尽。针对IPv4的地址短缺问题也曾先后出现过几种解决方案。比较有代表性的是无类别域间路由CIDRClassless Inter-Domain Routing和网络地址转换NATNetwork 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的认证和加密支持端到端的安全。|
|对QoSQuality 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表示此接口标识全球唯一。
![](image/IPv6地址生成.png)
例如MAC地址000E-0C82-C4D4转换后020E:0CFF:FE82:C4D4。
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量尤其是当采用无状态地址自动配置时只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点是任何人都可以通过二层MAC地址推算出三层IPv6地址。
### IPv6的地址分类
IPv6地址分为单播地址、任播地址Anycast Address、组播地址三种类型。和IPv4相比取消了广播地址类型以更丰富的组播地址代替同时增加了任播地址类型。
### IPv6单播地址
IPv6单播地址标识了一个接口由于每个接口属于一个节点因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文由此地址标识的接口接收。
IPv6定义了多种单播地址目前常用的单播地址有未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址ULAUnique 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、子网IDSubnet ID和接口标识Interface ID组成其格式如下如所示
![](image/IPv6全球单播地址.png)
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报文不会被路由设备转发到其他链路。链路本地地址的格式如下如所示
![](image/IPv6链路本地地址.png)
* 唯一本地地址
唯一本地地址是另一种应用范围受限的地址它仅能在一个站点内使用。由于本地站点地址的废除RFC3879唯一本地地址被用来代替本地站点地址。
唯一本地地址的作用类似于IPv4中的私网地址任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址格式如下如所示
![](image/IPv6唯一本地地址.png)
|字段|含义|
|-|-|
|Prefix|前缀固定为FC00::/7。|
|L|L标志位值为1代表该地址为在本地网络范围内使用的地址值为0被保留用于以后扩展。|
|Global ID|全球唯一前缀;通过伪随机方式产生。|
|Subnet ID|子网ID划分子网使用。|
|Interface ID|接口标识。|
唯一本地地址具有如下特点:
* 具有全球唯一的前缀(虽然随机方式产生,但是冲突概率很低)。
* 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
* 具有知名前缀FC00::/7方便边缘设备进行路由过滤。
* 如果出现路由泄漏该地址不会和其他地址冲突不会造成Internet路由冲突。
* 应用中,上层应用程序将这些地址看作全球单播地址对待。
* 独立于互联网服务提供商ISPInternet Service Provider
### IPv6组播地址
IPv6的组播与IPv4相同用来标识一组接口一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点组播地址FF02::2表示链路本地范围的所有路由器。
一个IPv6组播地址由前缀标志Flag字段、范围Scope字段以及组播组IDGlobal ID4个部分组成
* 前缀IPv6组播地址的前缀是FF00::/8。
* 标志字段Flag长度4bit目前只使用了最后一个比特前三位必须置0当该位值为0时表示当前的组播地址是由IANA所分配的一个* 永久分配地址当该值为1时表示当前的组播地址是一个临时组播地址非永久分配地址
* 范围字段Scope长度4bit用来限制组播数据流在网络中发送的范围。
* 组播组IDGroup ID长度112bit用以标识组播组。目前RFC2373并没有将所有的112位都定义成组标识而是建议仅使用该112位的最低32位作为组播组ID将剩余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址RFC2464
* IPv6组播地址格式如下图:
![IPv6组播地址格式](image/IPv6组播地址格式.png)
**被请求节点组播地址**:
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。
IPv6中没有广播地址也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中这个功能通过邻居请求NSNeighbor Solicitation报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时会发送NS报文该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址只有具有该组播地址的节点会检查处理。
被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。
### IPv6任播地址
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
任播地址设计用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。目前任播地址的使用通过共享单播地址方式来完成。将一个单播地址分配给多个节点或者主机这样在网络中如果存在多条该地址路由当发送者发送以任播地址为目的IP的数据报文时发送者无法控制哪台设备能够收到这取决于整个网络中路由协议计算的结果。这种方式可以适用于一些无状态的应用例如DNS等。
IPv6中没有为任播规定单独的地址空间任播地址和单播地址使用相同的地址空间。目前IPv6中任播主要应用于移动IPv6。
IPv6任播地址仅可以被分配给路由设备不能应用于主机。任播地址不能作为IPv6报文的源地址。
* 子网路由器任播地址
子网路由器任播地址是已经定义好的一种任播地址RFC3513。发送到子网路由器任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都必须支持子网任播地址。子网路由器任播地址用于节点需要和远端子网上所有设备中的一个不关心具体是哪一个通信时使用。例如一个移动节点需要和它的“家乡”子网上的所有移动代理中的一个进行通信。
子网路由器任播地址由n bit子网前缀标识子网其余用0填充。格式如下如所示
![子网路由器任播地址](image/IPv6子网路由器任播地址.png)
## 3 IPv6报文格式
IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。
上层协议数据单元一般由上层协议报头和它的有效载荷构成有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。
### IPv6基本报头
![](image/IPv6基本报文头.png)
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报文抓包示例](image/IPv6报文实例.png)
### 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字段指明了下一个扩展报头的类型如果不存在则指明上层协议的类型
![](image/IPv6扩展头包.png)
|字段|说明|
|-|-|
|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中报文如果过大必须要分片进行发送所以在每个节点发送报文之前设备都会根据发送接口的最大传输单元MTUMaximum 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了。
![](image/IPV6&#32;PMTU原理.png)
整条传输路径需要通过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值。

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB