《网络是如何连接的》笔记——5 服务器端的局域网中有什么玄机

名词解释

防火墙:防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障,是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。

包过滤:防火墙的一类。传统的包过滤功能在路由器上常可看到,而专门的防火墙系统一般在此之上加了功能的扩展,如状态检测等。它通过检查单个包的地址,协议,端口等信息来决定是否允许此数据包通过。

负载均衡器:一种把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽的硬件设备。

代理服务器:代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

代理服务器比喻

举个通俗的例子,比如你家的门坏了,不能走出屋子,你只能借助你家后门并且通过邻居家的门走出屋子。完成这样一个目的,就等于说是借助其他通道到达你想要到达的目的地。

代理服务器也一样,比如本地网络无法直接访问一些网站或者服务器,必须通过一个代理点服务器,那个服务器和你的本地网络是可以直接ping的通的,然后你就必须设置这个代理服务器的一些参数,比如ip,端口,然后通过这个平台连接到其他网络区域。

缓存服务器:缓存服务器用来存储网络上的其他用户需要的网页,文件等等。这种服务器不仅可以使用户得到他们想要得信息,而且可以减少网络的交换量。缓存服务器往往也是代理服务器。对于网络的用户,缓存服务器和代理是不可见的,在用户看来所有的信息都来自访问的网站。

内容分发服务:Content Distribution Service(CDS),指在计算机上,通过此种服务使各地的Internet客户在访问这些网站时,可以访问最接近本地缓存服务器中缓存的内容,从而缩短请求响应时间和网络延迟,减轻网站服务器的负载。

重定向: 重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

Web 服务器的部署地点

  1. 在公司里部署 Web 服务器

网络包从互联网到达服务器的过程,根据服务器部署地点的不同而不同。最简单的是图5.1(a)中的这种情况,服务器直接部署在公司网络上,并且可以从互联网直接访问。这种情况下,网络包通过最近的POP 中的路由器、接入网以及服务器端路由器之后,就直接到达了服务器。

这样的服务器部署存在两个问题,(1)IP地址不足,这样的方式需要为公司网络中的所有设备,包括服务器和客户端计算机,都分配各自的公有地址。然而现在公有地址已经不够用了,因此采用这种方式已经不现实了。(2)安全问题,这种方式中,从互联网传来的网络包会无节制地进入服务器,这意味着服务器在攻击者看来处于“裸奔”状态。

因此,现在我们一般采用图5.1(b)中的方式,即部署防火墙。防火墙的作用类似于海关,它只允许发往指定服务器的指定应用程序的网络包通过,从而屏蔽其他不允许通过的包。
在这里插入图片描述

  1. 将 Web 服务器部署在数据中心

图5.1(a)和图5.1(b)都是将Web 服务器部署在公司里,但Web 服务器不仅可以部署在公司里,也可以像图5.1(c)这样把服务器放在网络运营商等管理的数据中心里,或者直接租用运营商提供的服务器。

数据中心是与运营商核心部分NOC 直接连接的,或者是与运营商之间的枢纽IX 直接连接的,当服务器访问量很大时这是非常有效的。

如果Web 服务器部署在数据中心里,那么网络包会从互联网核心部分直接进入数据中心,然后到达服务器。如果数据中心有防火墙,则网络包会先接受防火墙的检查,放行之后再到达服务器。无论如何,网络包通过路由器的层层转发,最终到达服务器的这个过程都是相同的。

防火墙的过滤规则

无论服务器部署在哪里,现在一般都会在前面部署一个防火墙,如果包无法通过防火墙,就无法到达服务器。防火墙的基本思路是,只允许发往特定服务器中的特定应用程序的包通过,然后屏蔽其他的包。

网络包的头部包含了用于控制通信操作的控制信息,只要检查这些信息,就可以获得很多有用的内容。这些头部信息中,经常用于设置包过滤规则的字段如表5.1 所示。
在这里插入图片描述
在这里插入图片描述

  1. 通过端口号限定应用程序

当我们要限定某个应用程序时,可以在判断条件中加上TCP 头部或者UDP 头部中的端口号。Web 服务器的端口号为80A,因此我们在刚才的接收方IP 地址和发送方IP 地址的基础上再加上80 端口作为条件就可以了。如果要允许访问除Web 之外的其他应用程序,则只要将该应用程序的端口号设置到防火墙中并允许通过就可以了。

