Linux与网络服务(一)网络服务相关概念通俗解释(科普向)

六月ゝ 毕业季﹏ 提交于 2021-01-04 14:28:55

前言

  由于Linux系统的自由、安全可靠和强大性能,无论是需要长时间在线的网络服务器,还是本地连接的科学计算用服务器,Linux系统在服务器领域操作系统是绝对的霸主。服务器除了我们最常见的建设网站功能外,还能发挥很多作用。对于刚接触的朋友,在Linux与网络服务中新概念众多,一个概念的解释往往又牵扯到了好几个概念,晦涩的专业词汇众多很容易打击人进一步了解的欲望。在这篇文章,作者想用自己的理解把这些概念通俗地解释一下,希望能够让初学者初步认识一些Linux与网络服务的相关概念,水平有限,如果有表达不妥之处请大家指出,我会认真纠正。

专业名词及概念的通俗解释

云服务器

  云服务器是一个“虚拟”的服务器,和它相对的就是实体服务器。实体服务器例如华为云提供的“裸金属服务器”,如果购买的话会给你一个真正的服务器主机,而云服务器在云服务提供商(如华为云,腾讯云,阿里云等)购买后,不会给你一个实体的主机,在提供商的控制台里能看到自己有了一个云服务器资源,可以查看云服务器信息或者远程登录它。综上所述,什么是云服务器?它是一个服务器,但是是摸不着的,你可以远程登录来控制它。对于提供商来说,你的云服务器可能就对应他们的一台实体主机,或者他们通过软件在一台实体主机上分割出多个系统跑着你和别人的云服务器,对于用户来说这是不可见的。当然它怎么实现对我们使用来说就无所谓了,我们就把购买的云服务器当作真正服务器使用就好。

云/云服务

  最近几年,“云”这个概念越来越多地被提到,到底什么是云?如果翻阅各种专业文献,在对“云”有一个大概印象之前,一个接一个的新名词绝对会看的人眼晕。其实对于应用来说,“云”的概念没有那么高深莫测。你使用百度网盘存取文件就是使用了百度云,使用WPS存储个人文档就是使用了WPS云,其实你的数据早早就已经“上云”了(个人的数据存在云服务器上就可以称得上是“上云”了,当然这里是狭义的说法)。我的理解是,从实际组成来说,“云”是一群服务器构成的网络,你把一堆服务器连到一起,然后统一提供一个对外面的连接,这就是“云”(一般来说,“云”默认指的是公网上的,可以在整个互联网上访问到,自己搭建的自己用叫“私有云”。这个比较模糊,也有不少地方公有私有都称作“云”的)。它是几台服务器主机?每台是什么系统?硬盘多大?对于普通使用者,“云”是怎么实现的你不必知道。百度、网易这些公司已经把“云”——服务器网络搭建好了,你只需要使用“云”的接口就可以(接口上有你的用户名和密码,让每个人使用不同的硬盘空间),你可以给“云”上面放文件,或者下载文件,能够满足你这么使用就足够了。
  当然,上面只是“云”的一个应用例子——作为“云盘”。云可以提供不同的网络服务,这些就叫做“云服务”,有的云服务供应商提供的是云服务软件,比如前面的云盘,有的云服务供应商提供的是虚拟的服务器,比如前面的云服务器。经过这么通俗解释你应该明白了,只要你搭几个服务器给别人一个连接的接口,你就把一个“云”搭建好了,你就能自称云服务供应商。
  从“云”上面衍生出很多概念,说白了并不是新发明——把“云”应用在游戏里就叫“游戏云”(有一堆远程电脑专门让用户连接来玩游戏),应用到工业就叫“工业云”(把一堆连接网络的电脑存储工业生产的数据,你可以在集控室远程连接来查看数据),应用到医疗上就叫“医疗云”(一堆连接网络的电脑存储了患者数据,或者可以远程传递图像和声音,从而让医生可以远程诊疗)。相信经过这些举例,你也可以在各行各业用“云”创造新名词了哈哈,这些新概念乍一看是不是很唬人呢。

云计算

  这个其实也可以算一个引申概念,用“云”来执行计算任务就是云计算,比如人脸识别,本地拍摄的人脸上传到云服务器上,通过强大的云服务器计算能力非常快速地得到神经网络的计算结果。这样的引申概念还有很多,其实看名字就知道是干什么的,用“云”提供存储服务——云硬盘,用“云”提供域名解析——云解析等等。

