阅读更多

1顶
0踩

行业应用
引用
嵌入式系统接入互联网形成一个物联网系统,协议是必不可少的关键技术。传统上以解决人机对话为目标的互联网协议遇到了物物相连的物联网系统,显得像大马拉小车,有劲使不上,物联网协议就此应运而生。

毫无疑问,人类和嵌入式设备通过完全不同的方式使用互联网。人类主要通过万维网—运行在互联网上的应用集合—访问互联网。当然,网页并不是互联网人机交换的唯一选择,我们还可以通过电子邮件、短信、手机应用程序,以及一系列的社交媒体工具实现互联。

与互联网相比,在物联网中,智能电子设备之间通过互联网实现信息的交互,但这些设备上并没有类似于网页浏览器和社交媒体的工具,人们已经着手开发这类工具和服务。

TCP/IP协议栈
TCP/IP协议栈是互联网的核心。它可以通过OSI七层参考模型来表示,如图1所示。图中顶部的三层组合在一起,以简化模型。

图1 TCP/IP协议栈参考模型

1. 物理层和数据链路层
嵌入式系统中最使用的物理层协议包括:
1)以太网(10,100,1G)
2)WiFi(802.11b,g,n)
3)串行PPP(点对点协议)
4)GSM,3G,LTE,4G

2. 网络层
网络层是互联网的基础。该层提供了网络间及物理层之间的连接。该层中,设备拥有人们随处可见的IP地址。

3. 传输层
该层位于网络层之上,具有TCP和UDP两种传输协议。

TCP通常用于网络间的人机交互(电子邮件、网页浏览等),以致很多人认为TCP协议是传输层使用的唯一协议。TCP提供了逻辑连接、传输确认、丢包重传和流控服务。

但对嵌入式系统而言,使用TCP有点小题大做了。尽管长期以来,UDP主要用于类似于DNS和DHCP的网络服务,现在,在传感器数据采集和远程控制领域,它有了新的用武之地。

UDP也适合于实时数据应用,例如音频和视频应用。这是因为,TCP的包应答和重传特性对这类应用是无效的,并且增加了额外的开销。如果一个数据块(例如一段对话)没有按时到达目的地,也没有必要重传该包。如果重传,它会破坏包的顺序并导致信息错误。

设计物联网设备时,必须考虑如何将本地设备连接到互联网。可以通过网关,或者将该功能集成到设备中以实现连接。目前,很多MCU集成了以太网控制器,简化了联网的工作。

物联网协议栈
你可以使用熟悉的Web技术来构建物联网系统吗?答案是肯定,但没有使用新的协议有效。

HTTP(S)和WebSocket是数据负载中传送XML或JavaScript对象符号(JSON)的常用标准。JSON为网页开发人员提供了一个抽象层,可以为Web应用创建一个到Web服务器的持续、稳定的连接。

1. HTTP
HTTP是用于Web服务的客户端–服务器模型的基础。实现HTTP连接的安全的方式是在物联网设备中只包含一个客户端,不包含服务器。换言之,设计一个只发起连接、不接收的物联网设备比较安全。总之,不允许外部设备访问你的局域网。

2. WebSocket
WebSocket是一个全双工通信协议,它在客户端和服务器之间,通过一个TCP连接实现全双工通信。它是HTML 5规范的一部分,WebSocket标准简化了双向Web通信和连接管理方面的复杂度。

3. XMPP
XMPP(可扩展通信与表示协议)是现有Web技术在物联网领域开发新用途的一个很好的实例。

XMPP最初用于即时消息与现场信息。现在已经扩展到支持VoIP信令、协作、轻量级中间件、内容聚合及广义的XML数据路由等领域。它是家用电器大规模管理的竞争者,这些白色家电包括洗衣机、干衣机、冰箱等。

4. CoAP
尽管Web协议可用于物联网设备,对大多数物联网应用来说,它的体积太庞大。IETF制定的资源受限的应用协议(CoAP),可用于低功耗和资源受限的网络。CoAP是一个REST类型的协议,采用了与HTTP类似的语法,其语义可以与HTTP的语义一一对应。

