IPv6

背景与目标

现今的互联网络发展蓬勃，截至2018年1月，全球上网人数已达40.21亿，IPv4仅能提供约42.9亿个IP位置。虽然当前的网络地址转换及无类别域间路由等技术可延缓网络位置匮乏之现象，但为求解决根本问题，从1990年开始，互联网工程工作小组开始规划IPv4的下一代协议，除要解决即将遇到的IP地址短缺问题外，还要发展更多的扩展，为此IETF小组创建IPng，以让后续工作顺利进行。1994年，各IPng领域的代表们于多伦多举办的IETF会议中，正式提议IPv6发展计划，该提议直到同年的11月17日才被认可，并于1996年8月10日成为IETF的草案标准，最终IPv6在1998年12月由互联网工程工作小组以互联网标准规范（RFC 2460）的方式正式公布。
IPv6的计划是创建未来互联网扩展的基础，其目标是取代IPv4，虽然IPv6在1994年就已被IETF指定作为IPv4的下一代标准，由于早期的路由器、防火墙、企业的企业资源计划系统及相关应用程序皆须改写，所以在世界范围内使用IPv6部署的公众网与IPv4相比还非常的少，技术上仍以双架构并存居多。预计在2025年以前IPv4仍会被支持，以便给新协议的修正留下足够的时间。
IPv6能解决的核心问题与互联网当前所面临的关键问题之间出现了明显的偏差，难以给互联网的发展带来革命性的影响。与IPv4的各种地址复用解决方案相比，IPv6能够降低复杂性和成本，然而当前却只有制造商较能够感受到这个优势，用户和运营商​​无法直接感受到，导致产业链缺乏推动IPv6的动力。

与IPv4比较

在Internet上，数据以分组的形式传输。IPv6定义了一种新的分组格式，目的是为了最小化路由器处理的消息标头。由于IPv4消息和IPv6消息标头有很大不同，因此这两种协议无法互操作。但是在大多数情况下，IPv6仅仅是对IPv4的一种保守扩展。除了嵌入了互联网地址的那些应用协议（如FTP和NTPv3，新地址格式可能会与当前协议的语法冲突）以外，大多数传输层和应用层协议几乎不怎么需要修改就可以在IPv6上运行。

无状态地址自动配置（SLAAC）

当连接到IPv6网络上时，IPv6主机可以使用邻居发现协议对自身进行自动配置。当第一次连接到网络上时，主机发送一个链路本地路由器请求（solicitation）多播请求来获取配置参数。路由器使用包含Internet层配置参数的路由器宣告（advertisement）报文进行回应。
在不适合使用IPv6无状态地址自动配置的场景下，网络可以使用有状态配置，如DHCPv6，或者使用静态方法手动配置。

IPv6编码

IPv6具有比IPv4大得多的编码地址空间。这是因为IPv6采用128位的地址，而IPv4使用的是32位。因此新增的地址空间支持2¹²⁸（约3.4×10³⁸）个地址，具体数量为340,282,366,920,938,463,463,374,607,431,768,211,456 个，也可以说成16³²个，因为32位地址每位可以取16个不同的值。
网络地址转换是当前减缓IPv4地址耗尽最有效的方式，而IPv6的地址消除了对它的依赖，被认为足够在可以预测的未来使用。就以地球人口70亿人计算，每人平均可分得约4.86×10²⁸（486117667×10²⁰）个IPv6地址。
IPv6从IPv4到IPv6最显著的变化就是网络地址的长度。RFC 2373和RFC 2374定义的IPv6地址有128位长；IPv6地址的表达形式一般采用32个十六进制数。
在很多场合，IPv6地址由两个逻辑部分组成：一个64位的网络前缀和一个64位的主机地址，主机地址通常根据物理地址自动生成，叫做EUI-64（或者64-位扩展唯一标识）

IPv6数据包