2.通过控制位判断连接方向
Web 使用的TCP 协议是双向收发网络包的,因此如果单纯地阻止从Web 服务器发往互联网的包,则从互联网访问Web 服务器的操作也会受到影响而无法进行。光判断包的流向还不够,我们必须要根据访问的方向来进行判断。这里就需要用到TCP头部中的控制位。TCP 在执行连接操作时需要收发3 个包B,其中第一个包的TCP 控制位中SYN 为1,而ACK 为0。其他的包中这些值都不同,因此只要按照这个规则就能够过滤到TCP 连接的第一个包。如果这第一个包是从Web 服务器发往互联网的,那么我们就阻止它(图5.2 表中的第2 行)。这样设置之后,当然也不会收到对方返回的第二个响应包,TCP 连接操作就失败了。也就是说,只要以Web 服务器为起点访问互联网,其连接操作必然会失败,这样一来,我们就阻止了Web 服务器对互联网的访问。

通过接收方IP 地址、发送方IP 地址、接收方端口号、发送方端口号、TCP 控制位这些条件,我们可以判断出通信的起点和终点、应用程序种类,以及访问的方向。当然,如表5.1 列出的那样,还有很多其他的字段可以用作判断条件。通过对这些条件进行组合,我们就可以对包进行筛选。这里也可以添加多个规则,直到能够将允许的访问和不允许的访问完全区分开为止。这样,我们就可以通过设置规则,让允许访问的包通过防火墙,其他的包则不能通过防火墙。

  1. 通过防火墙

像这样,我们可以在防火墙中设置各种规则,当包到达防火墙时,会根据这些规则判断是允许通过还是阻止通过。

如果判断结果为阻止,那么这个包会被丢弃并被记录下来。这是因为这些被丢弃的包中通常含有非法入侵的痕迹,通过分析这些包能够搞清楚入侵者使用的手法,从而帮助我们更好地防范非法入侵。

实际上,在防火墙允许包通过之后,就没有什么特别的机制了,因此包过滤并不是防火墙专用的一种特殊机制,而是应该看作在路由器的包转发功能基础上附加的一种功能。只不过当判断规则比较复杂时,通过路由器的命令难以维护这些规则,而且对阻止的包进行记录对于路由器来说负担也比较大,因此才出现了专用的硬件和软件。如果规则不复杂,也不需要记录日志,那么用内置包过滤功能的普通路由器来充当防火墙也是可以的。

包过滤方式的防火墙可根据接收方IP 地址、发送方IP 地址、接收方端口号、
发送方端口号、控制位等信息来判断是否允许某个包通过。

通过将请求平均分配给多台服务器来平衡负载

  1. 性能不足时需要负载均衡

当服务器的访问量上升时,增加服务器线路的带宽是有效的,但并不是网络变快了就可以解决所有的问题。高速线路会传输大量的网络包,这会导致服务器的性能跟不上。尤其是通过CGI 等应用程序动态生成数据的情况下,对服务器CPU 的负担更重,服务器性能的问题也会表现得越明显。

要解决这个问题,最简单的一种方法就是采用多台Web 服务器,减少每台服务器的访问量。要采用这样的方法,必须有一个机制将客户端发送的请求分配到每台服务器上。具体的做法有很多种,最简单的一种是通过DNS 服务器来分配。

当访问服务器时,客户端需要先向DNS 服务器查询服务器的IP地址,如果在DNS 服务器中填写多个名称相同的记录,则每次查询时DNS 服务器都会按顺序返回不同的IP 地址。这种方式称为轮询(round-robin),通过这种方式可以将访问平均分配给所有的服务器。
在这里插入图片描述

但这种方式是有缺点的。假如多台Web 服务器中有一台出现了故障,这时我们希望在返回IP 地址时能够跳过故障的Web 服务器,然而普通的DNS 服务器并不能确认Web 服务器是否正常工作,因此即便Web 服务器宕机了,它依然可能会返回这台服务器的IP 地址。此外,轮询分配还可能会引发一些问题。在通过CGI 等方式动态生成网页的情况下,有些操作是要跨多个页面的,如果这期间访问的服务器发生了变化,这个操作就可能无法继续。例如在购物网站中,可能会在第一个页面中输入地址和姓名,在第二个页面中输入信用卡号。

  1. 使用负载均衡器分配访问

为了避免出现前面的问题,可以使用一种叫作负载均衡器的设备。使用负载均衡器时,首先要用负载均衡器的IP 地址代替Web 服务器的实际地址注册到DNS 服务器上。假设有一个域名www.lab.glasscom.com,我们将这个域名对应的IP 地址设置为负载均衡器的IP 地址并注册到DNS 服务器上。于是,客户端会认为负载均衡器就是一台Web 服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台Web 服务器。

