这的确是一个天文数字,即便是物联网也不可能超越这种规模。正因如此,很多权威专家和制造商(特别是既得利益者)踌躇满志地认为,IPv6 已然做好准备迎接物联网的到来,全世界只需继续维持现状融入新兴物联网即可,毕竟可用的IP 地址多如砂砾。
然而,这种“把头扎进沙堆里”的鸵鸟政策忽视了最为关键的经济因素——最终成本,它是推动物联网全面部署的根本动力。这些成本主要集中在软硬件系统、监督与管理以及安全保障这三个方面。
烧钱的无用功能
经典的计算与通信设备(如个人计算机、平板电脑和智能手机)集成了处理器、内存和存储设备等功能设计,这些设计保证了它们的核心功能。引入IPv6 只需将协议栈置于设备存储器,在内存中执行,并由处理器驱动。
实际上,与这些设备所产生的利润率相比,因IPv6 而造成的边际成本微乎其微,几乎也无法衡量。未来物联网需要连接的是那些之前从未联网的设备,这正是关键所在。通常,这些设备从设计、制造到出售,均以最低成本收获最高利润率。为了充分发挥物联网的巨大潜能,我们需要为那些海量设备制定合理的低成本解决方案,否则它们会继续远离网络,也难以发展,甚至步入一次性处理的行列。
廉价设备难以承载传统协议
我们必须对那些实际成本做到心中有数,如果仅仅为了运行传统的IPv6 协议,而在终端设备(如湿敏元件、照明灯、烤箱等)中增加相应的软硬件负载,显然会成为物联网的巨大障碍。
据估计,即便是批量生产,为这些设备使IPv6 增加的边际成本也要将近50 美元。如果将所有功能封装到硅片中,那么为终端设备增加物联网基本组网功能所需要的成本接近1 美元。
物联网设备通常是“哑设备”,但它们却完全可胜任某一项特定任务。从根本上来说,我们不难发现单从成本指数上就足以证明,为物联网设备创建一种新的解决思路是绝对有必要的。
7000 亿设备的监管
尽管网络设备制造商数以百万,但想要定位并追踪它们并非难事,因为每一款网络设备都有对应的MAC地址(介质访问控制标识符),由IEEE负责维护和管理如此庞大的制造商数据库。
对于全世界无数制造物联网设备(简易传感器、执行器和电器等)的企业和个体来说,如果让他们都去等着某个集权机构分配相应的设备地址,那岂不是一件匪夷所思的事?
当然,甚至为万亿设备分配地址都不是问题,但当你想检索并管理其中某个设备时却如同大海捞针。如果你试图对数千亿IPv6 地址进行检索,可能需要花上几百年时间。对于一个由复杂的IPv6设备组成的物联网而言,其管理成本可能远超世界上的任何网络化工程。而这些无谓的成本,对本已捉襟见肘的运营商来说又是沉重的一击,毕竟他们正想方设法去弥补昂贵的基础设施投资。
此外,IPv6也有它自身的许多局限性。IPv6难以普及的第一大原因,就是部署太困难了。
如果IT产业被一夜之间炸掉,要在新铺设的网络中全面普及IPv6协议,这并不困难。但现实是目前互联网还活得好好的,IPv6的使命是给互联网续命而不是让其涅槃,这就要求IPv6能够继承IPv4的衣钵,能够和IPv4和谐共处。遗憾的是,IPv6和v4的兼容性并不好,难以互联互通,双方通信需要经过隧道。这问题非常要命,要保持互联网的畅通,只能够搞一堆隧道,但这成本太高了。根本的解决方案,还是让当前IPv4设备都升级支持IPv6。
IPv4升级IPv6可不像系统升级这么简单,涉及到终端、传输路径方方面面的网络软硬件升级。目前只有一些互联网大企业如Google等全面部署IPv6,这些企业面向的是未来,部署IPv6等于是布置新市场的桥头堡;而对于运营商以及一些IT小公司,是没有什么大动力去花大成本去升级新技术的,毕竟这又不能直接换钱。国内某些银行和政府机构网站至今仍只支持老旧的IE浏览器,反正升不升级你们都得照用,不影响它的业绩,就是这个道理了。
前面说到IPv6最大的优点就是地址特多,沙子都能分到公网IP,这必须是大好事。然而你真的需要公网IP这么好的东西吗?运营商对你说:no,你并不需要。
目前运营商已经广泛使用NAT,通过NAT给用户分配内网地址而非公网地址。内网是一个相对的概念,像家里的电脑通过路由器这道网关才能访问到运营商提供的网络,那么家里的局域网相对运营商网络,就属于内网;同理,运营商也可以不分配公网IP给单个用户,而是将多个用户纳入他的内网,通过统一的公网IP网关来访问互联网。这样一来,运营商就可以大大节省公网IP资源,不急着上IPv6也没什么。总的来说NAT会让网络变得更复杂和低效,能够为所有设备分配到公网IP的IPv6才是长久之计,只是目前使用NAT仍可解决大部分需求,IPv6的海量地址需求非燃眉之急。
物联网日益发展的关键在于,如何利用低成本和低风险让更多的设备互联互通。虽然IPv6现在未能普及,但相信在未来十年乃至十数年,IPv6一定会走到我们身边。历史大潮不可逆,期待IPv6的降临吧。主要由基本的概述、地址的表示、子网划分、报头还有通信这几个方面
IPv6的特性
首先是IPv6的基本情况。IPv6是为了弥补IPv4的不足而诞生的。
1互联网的不断发展下,IPv4下的IP地址已经饱和。对于互联网物联网的发展来说可能需要更加充足的IP地址。对于IPv6协议来说,IPv6的地址有128位的地址,可以提供2^128个地址。可以满足不断增长的IP需求
2IPv4本身不提供安全功能,需要其他的安全软件对传输的数据进行加密。IPv6上IPSec安全功能是默认开启的。(IPv4上是可选的)这在一定程度上增加了通信的安全性。
3IPv4的包头长度是可变的,这样的包头加重了路由器转发的负担。而IPv6简化了包头,将不必要的信息放在头的末尾。路由器只需要查看第一部分的包头进行转发即可,不需要再去查看扩展包头。扩展包头可以到应用程序了再进行查看。
4IPv4需要DHCP服务去配置IP。而IPv6支持主机有状态和无状态的自动配置。在一定程度上节省了资源
IPv6由8个16位块(128位二进制)组成。十六进制上由8组4位十六进制数字表示,使用冒号:进行分割。
2001:0000:3238:DFE1:0063:0000:0000:FEFB
就算在十六进制下IP地址仍然显示很长,由此有两种方式来缩短IP地址
1丢弃前导零
如果一个组内有多个零时。可以省略这些零。
2001:0000:3238:DFE1:63:0000:0000:FEFB
2001:0:3238:DFE1:63:0:0:FEFB
2两个或多个块中连续为零可用::表示。
2001:0000:3238:DFE1:63::FEFB
一个IP地址中只能使用一次::否则分析器没有办法确定有多少字段缺少0 没有办法补齐IP地址
1单播:
1 vs 1 主机只与目标地址进行通信。
2 组播:
1 vs N。 主机将数据发送给组播组内的所有主机。
3 任播:
多个接口分配了相同的任播IP地址
主机要与配备有任播IP地址的主机通信,会发送单播消息。路由器会找到最近的目标主机。
有三种单播地址:
全局单薄地址: Global unicast address
格式: 全局路由前缀+子网ID+接口ID
可理解为IPv4中的公网地址
全局地址是通过IPv6前缀下发所拿到的一个全局可达的IPv6地址,例如下图中的fd4d:e0f1:f1db::250:56ff:fe86:1b10。有了这个全局IPv6地址,就能跟世界上任何一个IPv6全局地址通讯了,类似于通俗说的公网地址
链路本地地址:link-local address
自动配置IPv6的地址。始终以FE80开头。
格式:FE80+0+接口ID
只可以在本地链路上使用。不能被路由
在同一个交换机下面的机器就能直接通过这个地址通讯啦,不需要再配置别的地址。
·
假设公司内网有两个不同的子网A和B(IPv6中的链路就是同一子网内的主机。)
所以链路A的IPv6主机只能在链路A内与其他IPv6主机进行通信。不能和链路B的IPv6主机进行通信。(如果链路A的IPv6主机要与链路B的IPv6主机进行通信就需要跨路由)
本地链路地址只能在本地链路上使用。且不能被路由
唯一本地地址: unique local address
这种IPv6地址是全局唯一的。但只应用于本地通信
格式:前缀+本地位+全局ID+子网ID+接口ID
唯一本地IPv6地址始终以 FD 开头
对应于链路本地地址上的例子。唯一本地地址是 可以通过路由 在链路A和链路B上进行通信的。但他的通信范围只局限在私有网络。可以理解为IPv4的私有网络。
IP:19216813 Mask:2552552550
CIDR IP:19216813/24
IPv6使用网络前缀来进行子网划分。
2001:C3:0:2C6A::/64 ----》 subnet
2001:C3:0:2C6A:C9B4:FF12:48BC:1A22/64 ----> address of the subnet
相比IPv4包头来说IPv6的包头精简了很多。
删除掉了IPv4的包头长度/标志/标识/分片偏移/包头校验和/选项/可填充变量
Version:标识Version即版本信息,4代表IPv4,6代表IPv6;
IHL:标识了IP报文的首部长度,大小为20-60字节;
Type of Service:服务类型,在QoS中才会使用到此字段;
Total Length:IP报文段的总长度;
Identification:标识,主机每发一个报文,则+1;
Flags:3个bit,分别为保留位,DF位(0可以分片,1不能分片),MF位(0最后一片,1未完待续);
Fragment Offset:片偏移,分片重组的时候需要使用到的字段,此处不做详细解释;
Time to Live:简称TTL,数据包可在网络中经过的路由节点数;
Protocol:下层协议,如UDP或TCP等;
Header Checksum:首部校验和;
Source Address:源IP地址;
Destination Address:目的IP地址;
Options:选项字段;
Padding:填充字段。
增加了流标签和扩展包头信息
版本:表示internet协议的版本
流量类型: 最重要的6位用于服务类型,以便让路由器知道应该向该分组提供什么服务。 最低有效2位用于显式拥塞通知(ECN)。
流标签:维护同学的数据包的顺序流。尚未定义好如何使用
有效负载长度:扩展包头+上层数据
下一个包头:扩展包头
IPv6扩展报文头的引入简化了IPv6基本报文头的格式,一个IPv6报文中可以包含0个及以上扩展报文头。当需要有多个IPv6扩展报文头的时候,IPv6的基本报文头的Next Header字段将会指明下一个扩展报文头的类型,IPv6扩展报文头的Next Header字段将会指明下一个扩展报文头的类型,以此类推,如果后续没有IPv6扩展报文头,那么此字段将指明上层协议类型。
路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头,并不是所有的扩展报头都需要被转发路由设备查看和处理的。除了目的选项扩展报头可能出现一次或两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余扩展报头只能出现一次。
用来实现地址解析,重复地址检测,路由器发现以及路由重定向等功能。具体的ICMPv6的消息类型及具体作用如下
邻居请求报文NS(Neighbor Solicitation)报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。用来获取邻居的链路层地址,验证邻居是否可达,进行重复地址检测等。
邻居通告报文NA(Neighbor Adivertisment)报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。用来对NS消息进行响应。另外,当节点在链路层变化的时候主动发出NA消息,告知邻居本节点的变化。
ICMPv6路由器请求(Router Solicitation)消息:Type字段值为133,节点启动后,通过RS消息向路由器发出请求,请求前缀和其他配置信息,用于节点的自动配置。
ICMPv6路由器通告(Router Advertisement)消息:Type字段值为134,对RS消息进行回应。在没有抑制RA消息发布的条件下,路由器会周期性地发布RA消息,其中包括前缀信息选项和一些标志位的信息。
ICMPv6重定向(Redirect)消息:Type字段值为137,当满足一定的条件时,缺省网关通过向源主机发送重定向消息,使主机重新选择正确的下一跳地址进行后续报文的发送。
地址解析
整体报文交互总览(NS和NA):
①节点1会发送一个NS报文,Type值为135,源地址为节点1的IPv6地址。目的地址为节点2的被请求节点组播地址,要请求的为节点2的链路层地址。同时NS的报文的Options字段中携带了节点1的链路层地址。如下图:
获取同一链路上邻居节点的链路层地址(与IPv4的ARP功能相同),通过邻居请求消息NS和邻居通告消息NA实现。节点1要获取节点节点2的链路层地址。
DAD (重复地址检测):
邻居请求报文NS(Neighbor Solicitation)报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。用来获取邻居的链路层地址,验证邻居是否可达,进行重复地址检测等。
节点在发送路由器公告前要获得唯一的链路本地地址
为什么要唯一:未确定唯一性的地址不能使用。即不能接收目的地址或者发送源地址为此地址的分组
1接口要加入全节点组播地址 FF02::1
2要生成IPv6地址的请求节点组播地址(solicited-node multicast address)接受地址为IPv6的这些分组
3发送NS请求。源地址为::。目的地址为临时单播地址请求节点的组播地址
4所生成的local-link address会处于暂时状态(Tentative)。如果收到该节点的回应则证明该节点已被使用。需要重新生成新的local-link address如果没有NS回应则证明该节点没有被其他主机使用。则确定local-link address
邻居通告:将地址分配给接口并启用后。主机再次发送邻居通告告诉该段上的其他主机。这个IP地址已经被使用了。
路由器请求:
在段上对路由器发送组播数据包。了解该段上的路由器
帮助主机设置默认网关
路由器通告:
路由器收到路由器请求时会回应主机,告诉它他在链路上的存在
如果路由器觉得自己不是最佳网关,会给主机回复重定向消息。告诉主机有更好的路由器可以使用
IPv4与IPv6是不兼容的,所以需要过度技术的支持
双栈路由器:
网络节点同时支持IPv4和IPv6两种协议。在IP网络上形成逻辑相互独立的两个IP网络。源地址根据要访问的目的地的类型自动选择相应的网络。
大多数软硬件都支持IPv4和IPv6这个方法解决了IPv4和IPv6的共存问题,但是没有解决IPv4和IPv6的互通问题。
目的是为了解决IPv6的信息孤岛问题。
把一个协议数据包的报头(IPv4)直接封装在原包头(IPv6)上,伪装成该一个协议(IPV4)。通过该协议的的网络(IPv4)。到了原本协议相应的网络(IPv6)之后再把添加的包头(IPv4)拆掉
通过NAT-PT(网络地址转换 - 协议转换)将IPv6网络转移成IPv4网络传送给IPv4主机
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)