常用网络协议解析
互联网已经对人类社会产生了巨大的变革,它改变了我们生活的方方面面。而互联网通信的本质是数字通信,而数字通信则离不开通信协议的制定。只有按照约定的方式进行信息封装和解析,我们才能实现通信。而互联网通信所遵守的协议,被统称为TCP/IP。
TCP/IP是一个协议族,其中包含了众多的协议。然而对于网络应用开发人员来说,他们更熟悉的可能是其中的应用层协议,比如HTTP、FTP、MQTT等。
HTTP协议,即超文本传输协议,是应用最广泛的协议之一。几乎每个人在日常使用电脑时,都会进行一种常规操作:打开浏览器,输入网址,最后按下回车。这一刻,我们就启动了HTTP通信。HTTP协议工作在客户端-服务端架构之上,浏览器作为HTTP客户端通过URL向HTTP服务端发送请求。而Web服务器则根据接收到的请求,向客户端发送响应信息。通过浏览器和服务器之间的HTTP通信,我们可以轻松地获得来自世界各地的信息。此外,在物联网时代,不仅大型服务器可以提供网页,许多嵌入式设备(如空调、冰箱、插座、路由器等)也能够嵌入网页,在物理链路通畅的情况下,用户可以通过手机或平板电脑上的浏览器随时随地监控这些设备。
FTP(文件传输协议)是另一种应用层协议。它使得主机之间能够共享文件,并用于在两台设备之间进行双向传输。FTP工作在客户端-服务端的框架系统中。用户可以通过支持FTP协议的客户端程序连接到远程主机上的FTP服务端程序,通过客户端程序向服务端程序发送命令,并接收执行结果。除了基本的文件上传/下载功能,FTP还具备目录操作、权限设置和身份验证等功能。许多网盘的文件传输功能也是基于FTP实现的。
随着物联网的发展,物联网设备使用何种应用层协议进行通信一直备受争议。许多开发人员习惯了网页开发模式,于是经常选择HTTP作为通信方式。然而,使用HTTP存在一些不利因素:HTTP是同步协议,设备需要等待服务器的响应才能进行下一步的工作。在设备数量多、网络不可靠的场景下,实现同步通信非常困难。HTTP是单向的,设备只能主动向服务器发送数据,无法被动接收来自网络的数据,这对于实时控制场景来说并不合适。另外,HTTP的帧头和规则较为复杂,实现在设备中需要耗费大量的系统资源。因此,在上述情况下,轻量级的异步通信协议如MQTT和COAP备受物联网设备开发商的青睐,尤其是MQTT。MQTT是一种由IBM公司于1990年设计并推出的通信协议,于2014年成为了OASIS开放标准。近年来,MQTT的应用呈现爆炸性增长的势头,有望成为物联网的主导协议。此外,MQTT还广泛应用于物联网之外的其他领域,比如许多公司在制作手机APP时使用MQTT实现消息推送和即时聊天等功能。
越来越多的嵌入式设备需要接入互联网,这是由以下几个原因所驱动:
首先,近年来,带有网络接入功能的MCU和SoC不断涌现,开源轻量级的TCP/IP协议栈也日益完善,云平台市场繁荣发展,这降低了嵌入式设备接入互联网的成本,使得许多资源受限的低端设备也能够接入互联网。
其次,“物联网+”的潮流愈发盛行,远程监控已经成为许多产品的技术要求。
最后,人们对设备的智能性需求越来越高。如今热门的大数据、图像处理、语音识别和机器学习等功能都可以在云端集成,成为云平台提供的服务。终端设备往往计算和存储能力有限,因此,要使设备具备智能,最便捷的方法就是接入云平台,利用云服务。
互联网的基础是TCP/IP。虽然TCP/IP协议族非常复杂,我们可能没有时间和精力去深入学习它的设计思想和实现原理。因此,本文的重点并不在于对TCP/IP的解读,而在于对其应用的介绍。然而,TCP/IP的复杂性也决定了它并不是一件简单易用的东西。即便我们只关注应用开发,仍然需要对许多概念和设计思想有所了解,才能编写出正确、高效且健壮的应用程序。