本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述。对于专注J2EE后端服务开发的同学来说,这篇文章可能稍微简单。但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空邻域。
的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端、网关、web前端、APP、后端开发等专属岗位。作为系统架构师,自然需要掌握各种岗位的关键技术。作为嵌入式工程师,掌握网络编程、web编程,能极大地扩展自己的视野和构架思维,能够主动地对系统的各种协议和应用场景提出优化的见解,而不仅仅是接受任务摊派,至少,能够在不需要依赖后端工程师的情况,能够快速搭建一个物联网demo系统。因此,掌握一些基本的网络编程、web编程技能,对于提升物联网研发工程师的开发能力是非常重要的。
一、OSI七层模型和TCP/IP四层模型
OSI七层模型是网络协议的理论研究模型,或者可以称之为理想的模型,而TCP/IP四层模型才是事实标准,是已经被广泛使用的模型。两者之间的关联图如下:
衡量一个物联网平台或者协议是否实用的关键技术的因素是它提供的消息触达能力,直接影响物联网应用开发。所以,我们从消息触达能力去分析TCP/IP这个事实标准模型。我们设想以下场景,并分析。
1.网络接口层。路由器1和wifi音箱、空调、热水器组成一个家庭局域网,其使用wifi(802.11)协议进行通信。该协议定义了物理信号、数据帧格式、丢包重发机制、流量控制等等。这些都是网络接口层的任务。还有,多个设备共享信道,同时发数据会产生冲突,它是怎么解决的,这也是网络接口层的内容。其实,物联网工程师不必在意这些内容。因为wifi物理信号方面的内容是由wifi芯片厂商负责,而wifi单芯片(wifi+SOC)则会提供SDK包并提供SOCKET编程接口了。所以,我们职责的重点是关注网络层以上的编程开发知识。
2.网络层,即IP协议,最基础的认识是每个IP对应一个物联设备、手机或者一个后方服务器。原则上一个网卡对应一个IP,如图中wifi音箱、wifi热水器均有一个独立的IP。网络之间的通信都是基于IP进行的,网络包会通过路由器最终送到目标IP所对应的设备上。
Wifi音箱等家庭设备加入家庭局域网,其实是各获得一个局域网IP,192.168.*.*,包括路由器1也有一个局域网地址,但是路由器1还有一个互联网IP。只有路由器的