IPv4 与 IPv6 综合对比
0. 课件来源(NewHCIP)
1. IPv4 地址回顾
1.1 地址表示
IPv4 地址是 32位 二进制数,通常用点分十进制表示:
二进制:11000000 00000000 00000000 00000001
十进制:128.0.0.11.2 地址分类(有类地址)
| 类别 | 二进制前缀 | 地址范围 | 用途 |
|---|---|---|---|
| A类 | 0xxxxxxx | 1.0.0.0 - 126.255.255.255 | 大型网络 |
| B类 | 10xxxxxx | 128.0.0.0 - 191.255.255.255 | 中型网络 |
| C类 | 110xxxxx | 192.0.0.0 - 223.255.255.255 | 小型网络 |
| D类 | 1110xxxx | 224.0.0.0 - 239.255.255.255 | 组播 |
| E类 | 1111xxxx | 240.0.0.0 - 255.255.255.255 | 保留 |
1.3 特殊地址
| 地址 | 用途 |
|---|---|
| 0.0.0.0 | 未分配 |
| 255.255.255.255 | 广播地址 |
| 127.0.0.0/8 | 本地回环 |
| 169.254.0.0/16 | 链路本地(APIPA) |
1.4 无类地址(CIDR)
CIDR(Classless Inter-Domain Routing)使用可变长子网掩码(VLSM):
/24、/25、/26、/27VLSM(可变长子网掩码):把网络不断分割,变小
Supernet(超网):把子网不断聚合,变大
- 减少路由表条目
- 减少路由协议更新
1.5 IPv4 地址的拓扑含义
IPv4 地址是 网络与拓扑的融合:
Interface g0/0/0
Ip add 1.1.1.1/24- 含义1:1.1.1.0/24 的网段 → 目的网段
- 含义2:1.1.1.1 是 1.1.1.0/24 的一个节点 → 标识节点
路由表示例:
Destination/Mask Proto Pre Cost Flags NextHop Interface
3.3.3.0/24 Direct 0 0 D 1.1.1.1 g0/0/02. IPv6 地址详解
2.1 地址表示
IPv6 地址是 128位,分为 8 段,每段 16 位(4 个十六进制):
冒号分十六进制:
2001:0001:0000:0000:f000:0000:0000:00002.1.1 IPv6 特殊地址(常见)
| 地址/前缀 | 含义 |
|---|---|
::/128 | 未指定地址(Unspecified) |
::1/128 | 本地回环(Loopback) |
fe80::/10 | 链路本地(Link-Local) |
2.2 地址简化规则
规则1:首部的 0 可以省略,尾部的 0 不能省略
2001:0001:0000:0000:f000:0000:0000:0000
↓
2001:1:0:0:f000:0:0:0规则2:连续的 0 可以用 "::" 来表示
2001:1:0:0:f000:0:0:0
↓
2001:1:0:0:f000::注意:"::" 不能出现 2 次,否则会产生歧义。
2.3 IPv6 地址分类
2.3.1 单播地址(Unicast)
1. 全球可聚合单播地址(AGUA):2000::/3
0010 0000 0000 0000 = 2000
0011 1111 1111 1111 = 3fff用于唯一标识接口和设备。
2. 链路本地地址(Link-Local):fe80::/10
Interface g0/0/0
Ipv6 enable
Ipv6 address 2001::1/64
Ipv6 address 2004::1/64
Ipv6 address 2005::11/64- 含义:2001::/64 这个网段链接 g0/0/0
- 路由:2001::/64、2004::/64、2005::/64 都是直连路由
Ipv6 address fe80::1 link-local- 含义:在本链路的一个唯一标识节点
- OSPFv3:通过链路本地建立邻居,对端计算 OSPFv3 的路由
O 3333::/64 via fe80::1优点:
- 业务和拓扑无关,一旦业务故障,不会影响拓扑
- 节省地址
3. 唯一本地地址(Unique Local):私网地址(隔离)
原来:
fec0::/10(RFC 3513)- 站点本地,区分与 global 地址,达到隔离效果
- 问题:与 IPv4 的私网地址一样,A 公司用 fec0::1/64,B 公司也用 fec0::1/64,一旦互访,地址冲突
改成唯一本地地址:
fc00::/7(RFC 4193)- 在唯一本地地址中,新增 global-id,40 位
2.3.2 组播地址(Multicast)
包含广播,ARP 就没有了。
格式:FFAB::/16
A: flag 标志位
- 0:永久
- 1:临时
B: scope 范围
- 1:node
- 2:link
- 4:management
- 5:site
- 8:organization
- E:global
常见组播地址:
| 地址 | 说明 |
|---|---|
| FF02::1 | 永久本链路的所有主机 |
| FF02::2 | 永久本链路的所有路由器 |
| FF02::5 | 永久本链路的 OSPFv3 设备 |
| FF02::6 | 永久本链路的 OSPFv3 DR/BDR |
请求节点地址(Solicited Node):
FF02::1:FFxx:xxxxxx:xxxx(24bit):copy from IPv6 单播地址后 24bit
举例:
2001:10:1:12::2 → 后 24bit = 00:0002 → FF02::1:FF00:2
2011:172:16:1::2 → 后 24bit = 00:0002 → FF02::1:FF00:2
2001:10:1:12::3 → 后 24bit = 00:0003 → FF02::1:FF00:3因为上述两个地址加入同一个请求节点组播地址。
2.3.3 任播地址(Anycast)
用于移动互联,就近原则。多个设备共享同一个地址块,多个设备共享一个地址。
特点:
- 不进行 DAD(重复地址检测)
- 不能作为源地址,只能作为目的地址
配置示例:
Interface g0/0/0
Ipv6 enable
Ipv6 address 2001:172:16:12::1/64
Ipv6 address 2001:172:16:12::1/64 anycast2.4 IPv6 地址配置
2.4.1 EUI-64 地址生成
EUI-64 如何产生:MAC 地址中间插入 "FFFE"
举例:
MAC 地址:00e0-fcc5-6be9 = EUI-48
在中间插入 FFFE:
00e0-fcFFFE c5-6be9
||
00E0:FCFF:FEC5:6BE9MAC 地址是全球唯一,如果被用于 EUI-64,性质发生改变,LG 位要进行相应的变化:
- 第六位 LG 从原来
0000 0000→ LG=0(global 全球唯一) - 第六位 LG 变为
0000 0010→ LG=1(link administrative)
2.4.2 Link-Local 地址修改
Interface g0/0/0
Ipv6 address fe80::1 link-local # 修改 link-local 地址2.4.3 自动生成 Link-Local 地址
Interface g0/0/0
Ipv6 address auto link-local # 自动生成 link-local 地址2.4.4 手工指定 Link-Local 地址
Interface g0/0/0
Ipv6 address fe80::1 link-local # 手工指定 link-local 地址2.4.5 IPv6 地址配置总结
Ipv6
#
Interface g0/0/0
Ipv6 enable
Ipv6 address 2001:10:1:12::1/64
Ipv6 address 2003::/64 eui-64 # 产生 global 地址
Ipv6 address fe80::1 link-local # 产生 link-local 地址或者:
Ipv6 address auto link-local # 自动生成2.5 IPv6 地址部署
Ipv6
#
Interface g0/0/0
Ipv6 enable
Ipv6 address 2001:172:16:12::1/64
Ipv6 address 2001:172:16:12::/64 eui-64 # 通过 EUI-64 构建单播地址
Ipv6 address auto link-local # 自动形成 IPv6 link-local
Ipv6 address fe80::1 link-local # 手工指定 IPv6 link-local
Ipv6 address 2001:172:16:12::1/64 anycast # 指定任播地址
Ipv6 address auto dhcp
Ipv6 address auto global3. NDP 邻居发现协议
3.1 NDP 报文类型
NDP(Neighbor Discovery Protocol)借助 ICMPv6 报文中新增报文:
| Type | 名称 | 功能 |
|---|---|---|
| 133 | RS (Router Solicitation) | 路由器请求 |
| 134 | RA (Router Advertisement) | 路由器通告 |
| 135 | NS (Neighbor Solicitation) | 邻居请求 |
| 136 | NA (Neighbor Advertisement) | 邻居回复 |
| 137 | Redirect | 重定向 |
3.2 NDP 功能
- DAD:单播地址冲突检测
- ND:邻居发现
- Autoconfiguration:自动配置
- MTU Path Discovery:MTU 发现
- Redirect:重定向
3.3 IPv6 重复地址检测(DAD)
IPv4 重复地址检测:免费 ARP
免费 ARP-Request:
arp-request | smac AR1 dmac FFFFFFFFF
Sender mac AR1
sender ip 10.1.12.1
Target mac 000000000000
Target ip 10.1.12.1- 对方没有回复:没有冲突
- 对方发现地址冲突,回复 arp-reply,报警日志地址冲突
IPv6 重复地址检测:ICMPv6 报文
Type 135:NS(邻居请求)Type 136:NA(邻居回复)
接口配置任何 IPv6 单播地址都要进行重复地址检测。
3.3.1 Link-Local 地址 DAD
当接口 up 之后,link-local IPv6 地址变成"试验地址" [tentative]:
Fe80::1 发送 NS Type 135
Sip = ::
Dip = 自己 link-local 地址的请求节点地址 (FF02::1:FF00:1)
携带 target ipv6 地址:fe80::1- 如果没有冲突,不回应,去掉标识变成 IPv6 地址,可以转发
- 如果有冲突,回复 NA Type 136
NA Type 136
Sip = 冲突 IPv6 link-local 地址
Dip = FF02::1 (本链路所有主机)本端收到 NS Type 136 NA,接口标识从 [tentative] → [duplicate]
3.3.2 Global 地址 DAD
进行完毕 link-local 地址的 DAD 以后,再逐个进行 global 地址的 DAD。
3.4 邻居发现(ND)
IPv4 邻居发现(ARP):
发送 arp-request
smac AR1 dmac FFFFFFFFF (广播)
Sender mac AR1
Sender ip 10.1.12.1
Target mac 000000000000
Target ip 10.1.12.2AR2 收到 arp-request 检查 target ip:
- 如果不是接口 IP,忽略
- 如果是,更新 ARP 表
- 回复 arp-reply
arp-reply | smac AR2 dmac AR1 (单播)
Sender mac AR2
Sender ip 10.1.12.2
Target mac AR1
Target ip 10.1.12.1AR1 收到 arp-reply 更新 ARP 表。
IPv6 邻居发现(NDP):
ping ipv6 fe80::2- 查询 IPv6 路由表,有路由转发
- 封装:ICMPv6 echo-request | sip fe80::1 dip fe80::2 | smac AR1 dmac ?
- 查询 NDP,发现没有,发起 NS Type 135
NS | sip fe80::1 dip FF02::1:FF00:2 (对方的) | smac AR1 dmac 组播
ipv6 target address:fe80::2
ICMPv6 option: source mac address AR1AR2 收到以太帧,检查 DMAC:
- If DMAC 不是接口侦听的组播 MAC,then 丢弃
- Else 接受,检查 target IPv6 address 是否是接口 IPv6 地址
- If 不是接口地址,then 不回复
- Else 收到,更新 NDP 表,回复 NA Type 136
NA | sip fe80::2 dip fe80::1 | smac AR2 dmac AR1
ipv6 target address:fe80::2
ICMPv6 option: target mac address AR2AR1 收到以太帧,检查 DMAC:
- If DMAC 不是接口 MAC 地址,then 丢弃
- Else 接受,更新 NDP 表
3.5 邻居不可达检测
下面以 A、B 两个邻居节点之间相互通信过程中 A 节点的邻居状态变化为例(假设 A、B 之前从未通信),说明邻居状态迁移的过程。
邻居状态迁移过程:
- A 先发送 NS 报文,并生成缓存条目,此时邻居状态为 Incomplete
- 若 B 回复 NA 报文,则邻居状态由 Incomplete 变为 Reachable,否则固定时间后邻居状态由 Incomplete 变为 Empty,即删除表项
- 经过邻居可达时间 30 秒,邻居状态由 Reachable 变为 Stale,即未知是否可达
- 在 Reachable 状态,A 收到 B 的非请求 NA 报文,且报文中携带的 B 的链路层地址和表项中不同,则邻居状态马上变为 Stale
- 在 Stale 状态若 A 要向 B 发送数据,则邻居状态由 Stale 变为 Delay
- 在经过 5 秒后,邻居状态由 Delay 变为 Probe,则发送 NS 请求,其 3 秒有 NA 应答,则邻居状态由 Delay 变为 Reachable
- 在 Probe 状态,A 每隔一定时间间隔发送单播 NS,发送固定次数后,有应答则邻居状态变为 Reachable,否则邻居状态变为 Empty,即删除表项
4. IPv6 自动配置
4.1 无状态自动配置(Stateless Autoconfiguration)
ICMPv6 Type 133:RSICMPv6 Type 134:RA:Router Advertisement(路由器通告)
AR1 g0/0/0 (client) → g0/0/0 AR2 (server)AR2 配置:
Interface g0/0/0
undo ipv6 nd ra halt # 使能 IPv6 RA 的功能周期性(200-600 秒)发送 RA 报文:
Sip:本接口 link-local 地址
Dip:FF02::1 (本链路所有主机)
flag 字段 live:1800
ICMPv6 option: source mac address:AR1
ICMPv6 option: prefix information:2001:10:1:12::/64
Preferer timer: 7天:可以用于 sip/dip,收发
Valid timer:30天:只能用于 dip,收AR1 收到 RA,把 RA 中的 prefix + EUI-64,自动生成接口 IPv6 global 地址和 link-local 地址。AR1 分别对 link-local 和 global 进行 DAD。
问题:AR2 是周期性发送 RA,万一 AR1 刚启动,AR2 已经发送 RA,那么 AR1 获取地址就需要等待了。
解决方案:触发更新
AR1 刚启动,不会等待 AR2 的 RA 报文,自主发送 RS:
RS:router solicitation,触发更新
Sip:接口 link-local 地址
Dip:FF02::1 本链路所有主机
ICMPv6 option: source mac address:AR1AR2 收到 AR1 RS,不会等待周期,立即回复 RA。AR1 收到 RA,自动生成 global 地址和 link-local 地址。
配置示例:
AR1:
Interface g0/0/0
Ipv6 enable
Ipv6 address auto global4.2 有状态自动配置(Stateful Autoconfiguration):DHCPv6
无状态:可以获取 IPv6 地址、掩码、网关,甚至 DNS
无法获取:额外的信息(DNS、NIS...)
有状态:可以获取 IPv6 地址、掩码(/128),但是没有网关,不能实现网络互访
通过有状态能获取额外信息:DNS、SIP、NIS...
最佳实践:DHCPv6 无状态
问题:如何控制有状态和无状态分配相应信息?
通过 RA 中 flag 字段:
- M(Managed)对应获取 IPv6 地址、掩码、网关用于网络互联 = 无状态
- O(Other)对应获取额外信息(dns、sip、NIS...)== 有状态 DHCPv6
配置示例:
AR2(DHCPv6 Server):
dhcp enable # 使能 DHCP 功能
#
dhcpv6 pool A # 创建 DHCPv6 地址池 A
address prefix 3FFF::/64
dns-server 3FFF::1
#
Interface g0/0/0
Dhcpv6 server AAR1(DHCPv6 Client):
Dhcp enable
#
Interface g0/0/0
Ipv6 address auto dhcp问题:
- 无状态:实现 IPv6 地址、掩码、网关,实现网络互访
- 有状态:实现 IPv6 地址、掩码(/128),但是没有网关,不能实现网络互访
通过有状态能获取额外信息:DNS、SIP、NIS...
最佳实践:DHCPv6 无状态
控制方式:通过 RA 中 flag 字段
- Management 对应获取 IPv6 地址、掩码、网关用于网络互联 = 无状态
- Other 对应获取额外信息(dns、sip、NIS...)== 有状态 DHCPv6
配置:
AR2:
dhcp enable # 使能 DHCP 功能
#
dhcpv6 pool A # 创建 DHCPv6 地址池 A
address prefix 3FFF::/64
dns-server 3FFF::1
#
Interface g0/0/0
Dhcpv6 server A # 使能 DHCPv6 server
ipv6 nd autoconfig other-flag # O 置位 = 1 other 有状态
# M 置位 = 0 M 无状态注意:默认 M 和 O 都是 0,说明全部无状态。如果 M 和 O 都是 1,说明全部有状态。
AR1:
Interface g0/0/0
dhcpv6 client information-request # DHCPv6 无状态使能
Ipv6 address auto global default # IPv6 无状态使能,形成默认路由DHCPv6 Server 支持 4-way 和 2-way:
- 当 DHCPv6 server 有多台的时候,建议默认是 4-way:用于选择一台 server,拒绝其他 server
client: server
Dhcpv6 solicit
Dhcpv6 advertise
Dhcpv6 request
Dhcpv6 reply- 当 DHCPv6 server 有且只有一台,为了降低资源消耗,修改为 2-way
client: server
Dhcpv6 solicit
Dhcpv6 reply配置:
AR2:
Interface g0/0/0
Dhcpv6 server A rapid-commitAR1:
Interface g0/0/0
ipv6 address auto dhcp rapid-commit5. IPv4 与 IPv6 对比总结
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位 |
| 地址表示 | 点分十进制 | 冒号分十六进制 |
| 地址空间 | 2³² ≈ 43 亿 | 2¹²⁸ ≈ 3.4×10³⁸ |
| 地址分类 | 有类/无类 | 无类 |
| 特殊地址 | 0.0.0.0、127.0.0.0/8 等 | ::/128、::1/128 等 |
| 广播 | 支持 | 不支持(用组播代替) |
| ARP | ARP 协议 | NDP 协议 |
| 地址解析 | ARP Request/Reply | NS/NA |
| 重复地址检测 | 免费 ARP | ICMPv6 NS/NA |
| 自动配置 | DHCPv4 | SLAAC + DHCPv6 |
| 地址与拓扑 | 融合 | 分离 |
| MTU | 最小 68 字节 | 最小 1280 字节 |
| 头部大小 | 20 字节 | 40 字节 |
6. 拓扑图
6.1 IPv4 网络拓扑
6.2 IPv6 网络拓扑
7. 报文结构
7.1 IPv4 报文结构
7.2 IPv6 报文结构
7.3 ICMPv6 报文结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Message Body +
| |
+---------------------------------------------------------------+常见 Type 值:
- 128:Echo Request
- 129:Echo Reply
- 133:Router Solicitation (RS)
- 134:Router Advertisement (RA)
- 135:Neighbor Solicitation (NS)
- 136:Neighbor Advertisement (NA)
- 137:Redirect