IPV6优势:
- 更大地址空间(2^128)
- 端到端的全球可达性
- 层次化编址利于聚合(每个运营商一个地址块)
- 组播的使用(Server传播一份流量,通过组播扩散到用户,避免单播浪费资源)
IPV6以太协议号:0x86DD
IPV6地址=网络位+接口标识(主机位)
区分网络位和主机位的好处:便于寻址
IPV6地址采用冒号分16进制
IPV6编址:
单播地址:
- 可聚合全球单播地址(公网) 前缀:2000::/3(2000-3FFF::/3)
001 | TLA ID | RES | NLA ID | SLA ID | 接口ID |
2001::/16 目前 ipv6 使用的地址
2002::/16 6to4 address
- 本地站点地址(私网) 前缀:FEC0::/10
- 唯一站点地址(私网) 前缀:FC00::/7 (不常见)
- 本地链路地址(Link-Local) 前缀:FE80::/10
只能在本链路通信
Link-Local地址产生规则(EUI-64):FE80::接口MAC 中间截断插入FF:FE,接口标识的第一个字节第七位反转/64
Loopback接口Link-Local地址借用物理接口MAC地址 - 未指定地址 ::/128 用于接口没有分配IP地址
- 环回地址 ::1/128
兼容地址:
- ipv4兼容地址:::192.168.1.1 //用于ipv6自动隧道
- ipv4映射地址:::FFFF:192.168.1.1
- 6 to 4:
2002: | ipv4地址 | ::1 | /128 |
组播地址(FF开头为组播地址):
F | F | Flag | Scope | :: | /8 |
FF02::1所有节点加入的组播组(255.255.255.255)
FF02::2(所有路由器会加入)
Flag=O|R|P|T,前三位为0,T=0为被固定分配给协议,=1表示临时组播地址
Scope表示组播组范围:
0 | 预留 |
1 | 节点本地范围 |
2 | 本地链路范围 |
5 | 本地站点范围 |
8 | 组织本地范围 |
E | 全球范围 |
F | 预留 |
发送组播时三层为组播地址,二层MAC地址为映射地址:
FF02::1:FF5C:1C | 33:33:FF:5C:00:1C |
被请求节点组播地址:FF02::1:FFxx:xxxx 后24位是ipv6后24位(每一个IPV6地址都有一个被请求节点组播地址,替代IPV4中广播地址)
任播地址(多个设备共享一个地址):
路由器接收去往任意播地址的数据包,转发给具有这个地址离它最近的设备。
任播地址不能用作路由源地址。
一个地址被配置给大于一个设备,该地址就成为任播地址。
IPV6包头:
IPV6包头64bit对齐,能够直接对内存存取
包头长度定长40字节
黄色为与IPV4相同
红色为IPV6删除的
蓝色为名称不同,功能相同
灰色为新增的
• TTL=Hop limit
• Type of service=traffic class (用于QOS)
• Protocol=next header(上层协议)
• Total length=payload length (总长度,IPV6中包头长度固定,所以不需要包头长度)
• Flow label(在三层区分流,不用到四层区分端口号,方便管理)
IPV6扩展包头:
- 逐跳选项包头:被每一跳处理,用于RSVP(路由器警告)和巨型数据包
- 路由包头:控制路由到达目的地必须经过的节点。
- 分段包头:报文分片信息,仅源处理(段偏移量指报文段在原始报文中的位置偏移量,1500=1000+500 第一片偏移量为0,第二片为1000)(M flag用于标记分片,1代表后续有更多分片,0代表最后一个分片)(identification用于标识数据包,同一个包有同样的名称)
- 目的选项包头:目的地处理。
- 认证包头:IPSec,只有目的地处理。(解决来源,完整性问题)
- 封装安全净载包头:IPSec,只有目的地处理。(解决安全性问题)
包头封装顺序:
前一个包头写后一个包头的协议号
IPV6 ACL:
除了deny any,IPV6 ACL还默认存在:
Permit icmp any any nd-ns
Permit icmp any any nd-na
nd相当于IPV4中ARP,不放行则不通。
ICMP V6(RFC2463):
新功能:
- 邻居发现(类似 ARP)
- PathMTU发现(发现沿途最小MTU)
IPV6协议号:58
Type | Code | Checksum | Message body |
错误类信息:type=(1,127)
- 目的不可达(type=1)
Code=0:沿途节点没有路由
Code=1:通信被策略禁止(ACL…)
Code=2:未指定
Code=3:地址不可达(有路由但是没有实际节点)
Code=4:端口不可达 - 数据包超长(type=2):
Code=0 - 超时(type=3):
Code=0:传输超过跳数限制
Code=1:分片重组超时 - 参数问题(type=4):
Code=0:遇到错误报头字段
Code=1:遇到无法识别的下一个包头类型
Code=2:遇到无法识别的IPV6选项
信息类信息:
Echo request:type=128 code=0
Echo reply:type=129 code=0
NDP(邻居发现):
NDP属于ICMP信息类
代替IPV4 ARP
重复地址检测
无状态地址自动配置
- 重复地址检测(DAD):
- 地址解析:三层利用被请求节点组播地址,二层利用IPV6地址到组播MAC地址映射(33:33),对方收到后回复MAC地址。
Type=135:邻居请求(NS)
Type=136:邻居通告(NA)
R:路由器
S:表示响应请求
O:需要刷新OPTIONS字段中MAC地址到本机
Type=137:重定向消息
NDP邻居状态变迁:
IPV4 ARP表=IPV6邻居表
Route#Show ipv6 neighbors
Route#debug icmp nd
- 邻居状态种类:
incomplete(未完成)
reachable(可达)
stale(陈旧)
delay(延迟)
probe(探查) - 邻居状态变迁过程(正常情况):
- empty:A想去往B。
- Incomplete:A发送NS,并生成缓存,状态为Incomplete。
- reachable:B回复NA(包含B的MAC地址),A收到NA,状态为reachable。
- 邻居状态变迁过程(非正常情况):
- 如果A发送NS后,B没有发送NA,A会连续发送3次NS,每次间隔1S,如果3次B都没有回复,状态从Incomplete变成empty。
- 如果情况正常,邻居超时时间30S,30S无通信从reachable变为stale(无时间限制,依然能通),有数据通信,stale状态变为delay,A等待B返回信息,收到信息,状态变为reachable,发送数据。
- 如果stale状态,A向B发送数据,B没有响应,A会等待5S,5S后进入probe(和Incomplete一样,重新发送NS,请求成功进入reachable,不成功进入empty)。
NDP地址分配:
无状态自动配置:即插即用,无需设置,每个接口具备分配能力。
DHCP为有状态自动配置
赋予主机前缀、接口ID、网关、跳数、MTU
地址无冲突时没有路由器会相应RS报文(基于ICMPV6)
RA、RS报文可以代替DHCP
- Type=134:路由器通告(RA)
路由器间隔200S发送
IP源:发送者link local
IP目的:FF02::1(所有IPV6节点加入的组播组)或单播地址,跳数255
ICMP包含前缀、MTU、跳数、MAC地址
用EUI-64产生接口ID - Type=133:路由器请求(RS)
用于新接入的主机,像路由器请求RA,不用等待200S。
IP源:发送者link local或者unspccificd(未知)
IP目的:FF02::2(所有路由器会加入的组播组)
跳数:255
ICMP包含发送者的MAC地址
IPV6地址生命周期:
deprecated状态中,地址不能主动发起连接,只能被动接收连接。invalid状态任何连接都会DOWN。目的是为了方便实现地址重编址,修改地址时,老地址可以正常使用,但不会用老地址发起新的连接,当老地址不使用了,切换到新地址。IPV6可以获取不止一个地址。
配置地址生命周期(一般保持缺省):
Route(config-if)#ipv6 nd prefix X::X/X vaild时间 preferred时间
修改IPV6各种时间:
Route(config-if)#ipv6 nd reachable-time\retrains timer\ra time\router lifetime\icme error interval 时间
- reachable-time:设置可达状态超时时间
- retrains timer:设置接受RA的主机重传邻居请求之间的时间间隔(毫秒),0表示未指定。
- ra time:RA报文发送间隔,默认200S
- router lifetime:默认网关超时时间(秒),默认1800S,谁发送RA报文,谁就是网关。
修改ICMP差错报文产生间隔(毫秒):
Route(config)#ipv6 icme error-interval 时间
ICMP重定向信息(类型:137)(只针对特定地址重定向,不会改变网关):
和ipv4相同,当收到数据包和把数据包转发出去的是同一个接口时,像主机发送ICMP重定向,避免次优路径。
路由器会产生重定向报文,不会接受重定向报文。
DHCP V6(与IPV4相似):
RS、RA不能分配DNS地址,所以还需要有DHCP
DHCP V6工作过程:
- 客户端发送RS,检测链路上的路由器。
- 如果找到,检查RA,确定是否可以使用DHCP(和IPV4不同,IPV6是否可以使用DHCP由路由器决定,主机不会发送发现报文)。
- 如果没有发现路由器或者DHCP可以使用,则发送DHCP请求。
正常情况下路由器向主机发送的报文Mbit、Obit
- M:表示主机使用DHCP获取前缀
- O:表示主机使用DHCP获取除地址以外其他参数(如DNS)。
两种可能的组合:
- M=0、O=0:主机不发送DHCP请求。
- M=0、O=1:使用路由器分配的前缀,使用DHCP请求DNS
- M=1、O=1:主机使用DHCP获取前缀和DNS。
DHCP V6 无状态自动配置(置位Obit):
- 置位Obit:
Route(config-if)#ipv6 nd other-config-flag
- 调用DHCP server:
Route(config-if)#ipv6 dhcp server 名称
- 开启DHCP池:
Route(config-dhcpv6)#ipv6 dhcp pool 名称
- 配置DNS信息:
Route(config-dhcpv6)#dns server XXXX
Route(config-dhcpv6)#ipv6 dhcp server 名称(和接口相同)
Route(config-dhcpv6)#domain name 名称
DHCP V6 有状态自动配置(置位M、Obit):
与无状态区别:
- 加入配置,M置位:
Route(config-if)#ipv6 nd managed-config-flag
Route(config-if)#ipv6 address dhcp
- 加入前缀:
Route(config-dhcpv6)#address prefix 2001:1234::/64
Route#show ipv6 dhcp int 接口
DHCP-PD:
- 应用场景:
ipv6每台主机都使用公有地址,家庭用户配置公有地址复杂,DHCP-PD运营商给用户路由器下的主机分配地址。
PMTU:
最小PMTU=1280
10 min重新发现一次MTU
RIP NG(IPV6 RIP)
- 与IPV4 RIP区别:
UDP端口号:521
更新目标地址:FF02::9
带毒性逆转的水平分割:
router(config-rtr)#Poison reverse
Garbage-collect(IPV4 RIP中的flush):180s变为120s(180到时后计算120S,总共300S)
先起进程,然后接口下宣告:
router(config)#ipv6 router rip 名称
router(config-if)#ipv6 rip 名称 enable
IPV6过渡技术:IPV6穿越IPV4网络
Dual-stack(双栈):
分配IPV4和IPV6地址,首先尝试IPV6访问,访问不成功尝试IPV4,需要从源到目标都支持IPV6和IPV4。访问网站时,先尝试解析IPV6地址,在尝试解析IPV4地址。需要路由器配置两个地址,运行两个IGP。
tunnel(隧道):将IPV6包封装在IPV4中。
手动:源目IP手动指定
- GRE:默认tunnel
IPV6封装GRE,GRE封装IPV4
Router(config)#interface tunnel 10
Router(config-if)#ipv6 address
Router(config-if)#ipv6 enable
Router(config-if)#tunnel sou X.X.X.X
Router(config-if)#tunnel destin X.X.X.X
在接口配置路由
在边界配置,内层承载任何数据包,把数据包封装在配置的tunnel源目IP中
IPV6直接封装到IP
Router(config-if)#tunnel mode ipv6ip
- IPV6 over IPV4自动隧道
一条tunnel对应多个节点,无需配置目标
从特殊的IPV6地址中获取IPV4地址,或从特殊下一跳IPV6地址发现IPV4地址,通过IPV6地址获取应该封装的IPV4地址
通过IPV4地址产生IPV6地址,IPV4:192.168.99.1 IPV6:::192.168.99.1
Router(config)#Int tunnel 1
Router(config-if)#Tunnel mode ipv6ip 6rd
Router(config-if)#Tunnel source 接口
- 6 to 4 tunnel自动隧道(主要使用)
无需配置目标,与IPV6 over IPV4相似
2002: | ipv4地址 | ::1 | /128 |
Router(config)#Int tunnel 1
Router(config-if)#Tunnel mode ipv6ip 6 to 4
Router(config-if)#Tunnel source 接口(需要把这个接口的IPV4地址写到IPV6地址)
Router(config-if)#Ipv6 add 2002:接口IPV4::1/128(IPV4:2.1.1.1,IPV6 :2002:201:101::1。IPV4:202.100.3.1 IPV6:2002:CA64:301::1)
Router(config)#Ipv6 route 2002::/64 tunnel 1(地址规划也应该是2002:IPV4地址)
访问外网时,地址不是2002的地址,则在tunnel上写一条默认路由,下一跳写接口IP,不能写接口
- ISATAP隧道(RFC 4214)
主机到路由器的应用
主机配置isatap:以windows为例
CMD:netsh interface isatap set router 远端地址
路由器isatap隧道地址格式:
任意前缀/64 | 0000:5EFE: | IPV4地址 |
Translation(翻译):把IPV4地址翻译成IPV6
NAT-PT