说明
本文只是把当前了解学习到的计算机网络相关的知识进行总结,尽量用大白话描述。可能在某些层面上解释的比较浅薄,希望大家包涵。
百度百科对计算机网络的解释为:
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
本文主要介绍在【信息传递】时,计算机网络的一些专业知识点。
网络模型
对于计算机网络,咱们开发人员基本上都知道它有个OSI(开放式系统互联通信参考模型:Open System Interconnection Reference Model)七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。各个层级和它的作用,如下图所示:
并与OSI七层模型相对应的,还有一个TCP/IP四层模型,从下到上分别是:数据链路层,网络层,传输层,应用层,与OSI模型对比如下:
TCP/IP中的应用层对应OSI中的应用层 + 表示层 + 会话层;数据链路层对应OSI模型中的数据链路层 + 物理层。
两者最大的区别是:OSI模型是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
网络模型的这两张图是我们往下学习的基础,有了这个基础后,我们带着“页面上的数据是怎么来的?”这个问题,逐步学习。
建立和关闭连接
从模型图上我们知道两个不同的主机之间通信的前提是要先找到,并且建立了连接,才能实现信息的交互。根据TCP/IP模型上每层的作用内容,我们可以分析得出建立连接是在【传输层】实现的(端口到端口),通过TCP传输协议来建立连接,本层还有个暂不讨论的UDP。
建立连接,就是我们常说的【TCP三次握手】,它的流程简要描述如下:客户端(我们操作的电脑或者其他网络设备)给请求的服务端(其他设备)发送一条表示准备建立连接的信息,服务端收到此信息后回复此客户端它以做好连接准备,客户端收到服务端的回复后给服务端发个消息,表示它确认收到。此时连接建立,开始进行数据交互。
关闭连接,就是【TCP四次挥手】,它的流程简要描述如下:客户端给服务端发消息,说它要断开连接;服务端收到后就给客户端回复个消息,表示它已知道了;很短时间后,服务端又给客户端发了条信息,表示刚才收到信息时还有数据没处理完,现在处理完毕了;客户端收到服务端发的最后信息,给服务端回复个确认。此时连接断开了。
三次握手:
四次挥手:
在握手和挥手的过程中,客户端和服务端的状态是不断变化的。
为什么要三次和四次而不是二次和三次呢?
主要是避免服务器资源浪费。建立连接时,如果是二次握手,假设客户端发送了信息A1后因为超时还没有到服务端,此时客户端又发送了信息A2,却被服务端收到了,服务端响应了客户端后,双方开始了短暂的“友好交流”,然后结束。此时A1到达了服务端,服务端做了回应给客户端,但是客户端发现这个不是它刚发出去的信息,不进行后面的“友好交流”,服务器的状态不会发生改变,造成资源浪费。
同理四次挥手变成三次,也会造成服务器的资源浪费情况。
消息交互
通过三次握手,客户端和服务端之间建立了连接,然后就要进行数据交互。
通常我们在访问浏览器的时候,是在浏览器的地址栏输入服务端的域名,例如:www.baidu.com 。那么在我们输入了域名地址,按下了回车键后,它的过程是怎么样的呢?
此时引入一个新的系统DNS(Domain Name System,中文名:域名系统),它是用来解决网上机器命名的的系统,它保存了一张域名和与之相对应的IP地址的表,解析我们在浏览器上输入的域名,拿到域名在网络层的IP地址。
拿到域名对应的IP地址后,使用我们本机的子网掩码和这个IP地址进行【&】运算,就会发现这个IP不属于这个子网掩码,也就是说它不是我们局域网内的IP。此时浏览器所在的主机就会构建一个数据包,通过以太网【数据链路层】到网关,让网关广播出去。
构建的数据包如下:
一个网关不一定能准确将数据包发送给目标服务器,就会有多个网关层层转发,直达找到目标服务器或者超时未找到;
目标服务器收到数据包后,按照四层模型,每层进行一次解析,最后在应用层拿到HTTP的请求报文;
在传输层,我们知道了要访问的端口,也就是服务器上的某个进程服务(Tomcat服务),HTTP报文信息让进程服务知道我们访问的具体接口;
该接口完成相关业务逻辑的处理,把处理结果返回给了进程服务,进程服务又把结果返回给了服务器;
服务器对结果进行数据包的构建,然后沿着客户端请求过来的路径,把数据包通过网关发到了客户端主机;
客户端主机拿到数据包后进行层层解析,在应用层拿到结果后进行数据展示,就是我们看到的网页内容了。