本文为大家介绍IPV6,是启蒙类文章,也是网络基础部分的最后一篇纯讲原理的文章。(预警:本节篇幅略长,且学习过程可能引起强烈不适,如果觉得很煎熬,通读一遍有个印象即可(本文无实验),不用强求过多,毕竟IPV6还不是当下的主流)
IPV6-狼真的来了?
IPV4使用了32位二进制数来标识地址,从数学角度看约有40亿个可用的公网IP,从当今互联网的规模来看,这确实是个脑残的设计。加上各种各种物联网设备,IPV4未来必然难堪重负。
IPV6使用了128位二进制数来标识地址,可用IP数量多得吓人,号称能让地球上每一粒沙子都能分配到一个可用IP,可以说是一个绝佳的治本方案了,但是就是一个这么好的方案,却迟迟没有完全落地,主要原因有两点:
1、NAT技术大大延缓了IPV4的寿命。
NAT技术可以使得几千个用户能共用一个公网IP,换句话说,NAT技术使得IPV4总体可支撑的用户数量扩大了几千倍。在极限情况下,理论上现网架构的IPV4可以支撑几万亿个在网设备,而现在的网络用户规模还远远没有达到那么大。多久能达到这个极限呢?十年?二十年?五十年?暂时还不得而知,也许在不久的将来,科学家们有发明了一种方法,能够给IPV4再续命一波呢?因此在很多人看来,IPV6并不是刚需。
2、改造规模过于庞大
现网的IPV4用户数量极大,并且网络规模也极大;IPV4标准也渗透到了IT领域的方方面面,一夜之间推到重来是不可能的,演变的过程中,还要尽量保证在网业务不被中断。因此,唯一的方法就是让IPV4和IPV6可以和谐共处、让IT基础设施的升级能够和平演变。这样一个和平演变的过程是相当久的。这不仅是技术问题,更是历史问题、商业问题甚至政治问题(IPV4地址的分配是不均的,老美无疑是最受益者,对于IPV4地址较少的国家来说,对IPV6改造的需求可能更高)。
出于以上两种主要原因,虽然业内喊着IPV6改造的口号多年,却迟迟未完全落地。但是17年11月,国家发布了IPV6的部署计划,大家来感受一下国家的决心:
虽然说,支持IPV6和默认使用IPV6是两码事,但是从我国政策层面讲,IPV6改造进程会大大加快,提前了解一波IPV6知识绝对不亏。
IPV6报头格式
下面介绍工程师们日常分析须知的字段:
version:表明版本号,长度4bit,对于ipv6来说,该值为6
traffic class:类比IPV4的TOS字段,主要应用于QOS,用来表示IPV6数据包的优先级
payload lenth:用来表示IPV6数据包有效数据的长度
Hop limit:类比IPV4的TTL值
next header:上一层的协议类型(TCP,UDP,ICMP等)或“扩展头部”。扩展头部是IPV6新引入的一个概念,需要时,它可以为我们处理分片、认证等功能。
IPV6地址语法
ipv4是点分十进制数字表示,而IPV6是冒号分隔,16进制表示。128位的二进制地址用16进制表示,共32位十六进制数。(此处不理解的读者二进制转16进制运算不合格)。通常来说,每四个十六进制数就用冒号隔开,比如fe80:0000:0000:0000:3406:8d0c:59e4:ed7d。
由于IPV6的地址非常之长,而且通常会出现多个连续的0,所以IPV6提供了压缩格式:
每16比特的0可以缩写成一个,比如fe80:0000:0000:0000:3406:8d0c:59e4:ed7d可以缩写成:
fe80:0:0:0:3406:8d0c:59e4:ed7d
如果冒号两边出现多组0,可以合并成双冒号的形式,比如上面的IPV6地址可以进一步精简成
fe80::3406:8d0c:59e4:ed7d
注意:双冒号只能出现一次
IPV6单播地址类别
IPV6地址可分为三种:
单播地址。细分还有很多种类,下文会较详细地介绍。
组播地址。IPV6没有广播。广播的功能由组播代行。组播本身比较复杂,考虑到本文是入门型文章,因此对组播地址不作介绍
任播地址。IPV6引出的新概念。本文不做介绍。
下面介绍单播地址的分类
1)全球单播地址:
这种类型的单播地址类似于IPV4的公网地址,可以在公网上通信。它的显著特征是:128位二进制中,前三位固定为001。所以全球单播地址都是以2(0010)或者3(0011)开头的。全局单播地址有三个部分:
全局路由前缀(48位)
子网ID(16位)
接口ID(64位)
根据RFC4291的建议,通常全局路由前缀48位,子网ID16位,接口ID64位。全局路由前缀由ISP分配。不同于IPV4,IPV6没有子网掩码的概念,因为IPV6的地址范围太大了,几乎不需要变长子网这样在主机数和网络数中折中的解决方案,所以IPV6明确地划分了子网ID和接口ID。RFC4291的建议是子网ID16位,接口ID64位,已经被广泛采用。不过IPV6虽然不存在子网掩码的概念,但是IPV6也可以通过位数来界定一段前缀相同的地址,比如/64就表示前64位和该IP相同的IPV6地址。比如全球单播地址,前三位固定是001,我可以用2000::/3来表示。这种表示法还是很常见的。
接口ID可以理解为IPV4的主机位。在没有路由器路由的情况下,两台主机的全局路由前缀和子网ID需要一样才能通信。也就是说,IPV4中,我们说:同个二层网络要同网段才能通信;在IPV6中,同个二层网络下要全局路由前缀和子网ID相同才能通信。
2)链路本地地址
前10位固定是:1111111010,中间54位是0,最后64位是接口ID;(这段地址可以表示为FE80::/10,能理解不?)每一个网络接口都会有这样一个链路本地地址,同时还可以配置一个全球单播地址;链路本地地址类似于IPV4中的169.254段的地址(IPV4获取失败之后的地址),它存在自有其道理,但本文不过多阐述,了解即可。
3)唯一本地地址
以FC00::/7开头的地址。相当于IPV4的私网地址(10.0.0.0,172.16.0.0,192.168.0.0)。IPV6同样在很多场合需要私网,私网的出现并不仅仅是为了解决IP地址紧缺的问题。在私网-NAT的模型下,私网IP客户端可以通过NAT发起向公网IP服务器的连接请求,但是公网IP客户端却不能主动向位于私网的客户端发起连接请求,某种程度上降低了私网用户受到来自外网的网络攻击的可能性。因此,处于某些安全性和私密性的需要,IPV6很多时候也需要支持私网和NAT
IPV4网络如何向IPV6过渡
IPV4网络的改造非一朝一夕之功,需要多个IT产业从技术、商业、政策上共同协作。IPV4和IPV6会长久共存并缓慢迁移,目前致力于过渡的技术大致有:
- 操作系统内核对IPV4和IPV6进行双栈支持,目前无论是windows还是linux都实现了双堆栈。这样一来,在网络层面,在网设备可以支持两种协议报文的发送和接收,边界路由器可以对IPV4和IPV6报文按需进行灵活的转换;从应用层面,新版程序调用内核中的IPV6类库即可实现通信功能。
- 隧道技术。将IPV6数据包封装在IPV4数据包中,使得IPV6数据包能在IPV4网络中传输,最终由边界路由器剥去IPV4报头,使其得以到达远端的IPV6网络。隧道技术同样多种多样,现阶段知道有这么一回事就行。
- 协议转换技术。在IPV4和IPV6之间建立映射关系,典型实现有NAT64/DNS64技术。
目前centos7是默认支持ipv6的,具体的启用和停用可以通过控制内核参数和修改配置文件实现。本文篇幅有点长了,以后有机会给大家介绍。
基础部分的网络原理已经给大家介绍完毕了,下一节会给大家介绍ifcfg命令家族,是linux对网络控制命令的早期实现,至今仍有大量的工程师在使用。
关注本公众号获取最新更新
每周一、三、五稳定更新