弹性伸缩

  这个概念其实很好理解,就是说某些资源是动态的/可调整的,云服务器能够根据设置的策略自动调整云服务器资源。比如弹性带宽,这个指的是你的带宽是可以动态调整的,传统的方式你买了1M的带宽那固定就是1M,就算你一段时间没怎么使用带宽还是按1M计费,弹性带宽可以实现用多少带宽计多少使用费。或者你在云服务器隔一段时间跑一个程序,通过弹性伸缩需要大量CPU资源的时候申请,不需要就不申请那么多,你只需要购买这种服务就可以,云服务器提供商自己就实现了弹性伸缩,不需要你动手。

负载均衡

  如果你购买了多个云服务器,通过配置将它们组成了一个服务器群给用户提供网络服务,如何把服务器要完成的任务(负载)分摊到各个服务器上,大家都干一样多的活,不会出现一个服务器累死累活的工作其他服务器在看戏的情况,这就是服务器集群需要考虑的负载均衡问题。假如你用多个服务器搭建了一个网站,用户通过浏览器访问,他肯定是直接输入域名访问,不会考虑到你哪一台服务器处理的访问任务少点用那台访问,所以负载均衡只能也是必须由服务器管理者解决的问题。要实现负载均衡,有硬件和软件的方式,一些网络服务的软件自带了负载均衡的功能,但是当然比不上硬件实现,硬件需要专门配置或者购买执行负载均衡工作的服务器或硬件。

公网IP

  提供网络服务的服务器如果想在整个互联网上都可以被访问到,那么就需要一个公网IP,之所以带了“公网”,就是说在整个互联网,也就是整个地球上这个IP地址都是唯一的。如何拥有自己的公网IP?最好的办法还是购买一个云服务器,一般云服务器供应商都会在购买云服务器后给你提供一个固定的公网IP。如果你仅仅想要一个公网IP,这些供应商以及专门的代理商都可以提供。

域名/域名备案

  如果你想用服务器做一个网站,在安装完必要的服务软件后,就可以通过输入你服务器配置好的IP地址来访问了。但是一串IP地址没有任何规律,一个网站一个IP地址谁也不想一个一个记住,于是就有了域名,例如www.baidu.com 这样的名字显然比一个IP地址好记。很遗憾,对于网络访问来说,域名并不能够被直接识别,网络访问直接识别的只能是IP地址,为此就有一种DNS服务器来专门负责把域名转换成IP地址。DNS服务器就是专门做解析/映射工作的,它具体是怎么工作的得花大量笔墨深入解释,这里就不深究了,知道它的作用就可以。总而言之,域名是为了我们人记忆方便诞生的,它对于网络本身没有益处,需要专门的DNS服务器负责转换,甚至对于网络安全带来额外问题,如黑客针对域名进行劫持,导致域名指向别的IP的情况。
  还有一件事,在国内进行域名解析想让别人通过域名访问网站,还需要在工信部进行备案,如果仅在云服务器提供商网站上设置了域名解析,你直接点开会提示你这个网站没有在工信部备案不能访问。个人网站备案只需要在申请时明确说明这个网站不用来盈利过审还是比较容易的,商业网站就需要额外的不少材料了。当然你可以让用户用IP访问,这个工信部不管,但是谁也懒得记那么一串无意义的数字串不是么,而且通过IP访问说明你直接暴露了IP,相当于你告诉了陌生人你家的详细住址,就算你天天锁门防止一般人偷偷溜进你家,惦记着你的小偷肯定会想办法撬锁进去(类比黑客通过各种方式对你的IP发起攻击),而且虽然域名有额外问题,但也有一些域名才能做到的安全性设置,这个稍后再说。

端口

  提到IP地址,往往还要提到端口,端口可以理解为服务器提供网络服务的接口。用一个不实际的例子解释,饭店每道菜都有一个不同编号的窗口(不同编号的端口),店家(服务器)给每个食客(网络服务用户)做好的饭菜通过不同窗口送给食客,有个人到22号窗口点餐(请求服务器的相应服务),店家一看是22号窗口有人点餐,根据国际标准,就知道他要的菜是SSH,把做好的SSH放到22号端口(提供服务)等食客来拿。虽然这个只是个规定,你可以修改这个规定,但这就会带来很多麻烦,陌生人来到这个餐馆,根据国际惯例他在22号窗口点餐了,他想要吃的是SSH这道菜,结果从窗口拿出来的菜是HTTP,钱都付了(花费了流量),给人家送错了菜(获取到错误的网络服务),谁还想来你这个饭店(网站)?一定要记住,互联网是给全世界服务的,面向的都是按照国际惯例(常用的网络服务都有对应的端口号)交流的陌生人,你不遵守国际惯例,别人按照惯例设计的软件都没办法在你的网站上使用。