这里的关键是,如何判断将请求转发给哪台Web 服务器。
在这里插入图片描述
判断条件有很多种,根据操作是否跨多个页面,判断条件也会有所不同。如果操作没有跨多个页面,则可以根据Web 服务器的负载状况来进行判断。负载均衡器可以定期采集Web 服务器的CPU、内存使用率,并根据这些数据判断服务器的负载状况,也可以向Web 服务器发送测试包,根据响应所需的时间来判断负载状况。当然,Web 服务器的负载可能会在短时间内上下波动,因此无法非常准确地把握负载状况,反过来说,如果过于密集地去查询服务器的负载,这个查询操作本身就会增加Web 服务器的负载。因此也有一种方案是不去查询服务器的负载,而是根据事先设置的服务器性能指数,按比例来分配请求。无论如何,这些方法都能够避免负载集中在某一台服务器上。

当操作跨多个页面时,则不考虑Web 服务器的负载,而是必须将请求发送到同一台Web 服务器上。要实现这一点,关键在于我们必须要判断一个操作是否跨了多个页面。HTTP 的基本工作方式是在发送请求消息之前先建立TCP 连接,当服务器发送响应消息后断开连接,下次访问Web 服务器的时候,再重新建立TCP 连接。因此,在Web 服务器看来,每一次HTTP 访问都是相互独立的,无法判断是否和之前的请求相关。

使用缓存服务器分担负载

  1. 缓存服务器的介绍

除了使用多台功能相同的Web 服务器分担负载之外,还有另外一种方法,就是将整个系统按功能分成不同的服务器,如Web 服务器、数据库服务器。缓存服务器就是一种按功能来分担负载的方法。

缓存服务器是一台通过代理机制对数据进行缓存的服务器。代理介于Web 服务器和客户端之间,具有对Web 服务器访问进行中转的功能。当进行中转时,它可以将Web 服务器返回的数据保存在磁盘中,并可以代替Web 服务器将磁盘中的数据返回给客户端。这种保存的数据称为缓存,缓存服务器指的也就是这样的功能。

  1. 缓存服务器的工作过程

缓存服务器和负载均衡器一样,需要代替Web 服务器被注册到DNS 服务器中。然后客户端会向缓存服务器发送HTTP 请求消息(图5.5(a)①、图5.6(a))。这时,缓存服务器会接收请求消息,这个接收操作和Web 服务器相同。
在这里插入图片描述

从客户端来看,缓存服务器就相当于Web 服务器。接下来,缓存服务器会检查请求消息的内容,看看请求的数据是否已经保存在缓存中。如果不存在缓存数据。这时,缓存服务器会像图5.6(b)②这样,在HTTP 头部字段中添加一个Via 字段,表示这个消息经过缓存服务器转发,然后将消息转发给Web 服务器(图5.5(a)②)。

在这里插入图片描述

在这里插入图片描述

在这个过程中,我们需要判断应该将请求消息转发给哪台Web 服务器。如果只有一台Web 服务器,那么情况比较简单,只要将Web 服务器的域名和IP 地址配置在缓存服务器上,让它无条件转发给这台服务器就可以了。如果一台缓存服务器对应多台Web 服务器,需要根据请求消息的内容来判断应该转发给哪台Web 服务器。要实现这个目的有几种方法,其中比较有代表性的是根据请求消息的URI(图5.6(b)①)中的目录名来进行判断。

在这个过程中,缓存服务器会以客户端的身份向目标Web 服务器发送请求消息。也就是说,它会先创建套接字,然后连接到Web 服务器的套接字,并发送请求消息。从Web 服务器来看,缓存服务器就相当于客户端。于是,缓存服务器会收到来自Web 服务器的响应消息(图5.5(a)③、图5.6(c)),接收消息的过程也是以客户端的身份来完成的。

接下来,缓存服务器会在响应消息中加上图5.6(d)①这样的Via 头部字段,它表示这个消息是经过缓存服务器中转的,然后缓存服务器会以Web 服务器的身份向客户端发送响应消息(图5.5(a)④)。同时,缓存服务器会将响应消息保存到缓存中,并记录保存的时间(图5.5(a)④’)。

这种在客户端和Web 服务器之间充当中间人的方式就是代理的基本原理。

  1. 最原始的代理——正向代理

刚才讲的是在Web 服务器一端部署一个代理,然后利用其缓存功能来改善服务器的性能,还有一种方法是在客户端一侧部署缓存服务器。

实际上,缓存服务器使用的代理机制最早就是放在客户端一侧的,这才是代理的原型,称为正向代理。正向代理刚刚出现的时候,其目的之一就是缓存,这个目的和服务器端的缓存服务器相同。不过,当时的正向代理还有另外一个目的,那就是用来实现防火墙。

