在分布式架构中,网络通信是底层基础,没有网络,也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作,共同完成一件事情。
同样,在大规模的系统架构中,应用吞吐量上不去、网络存在通信延迟、我们首先考虑的都是网络问题,因此网络的重要性不言而喻。
作为现代化应用型程序员,要开发一个网络通信的应用,是非常简单的。不仅仅有成熟的api,还有非常方便的通信框架。
可能大家已经忘记了网络通信的重要性,本篇文章会详细分析网络通信的底层原理!!
1.1 理解通信的本质如图1-1所示,当我们通过浏览器访问一个网址时,一段时间后该网址会渲染出访问的内容,这个过程是怎么实现的呢?
图1-1
我想站在今天,在做的同学都知道,它是基于http协议来实现数据通信的,这里有两个字很重要,就是“协议”。
两个计算机之间要实现数据通信,必须遵循同一种协议,否则,就像一个中国人和一个外国人交流时,一个讲英语另一个讲解中文,肯定是无法正常交流。在计算机中,协议非常常见。
1.1.1 协议的组成我们写的java代码,计算机能够理解并且执行,原因是人和计算机之间遵循了同一种语言,那就是Java,如图1-2所示,.java文件最终编译成.class文件这个过程,也同样涉及到协议。
图1-2 java编译过程
所以,在计算机中,协议是指大家需要共同遵循的规则,只有实现统一规则之后,才能实现不同节点之间的数据通信,从而让计算机的应用更加强大。
组成一个协议,需要具备三个要素:
- 语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。
- 语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。
- 时序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
理解了协议的作用,那协议是长什么样的呢?
那么再来看图1-3的场景,人们通过浏览器访问网站,用到了http协议。
图1-3 http协议
http协议包含包含几个部分:
- http请求组成
- 状态行
- 请求头
- 消息主体
- http响应组成
- 状态行
- 响应头
- 响应正文
Http响应报文如图1-4所示,那么这个协议的三要素分别是:
- 语法: http协议的消息体由状态、头部、内容组成。
- 语义: 比如状态,200表示成功,404表示请求路径不存在等,通信双方必须遵循该语义。
- 时序: 组成消息体的三部分的排列顺序,必须要有request,才会产生response。
而浏览器按照http协议做好了相关的处理后,才能让大家通过网址访问网络上的各种信息。