网络协议补完计划--IPv6

目录

  • 前言
  • IPV6概述
  • IPV4的不足和缺点
    • IP地址空间危机
    • IP地址性能问题
    • IP安全性问题
    • 配置问题
    • NAT技术存在局限
  • IPV6对IPV4的改进
    • 扩展地址
    • 取消了广播地址
    • 简化的包头
    • 多扩展和选项支持的改进
    • 流标记
    • 身份验证和保密
  • IPv6数据包结构
    • 分片
    • 扩展头
  • IPv6的寻址
  • IPv6的安全性

前言

主要参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》的结构进行学习。
本篇主要参考第十五章:《IPV6》


IPV6概述

尽管IPV4非常成功与强壮、但在互联网飞速发展的当下已经显露出很多不足。
IPV6应运而生:更多的地址、更安全的传输。


IPV4的不足和缺点

1.地址空间的局限性
IP地址空间的危机由来已久、是升级的主要动力。
2. 性能
尽管IPV4表现不错。但一些70年代的设计还能够及进一步改进。
3.安全性
安全性一直以来都被网络层之上的层负责、但IPV6已经可以发挥作用。
4.配置
IPV4的配置一直比较复杂。

  • IP地址空间危机

IPV4地址共有32位、总计40多亿个。
但导致IP地址耗尽的主要原因不在于IP地址的长度、而在于IP地址的结构、也就是分为网路号和主机号(一个C类地址有256个地址、但可能只连了几台主机)。
但如果不使用这种结构、虽然可以使地址的利用率更加高效、但也将导致很多网络功能不可行(比如根据网络号进行路由)。
尽管人们采用了子网掩码和无域间路由等技术减少了地址的消耗、但并没有从根本上解决问题。

还有一个原因是由于TCP/IP协议诞生之初、通讯协议百家争鸣。没有人会想到如今使用IP地址的人有如此之多。
在起初的IP分配上、也出现了很大程度的浪费、很多A类地址被分配给了一些机构和公司
17.0.0.0/8:苹果
18.0.0.0/8:MIT
19.0.0.0/8:福特汽车

而一个A类地址、就可以占有一千六百多万个实体IP。
反观很多国家、全国都没有一个完整的A类地址段。
我国的也一样、虽然有A类地址但是只是一整段中的一小部分。
教育网也仅仅拥有一些B类地址而已。

具体可以参阅《到底谁霸占了A类的IP地址》

————————

  • IP地址性能问题

IPV4已经可以异种网络间进行数据的可靠、高效和健壮的传输提供最佳的机制。
而在当下、IPV6主要考虑最大传输单元最大包长IP头部设计校验和的使用IP选项的应用等改进。

————————

  • IP安全性问题

当初IPV4的侧重点是科研机构、安全性并不是一个主要的课题。
而现在、网络安全越来越被人们所重视。

————————

  • 配置问题

IP协议早起、绝大部分使用IP协议接入internet的计算机都是大型计算机、他们与internet的链接基本是静态的。而且使用计算机的人员都是专业研究院、现在看来接入程序则要复杂很多。
即使使用DHCP来动态配置、但主机仍然依赖与到网络的单点连接。

————————

  • NAT技术存在局限

这个我感觉是最重要的问题、因为NAT在很大程度上堪称神技了、毕竟让IPV4的地址多活了十几年。

虽然NAT技术可以很大程度上的缓解IP地址匮乏的问题、但终究存在缺陷。
比如无法由外部进行访问(虽然可以通过静态弥补但很复杂)、端口号抢占(被NAT的多个服务器需要使用公网80端口)。

所以总是有人需要使用实体的公网IP、虽然慢但总会耗尽。

更多可以查阅《知乎》、《NAT无法取代迁移到IPv6的必要性》


IPV6对IPV4的改进

  • 扩展地址

IPv6的地址结构中除了把32位地址空间扩展到128位、一共将会有2^128≈340万亿个地址、有人很形象的举例说可以把地球上的每粒沙子都分配一个IP地址(不过25年过去了、地球上的沙子也没有来申请IP地址)。

  • 取消了广播地址

以任意点播地址代替。但IPv4中用于指定一个网络接口的单播地址和用于指定一个或多个主机的多播地址基本不变。

  • 简化的包头