防火墙的目的是防止来自互联网的非法入侵,而要达到这个目的,最可靠的方法就是阻止互联网和公司内网之间的所有包。不过,这样一来,公司员工就无法上外网了,因此还必须想一个办法让必要的包能够通过,这个办法就是利用代理。

代理的原理如图5.8 所示,它会先接收来自客户端的请求消息,然后再转发到互联网中B,这样就可以实现只允许通过必要的网络包了。

在这里插入图片描述
在使用正向代理时,一般需要在浏览器的设置窗口中的“代理服务器”一栏中填写正向代理的IP 地址,浏览器发送请求消息的过程也会发生相应的变化。在没有设置正向代理的情况下,浏览器会根据网址栏中输入的http://… 字符串判断Web 服务器的域名,并向其发送请求消息;当设置了正向代理时,浏览器会忽略网址栏的内容,直接将所有请求发送给正向代理。

  1. 正向代理的改良版——反向代理

使用正向代理需要在浏览器中进行设置,这可以说是识别正向代理的一个特征。但是,设置浏览器非常麻烦,如果设置错误还可能导致浏览器无法正常工作。另外,如果我们想把代理放在服务器端,那么服务器不知道谁会来访问,也没办法去设置客户端的浏览器,因此无法采用这种方法来实现。

我们可以通过将请求消息中的URI 中的目录名与Web 服务器进行关联,使得代理能够转发一般的不包含完整网址的请求消息。这种方式称为反向代理(reverse proxy)。前面介绍的服务器端的缓存服务器采用的正是这种方式。

  1. 透明代理

缓存服务器判断转发目标的方法还有一种,那就是查看请求消息的包头部。因为包的IP 头部中包含接收方IP 地址,只要知道了这个地址,就知道用户要访问哪台服务器了。这种方法称为透明代理(transparent proxy)。

这种方法也可以转发一般的请求消息,因此不需要像正向代理一样设置浏览器参数,也不需要在缓存服务器上设置转发目标,可以将请求转发给任意Web 服务器。

透明代理集合了正向代理和反向代理的优点,是一个非常方便的方式,但也需要注意一点,那就是如何才能让请求消息到达透明代理。由于透明代理不需要设置在浏览器中,那么浏览器还是照常向Web 服务器发送请求消息。反向代理采用的是通过 DNS 服务器解析引导的方法,但透明代理是不能采用这种方法的,否则透明代理本身就变成了访问目标,也就无法通过接收方IP 地址判断转发目标了,这就失去了透明代理的意义。

于是,我们必须将透明代理放在请求消息从浏览器传输到Web 服务器的路径中,当消息经过时进行拦截。可能大家觉得这种方法太粗暴,但只有这样才能让消息到达透明代理,然后再转发给Web 服务器。如果请求消息有多条路径可以到达Web 服务器,那么就必须在这些路径上都放置透明代理,因此一般是将网络设计成只有一条路可以走的结构,然后在这一条路径上放置透明代理。

使用透明代理时,用户不会察觉到代理的存在,也不会注意到HTTP 消息是如何被转发的,因此大家更倾向于将透明代理说成是缓存。

内容分发服务

  1. 利用内容分发服务分担负载

缓存服务器部署在服务器端还是客户端,其效果是有差别的。如图5.10(a)所示,当缓存服务器放在服务器端时,可以减轻Web 服务器的负载,但无法减少互联网中的流量。

这一点上,将缓存服务器放在客户端更有效(图5.10(b))。互联网中会存在一些拥塞点,通过这些地方会比较花时间。如果在客户端部署缓存服务器,就可以不受或者少受这些拥塞点的影响,让网络流量更稳定,特别是当访问内容中含有大图片或视频时效果更明显。但是,如果某网站的运营者觉得最近网站上增加了很多大容量的内容,因此想要增加缓存服务器的容量。如果缓存放在服务器端,那么网站运营者可以自己通过增加磁盘空间等方式来进行扩容,但对于放在客户端的缓存就无能为力了。

因此,这两种部署缓存服务器的方式各有利弊,但也有一种方式能够集合两者的优点。那就是像图5.10(c)这样,Web 服务器运营者和网络运营商签约,将可以自己控制的缓存服务器放在客户端的运营商处。

在这里插入图片描述

作为一个Web 服务器运营者,如果自己和这些运营商签约并部署缓存服务器,无论是费用还是精力都是吃不消的。为了解决这个问题,一些专门从事相关服务的厂商出现了,他们来部署缓存服务器,并租借给Web 服务器运营者。这种服务称为内容分发服务。提供这种服务的厂商称为CDSP (Content Delivery Service Provider,内容分发服务运营商),们会与主要的供应商签约,并部署很多台缓存服务器。另一方面,CDSP 会与Web 服务器运营者签约,使得CDSP 的缓存服务器配合Web 服务器工作。只要Web 服务器与缓存服务器建立关联,那么当客户端访问Web 服务器时,实际上就是在访问CDSP 的缓存服务器了。