IPv6数据包由两个主要部分组成：头部和负载。
包头是包的前64比特，并且包含有源和目的地址，协议版本，通信类别（8位，包优先级），流标记（20比特，QoS服务质量控制），分组长度（16位），下一个头部（用于入栈解码，类似IPv4中的协议号），和跳段数限制（8位，生存时间，相当于IPv4中的TTL）。后面是负载。MTU至少1280字节长，在常见的以太网环境中为1500字节。负载在标准模式下最大可为65535字节，如果扩展报头设置了"jumbo payload"选项，则长度值被置为0。
IPv6曾有两个有着细微差别的版本；在 RFC 1883 中定义的原始版本（现在废弃）和 RFC 2460 中描述的现在提议的标准版本。两者主要在通信类别这个选项上有所不同，它的位数由4位变为了8位。其他的区别都是微不足道的。
由于分片（Fragmentation）只在IPv6的主机中处理，而IPv6也要求实现“MTU路径发现”来避免数据包需要被中间设备分片，所以IPv4头涉及分片的字段从IPv6基本头移出至专用的分片扩展报头中。
在IPv6中，可选项都被从标准头部中移出并在协议字段中指定，类似于IPv4的协议字段功能。

网络层安全

网际网络安全协议（Internet Protocol Security，即IPsec）原本为IPv6开发，但是在IPv4中已经大量部署。IPsec最初是IPv6协议的强制要求，但后来改为可选项。

双堆栈

双堆栈（Dual IP stack implementation）是将IPv6视为一种IPv4的延伸，以共享代码的方式去实现网络堆栈，其可以同时支持IPv4和IPv6，如此是相对较为容易的。如此的实现称为“双堆栈”，并且，一个实现双堆栈的主机称为“双堆栈主机”。这步骤描述于RFC 4213。
当前大部分IPv6的实现使用双堆栈。一些早期实验性实现使用独立的IPv4和IPv6堆栈。

隧道

隧道（Tunneling）是另一个用来连结IPv4与IPv6的机制。为了连通IPv6互联网，一个孤立主机或网络需要使用现存IPv4的基础设施来携带IPv6数据包。这可由将IPv6数据包装入IPv4数据包的隧道协议来完成，实际上就是将IPv4当成IPv6的连结层。
IP协议号码的41号用来标示将IPv6数据帧直接装入IPv4数据包。IPv6亦能加入UDP数据包，如为了跨过一些会阻挡协议41流量的路由器或NAT设备。其它流行的封装机制则有AYIYA和GRE。

自动隧道

自动隧道（Automatic tunneling）指路由设施自动决定隧道端点的技术。RFC 3056建议使用6to4隧道技术来自动隧道，其会使用41协议来封装。  隧道端点是由远程知名的IPv4任播地址所决定，并在本地端嵌入IPv4位址信息到IPv6中。现今6to4是广泛布署的。
Teredo是使用UDP封装的隧道技术，据称可跨越多个NAT设备。Teredo并非广泛用于布署的，但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆栈中。IPv6，包含6to4隧道和Teredo隧道，在Windows Vista中默认是引导的。许多Unix系统只支持本地的6to4，但Teredo可由如Miredoo的第三方软件来提供。
ISATAP借由将IPv4位址对应到IPv6的链路本地地址，从而将IPv4网络视为一种虚拟的IPv6区域连线。不像6to4和Teredo是站点间的隧道机制，ISATAP是一种站点内机制，意味着它是用来设计提供在一个组织内节点之间的IPv6连接性。

配置隧道（6in4）

在配置隧道中，如6in4隧道隧，隧道端点是要明确配置过的，可以是借由管理员手动或操作系统的配置机制，或者借由如tunnel broker等的自动服务。配置隧道通常比自动隧道更容易去调试，故建议用于大型且良好管理的网络。
配置隧道在IPv4隧道上，使用网际协议中号码的41号。

用于只支持IPv6主机的代理和转译

在局域网际网络注册管理机构耗尽所有可使用的IPv4位址后，非常有可能使新加入互联网的主机只具有IPv6连接能力。对这些须要向后兼容以能访问IPv4资源的客户端，须要布署合适的转换机制。
一种转换技术是使用双堆栈的应用层代理，如网页代理服务器。
一些对于应用程序无法得知但在其低层使用类NAT转换技术也曾被提出。但因为一般应用层协议所要求的能力其应用太广，其中大部分都被认定在实际上太不可靠，并且被认为应删除。