企业应用架构研究系列十二:网络模型与网络协议
最近研究IOT相关的技术与架构,由于网络上的资料质量并不是很好,很多文章把一些网络模型与协议混淆,因此梳理了一下这些概念。无论是做IOT平台还是微服务都是离不开网络开发这个一个重要的环节。
首先先说一下什么是网络七层模型,如下图(网络盗图)
物理层:解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
数据链路层:在计算机网络中由于各种干扰的存在,物理链路是不可靠的。该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层的数据叫做帧。
网络层:计算机网络中如果有多台计算机,怎么找到要发的那台?如果中间有多个节点,怎么选择路径?这就是路由要做的事。该层的主要任务就是:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。
传输层:当发送大量数据时,很可能会出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。
简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。
会话层:虽然已经可以实现给正确的计算机,发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能。于是会话层出现了:它的作用就是建立和管理应用程序之间的通信。
表示层:表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。
应用层:应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
这七层是OSI开放性的通信系统模型,组成了网络互通的基础。作为应用软件开发者来说,我们只需关注传输层(TCP/UDP)以上网络层的开发。传输层,我们只需知道TCP协议,提供可靠性的服务连接,UDP协议提供不可靠性的服务连接。下层的网络协议大学的时候课堂都讲得非常清晰了。
我们着重研究一下上三层模型,这三层是最容易让人混淆的,因为会话层、表示层、应用层在四/五层模型里面统称为应用层,在应用层里面最容易混淆的就是把 TCP/IP,HTTP1.1/HTTP2,RPC、SOA、长连接短连接 这些概念混淆,把协议和技术混淆,就如上图(盗图)把RPC放到会话层其实是不对的,RPC(Remote Procedure Call)是一个技术概念,不属于国际标准协议,RPC 技术有很多优秀的框架,如最近比较火爆的Google gRpc,ZeroC ICE等,这些框架为了适配各种开发语言,规定了一些开发协议和规范。还有MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)也是一种基于网络层的应用开发协议,提供可靠的消息传输。无论gRpc还是MQTT它们都不是网络协议的范畴。
接着再说一下网络传输协议的应用层,应用层的核心协议就HTTP(Hyper Text Transfer Protocol)协议,HTTP1.0 之前,主要是基于TCP传输协议,但是随着互联网的爆发性增长,HTTP2.0 衍生出来了,HTTP2.0 在1.0的基础上优化了首部压缩和多路复用技术等,大大提高了网络IO吞吐量。gRPC框架就是基于HTTP2.0 协议衍生出来的RPC开发框架。顺便提一下,Asp.Net Core 6.0 后,也默认使用HTTP2.0 协议。
说完HTTP再接着说一下MQTT协议,MQTT协议也是基于TCP传输层之上的一个网络应用层协议,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,主要应用与工业互联网行业。由于MQTT协议更简洁轻量,有人测试过MQTT协议比HTTP协议传输快100倍,非常适合工业互联时代。
上述见解如有表述有误,欢迎大咖指导。