第1章 网络协议概述

1.1 常用网络协议

互联网为人类社会带来巨大变革,几乎改变了人们生活的方方面面。互联网通信的本质是数字通信,任何数字通信都离不开通信协议,通信设备只有按照约定的、统一的方式去封装和解析信息,才能实现通信。互联网通信所要遵守的众多协议,被统称为TCP/IP。

TCP/IP是一个协议族,包含众多协议。对于网络应用开发人员,可能听到得更多的是其中的应用层协议,比如HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)等。

HTTP的应用最为广泛。比如大家日常使用计算机时的一个常规操作:打开计算机,再打开浏览器,输入网址,最后按下Enter键,这一刻你就开启了HTTP通信。HTTP工作于<客户端-服务端>架构之上(服务端也称为服务器端,除特别说明外,本书出现的“服务端”即为“服务器端”),浏览器作为HTTP客户端,通过URL向HTTP服务端(即Web服务器)发送所有请求。Web服务器根据接收到的请求向客户端发送响应信息。借助这种浏览器和服务器之间的HTTP通信,我们能够足不出户地获得来自世界各地的信息。另外,网页不仅仅是大型服务器的专利,在物联网风潮盛行的今天,许多随处可见的小型设备(如空调、冰箱、插座、路由器等)都内嵌网页,在物理链路畅通的情况下,用户可以用手机、平板电脑上的浏览器随时随地监控这些设备。

FTP是工作在应用层的网络协议,使得主机间可以共享文件,用于在两台设备之间传输文件(双向传输)。它也是一个客户端-服务端框架系统。用户可以通过一个支持FTP的客户端程序,连接到远程主机上的FTP服务端程序,通过客户端程序向服务端程序发出命令,服务端程序执行用户所发出的命令,并将执行的结果返回客户端。FTP除了支持基本的文件上传/下载功能外,还支持目录操作、权限设置、身份验证机制,许多网盘的文件传输功能都是基于FTP实现的。

在物联网发展的初期,物联网场景中的设备使用何种应用层协议进行通信一直是备受争议的话题。很多开发人员习惯了网页开发模式,于是经常选择HTTP作为通信方式。使用HTTP有以下不利因素:HTTP是一种同步协议,设备需要等待服务器的响应才可以进行下一步的工作,然而在设备数量多、网络不可靠的场景下,实现同步通信很困难;HTTP是单向的,设备只能主动向服务器发出数据,无法被动接收来自网络的数据,这不适用于实时控制的场合;HTTP是有许多帧头和规则的重量级协议,在设备中实现需要耗费大量的系统资源。基于上述形势,MQTT和COAP等轻量级、异步的通信协议便得到了物联网设备开发商的青睐,尤其是MQTT。

MQTT协议是IBM公司于1990年设计并推出的一款通信协议,于2014年正式成为一个OASIS开放标准。近年来,MQTT的应用呈现爆炸性的增长势头,大有一统物联网的趋势。另外,MQTT在物联网以外的其他领域也得到了广泛的应用,比如许多公司在制作手机APP时,会使用MQTT来实现消息推送、即时聊天等功能。

嵌入式设备接入互联网的需求越来越大,有以下几点原因:

1)近些年,各种带网络接入功能的MCU、SoC层出不穷,开源轻量的TCP/IP协议栈日趋成熟和完善,云平台的市场越来越繁荣,这些因素大大降低了嵌入式设备的入网成本,也为许多资源受限的低端设备接入互联网提供了可能。

2)“物联网+”的风潮日渐盛行,设备能够被远程监控,这一点已经成为许多产品的技术要求。

3)人们对于设备“智能性”的需求越来越高,当今热门的大数据、图像处理、语音识别、机器学习等功能都可以集成在云端,成为云平台能提供的服务。终端设备大多是计算、存储能力有限的设备,这些设备如果想要获取“智能”,最便捷的办法就是接入云平台,利用各项云服务。

互联网的基础就是TCP/IP。TCP/IP是一个非常复杂的协议族,即使我们能把它的设计思想和实现原理都解释清楚,你也不一定有时间和精力去学习它,所以本书的写作重点不在于对TCP/IP的解读,而在于对它的应用。另外,TCP/IP的复杂性也决定了它使用起来没那么简单,即使我们只关注应用开发,也依然需要对它的许多概念和设计思想有所了解,才能编写出正确、高效、健壮的应用程序。

希望能借此书,让嵌入式开发工程师以浓厚的兴趣和清晰的视野,搭上物联网发展的快车。