IPv4则包含12个字段、长度在无选项时为20字节、最高可达60个字节。

  1. IPv6包含8个字段。
  2. 使用固定格式的包头减少了需要检查和处理的字段数量、提高了路由效率。
  3. 包头长度统一、不需要包头长度这个字段
  4. 去掉了校验和、将其交由上层协议负责。
  • 多扩展和选项支持的改进

IPv4的扩展放在包头尾部。
IPv6则将选项放在单独的扩展头中、只有在有必要时才会检查和处理。

  • 流标记

IPv4中对所有的IP数据包都同等对待。
IPv6中加入了流标记的概念。流指从特定源地址特地目的地址的包序列、源点希望中间的路由器对这些包进行特殊处理。

  • 身份验证和保密

最初的IP协议是没有任何的安全措施的。IP数据报含有诸如源地址,目的地址,版本,长度,生存周期,承载协议,承载数据等字段。虽然其拥有“首部校验和”这样的字段来提供极其简易的完整性功能,但无力抗拒对数据的意外或者故意修改,也无法阻止信息的泄露等问题。

IPv6使用两种安全性扩展:

  1. IP身份验证头(AH)
    (1). 数据完整性验证,通过使用Hash函数(如MD5)产生的验证码来实现;
    (2). 数据完整性时加入一个共享的会话密钥来实现;
    (3). 防重放攻击,在AH报头中加入序列号可以防止重放攻击。
  2. 数据加密(ESP)

发送方计算数据包摘要并将其放入AH头中、接收方对数据包摘要进行重新计算并与AH对比。

ESP则可以对某些数据进行加密。
也可以加密整个数据包后以隧道方式传输。
隧道传输意味着在对整个IP数据包进行加密后、并由一个安全网关系统将其封装在另一个数据包中向另一个安全网关进行传输,这样加密的IP包中所有数据都被隐藏起来。


IPv6数据包结构

先贴一个IPv4的数据包做对比

网络协议补完计划--IPv6_第1张图片

然后是IPv6的

网络协议补完计划--IPv6_第2张图片

  1. 版本
    4位。IPv6填6。主要为了与IPv4兼容。

  2. 通信量等级
    8位。表示数据包所属类别、路由器会根据不同的类别给予不同的服务。允许源路由器以及中间路由器在包上加上标记。
    一般可以根据链路的开销、带宽、延迟等进行特殊处理。

  3. 流标记
    20位。用于标识属于同一业务流的数据包。
    IPv4中数据包的传输默认是根据两个IP地址进行寻路、有可能前后两个包的传输路径会不同、原因则是每次都会进行重新寻路。
    IPv6中同一个流标记的数据包只要第一个进行寻路、后面的数据包就可以跟随其进行传输。

  4. 有效负荷长度
    16位。包头+数据区+扩展头。

  5. 下一报头
    8位。类似IPv4的协议字段、可以用来指明上层协议。
    也可以指明该IPv6数据包是否有扩展头的存在。

  6. 跳限制
    8位。类似IPv4中的TTL字段。但并不代表时间含义、对数据包超时的判断交由上层协议完成。

  7. 源地址
    128位

  8. 目的地址
    128位

  • 分片

IPv4中采用的是逐跳分片的方式、当物理链路的MTU过小是才会分片、最后在目的地址重组。过程中存在着一些问题:

  1. 丢失一个分片就需要整包重传。
  2. 在传输过程中的分片越来越多。
  3. 对数据包的分片消耗了沿途以及目的路由器的时间。
  4. 沿途处理IP数据包的标识、分片偏移等信息都会代理额外的开销。

IPv6的分片只能由源节点和目的节点进行

  1. 路径MTU发现
    源路由器可以向目的路由器发送一个数据包来报告该路由器上链路的MTU值。如果包到达了一个必须对其分片的链路、则通过CIMP协议回送。这种过程可以重复、知道确定路径的最小MTU为止。
  2. 要求所有支持IP的链路必须能够处理一些合理的最小长度数据包。
    如果一个链路最小的MTU为20、那么所有节点都必须准备生产可观数量的分片包。