缓存服务器可以缓存多个网站的数据,因此CDSP 的缓存服务器就可以提供给多个Web 服务器的运营者共享。这样一来,每个网站运营者的平均成本就降低了,从而减少了网站运营者的负担。而且,和运营商之间的签约工作也由CDSP 统一负责,网站运营者也节省了精力。

  1. 如何找到最近的缓存服务器

在使用内容分发服务时,如图5.11 所示,互联网中有很多缓存服务器,相当多数量的用户,我们需要一种机制,即便用户不进行任何设置,也能够将请求消息发送到缓存服务器。
在这里插入图片描述

第一个方法是像负载均衡一样用DNS 服务器来分配访问。也就是说,我们可以在DNS 服务器返回Web 服务器IP 地址时,对返回的内容进行一些加工,使其能够返回距离客户端最近的缓存服务器的IP 地址。

回顾:DNS 的基本工作方式
在这里插入图片描述

互联网中有很多台DNS 服务器,它们通过相互接力来处理DNS 查询,这个过程从客户端发送查询消息开始,也就是说客户端会用要访问的Web服务器域名生成查询消息,并发送给自己局域网中的DNS 服务器(图5.12 ①)。然后,客户端DNS 服务器会通过域名的层次结构找到负责管理该域名的DNS 服务器,也就是Web 服务器端的那个DNS 服务器,并将查询消息发送给它(图5.12 ②)。Web 服务器端的DNS 服务器收到查询消息后,会查询并返回域名相对应的IP 地址。在这台DNS 中,有一张管理员维护的域名和IP 地址的对应表,只要按照域名查表,就可以找到相应的IP 地址(图5.12 ③)。接下来,响应消息回到客户端的DNS 服务器,然后再返回给客户端(图5.12 ④)。

如果一个域名对应多个IP 地址,则按照前面图5.3 的轮询方式按顺序返回所有的IP 地址。如果要让用户访问最近的缓存服务器,则不应采用轮询方式,而是应该判断客户端与缓存服务器的距离,并返回距离客户端最近的缓存服务器IP 地址。

方法是这样的。首先,作为准备,需要事先从缓存服务器部署地点的路由器收集路由信息(图5.13)。例如,在图5.13 的例子中,一共有4 台缓存服务器,在这4 台服务器的部署地点又分别有4 台路由器,则我们需要分别获取这4 台路由器的路由表,并将4 张路由表集中到DNS 服务器上。
在这里插入图片描述
DNS 服务器根据路由表查询从本机到DNS 查询消息的发送
方,也就是客户端DNS 服务器的路由信息。通过互联网内部的路由表中的路由信息可以知道先通过运营商X,然后通过运营商Y,最后到达运营商Z 这样的信息,通过这样的信息可以大致估算出距离。依次查询所有路由器的路由表之后,我们就可以通过比较找出哪一台路由器距离客户端DNS 服务器最近。

还有另一个让客户端访问最近的缓存服务器的方法 —— 通过重定向服务器分配访问目标。

HTTP 规格中定义了很多头部字段,其中有一个叫作Location 的字段。当Web 服务器数据转移到其他服务器时可以使用这个字段,它的意思是“您要访问的数据在另一台服务器上,请访问那台服务器吧。”这种将客户端访问引导到另一台Web 服务器的操作称为重定向,通过这种方法也可以将访问目标分配到最近的缓存服务器。

当使用重定向告知客户端最近的缓存服务器时,首先需要将重定向服务器注册到Web 服务器端的DNS 服务器上。这样一来,客户端会将HTTP请求消息发送到重定向服务器上。重定向服务器和刚才一种方法中的DNS服务器一样,收集了来自各个路由器的路由信息,并根据这些信息找到最近的缓存服务器,然后将缓存服务器的地址放到Location 字段中返回响应。这样,客户端就会重新去访问指定的缓存服务器了(图5.14、图5.15)。
在这里插入图片描述
在这里插入图片描述
这种方法的缺点是,增加了HTTP 消息的交互次数,相应的开销也比较大。优点是,对DNS 服务器进行扩展的方法是估算客户端DNS 服务器到缓存服务器之间的距离,因此精度较差;相对而言,重定向的方法是根据客户端发送来的HTTP 消息的发送方IP 地址来估算距离的,因此精度较高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值