SSH(安全外壳协议)/远程连接

  远程协助大家应该都使用过吧,可以远程操控别的电脑。在Linux系统中,标准的远程连接方式是通过SSH协议实现的,用到的端口号是22。在windows系统中,远程桌面协议(RDP)通过3389号端口实现标准的远程连接。远程登录自己的服务器,或者购买云服务器后远程连接,都是使用这两个协议和端口进行连接来管理的。

CPU架构

  Linux系统之所以受欢迎,有一方面是因为它比windows支持的CPU架构要丰富,CPU架构详细讲的话又是一大块内容,作者水平也没有那么深,某某架构咱就姑且记住它的名字吧。目前常见的CPU架构有32位的x84及64位的x64,还有ARM及64位的ARM64,我们常听说的Intel和AMD目前在家用电脑上都是x架构的,windows绝大部分也是运行于这个架构,所以你想在ARM架构的芯片上装个win10应该是不可能的(从最底层的原理上就不支持),ARM架构一般就是纯计算使用的,linux可以在该架构上运行(据说windows有服务器版的系统可以运行在ARM架构上,不过对于我们普通用户来说,windows10比windows server系统要好用得多)。

HTTP/HTTPS/WWW服务/Web服务

  HTTP(超文本传输协议)是互联网普遍使用的一种协议,它其实有很多应用,但其中最重要的应用之一就是WWW服务。HTTP设计最初的目的就是用一种约定好的语言编写网页和解析语言生成网页,在服务器上用遵循HTTP协议的这种语言写一堆代码,遵循协议的客户端浏览器从服务器上获取到代码后,就自动解析出来在浏览器的多少到多少像素内生成一个什么图片,也就是说,服务器告诉客户端浏览器网页上每一个图片每一段文字在什么位置放着,浏览器从服务器下载到这些文字图片后在指定位置生成,就形成了我们看到的网页。
  HTTP最流行的就是用于Web浏览器(我们用的Edge、谷歌、火狐等)与Web服务器(运行着网站服务程序的服务器)的通信,这个应用方式就叫WWW应用或者Web应用(我们浏览网页,输入网站名时候输入的www就是WWW服务)。
  WWW也被叫做Web,就是我们常说的万维网,HTTP协议的WWW服务默认使用80端口,加密的WWW服务使用的是更安全的HTTPS(S代表Safe)默认使用443端口。
是不是觉得上面几个概念互相关联很绕呢?其实大可不必较真,这几个概念早就已经混淆了,HTTP服务、WWW服务、Web服务可以都视为一个东西,就是我们用浏览器访问服务器的时候进行网页浏览需要的服务。


LNMP/LAMP环境

  如果想用linux系统提供Web服务,做一个网站,LNMP或者LAMP环境是一个避不开的话题,这个缩写其实指的是四个东西,L是Linux,就是说你的服务器使用的操作系统是Linux。第二个字母是N指的是Nginx,是A指的是Apache,这两个都是提供Web服务的软件,其实还有一些软件也可以提供Web服务,但是市场份额比这两个小太多,一般都是用这两个。M一般指的是MySQL,也有的指的是MariaDB,默认大家都认为是MySQL,这两个都是数据库软件,你的网站要存储一些文章、图片、用户信息或图片等一定会用到的软件。P一般指PHP,也可以指Perl或Python,默认大家都指的是PHP,这个是一种开发语言,也是一个语言环境(安装了python,你就可以写python代码,运行代码会调用python环境,PHP也一样,你安装了PHP,就可以写完PHP代码后运行,运行代码会调用PHP环境),C语言写出的程序可能弹出一个窗口或控制台,用PHP写的程序可以显示一个网页,可以用它来写动态网页,后面会详细说明什么是“动态网页”。LNMP配置好,系统有了,提供web服务的软件有了,数据库有了,网页语言的运行环境有了,你的网站就可以正式进行设计了。
  LNMP是怎么工作的?请看下图:
在这里插入图片描述

  可以看到,这一套软件紧密配合,最终呈现出了我们访问网站时看到的网页!

