黑马程序员——网络编程4:域名解析 & 网络结构

来源:互联网 发布:黑九月 知乎 编辑:程序博客网 时间:2024/06/06 17:23
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1  域名解析

        当用户在浏览器地址栏中输入了指定URL以后,浏览器对这一URL进行了哪些处理,才能使其能够与目标服务端建立连接,并获取到所请求的数据呢?下面我们就以前文中常用的URL——http://192.168.1.104:8080/mywebs/demo.html——为例对其底层的操作原理进行简单说明。

        当用户将以上URL输入到浏览器地址栏以后,首先获取到这一URL总所包含的协议,这里是“http”。根据这一协议启动与此协议相关的解析引擎,将域名中包含的IP地址和端口号封装起来,建立与服务端的连接。但是通常来说,用户在地址栏中输入的一般并不是主机IP地址,而是一个域名,比如www.baidu.com等等。但是实际在底层实现网络连接的时候,还是需要通过主机IP地址才能够实现,因此需要将域名转换为对应IP地址。实现这一转换动作就需要借助DNS服务器。DNS是Domain Name System的缩写,意思是域名系统。那么DNS服务器中存储的就是各个公网域名与其对应的IP地址的映射关系,如下图所示,


根据以上原理图可知,浏览器根据用户指定URL中包含的域名,首先向DNS服务器发送域名,DNS服务器查找对应的IP地址后再返回给客户端浏览器,浏览器据此,再向目标IP地址的指定端口(这里是8080)发送数据请求等信息。

        在Windows系统中的网络连接属性中,可以手动配置DNS服务器。如果指定其“自动获得DNS服务器”的话,网络服务供应商(ISP)就会为其指定一个最近的DNS服务器。

        可能有朋友会提出这样的问题,当我们在浏览器地址栏中输入localhost时,即使计算机没有连接网络,也会向本机IP地址——127.0.0.1——发送数据请求,正像前文中的演示示例那样。但是显然localhost并非是公网域名,因此DNS服务器中也肯定没有与此对应的域名/IP地址映射关系,那么这又是如何实现向本机发送数据请求信息呢?实际上,localhost与127.0.0.1的映射关系存储在了本机的一个名为hosts的文件中,该文件的存储路径为“c:\Windows\System32\drivers\etc”。下图所示为,该文件中的显示内容,

 

从文件内容可知,最后两行即是本地回还地址(127.0.0.1)和本机默认主机名(localhost)之间的映射关系。其中,“127.0.0.1”表示IPv4本地回还地址,“::1”表示IPv6本地回还地址。

        那么当用户在浏览器地址栏中输入了URL后,浏览器首先会去本地hosts文件中去寻找指定主机名与对应IP地址的映射关系,只有hosts文件中没有存储这一映射关系时,才会向DNS服务器发送请求,获取指定主机名的IP地址。这也就是为什么即使计算机没有联网,也可以访问本地回还地址的原因。

        我们可以通过修改hosts文件,可以以此来屏蔽恶意网站。比如,一些安全软件,会将网上用户投诉较多的钓鱼网站、恶意网站的主机名记录下来,然后将其配置到本地hosts文件中,而对应的IP地址均设置为127.0.0.1,这样一来当我们不小心点开了带有恶意网站主机名的链接的时候,由于浏览器首先会查找本地hosts文件,因此将无法连接成功,避免遭受侵害。

2  网络结构

        下面简单介绍一下两种常用的网络开发架构。一种称为C/S(client/server的简称),另一种称为B/S(browser/server的简称)。

2.1  C/S架构

        C/S架构,即client/server架构的缩写,顾名思义就是客户端/服务端架构。使用这种架构编写的软件有以下特点:

(1)  客户端和服务端程序都需要编写。

(2)  开发成本较高。正是由于两端都需要编写,因此开发比较麻烦。

(3)  维护成本较高。若重装系统,那么就需要创新安装该软件;软件升级的时候,需要下载新版软件安装包,手动安装实现升级。当然现在最流行的方式是在线升级。此外,即使官方推出了新版本软件,不一定所有用户都选择升级,因此服务端就需要面对各个版本的客户端的,出现了版本差异。以上种种原因导致了,软件推出以后的维护成本较高。

2.2  B/S架构

        B/S架构,则是browser/server架构的缩写,也就是浏览器/服务器架构。这种架构相对于C/S架构,就有了一些新的特点和优势:

(1)  只需开发服务器端,不需要开发客户端。因为客户端直接由浏览器取代。由于浏览器是最为常用的软件之一,因此一般电脑中都会安装浏览器,不必再开发客户端。

(2)  相对C/S架构而言,开发成本相对较低。

(3)  同样,维护相对简单一些。

        由于B/S架构的以上优点,有些软件确实开发了Web版本,比如Web迅雷,WebQQ等等,但是为什么B/S架构没能完全取代C/S呢?这是因为C/S架构相对B/S具有一个优点——C/S架构客户端在本地,分担一部分运算。举两个例子。

        比如,进行病毒查杀时,全部的查杀操作都交由服务端来完成是不现实的,因为首先要把某个硬盘中的所有文件全部上传至服务端,仅这一点就非常麻烦。如果客户端能够自行完成查杀操作,那么即使不联网也能够进行查杀操作。

        再比如,网络游戏和网页游戏。网页游戏看起来非常方便,甚至都不需要安装客户端程序,就可以进行游戏。但是网页游戏都是基于flash进行开发,能够实现的功能和效果是有局限性的。网络游戏由于安装在本地,因此能够存储大量的模型和效果在本地中,不必占用大量的带宽用于传输模型。

        那么相对而言,基于B/S架构开发的软件的缺点就是,所有的运算都要在服务端完成,这同样也限制了网页游戏的功能。


0 0
原创粉丝点击