通过将最小MTU设置为允许包长的最小值、可以消灭分片。

  • 扩展头

  1. 逐跳选项头
    此扩展头必须紧随在IPv6头之后。
    包含路径上每个节点必须检查的数据、由每个转发路由器进行检查。
  2. 路由头
    指明中途需要经过哪些节点。
  3. 分段头
    一个分段的偏移值、一个“更多段”标志和一个标识符字段。
  4. 目的地选项头
    代替IPv4选项字段、需要为64位的整数倍
  5. 身份验证(AH)头
    对IPV6头、扩展头和数据的某些部分进行加密的校验和的计算。
  6. 封装安全性数据(ESP)头
    本身不加密、指明剩余的数据已经加密。并为已获得授权的目的节点提供解密信息。

IPv6的寻址

  • 基本表示

将128位二进制地址表示成8段、每段4位16进制整数(IPv4为3位8禁止整数)。
例如1080:0000:0000:0000:0008:0800:200C:417A、不过也可以简化成1080:0:0:0:8:800:200C:417A
在混合使用的情况下、可以用最低的32位表示IPv4地址:
0:0:0:0:0:0:192.168.1.1、当然也同样可以写作::192.168.1.1

关于子网掩码:1080:0000:0000:0000:0008:0800:200C:417A/60则表示网络号为前60位。

  • 地址类型

  1. 单播地址(Unicast)用于单个接口的标识符,发送到此地址的数据包被传递给标识的接口。通过高序位八位字节的值来将单播地址与多路广播地址区分开来,多路广播地址的高序列八位字节具有十六进制值 FF,此八位字节的任何其他值都标识单播地址。

  2. 任播地址(Anycast)也叫泛播地址,一组接口的标识符(通常属于不同的节点),发送到此地址的数据包被传递给该地址标识的所有接口(根据路由走最近的路线)、并由里源主机最近的一个负责响应。任播地址类型代替 IPv4广播地址。

泛播地址被分配在正常的IPv6单播地址空间以外。因为泛播地址在形式上与单播地址无法区分开,一个泛播地址的每个成员,必须显式地加以配置,以便识别泛播地址。

  1. 组播地址(Multicast)
    IPv6中的组播在功能上与IPv4中的组播类似,表现为一组接口对看到的流量都很感兴趣。

IPv6多播地址有 1111 1111 的格式前缀。IPv6 地址很容易区分为多播地址,因为它总是以 FF 开始。多播地址不能被用作源地址。
具体可以参考《IPv6多播地址基础知识》

  • 一些常见的IPv6地址或者前缀

:/128 即0:0:0:0:0:0:0:0,只能作为尚未获得正式地址的主机的源地址,不能作为目的地址,不能分配给真实的网络接口

::1/128 即0:0:0:0:0:0:0:1,回环地址,相当于ipv4中的localhost(127.0.0.1),ping locahost可得到此地址
2001::/16 全球可聚合地址,由 IANA 按地域和ISP进行分配,是最常用的IPv6地址
2002::/16 6 to 4 地址,用于6to4自动构造隧道技术的地址
3ffe::/16 早期开始的IPv6 6bone试验网地址
注:上面三类属于单播地址,都是目前互联网上广泛应用的IPv6地址
fe80::/10 本地链路地址,用于单一链路,适用于自动配置、邻机发现等,路由器不转发

ff00::/8 组播地址
::A.B.C.D 其中代表ipv4地址,兼容IPv4的IPv6地址。自动将IPv6包以隧道方式在IPv4网络中传送的IPv4/IPv6节点将使用这些地址
::FFFF:A.B.C.D 其中代表ipv4地址,例如 ::ffff:202.120.2.30 ,是IPv4映射过来的IPv6地址,它是在不支持IPv6的网上用于表示IPv4节点


IPv6的安全性

  • 总体来说有三个目标

  1. 身份验证
    能够可靠的确定收到的数据与发送的数据一致、并且确保发送该数据的实体与其所宣称的身份一致。
  2. 完整性
    数据不被修改
  3. 机密性
    保证数据只能被预期的接受者读取

IPv6的AH以及ESP头部都有助于实现上述目标

  • AH为源节点提供了在包上进行数字签名的机制。
    AH之后的数据包都是文本格式、可能被攻击者截取。但是在目的节点接收之后、可以使用AH包含的数据来进行身份验证

  • ESP为数据内容进行加密
    ESP之后所有的数据都进行了加密、ESP头为接收者提供了足够的数据以对包的其余部分进行解密。


参考资料

《到底谁霸占了A类的IP地址》
《知乎》
《NAT无法取代迁移到IPv6的必要性》

你可能感兴趣的:(网络协议补完计划--IPv6)