对基于电池供电或能量收集供电的设备来说,CoAP协议是一个很好的选择。其部分特性如下:
1)CoAP运行在UDP协议之上。
2)由于UDP传输不可靠,CoAP重现了一些TCP的功能。例如,CoAP可以识别需要确认的请求和无需确认的请求。
3)CoAP报文采用异步请求/响应模式。
4)所有的报文头、方法和状态码基于二进制编码,以减少协议开销。
5)不同于HTTP,缓存CoAP响应的能力不依赖请求方式,取决于应答码。
6)CoAP面向需要轻量级协议和建立永久连接的需求。如果拥有Web应用背景,使用CoAP会比较容易。

5. MQTT
MQ(消息队列)遥测传输是一个开源的协议栈(MQTT),面向资源受限的设备和低带宽、高延迟的网络。它采用发布/订阅消息传输模式,是一个轻量级的协议,适合将小型设备连接到资源受限的网络。
MQTT带宽利用率高,数据不可知,并具有连续的会话意识。可以帮助物联网设备减少资源消耗,还可以确保可靠性和一定程度的服务等级。

MQTT面向大型网络中的小型设备,这些设备需要通过互联网中的后台服务器来监视和控制。它不是一个设备到设备的传输,也不是“组播”数据到多个接收器的传输。MQTT非常简单,仅提供了一些控制选项。

协议比较
表1概述了所有的物联网协议,开发这些互联网定义的物联网协议的目的是满足低存储空间、低带宽和高延迟设备的联网需求。
表1 超越MQTT:从思科的视角看物联网协议(Paul Duffy,2013.4.30)


互联网和物联网协议比较如下,图2提供了将互联网协议与物联网中的性能优势比较。资料来源于Zach Shelby的报告“物联网驱动标准”。

图2 互联网和物联网协议比较

如图2左侧所示,Web应用的协议栈可以很容易地生成几百到几千字节的数据开销。比较而言,物联网协议针对受限制的设备和网络进行了优化,仅生成几十个字节的数据开销。

