计算机网络<一>——基本概念

271 阅读7分钟

数据是如何从一个设备传递到另一个设备的?

这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网

简介

为什么我们要学习网络协议?

为了满足各种需求,出现了各式各样的网络协议(HTTPSSMTPMQTTRTMP等)

不同的协议,它的使用场景是不一样的

  • 比如单纯的想获取一张图片的资源,我们可以使用HTTP协议
  • 如果我们需要往服务器上传文件或者下载文件的话,并不是说其它的协议不可以,但是用FTP协议(专门处理文件)会事半功倍

客户端与服务器之间的通信离不开网络通信

客户端包括有移动端开发(Android、IOS),前端开发(HTML、CSS、JS)、嵌入式开发(C、C++、汇编)

服务器对应的就是后台开发(Java、C++、PHP、.NET、Python、Go)

网络协议很重要,它规定了客户端和服务器之间是怎么进行通信的。网络协议规定了数据怎么包装、数据格式长什么样,这些都是由网路协议规定的,正因为有了网络协议,发数据的一方和收数据的一方才能够进行有效的沟通

后台开发语言的跨平台能力

C/C++的跨平台原理

如果一份代码能够运行在多个平台里,并且效果基本上是一样的,那我们就可以称该语言是具备跨平台能力的

其会根据不同的平台编译出不同格式的文件,编译出来的文件是可以直接被操作系统读取到内存汇总并执行的,简单来说就是该文件里面有现成的二进制数据(01100101这种),对应了要执行的机器指令

C/C++的跨平台原理就是使用平台相关的编译器生成对应平台的可执行文件,所以针对不同的平台编译出来的文件也都不同

Java的跨平台原理

Java代码编译出的文件是字节码文件,对于操作系统来说并不是可执行文件,也就是说操作系统并不能识别并执行编译出来的文件,这是它和C/C++跨平台原理最大的区别。想要将该字节码文件翻译成机器指令,我们必须还要借助安装在操作系统上的JVM(Java Virtual Machine:Java虚拟机)加载之后才行

一次编译,到处运行”是它的核心原理,你在Windows上编译出来的字节码文件,在IOS系统中也可以之后通过JVM翻译 成机器指令后执行


服务器及服务器软件

客户端vs服务器

其实客户端和服务器都可以理解为是计算机,只不过计算机作为服务器的配置会跟普通的计算机不一样而已

服务器是怎么接受客户端给它发送的消息呢?

这里有个概念就是端口号,我们可以把他简单理解为营业厅的办事窗口,比如8033068080端口,这些端口具有监听功能,只要有客户端向对应的端口发送了请求,那么它就可以感知到

每一个端口都对应了一个服务器软件,该软件会占用该端口并监听客户端与该端口之间的通信,比如客户端向某个端口发送了请求(该请求携带了数据),服务器软件就可以监听到此次通信并拿到请求数据,通过对请求进行解析执行对应的后台代码,生成响应数据后还是通过服务器软件将响应数据沿着该端口返回至客户端

一个服务器软件下面可以同时部署多个项目

举个例子,一个客户端中可能有多个应用,比如说有qq、微信、王者荣耀,这三个应用可以都向服务器同一个端口号发送请求,当然也会被同一个服务器软件监听到,但是该服务器软件肯定部署了这三个应用所对应的项目,软件会根据请求的消息去执行对应项目中的代码

如果你怕一个服务器软件对应太多的项目了,怕它压力过大的话,也可以多开一个端口帮它分担一下压力,转移一些项目过去

如果你怕服务器撑不住的话,那么你也可以选择多开一个服务器,移动一些项目过去

服务端想要执行代码必须要有服务器软件

客户端发送请求到服务器,我们想要去执行后台代码的话,前提条件就是必须要先安装一个服务器软件跑在一个端口上,比如Tomcat(这是Java很出名的一个服务器软件,免费且开源),然后利用Tomcat将我们的项目代码部署上去,下次客户端请求来的时候我们才能够执行相关代码并返回正确的响应回去

Tomcat这个软件本身就是由Java开发的,其编译成的字节码必须由JVM进行翻译加载,所以服务器想跑一个后台代码的流程就是:先启动一个JVM(需要提前安装好JDK才行)-->由JVM去加载Tomcat软件所编译出的字节码文件-->最后才能去执行开发人员的Java代码

服务器软件是如何找到正确项目的?

我们拿HTTP请求举例,比如说客户端发送了http://IP地址:端口号/项目(其实这里说项目不准确,应该说是上下文,但便于理解)这样的请求给服务器,IP地址用于定位到对应的服务器,端口号用于找到对应的服务器软件 ,然后通过项目名称让服务器软件知道应该执行哪个项目的后台代码,比如下图中http://10.10.128.45:8080/qq/IMG/1.png,就是获取qq项目下img目录中的一张图片

初识网络协议

网络互联模型

OSI模型(国际标准、具有7层结构),TCP/IP协议(4层)才是我们实战中用到的协议

两种模型很多地方其实都是一样的,比如说网络层(TCP/IP协议中叫做网际层)、运输层

但是也有修改的部分,比如说TCP/IP协议将OSI模型中的会话层、表示层、应用层改成了专门的应用层,物理层和数据链路层合并成了网络接口层,所以在实战过程中我们只需要搞懂4层就可以了

但由于物理层和数据链路层较为重要,所以我们研究的时候一般会将其单独拿出来学习

请求过程

应用层中的数据是没有经过封装的,相当于直接裸露了出来,客户端发送数据之前会依次经过应用层、运输层、网络层、数据链路层、物理层,每一层都会在上一层的基础上再对数据做一个拼接封装处理。服务器拿到封装后的数据之后也不会直接使用,而是会将刚刚的路径反过来,依次经过对应的层并把相应的封装拆除掉,到了应用层之后,它拿到的数据就是客户端所传递过来的、最原始的数据了,之后这个数据会被服务器软件接受到,并执行对应的程序代码。

相反,服务器发送响应数据给客户端时,响应数据也会按照应用层、运输层、网络层、数据链路层、物理层的顺序对原始数据做一层封装,到达客户端之后,再按照相反的数据进行解析,直到应用层拿到了数据为止

无论使用的是什么协议,都要遵循这个标准去一层层封装,一层层解析