Skip to content

IPv4 与 IPv6 综合对比

0. 课件来源(NewHCIP)

1. IPv4 地址回顾

1.1 地址表示

IPv4 地址是 32位 二进制数,通常用点分十进制表示:

二进制:11000000 00000000 00000000 00000001
十进制:128.0.0.1

1.2 地址分类(有类地址)

类别二进制前缀地址范围用途
A类0xxxxxxx1.0.0.0 - 126.255.255.255大型网络
B类10xxxxxx128.0.0.0 - 191.255.255.255中型网络
C类110xxxxx192.0.0.0 - 223.255.255.255小型网络
D类1110xxxx224.0.0.0 - 239.255.255.255组播
E类1111xxxx240.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、/27

VLSM(可变长子网掩码):把网络不断分割,变小

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/0

2. IPv6 地址详解

2.1 地址表示

IPv6 地址是 128位,分为 8 段,每段 16 位(4 个十六进制):

冒号分十六进制:
2001:0001:0000:0000:f000:0000:0000:0000

2.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

优点

  1. 业务和拓扑无关,一旦业务故障,不会影响拓扑
  2. 节省地址

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:xxxx
  • xx: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)

用于移动互联,就近原则。多个设备共享同一个地址块,多个设备共享一个地址。

特点

  1. 不进行 DAD(重复地址检测)
  2. 不能作为源地址,只能作为目的地址

配置示例

Interface g0/0/0
Ipv6 enable
Ipv6 address 2001:172:16:12::1/64
Ipv6 address 2001:172:16:12::1/64 anycast

2.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:6BE9

MAC 地址是全球唯一,如果被用于 EUI-64,性质发生改变,LG 位要进行相应的变化

  • 第六位 LG 从原来 0000 0000 → LG=0(global 全球唯一)
  • 第六位 LG 变为 0000 0010 → LG=1(link administrative)
Interface g0/0/0
Ipv6 address fe80::1 link-local  # 修改 link-local 地址
Interface g0/0/0
Ipv6 address auto link-local  # 自动生成 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 global

3. NDP 邻居发现协议

3.1 NDP 报文类型

NDP(Neighbor Discovery Protocol)借助 ICMPv6 报文中新增报文:

Type名称功能
133RS (Router Solicitation)路由器请求
134RA (Router Advertisement)路由器通告
135NS (Neighbor Solicitation)邻居请求
136NA (Neighbor Advertisement)邻居回复
137Redirect重定向

3.2 NDP 功能

  1. DAD:单播地址冲突检测
  2. ND:邻居发现
  3. Autoconfiguration:自动配置
  4. MTU Path Discovery:MTU 发现
  5. 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 单播地址都要进行重复地址检测。

当接口 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.2

AR2 收到 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.1

AR1 收到 arp-reply 更新 ARP 表。

IPv6 邻居发现(NDP)

ping ipv6 fe80::2
  1. 查询 IPv6 路由表,有路由转发
  2. 封装:ICMPv6 echo-request | sip fe80::1 dip fe80::2 | smac AR1 dmac ?
  3. 查询 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 AR1

AR2 收到以太帧,检查 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 AR2

AR1 收到以太帧,检查 DMAC:

  • If DMAC 不是接口 MAC 地址,then 丢弃
  • Else 接受,更新 NDP 表

3.5 邻居不可达检测

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

邻居状态迁移过程

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

AR2 收到 AR1 RS,不会等待周期,立即回复 RA。AR1 收到 RA,自动生成 global 地址和 link-local 地址。

配置示例

AR1:
Interface g0/0/0
Ipv6 enable
Ipv6 address auto global

4.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 A

AR1(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

  1. 当 DHCPv6 server 有多台的时候,建议默认是 4-way:用于选择一台 server,拒绝其他 server
client:              server
Dhcpv6 solicit
Dhcpv6 advertise
Dhcpv6 request
Dhcpv6 reply
  1. 当 DHCPv6 server 有且只有一台,为了降低资源消耗,修改为 2-way
client:              server
Dhcpv6 solicit
Dhcpv6 reply

配置

AR2:
Interface g0/0/0
Dhcpv6 server A rapid-commit

AR1

Interface g0/0/0
ipv6 address auto dhcp rapid-commit

5. IPv4 与 IPv6 对比总结

特性IPv4IPv6
地址长度32 位128 位
地址表示点分十进制冒号分十六进制
地址空间2³² ≈ 43 亿2¹²⁸ ≈ 3.4×10³⁸
地址分类有类/无类无类
特殊地址0.0.0.0、127.0.0.0/8 等::/128、::1/128 等
广播支持不支持(用组播代替)
ARPARP 协议NDP 协议
地址解析ARP Request/ReplyNS/NA
重复地址检测免费 ARPICMPv6 NS/NA
自动配置DHCPv4SLAAC + DHCPv6
地址与拓扑融合分离
MTU最小 68 字节最小 1280 字节
头部大小20 字节40 字节

6. 拓扑图

6.1 IPv4 网络拓扑

☁️Internet
🌐
Router
Network 1
1.1.1.0/24
Network 2
2.2.2.0/24
Network 3
3.3.3.0/24

6.2 IPv6 网络拓扑

☁️Internet
🌐
Router
fe80::1
2001::1/64
Network 1
2001:1::/64
Network 2
2001:2::/64
Network 3
2001:3::/64

7. 报文结构

7.1 IPv4 报文结构

IPv4 Header (20-60 bytes)
Version
4 bits
IHL
4 bits
Type of Service
8 bits
Total Length
16 bits
Identification
16 bits
Flags
3 bits
Fragment Offset
13 bits
Time to Live
8 bits
Protocol
8 bits
Header Checksum
16 bits
Source Address
32 bits
Destination Address
32 bits
Options + Padding
0-40 bits

7.2 IPv6 报文结构

IPv6 Header (40 bytes)
Version
4 bits
Traffic Class
8 bits
Flow Label
20 bits
Payload Length
16 bits
Next Header
8 bits
Hop Limit
8 bits
Source Address
128 bits
Destination Address
128 bits

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