静态网页/动态网页

  使用纯粹HTML格式的网页通常称作静态网页。什么是HTML格式?当你用浏览器打开任何一个网页后,右键有一个选项“查看网页源代码”,这里你看到的源代码就是HTML格式的,你可以看到其中就规定了多少到多少像素放什么东西,浏览器会按照这种格式安排好每一块网页内容放置的位置。
  最早期的网站开发就是用静态网页方式的,每一个网页服务器里都真正存放着对应HTML格式的文件,浏览器要读取baidu这个网页,那么服务器就把baidu.html这个文件和相关的图片视频提供给它,浏览器再进行前面提到的解析。HTML文件里写了什么,浏览器就显示什么,所以网页每一次修改,都需要服务器管理员实实在在地把任何修改的内容写入HTML文件。所以静态网页要做一个论坛简直是个灾难,每个人都需要有修改HTML的权限不说,发一篇帖子你就要更改源代码一次。。。静态网页就是适合那种界面固定长期不变的网页。
  动态网页顾名思义,它是服务器使用相关软件动态生成的,浏览器访问的每一个网页,服务器上没有对应的html文件,而是使用动态服务的软件用动态服务软件使用的编程语言生成网页,如果涉及到用户注册等数据库操作,动态服务软件还会调用数据库。
  静态页面虽然修改起来麻烦,但在效率上两者相差巨大。想象一下,静态页面的访问就相当于你来到了一个火锅店,服务员给你端菜就可以,你自己来涮(服务器只提供资源,客户端浏览器自己解析),而动态页面相当于你去了一个炒菜馆,你点菜以后,服务员要叫后台厨师花几分钟把菜做出来端给你(服务器承担了一定解析工作)。动态页面额外使用了服务器的计算资源,服务效率会低不少。


Q&A部分

为什么要使用Linux系统做服务器?

  文章的开头也大概提到了,首先是可靠性,Linux是仿照UNIX系统来设计的,后者据说只要硬件不坏系统就能够稳定运行,Linux也是有着类似的性能,受到了各大公司的青睐。还有就是成本低,Linux系统是自由软件(并不等同于免费,但是对于我们的使用来说和免费的没区别),不用像windows系统那样买一份正版花一份钱。在安全性上,Linux的用户管理机制比Windows要复杂得多,可以防止普通用户对服务器核心内容动手动脚,而且Windows是闭源的,你想下载一个服务器优化插件,一旦它包含病毒你的服务器就完蛋了,而你又看不到插件有没有病毒,Linux这边,一般的软件源代码都是公开的,只要你懂代码,它不可能在代码上做手脚。

搭建自己的网站,完整的流程是什么?

  如果你真正想做一个任何人都能访问,而不是在某一内网访问的网站,建议你选择购买云服务器提供商的云服务器,在购买时都会给你分配一个公网IP,输入公网IP就可以访问了。具体环节上,购买云服务器后,远程登录它,安装前面提到的Nginx,PHP和MySQL,到此就可以访问服务器了。
  但是做网站有一个响当当的域名很重要,这一步流程挺多,你需要购买域名并添加与服务器IP对应的解析,这还不够,无论你购买的域名有没有真正解析,就算是一个空域名,按照国家规定也需要实名认证,认证完毕后,想要添加解析进行国内访问,还需要准备材料报备工信部进行网站备案。备案完成,你就可以用http://你的域名进行网站访问啦!
  这时你会注意到,浏览器地址栏左侧会提醒你连接不安全,因为HTTP协议的访问是不加密的,使用更安全的HTTPS加密访问的网页浏览器地址栏左侧会有一个加锁的图标,如何让自己网站的访问更安全?在自己服务器上配置HTTPS服务后你会发现访问网页仍然提示不安全,因为HTTPS协议需要配合SSL证书,你需要通过云服务器提供商或者其他代理申请SSL证书安装到服务器上,然后就可以用HTTPS://你的域名来访问。这里说的就是前面提到的域名才能进行的安全设置之一,申请SSL证书只能针对一个域名进行申请,而无法针对一个IP进行申请使用HTTPS协议!

上述流程全部进行完后,我就可以设计自己的网站了吗?

  当然,前提是你需要懂PHP编程语言来进行网页编写,哈哈,是不是被惊到了?其实对于普通人来说这也完全不需要,推荐一款软件Wordpress,安装它后你可以访问网页后台,然后进行傻瓜式的网站设计!就像你使用Word一样简单,不必再花时间学一种编程语言!

  这篇文章和大家一起了解了linux与网络服务相关的一些知识,为以后的搭建网站教程做铺垫,敬请期待!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!