ipv6

作者: OOM_Killer | 来源:发表于2019-12-02 00:52 被阅读0次

    长期以来,全球 IPv4 地址耗尽令人担忧,今天这一时刻终于来临。负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心(RIPE NCC)宣布,其最后的 IPv4 地址空间储备池在 11 月 25 日 UTC + 1 15:35 完全耗尽,所有 43 亿个 IPv4 地址已分配完毕。这意味着没有更多的 IPv4 地址可以分配给 ISP 和其他大型网络基础设施提供商。
    全球ipv4地址正式耗尽 --infoQ

    Beginner-s-Guide-to-IPv6-min

    上面的提到的是来自infoQ的一篇报道,那为什么要用到 ipv6 呢,根本原因是 ipv4 地址耗尽的问题。
    IPv6 的头部字段,和 IPv4 差别巨大(可以猜测到,IPv6 和 IPv4 无法兼容)



    IPv6 报文头部更精简了,字段更少了,对比起 IPv4,有以下几个地方值得注意:

    • IPv6 报文头部是定长(固定为 40 字节),IPv4 报文头部是变长的。这个意味着,写代码处理 IPv6 数据报文的效率会提高很多:)
    • IPv6 中 Hop Limit 字段含义类似 IPv4 的 TTL。
    • IPv6 中的 Traffic Class 字段含义类似 IPv4 中的 TOS(Type Of Service)。
    • IPv6 的报文头部取消了校验和字段。取消这个字段也是对 IPv4 协议的一个改进。当 IPv4 报文在网路间传输,每经过一个路由器转发就是修改 TTL 字段,就需要重新计算校验和,而由于数据链路层 L2 和传输层 L4 的校验已经足够强壮,因此 IPv6 取消这个字段会提高路由器的转发效率。值得一提的是,在 IPv6 协议下,传输层 L4 协议 UDP、TCP 是强制需要进行校验和的(IPv4 是可选的)。
    • IPv6 报文头部中的 Next Header 字段表示“承载上一层的协议类型”或者“扩展头部类型”。这里的含义与 IPv4 有很大的差别,需要加以解释:

    当 IPv6 数据报文承载的是上层协议 ICMPv6、TCP、UDP 等的时候,Next Header 的值分别为 58、6、17,这个时候和 IPv4 报文头部中的 Protocol 字段很类似。
    当不是以上 3 种协议类型的时候,IPv6 报文头部紧接的是扩展头部。扩展头部是 IPv6 引入的一个新的概念,每个 IPv6 的数据报文可以承载 0 个或多个扩展头部,扩展头部通过链表的形式组织起来。当 IPv6 数据报文承载着扩展头部的时候,Next Header 的数值为扩展头部的类型值。

    ipv4/ipv6 关键差异

    IPv4 IPv6
    地址长度 32位 128位
    地址表示方式 点分十进制 冒号十六进制
    头部长度 可变头部长度 定长头部
    校验机制 使用校验和保证数据完整性 去掉IP层的校验和,完整性交给上层保证
    头部选项 头部包含可选字段 去掉了选项字段,改为扩展头部
    安全性 无安全机制(IPSec在IP层之外实现) 提供认证和加密机制(IPSec inbuilt)
    链路层地址映射 ARP协议 NDP协议
    广播机制 包含广播地址 没有广播机制

    邻居发现协议 NDP(对应于 IPv4 里面的 ARP 协议)


    红色部分在ipv6中去除了。

    ipv6 地址语法

    一个 IPv6 的地址使用冒号十六进制表示方法:128 位的地址每 16 位分成一段,每个 16 位的段用十六进制表示并用冒号分隔开,例如:
    一个普通公网 IPv6 地址:2001:0D12:0000:0000:02AA:0987:FE29:9871
    IPv6 地址支持压缩前导零的表示方法,例如上面的地址可以压缩表示为:
    2001:D12:0:0:2AA:987:FE29:9871
    为了进一步精简 IPv6 地址,当冒号十六进制格式中出现连续几段数值 0 的位段时,这些段可以压缩为双冒号的表示,例如上面的地址还可以进一步精简表示为:
    2001:D12::2AA:987:FE29:9871
    又例如 IPv6 的地址 FF80:0:0:0:FF:3BA:891:67C2 可以进一步精简表示为:
    FE80::FF:3BA:891:67C2
    这里值得注意的是,双冒号只能出现一次。
    IPv6 地址的号段划分和前缀表示法

    IPv6 的地址类型

    IPv6 地址分三种类型

    1、单播,对应于 IPv4 的普通公网和私网地址
    2、组播,对应于 IPv4 的组播(多播)地址
    3、任播,IPv6 新增的地址概念类型

    IPv6 单播地址

    1、全球单播地址
    前缀 2000::/3,相当于 IPv4 的公网地址(IPv6 的诞生根本上就是为了解决 IPv4 公网地址耗尽的问题)。这种地址在全球的路由器间可以路由。

    IPv6全球单播地址

    2、链路本地地址
    前缀 FE80::/10,顾名思义,此类地址用于同一链路上的节点间的通信,主要用于自动配置地址和邻居节点发现过程。Windows 和 Linux 支持或开启 IPv6 后,默认会给网卡接口自动配置一个链路本地地址。也就是说,一个接口一定有一个链路本地地址。

    链路本地地址

    fe80::de1e ....
    注意,很容易会把链路本地地址和 IPv4 的私网 / 内网地址对应起来,其实链路本地地址对应于 IPv4 的 APIPA 地址,也就是 169.254 开头的地址(典型场景就是 windows 开启自动获取地址而获取失败后自动分配一个 169.254 的地址)。

    3、唯一本地地址
    前缀 FC00::/7,相当于 IPv4 的私网地址(10.0.0.0、172.16.0.0、192.168.0.0),在 RFC4193 中新定义的一种解决私网需求的单播地址类型,用来代替废弃使用的站点本地地址。

    4、环回地址
    0:0:0:0:0:0:0:1 或::1,等同于 IPv4 的 127.0.0.1

    5、过渡地址
    就是在 IPv6 的某一些十六进制段内嵌这 IPv4 的地址,例如 IPv6 地址中 64:ff9b::10.10.10.10,此 IPv6 地址最后 4 个字节内嵌一个 IPv4 的地址,这类地址主要用于 IPv6/IPv4 的过渡技术中。

    IPv6部署现状

    • IPv6使用比例比较高的几个国家/地区:
      1、印度(57%)比利时(54%)美国(50%)德国(41%)马来(37%)希腊(36%)日本(30%)巴西(29%)
      2、使用率超过5%的国家有55个
      3、中国目前只有3.9%
    • 移动运营商
      1、 印度(JIO 87% Vodafone 45.9%)
      2、美国(T-Mobile 93 % Sprint 70%)
      3、 日本(Softbank 34%)
    • IPv6路由
      全球BGP路由数据库中,由54154个AS,其中13947(25.8%)通告了IPv6的前缀,其中243个只通告了IPv6前缀。
    • 运营商骨干网
      除非洲,中东国家,拉美少数国家和中国外,其他国家的运营商骨干网都完成了IPv6的部署。

    IPv6 过渡方案

    为什么 IPv6 已经发展了十几年了,目前在我们的工作和生活中还是比较少接触和使用。这里的原因是非常的复杂,有技术上障碍,因为 IPv6 和 IPv4 是两个完全不兼容的协议(在极少数的特定场景可以实现兼容),如果要从支持 IPv4 升级到 IPv6,无论是应用程序用客户端、服务器程序端、路由器等等,都要同时支持 IPv6 才能解决问题,这个的升级改造需要花费的成本是巨大的。而且,正是由于技术上的升级花费大量的人力物力,无论是运营商还是互联网服务商,一方面要重视用户的体验问题,这个肯定不能强制客户更新换代硬件设备和软件,另一方面也要维护自身的投资和利益,更愿意去选择利用现有技术降低 IPv4 地址耗尽带来的压力,例如 NAT 的广泛应用,就是 IPv6 推广使用的一个重要的“障碍”。

    1、双栈技术

    简介:

    • 设备同时支持IPv4/IPv6协议栈
    • 如果通信双方都支持IPv6,则使用IPv6,否则使用IPv4
    • 最简单直接的过渡方案
      特点:
    • 不能解决根本的IPv4地址耗尽的问题
    • 现实网络中,双栈技术需要和其他过渡技术配合一起使用


    2、隧道技术

    当前的网络是以 IPv4 为主,因此尽可能地充分利用 IPv4 网络进行 IPv6 通信是十分好的手段之一。隧道技术就是这样子的一种过渡技术。
    隧道将 IPv6 的数据报文封装在 IPv4 的报文头部后面(IPv6 的数据报文是 IPv4 的载荷部分),IPv6 通信节点之间传输的 IPv6 数据包就可以穿越 IPv4 网络进行传输。隧道技术的一个很重要的优点是透明性,通过隧道进行通信的两个 IPv6 节点(或者节点上的应用程序)几乎感觉不到隧道的存在。
    简介:

    • 当前网络是以ipv4为主,新增的IPv6网络形成彼此不通的孤岛网络
    • IPv6孤岛通过隧道技术联通。
      关键技术:
    • IP隧道:IPv6 over IPv4
    • 边界路由器支持双栈协议
    • 边界路由器之间,通过MP-BGP交换IPv6路由信息
    • 边界路由器之间,通过隧道技术在IPv4网络上转发IPv6数据包


      隧道技术

    3、转换技术

    解决问题:

    • IPv6-only 客户端如何访问IPv4-only的网络
    • 运营商用户侧网络的兼容性技术。
      技术:
    • DNS64/NAT64
    • 464XLAT
    方案一:DNS64/NAT64

    DNS64
    1、 当DNS 查询记录AAAA为空时,用A记录合成一个IPv6地址。
    2、 合成地址的第一部分只想NAT64的地址前缀,第二部分嵌入A记录中的IPv4地址
    NAT64
    1、NAT64网关将DNS64的合成地址转换为IPv4地址后向外发送,并维持 IPv4和IPv6的MAP表
    2、NAT64网关接收到外部的IPv4包后,根据MAP表将IPv4包转换为IPv6包发送给IPv6 only 的客户端。

    其实就是子网内用IPv6,出口用IPv4.


    When-NAT64-is-used-SMALL
    方案二:464XLAT

    也是为了客户端 IPv6-only 网络访问 IPv4服务端的方式。
    但不是有 DNS64/NAT64 方式了吗?不不不,万一,客户端绕过DNS 阶段,直接访问 8.8.8.8 怎么办呢?
    解决方案:

    • XLAT Customer-side translator
      客户端操作系统之上,将IPv4包转成IPv6
    • PLAT Provider-side translator
      运营商的本地网关上,将IPv6包转换为IPv4包

    支持范围:

    • 操作系统:Android 4.3 以上,Windows10
    • 支持的运营商 T-mobile;Orange
    • 苹果明确表示不支持,要求APP在IPv6网络下正常工作。


      464XLAT

      这种技术把运营商网络搞的超级复杂,而且这种方式就是在对 IPv4 做妥协。

    国内三大运营商对兼容性方案做的支持程度还是不够,主要推崇IPv6-only。
    国内运营商在服务端没有 IPv6 的情况下都会请求失败!!!(IPv6兼容性在国外比较常见)

    参考:
    https://www.infoq.cn/article/vpDCmupCW3MEv3L2kx41
    https://www.infoq.cn/article/zgkJXORjQiTEUBifd3pi

    相关文章

      网友评论

          本文标题:ipv6

          本文链接:https://www.haomeiwen.com/subject/noitgctx.html