本文转自头条https://www.toutiao.com/i6828807334622396941/
一、IPv4与IPv6报头对比
1、IPv4报头
(1)版本 :当前 IP 版本,IPv4。
(2)首部长度:指的是 IPv4 报头长度,20-60 个字节,因为 Option 字段是 0-40 个字
节。
(3)区分服务:用于 Qos 报头。
(4)总长度:总长度=头长+载荷长
(5)标识、标志、 片移位 :用于 IP 报文的分片和重组。
(6)协议:表示上层协议。
(7)首部校验和:头校验和,对报文进行校验。
2、IPv6 的报头
(1)traffic class:是 IPv4 的 ToS,用于 QoS 中标识优先级
(2)flow lable:IPv6 中增加了 flow lable(流标签)字段,用于唯一确定一条 IPv6 数据
流,因为在 IPv4 中确定一条数据流需要使用 5 元组,而确定 TCP/UDP 端口号需要对报文
进行传输层解封装,会消耗设备性能。而流标签可唯一标识数据流,能够更好实现 QoS。
(3)payload length:有效载荷长度,用于表示上层协议报文的大小,因为 IPv6 报头是
固定长 40byte,所以仅需标识上层协议载荷大小即可。
(4)next header:标识上层协议或上层扩展报头,类似于 IPv4 的 protocol。IPv6 中增加
了扩展报头用于实现扩展的功能如分片,加密等。
(5)hop limit:跳数限制,用于防环,类似于 IPv4 的 TTL。
(6)IPv6 删除了 IPv4 中的标识、标志、分片移位、首部长度、Option、校验和等字段。
IPv6 之所以移除校验和,是因为在二层有 FCS 校验,在四层有 TCP/UDP 做校验,IPv6 报
文无需校验,提升了 IPv6 的性能。
(7)扩展报头:用于实现 IPv6 的扩展功能,比如分片,认证,加密等。
二、NDP
NDP(Neighbor Discovery Protocol)是 ICMPv6 的子协议,由于在 IPv6 中没有 ARP
协议,所以在 IPv6 上层定义了 NDP 协议实现 ARP 的地址解析,冲突地址检测等功能以及
IPV6 的邻居发现功能。
1、NDP 使用 ICMPv6 的相关报文
1)、RS(Router Solicitation):路由器请求报文
2)、RA(Router Advertisement):路由器通告报文
3)、NS(Neighbor Solicitation):邻居请求报文
4)、NA(Neighbor Advertisement):邻居通告报文
2、地址解析
IPv6 的地址解析不再使用 ARP,也不再使用广播方式。
1)、地址解析在三层完成,针对不同的链路层协议可以采用相同的地址解析协议
2)、通过 ICMPv6(类型 135 的 NS 及类型 136 的 NA 报文)来实现地址解析。
3)、NS 报文发送使用组播的方式,报文的目的 IPv6 地址为被请求的 IPv6 地址对应的“被
请求节点组播地址”,报文的目的 MAC 为组播 MAC。
4)、采用组播的方式发送 NS 消息相比于广播的方式更加的高效,也减少了对其他节点
的影响和对二层网络的性能压力。
5)、可以使用三层的安全机制(例如 IPSec)避免地址解析攻击。
6)、在 IPv4 中,可以通过 ARP 就可以由 IP 地址解析到链路层地址。
三、地址解析过程(邻居状态建立)
(1)R1 会发送一个 NS(邻居请求报文,属于 ICMPv6 的消息报文,type=135),该报文
源 IP 为 R1 的接口单播地址 2001::1,目的 IP 为要解析的 R2IPv6 单播地址对应的被请求节
点组播地址 FF02::1:FF00:2(将要解析的 IPv6 单播地址的后 24bit 添加到 FF02::1:FF 后面,
其前缀固定 104bit 为 FF02::1:FFXX:XXXX/104);
二层封装源 MAC 为 R1 的 MAC,目的 MAC 为该被请求节点组播地址映射的 IPv6 组播
MAC=3333-FF00-0002(IPv6 组播地址映射的组播 MAC,该组播 MAC 前 16bit 固定为
3333,后 32bit 为 IPv6 组播地址后 32bit);
(2)由于 R2 配置了单播地址 2001::2 之后,就默认加入了该单播地址对应的被请求节点
组播地址 FF02::1:FF00:2 的组播组中,所以只要向该组播组发送报文,R2 都可以接受。
(3)当 R2 收到 R1 的 NS 报文之后,通过查看该报文中标识的要解析的地址是不是自己接
口的单播地址。如果是,则单播回应 NA(邻居通告报文,ICMPv6 的消息报文,
type=136),NA 报文中携带了 R2 的 2001::2 地址对应的 MAC 地址。
(4)R1 通过 R2 回应的 NA 报文可以得知单播地址 2001::2 对应的 MAC 地址。