相关阅读
基于嵌入式操作系统的物联网安全
引用
作者:何小庆,著名的嵌入式系统专家,国内最早涉足嵌入式OS者之一,创办了北京麦克泰软件技术有限公司,有30年嵌入式技术和市场经验。他还是中国软件行业协会理事、嵌入式系统分会副理事长,嵌入式系统联谊会秘书长。
本文选自《嵌入式操作系统风云录:历史演进与物联网未来》第 9 章。
  • 大小: 104.1 KB
  • 大小: 44.7 KB
  • 大小: 140.6 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • linux下mysql乱码问题的解决方案

    项目进行到和服务器交互,通过post访问服务器端jsp,jsp访问服务器端mysql数据库,最终返回到客户端的中文出现乱码问题。 在整个流程中,出现错误的原因可能是三个:post未设置编码或者编码不相符合,jdbc出现问题,linux下mysql初始码制问题。 在经过繁琐的排查后,最终确定问题为mysql编码问题。下文介绍如何解决linux下mysql中文乱码问题。 首先进入mysql命令行模式,键入mysql -uroot -p 即可进入。随后键入 SHOW VARIABLES LIKE 'character_set_%';  若显示内容类似这样: +-------------------

  • Linux下的JSP乱码解决方法

    我在JSP中用的是gb2312编码 而LINUX系统默认的是UTF-8 所以导致在LINUX下运行的网站,获取数据库中的中文全是乱码,具体解决: 1.在ROOT用户下 vi /etc/sysconfig/i18n 将原来的: LANG="zh_CN.UTF-8" SUPPORTED="zh_CN.UTF-8:zh_CN:zh" SYSFONT="latarcyrheb-sun16...

  • 在linux服务器上生成jsp文件,中文变乱码的问题

    代码: //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。  FileOutputStream   fos = new FileOutputStream(tempString,true); //tempString是生成的文件的名字;  //创建使用给定字符集的 OutputStreamWriter

  • linux jsp中文问号,jsp页面获取中文乱码怎么解决方法?

    1、在jsp页中加入一条语句:中文显示就正常了。2、对于从网页中的文本框通过String parameter = request.getParameter(“parameter”);方式获得的字符串,均是8859_1的编码,如果想把它显示在网页上就必须得用parameter = new String(parameter.getBytes(“8859_1”),”gb2312”)进行转换,window...

  • linux jsp 中文乱码,linux jsp 乱码

    可能就是你本地JDK服务器是openjdk。因为你使用了sun的私有类库,所以出问题了。要怎么修改吗?还是把库导进去就可以?新手,太多不懂。你用了JSF吗?JSF包好像不对把。Onlyatypecanbeimported.com.sun.faces.renderkit这个是JSF的相关包。JSP前面就多了这个导入@pageimport="com.sun.faces.renderkit.html_b...

  • jsp中文乱码六种情况---解决方案

    来源:http://blog.csdn.net/lovesummerforever/article/details/12290319   乱码是让人头疼的一件事情,您是否和我一样也遇到过这样的情况,向数据库中添加一条记录,记录是添加上了,到数据库里一看,数据凌乱了。。。顿时我也凌乱了。。。把html文件改为jsp文件,添加了一下jsp page指令重新打开同时发现所有的中文都

  • 几种常见的JSP中文乱码

    *WEB容器默认的字符串处理编码是ISO-8859-1 1.JSP页面显示时乱码——输出时乱码, 解决方案:为其指定中文字符集,前加<%@pagecontentType=”text/html”:chartset=”gb2312”%> 2.JSP页面传递中文参数时乱码——get表单提交 解决方案:String email=new String(request.getparmet...

  • linux系统中JSP编译后页面显示乱码

    这次项目从windows 迁移到linux系统下面,系统平台是redhat AS4,web服务器是weblogic8.1 sp6。项目迁移过去后要装载HTML文件作为模板,然后通过一个prase类将这个html文件解析成一个字符串,同时获取了里面各个字段信息。然后再把这个字符串通过out.println();在前端打印出来。但是在前端显示的时候html文件中的汉字全变成了??后来在网上找了各种

  • linux jsp 中文乱码,jsp页面获取中文乱码怎么解决方法?

    慕尼黑的夜晚无繁华1、在jsp页中加入一条语句:中文显示就正常了。2、对于从网页中的文本框通过String parameter = request.getParameter(“parameter”);方式获得的字符串,均是8859_1的编码,如果想把它显示在网页上就必须得用parameter = new String(parameter.getBytes(“8859_1”),”gb2312”)进行...

  • jsp引入js alert 乱码????? 求解。。

    项目编码为:UTF-8 jsp编码为: UTF-8 js编码为:   UTF-8 如下: jsp代码:           response.setCharacterEncoding("UTF-8") ;     request.setCharacterEncoding("UTF-8");      %>     实时视频

  • Linux下安装和设置Tomcat,解决JSP中文乱码

    1,安装J2SDK 1.1 使用Debian源里的安装包 以root 身份运行apt-get install sun-j2sdk1.4,这样将安装sun的j2sdk1.4。然后输入java如果你看到的不是command not found,就表示你已经安装正确了。否则搜索是否有java和javac两个文件,我的在/usr/lib/j2sdk1.4-sun/bin下,如果有就创建链接到/usr/bi...

  • 服务器下访问jsp页面乱码

    <!--[diy=diycontenttop]--><!--[/diy]--> <!-- -->   JSP中文乱码问题之一:调用JSP页面显示乱码 通过浏览器调用JSP页面,在客户端浏览器中所有的中文内容出现乱码。 解决: 首先确认本JSP在编辑器中保存时,使用的是GBK的编码格式,然后在JSP页面的开始部分添加 < %@ pageEnc...

  • JSP中文乱码问题终极解决方案(下)

    本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码、JSP源文件中文乱码、GET 请求的请求参数为中文乱码 和 POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案。

Global site tag (gtag.js) - Google Analytics